coupon.ctrl.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. <?php
  2. /**
  3. * [WeEngine System] Copyright (c) 2014 WE7.CC
  4. * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
  5. */
  6. defined('IN_IA') or exit('Access Denied');
  7. $_W['page']['title'] = '卡券';
  8. load()->model('mc');
  9. if (!uni_user_permission_check('activity_coupon_display', false) && !uni_user_permission_check('activity_token_display', false)) {
  10. message('您没有进行该操作的权限', referer(), 'error');
  11. }
  12. $dos = array('display', 'post', 'del', 'detail', 'toggle', 'modifystock', 'sync', 'selfconsume', 'publish', 'exchange_coupon_type');
  13. $do = in_array($do, $dos) ? $do : 'display';
  14. $type = intval($_GPC['type']);
  15. $creditnames = array();
  16. $unisettings = uni_setting($_W['uniacid'], array('creditnames'));
  17. $uni_setting = pdo_get('uni_settings', array('uniacid' => $_W['uniacid']), array('coupon_type'));
  18. foreach ($unisettings['creditnames'] as $key=>$credit) {
  19. if (!empty($credit['enabled'])) {
  20. $creditnames[$key] = $credit['title'];
  21. }
  22. }
  23. if($do == 'display') {
  24. $_W['page']['title'] = '卡券管理 - 粉丝营销';
  25. $location_store = pdo_getall('activity_stores', array('uniacid' => $_W['uniacid'], 'status' => 1, 'location_id !=' => ''), array('id', 'location_id', 'business_name', 'branch_name', 'address'));
  26. $module = uni_modules();
  27. $groups = mc_fans_groups();
  28. $pageindex = max(1, $_GPC['page']);
  29. $psize = 15;
  30. $condition = array();
  31. $condition_sql = $join_sql = '';
  32. $condition_sql = ' c.uniacid = :uniacid';
  33. $condition[':uniacid'] = $_W['uniacid'];
  34. $condition_sql .= " AND c.source = :source";
  35. $condition[':source'] = COUPON_TYPE;
  36. if(!empty($_GPC['status'])) {
  37. $condition_sql .= " AND c.status = :status";
  38. $condition[':status'] = intval($_GPC['status']);
  39. }
  40. if(!empty($_GPC['title'])) {
  41. $condition_sql .= " AND c.title LIKE :title";
  42. $condition[':title'] = "%".$_GPC['title']."%";
  43. }
  44. if (!empty($_GPC['type'])) {
  45. $condition_sql .= " AND c.type = :type";
  46. $condition[':type'] = intval($_GPC['type']);
  47. }
  48. if (!empty($_GPC['groupid'])) {
  49. $join_sql .= " LEFT JOIN ".tablename('coupon_groups')." AS g ON c.id = g.couponid ";
  50. $condition_sql .= " AND g.groupid = :groupid";
  51. $condition[':groupid'] = intval($_GPC['groupid']);
  52. }
  53. if (!empty($_GPC['storeid'])) {
  54. $join_sql .= " LEFT JOIN ".tablename('coupon_store')." AS s ON c.id = s.couponid ";
  55. $condition_sql .= " AND s.storeid = :storeid";
  56. $condition[':storeid'] = intval($_GPC['storeid']);
  57. }
  58. if (!empty($_GPC['moduleid'])) {
  59. $join_sql .= " LEFT JOIN ".tablename('coupon_modules')." AS m ON c.id = m.couponid ";
  60. $condition_sql .= " AND m.module = :module";
  61. $condition[':module'] = $_GPC['moduleid'];
  62. }
  63. $list = pdo_fetchall("SELECT * FROM " . tablename('coupon') . " AS c " . $join_sql . " WHERE " . $condition_sql . " ORDER BY c.id DESC LIMIT ".($pageindex - 1) * $psize.','.$psize, $condition);
  64. $total = pdo_fetchcolumn("SELECT COUNT(*) FROM " . tablename('coupon') . " AS c " . $join_sql . " WHERE " . $condition_sql, $condition);
  65. foreach($list as &$row) {
  66. $row['date_info'] = iunserializer($row['date_info']);
  67. if ($row['date_info']['time_type'] == 1) {
  68. $row['date_info'] = $row['date_info']['time_limit_start'].'-'. $row['date_info']['time_limit_end'];
  69. } elseif($row['date_info']['time_type'] == 2) {
  70. $row['date_info'] = '领取后'.$row['date_info']['limit'].'天有效';
  71. }
  72. $row['type'] = activity_coupon_type_label($row['type']);
  73. if ($row['status'] == 1) {
  74. $card = $coupon_api->fetchCard($row['card_id']);
  75. $coupon_status = activity_coupon_status();
  76. $status = $coupon_status[$card[$row['type'][1]]['base_info']['status']];
  77. pdo_update('coupon', array('status' => $status), array('uniacid' => $_W['uniacid'], 'card_id' => $row['card_id']));
  78. }
  79. }
  80. $pager = pagination($total, $pageindex, $psize);
  81. template('activity/coupon');
  82. }
  83. if($do == 'post') {
  84. $id = intval($_GPC['id']);
  85. $type = intval($_GPC['type']);
  86. $coupon_title = activity_coupon_type_label($type);
  87. $coupon_title = $coupon_title[0]; $groups = mc_fans_groups();
  88. if (checksubmit('submit')) {
  89. $coupon = Card::create($type);
  90. $coupon->logo_url = empty($_GPC['logo_url']) ? urlencode($setting['logourl']) : urlencode(trim($_GPC['logo_url']));
  91. $coupon->brand_name = $_GPC['brand_name'];
  92. $coupon->title = substr(trim($_GPC['title']), 0,27);
  93. $coupon->sub_title = trim($_GPC['sub_title']);
  94. $coupon->color = empty($_GPC['color']) ? 'Color082' : $_GPC['color'];
  95. $coupon->notice = $_GPC['notice'];
  96. $coupon->service_phone = $_GPC['service_phone'];
  97. $coupon->description = $_GPC['description'];
  98. $coupon->get_limit = intval($_GPC['get_limit']);
  99. $coupon->can_share = intval($_GPC['can_share']) ? true : false;
  100. $coupon->can_give_friend = intval($_GPC['can_give_friend']) ? true : false;
  101. if (intval($_GPC['time_type']) == COUPON_TIME_TYPE_RANGE) {
  102. $coupon->setDateinfoRange($_GPC['time_limit']['start'], $_GPC['time_limit']['end']);
  103. } else {
  104. $coupon->setDateinfoFix($_GPC['deadline'], $_GPC['limit']);
  105. }
  106. if(!empty($_GPC['promotion_url_name']) && !empty($_GPC['promotion_url'])) {
  107. $coupon->setPromotionMenu($_GPC['promotion_url_name'], $_GPC['promotion_url_sub_title'], $_GPC['promotion_url']);
  108. }
  109. if (!empty($_GPC['location-select'])) {
  110. $location_list = explode('-', $_GPC['location-select']);
  111. if (!empty($location_list)) {
  112. $coupon->setLocation($location_list);
  113. }
  114. }
  115. $coupon->setCustomMenu('立即使用', '', murl('entry', array('m' => 'paycenter', 'do' => 'consume'), true, true));
  116. $coupon->setQuantity($_GPC['quantity']);
  117. $coupon->setCodetype($_GPC['code_type']);
  118. $coupon->discount = intval($_GPC['discount']);
  119. $coupon->least_cost = $_GPC['least_cost'] * 100;
  120. $coupon->reduce_cost = $_GPC['reduce_cost'] * 100;
  121. $coupon->gift = $_GPC['gift'];
  122. $coupon->deal_detail = $_GPC['deal_detail'];
  123. $coupon->default_detail = $_GPC['default_detail'];
  124. $check = $coupon->validate();
  125. if (is_error($check)) {
  126. message($check['message'], '', 'error');
  127. }
  128. if (COUPON_TYPE == WECHAT_COUPON) {
  129. $status = $coupon_api->CreateCard($coupon->getCardData());
  130. if(is_error($status)) {
  131. message($status['message'], '', 'error');
  132. }
  133. $coupon->card_id = $status['card_id'];
  134. $coupon->source = 2;
  135. $coupon->status = 1;
  136. } else {
  137. $coupon->status = 3;
  138. $coupon->source = 1;
  139. $coupon->setCodetype(3);
  140. $coupon->card_id = 'AB' . $_W['uniacid'] . date('YmdHis');
  141. }
  142. $cardinsert = $coupon->getCardArray();
  143. $cardinsert['uniacid'] = $_W['uniacid'];
  144. $cardinsert['acid'] = $_W['acid'];
  145. $card_exists = pdo_get('coupon', array('card_id' => $coupon->card_id), array('id'));
  146. if(empty($card_exists)) {
  147. pdo_insert('coupon', $cardinsert);
  148. $cardid = pdo_insertid();
  149. } else {
  150. $cardid = $card_exists['id'];
  151. unset($cardinsert['status']);
  152. pdo_update('coupon', $cardinsert, array('id' => $cardid));
  153. }
  154. $_GPC['module-select'] = trim($_GPC['module-select']);
  155. if(!empty($_GPC['module-select'])) {
  156. $enabled_modules = explode('@', $_GPC['module-select']);
  157. pdo_delete('coupon_modules', array('couponid' => $cardid));
  158. foreach($enabled_modules as $modulename) {
  159. $data = array(
  160. 'uniacid' => $_W['uniacid'],
  161. 'acid' => $_W['acid'],
  162. 'couponid' => $cardid,
  163. 'module' => $modulename
  164. );
  165. pdo_insert('coupon_modules', $data);
  166. }
  167. }
  168. $_GPC['groups'] = trim($_GPC['groups']);
  169. if (!empty($_GPC['groups'])) {
  170. $groups = explode('-', $_GPC['groups']);
  171. if (is_array($groups)) {
  172. pdo_delete('coupon_groups', array('couponid' => $cardid));
  173. foreach ($groups as $group) {
  174. $data = array(
  175. 'uniacid' => $_W['uniacid'],
  176. 'groupid' => $group,
  177. 'couponid' => $cardid
  178. );
  179. pdo_insert('coupon_groups', $data);
  180. }
  181. }
  182. }
  183. if (!empty($location_list)) {
  184. pdo_delete('coupon_store', array('couponid' => $cardid));
  185. foreach ($location_list as $storeid) {
  186. $data = array(
  187. 'uniacid' => $_W['uniacid'],
  188. 'storeid' => $storeid,
  189. 'couponid' => $cardid
  190. );
  191. pdo_insert('coupon_store', $data);
  192. }
  193. }
  194. message('卡券更新成功', url('activity/coupon'), 'success');
  195. }
  196. $location_store = pdo_getall('activity_stores', array('uniacid' => $_W['uniacid'], 'status' => 1, 'source' => COUPON_TYPE), array('id', 'location_id', 'business_name', 'branch_name', 'address'));
  197. $module = uni_modules();
  198. template('activity/coupon-post');
  199. } elseif ($do == 'detail') {
  200. $id = intval($_GPC['id']);
  201. $type = intval($_GPC['type']);
  202. $coupon_title = activity_coupon_type_label($type);
  203. $coupon_title = $coupon_title[0]; $groups = mc_fans_groups();
  204. $colors = activity_coupon_colors();
  205. if(!empty($id)) {
  206. $coupon = activity_coupon_info($id);
  207. if(empty($coupon)) {
  208. message('卡券不存在或是已经删除', '', 'error');
  209. }
  210. }
  211. $coupon['location_count'] = count($coupon['location_id_list']);
  212. if ($coupon['type'] == COUPON_TYPE_CASH) {
  213. $coupon['detail']['least_cost'] = $coupon['extra']['least_cost'] * 0.01;
  214. $coupon['detail']['reduce_cost'] = $coupon['extra']['reduce_cost'] * 0.01;
  215. }
  216. template('activity/coupon-detail');
  217. } elseif ($do == 'del') {
  218. $id = intval($_GPC['id']);
  219. $row = pdo_get('coupon', array('uniacid' => $_W['uniacid'], 'id' => $id));
  220. if (empty($row)) {
  221. message('抱歉,卡券不存在或是已经被删除!');
  222. }
  223. if (COUPON_TYPE == WECHAT_COUPON) {
  224. $return = $coupon_api->DeleteCard($row['card_id']);
  225. if(is_error($return)) {
  226. message('删除卡券失败,错误为' . $return['message'], '', 'error');
  227. }
  228. }
  229. pdo_delete('coupon', array('uniacid' => $_W['uniacid'], 'id' => $id));
  230. pdo_delete('coupon_record', array('uniacid' => $_W['uniacid'], 'couponid' => $id));
  231. pdo_delete('activity_exchange', array('uniacid' => $_W['uniacid'], 'extra' => $id));
  232. pdo_delete('coupon_groups', array('uniacid' => $_W['uniacid'],'couponid' => $id));
  233. pdo_delete('coupon_groups', array('uniacid' => $_W['uniacid'],'couponid' => $id));
  234. message('卡券删除成功!',url('activity/coupon/display'), 'success');
  235. } elseif ($do == 'toggle') {
  236. $id = intval($_GPC['id']);
  237. $display_status = pdo_getcolumn('coupon', array('id' => $id, 'uniacid' => $_W['uniacid']), 'is_display');
  238. if($display_status == 1) {
  239. pdo_update('coupon', array('is_display' => 0), array('uniacid' => $_W['uniacid'], 'id' => $id));
  240. } else {
  241. pdo_update('coupon', array('is_display' => 1), array('uniacid' => $_W['uniacid'], 'id' => $id));
  242. }
  243. message(error(0, $display_status ? '下架成功' : '上架成功'), referer(), 'ajax');
  244. } elseif ($do == 'modifystock') { $id = intval($_GPC['id']);
  245. $quantity = intval($_GPC['quantity']);
  246. $coupon = activity_coupon_info($id);
  247. if(empty($coupon)) {
  248. message('抱歉,卡券不存在或是已经被删除!');
  249. }
  250. pdo_update('coupon', array('quantity' => $quantity), array('id' => $id, 'uniacid' => $_W['uniacid']));
  251. $modify_quantity = $quantity - $coupon['quantity'];
  252. if ($coupon['source'] == WECHAT_COUPON) {
  253. $return = $coupon_api->ModifyStockCard($coupon['card_id'], $modify_quantity);
  254. if(is_error($return)) {
  255. message(error(1, '修改卡券库存失败,错误为' . $return['message']), '', 'ajax');
  256. }
  257. }
  258. message(error(0, '修改库存成功'), referer(), 'ajax');
  259. } elseif ($do == 'sync') {
  260. $type = trim($_GPC['type']);
  261. if ($type == '1') {
  262. $cachekey = "couponsync:{$_W['uniacid']}";
  263. $cache = cache_delete($cachekey);
  264. }
  265. activity_coupon_sync();
  266. message(error(0, '更新卡券状态成功'), url('activity/coupon'), 'ajax');
  267. } elseif ($do == 'selfconsume') {
  268. $id = intval($_GPC['id']);
  269. $coupon = activity_coupon_info($id);
  270. if(empty($coupon)) {
  271. message('抱歉,卡券不存在或是已经被删除!');
  272. }
  273. if (empty($coupon['location_id_list'])) {
  274. message(error(1, '该卡券未设置适用门店,无法设置自助核销'), '', 'ajax');
  275. }
  276. if ($coupon['source'] == WECHAT_COUPON) {
  277. $data = array(
  278. 'card_id' => $coupon['card_id'],
  279. 'is_open' => empty($coupon['is_selfconsume']) ? true : false,
  280. );
  281. $return = $coupon_api->selfConsume($data);
  282. if(is_error($return)) {
  283. message(error(1, '设置自助核销失败,错误为' . $return['message']), '', 'ajax');
  284. }
  285. }
  286. pdo_update('coupon', array('is_selfconsume' => empty($coupon['is_selfconsume']) ? 1 : 0), array('id' => $id));
  287. message(error(0, '设置自助核销成功'), url('activity/coupon'), 'ajax');
  288. } elseif ($do == 'publish') {
  289. $cid = intval($_GPC['cid']);
  290. $coupon = pdo_get('coupon', array('id' => $cid));
  291. if(empty($coupon)) {
  292. return message('卡券不存在或已经删除', '', 'error');
  293. }
  294. $qrcode_sceneid = sprintf('11%012d', $cid);
  295. $coupon_qrcode = pdo_get('qrcode', array('qrcid' => $qrcode_sceneid, 'type' => 'card'));
  296. if (empty($coupon_qrcode)) {
  297. $insert = array(
  298. 'uniacid' => $_W['uniacid'],
  299. 'acid' => $_W['acid'],
  300. 'qrcid' => $qrcode_sceneid,
  301. 'keyword' => '',
  302. 'name' => $coupon['title'],
  303. 'model' => 1,
  304. 'ticket' => '',
  305. 'expire' => '',
  306. 'url' => '',
  307. 'createtime' => TIMESTAMP,
  308. 'status' => '1',
  309. 'type' => 'card',
  310. );
  311. pdo_insert('qrcode', $insert);
  312. $coupon_qrcode['id'] = pdo_insertid();
  313. }
  314. $response = ihttp_request($coupon_qrcode['url']);
  315. if ($response['code'] != '200' || empty($coupon_qrcode['url'])) {
  316. $coupon_qrcode_image = $coupon_api->QrCard($coupon['card_id'], $qrcode_sceneid);
  317. if (is_error($coupon_qrcode_image)) {
  318. if ($coupon_qrcode_image['errno'] == '40078') {
  319. pdo_update('coupon', array('status' => 2), array('id' => $cid));
  320. }
  321. message(error('1', '生成二维码失败,' . $coupon_qrcode_image['message']), '', 'ajax');
  322. }
  323. $cid = $coupon_qrcode['id'];
  324. unset($coupon_qrcode['id']);
  325. $coupon_qrcode['url'] = $coupon_qrcode_image['show_qrcode_url'];
  326. $coupon_qrcode['ticket'] = $coupon_qrcode_image['ticket'];
  327. $coupon_qrcode['expire'] = TIMESTAMP + $coupon_qrcode_image['expire_seconds'];
  328. pdo_update('qrcode', $coupon_qrcode, array('id' => $cid));
  329. }
  330. $coupon_qrcode['expire'] = date('Y-m-d H:i:s', $coupon_qrcode['expire']);
  331. $qrcode_list = pdo_getslice('qrcode_stat', array('qrcid' => $qrcode_sceneid), 10, $total, array('openid', 'createtime'));
  332. if (!empty($qrcode_list)) {
  333. $openids = array();
  334. foreach ($qrcode_list as &$row) {
  335. $fans = mc_fansinfo($row['openid']);
  336. $row['nickname'] = $fans['nickname'];
  337. $row['avatar'] = $fans['avatar'];
  338. $row['createtime'] = date('Y-m-d H:i:s', $row['createtime']);
  339. }
  340. }
  341. message(error('0', array('coupon' => $coupon_qrcode, 'record' => $qrcode_list, 'total' => $total)), '', 'ajax');
  342. } elseif ($do == 'exchange_coupon_type') {
  343. $status = pdo_update('uni_settings', array('coupon_type' => intval($_GPC['status'])), array('uniacid' => $_W['uniacid']));
  344. if (!empty($status)) {
  345. cache_delete("unisetting:{$_W['uniacid']}");
  346. message(error(0, '修改成功'), referer(), 'ajax');
  347. } else {
  348. message(error(-1, '修改失败'), referer(), 'ajax');
  349. }
  350. }