echajoa_tender_sms_send.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. !#/usr/bin/php -q
  2. <?php
  3. include $_SERVER['DOCUMENT_ROOT'].'/common/lib/comm.php';
  4. include $_SERVER['DOCUMENT_ROOT'].'/common/lib/aligo.php';
  5. /*
  6. 이차조아용
  7. 필요 함수 /common/lib/func.php에 정의
  8. 발송시스템
  9. 1. 낙찰리스트, 진행중 리스트
  10. 1차 발송
  11. 2차 발송
  12. 3차 발송 후 2일 후 해당 계정 입찰 안되게
  13. 관리자가 해제 할 수 있음
  14. 2. 1차 SMS 발송 후 2~3차는 자동발송 처리
  15. - 미리 다음 단계를 생성
  16. - 발송전 상태 변견 체크 하여 발송 또는 발송 안되게 처리
  17. 1차 발송후 5일후 자동으로 2차발송 2차발송후 3일후 3차발송
  18. /cron/tender_sms_send.php
  19. 1단게 발송시 2단계 발송 상태는 발송대기로 새롭게 등록
  20. 스케쥴러가 dt_send < 현재날짜 && ds_send_status = 'A0'
  21. 1. 낙찰중인건
  22. ds_status = Z0
  23. 진행중이나 견적실수로로 넘어갈 경우
  24. (((s.ds_status_contract is null or s.ds_status_contract = '' or s.ds_status_contract = 'Z0') and s.ds_status_contract_step1 = 'Y')
  25. or s.ds_status in ('ZE') and (s.ds_status_contract is null or s.ds_status_contract = '') ) 로 변경 됐으면
  26. //견적실수
  27. // and s.ds_status in ('ZE') and (s.ds_status_contract is null or s.ds_status_contract = '')
  28. 현재 데이터는 ds_send_status = B0 발송취소 처리 됨
  29. 상태 변경이 없을 경우
  30. 현재 단계 발송처리 ds_send_status = 'Z0'
  31. 3단계가 아닐 경우 depth는 ++ 되고 tender_sms_master 에 다음단계 SMS 등록
  32. tender_master 에 현재 발송 단계 업데이트
  33. 3단계일 경우 ds_lock_status = B0으로 업데이트
  34. 2. 진행중인건
  35. ds_status = Z1
  36. 현재 매물이 Z0 이고 거래완료나, 거래 실패/거래연기, 등으로 변경이 됐으면
  37. //해약
  38. // s.ds_status in ('Z0') and s.ds_status_contract in ('C0')
  39. //거래연기
  40. // and s.ds_status in ('Z0') and s.ds_status_contract in ('B0')
  41. //판매완료
  42. // and s.ds_status in ('ZS')
  43. 현재 데이터는 ds_send_status = B0 발송취소 처리 됨
  44. 상태 변경이 없을 경우
  45. 현재 단계 발송처리 ds_send_status = 'Z0'
  46. 3단계가 아닐 경우 depth는 ++ 되고 tender_sms_master 에 다음단계 SMS 등록
  47. tender_master 에 현재 발송 단계 업데이트
  48. 3단계일 경우 ds_lock_status = B0으로 업데이트
  49. */
  50. // $sql = "insert into tender_sms_master_log (nm_content) values('aa') ";
  51. // mysql_query($sql);
  52. if($_SERVER['REMOTE_ADDR'] == '220.86.25.88') {
  53. // echo $sql;
  54. }
  55. //단계별 일수
  56. $sms_period = tender_sms_period();
  57. //거래상태별 메시지
  58. $sms_msg = tender_sms_msg();
  59. $cur_date = date("Y-m-d H:i:s");
  60. // $biztalk = new Biztalk();
  61. // $biztalk->getToken();
  62. $aligo = new Aligo();
  63. $aligo->getHourToken();
  64. //처리 가능항 매물 상태 정의
  65. $allow_ds_status = array("Z0", "Z1");
  66. //발송 대기전, 발송시간이 현재 보다 작은 건 취합
  67. $sql = "select *
  68. from tender_sms_master
  69. where ds_send_status = 'A0'
  70. and dt_send < now()";
  71. // echo $sql;
  72. // exit;
  73. $res = mysql_query($sql);
  74. while($col = mysql_fetch_array($res)) {
  75. $cd_tender_sms = $col['cd_tender_sms'];
  76. $cd_sale = $col['cd_sale'];
  77. $cd_tender = $col['cd_tender'];
  78. $depth = $col['depth'];
  79. $nm_hp = $col['nm_hp'];
  80. $dt_send = $col['dt_send'];
  81. $nm_content = $col['nm_content'];
  82. $ds_status = $col['ds_status'];
  83. if(!in_array($ds_status, $allow_ds_status)) {
  84. continue;
  85. }
  86. $sale_sql = "SELECT
  87. a.*
  88. , b.nm_model
  89. , d.nm_brand
  90. , getCode('car_master','ds_type',a.ds_type) as nm_type
  91. , getCode('car_master','ds_open',a.ds_open) as nm_open
  92. , getCode('car_master','ds_sales',a.ds_sales) as nm_sales
  93. , getCode('car_master','ds_transmission',a.ds_transmission) as nm_transmission
  94. , getCode('member_master','ds_area',s.ds_area) as nm_area
  95. , getCode('sale_master','ds_status',s.ds_status) as nm_status
  96. , s.cd_sale
  97. , f.cd_tender cd_tender
  98. , s.ds_status as ds_status_sale
  99. , f.nm_hp tender_nm_hp
  100. , s.ds_status_contract
  101. , s.ds_status_contract_step1
  102. FROM sale_master s
  103. inner join car_master a on (s.cd_car = a.cd_car)
  104. left outer join car_model b on (a.cd_model = b.cd_model)
  105. left outer join car_brand d on (a.cd_brand = d.cd_brand)
  106. inner join tender_master f on (s.cd_sale = f.cd_sale and f.ds_status = 'Z0' and f.ds_delind = 'N' and f.cd_tender = '$cd_tender')
  107. where s.cd_sale = '". $cd_sale . "' and s.ds_delind = 'N' LIMIT 1";
  108. // echo $sale_sql;
  109. // exit;
  110. //경매 정보 불러옴
  111. $sale_res = mysql_query($sale_sql);
  112. $sale_col = mysql_fetch_array($sale_res);
  113. // echo $cd_tender_sms;
  114. // $sale_col['cd_sale'] = "";
  115. //검색된 경매 정보가 없으면 tender_sms_master 발송취소로 업데이트
  116. if(empty($sale_col['cd_sale'])) {
  117. cancel_tender_sms($connect, $cd_tender_sms);
  118. continue;
  119. }
  120. $is_cancel = false;
  121. switch($ds_status) {
  122. //낙찰중인건
  123. case 'Z0':
  124. //낙찰 상태가 변경이 되면 cancel로 이동
  125. //기준은 관리자의 낙찰 리스트 출력 조건과 동일
  126. if(!($sale_col['ds_status_sale'] == 'Z0'
  127. && empty($sale_col['ds_status_contract'])
  128. && $sale_col['ds_status_contract_step1'] != "Y"))
  129. {
  130. $is_cancel = true;
  131. }
  132. break;
  133. $tender_update_column = " ds_complete_depth = '".$depth."'";
  134. break;
  135. //진행중인건
  136. case 'Z1':
  137. //진행중 상태가 변경이 되면 cancel로 이동
  138. //기준은 관리자의 진행중 리스트 출력 조건과 동일
  139. // echo 'ds_status:'.$sale_col['ds_status_sale'].'<br/>';
  140. // echo 'ds_status_contract:'.$sale_col['ds_status_contract'].'<br/>';
  141. // echo 'ds_status_contract_step1:'.$sale_col['ds_status_contract_step1'].'<br/>';
  142. if(!($sale_col['ds_status_sale'] == 'Z0'
  143. && (empty($sale_col['ds_status_contract']) || $sale_col['ds_status_contract'] == 'Z0')
  144. && $sale_col['ds_status_contract_step1'] == "Y")) {
  145. $is_cancel = true;
  146. }
  147. $tender_update_column = " ds_underway_depth = '".$depth."'";
  148. break;
  149. }
  150. //취소해야 하는 매울이면 취소 처리
  151. if($is_cancel == true) {
  152. no_lock_tender_sms($connect, $cd_tender_sms);
  153. cancel_tender_sms($connect, $cd_tender_sms);
  154. continue;
  155. }
  156. //변경이 안됐다면 SMS 발송
  157. $ALIGO_DATA = array();
  158. $ALIGO_DATA['message'] = $nm_content;
  159. $ALIGO_DATA['recv_phone'] = $nm_hp;
  160. // print_r($ALIGO_DATA);
  161. // echo 'a'.$ds_status;
  162. // exit;
  163. switch($ds_status) {
  164. //낙찰 리스트에서 넘어옴
  165. case 'Z0':
  166. $response = $aligo->send_admin_delay_complete_to_aap($ALIGO_DATA);
  167. break;
  168. //진행중 리스트에서 넘어옴
  169. case 'Z1':
  170. $response = $aligo->send_admin_delay_underway_to_aap($ALIGO_DATA);
  171. // print_r($response);
  172. // exit;
  173. break;
  174. }
  175. unset($ALIGO_DATA);
  176. if($response['code'] != "0") {
  177. // echo $response['message'];
  178. }
  179. //낙찰, 진행중 SMS 단계 업데이트
  180. $sql="update tender_master set
  181. $tender_update_column
  182. , dt_update = now()
  183. , nm_update = 'admin'
  184. WHERE cd_sale = $cd_sale and cd_tender = '$cd_tender' ";
  185. // echo $sql;
  186. // exit;
  187. mysql_query($sql,$connect);
  188. //Tender SMS 업데이트 (현재 단계 발송처리 ds_send_status = 'Z0')
  189. $tender_sms_sql = "update tender_sms_master set ds_send_status = 'Z0' where cd_tender_sms = '$cd_tender_sms' ";
  190. mysql_query($tender_sms_sql,$connect);
  191. //3차 발송일 경우 락 상태로 업데이트
  192. //lock 은 lock 스케쥴러가 체크
  193. if($depth == 3) {
  194. lock_status_tender_sms($connect, $cd_tender_sms);
  195. continue;
  196. }
  197. //발송 내용 치환
  198. $car_info = $sale_col['nm_brand']." ".$sale_col['nm_model'].", ".$sale_col['nm_number'];
  199. $nm_content = str_replace("{CAR_INFO}", $car_info, $sms_msg[$ds_status]);
  200. $nm_content = str_replace("{PERIOD}", $sms_period[($depth+1)], $nm_content);
  201. //
  202. $send_date = date("Y-m-d H:i:s", strtotime($dt_send. ' + '.($sms_period[($depth+1)]).' day'));
  203. //2차 발송일 경우 (1차는 관리자에서 발송 시킴)
  204. //다음발송건 등록
  205. $DATA = array();
  206. $DATA['cd_sale'] = $cd_sale;
  207. $DATA['cd_tender'] = $cd_tender;
  208. $DATA['tender_nm_hp'] = $nm_hp;
  209. $DATA['depth'] = ($depth+1);
  210. $DATA['ds_send_status'] = 'A0';
  211. $DATA['nm_content'] = $nm_content;
  212. $DATA['ds_status'] = $ds_status;
  213. $DATA['dt_send'] = $send_date;
  214. $DATA['cd_userid'] = 'admin';
  215. $result = insert_tender_sms($connect, $DATA);
  216. unset($DATA);
  217. }
  218. echo "End";
  219. ?>