voucher.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. <?php
  2. /**
  3. * 代金券管理
  4. ***/
  5. defined('InShopNC') or exit('Access Invalid!');
  6. class voucherControl extends SystemControl{
  7. const SECONDS_OF_30DAY = 2592000;
  8. private $applystate_arr;
  9. private $quotastate_arr;
  10. private $templatestate_arr;
  11. public function __construct(){
  12. parent::__construct();
  13. Language::read('voucher');
  14. if (C('voucher_allow') != 1 || C('points_isuse')!=1){
  15. showMessage(Language::get('admin_voucher_unavailable'),'index.php?act=operation&op=point','html','succ',1,4000);
  16. }
  17. $this->applystate_arr = array('new'=>array(1,Language::get('admin_voucher_applystate_new')),'verify'=>array(2,Language::get('admin_voucher_applystate_verify')),'cancel'=>array(3,Language::get('admin_voucher_applystate_cancel')));
  18. $this->quotastate_arr = array('activity'=>array(1,Language::get('admin_voucher_quotastate_activity')),'cancel'=>array(2,Language::get('admin_voucher_quotastate_cancel')),'expire'=>array(3,Language::get('admin_voucher_quotastate_expire')));
  19. //代金券模板状态
  20. $this->templatestate_arr = array('usable'=>array(1,Language::get('admin_voucher_templatestate_usable')),'disabled'=>array(2,Language::get('admin_voucher_templatestate_disabled')));
  21. Tpl::output('applystate_arr',$this->applystate_arr);
  22. Tpl::output('quotastate_arr',$this->quotastate_arr);
  23. Tpl::output('templatestate_arr',$this->templatestate_arr);
  24. }
  25. /*
  26. * 默认操作列出代金券
  27. */
  28. public function indexOp(){
  29. $this->templatelistOp();
  30. }
  31. /**
  32. * 代金券设置
  33. */
  34. public function settingOp(){
  35. $setting_model = Model('setting');
  36. if (chksubmit()){
  37. $obj_validate = new Validator();
  38. $validate_arr[] = array('input'=>$_POST['promotion_voucher_price'],'require'=>'true','validator'=>'IntegerPositive','message'=>Language::get('admin_voucher_setting_price_error'));
  39. $validate_arr[] = array('input'=>$_POST['promotion_voucher_storetimes_limit'],'require'=>'true','validator'=>'IntegerPositive','message'=>Language::get('admin_voucher_setting_storetimes_error'));
  40. $validate_arr[] = array('input'=>$_POST['promotion_voucher_buyertimes_limit'],'require'=>'true','validator'=>'IntegerPositive','message'=>Language::get('admin_voucher_setting_buyertimes_error'));
  41. $obj_validate->validateparam = $validate_arr;
  42. $error = $obj_validate->validate();
  43. if ($error != ''){
  44. showMessage(Language::get('error').$error,'','','error');
  45. }
  46. //每月代金劵软件服务单价
  47. $promotion_voucher_price = intval($_POST['promotion_voucher_price']);
  48. if($promotion_voucher_price < 0) {
  49. $promotion_voucher_price = 20;
  50. }
  51. //每月店铺可以发布的代金劵数量
  52. $promotion_voucher_storetimes_limit = intval($_POST['promotion_voucher_storetimes_limit']);
  53. if($promotion_voucher_storetimes_limit <= 0) {
  54. $promotion_voucher_storetimes_limit = 20;
  55. }
  56. //买家可以领取的代金劵总数
  57. $promotion_voucher_buyertimes_limit = intval($_POST['promotion_voucher_buyertimes_limit']);
  58. if($promotion_voucher_buyertimes_limit <= 0) {
  59. $promotion_voucher_buyertimes_limit = 5;
  60. }
  61. $update_array = array();
  62. $update_array['promotion_voucher_price'] = $promotion_voucher_price;
  63. $update_array['promotion_voucher_storetimes_limit'] = $promotion_voucher_storetimes_limit;
  64. $update_array['promotion_voucher_buyertimes_limit'] = $promotion_voucher_buyertimes_limit;
  65. $result = $setting_model->updateSetting($update_array);
  66. if ($result){
  67. $this->log(L('admin_voucher_setting,nc_voucher_price_manage'));
  68. showMessage(Language::get('nc_common_save_succ'),'');
  69. }else {
  70. showMessage(Language::get('nc_common_save_fail'),'');
  71. }
  72. } else {
  73. $setting = $setting_model->GetListSetting();
  74. $this->show_menu('voucher','setting');
  75. Tpl::output('setting',$setting);
  76. Tpl::showpage('voucher.setting');
  77. }
  78. }
  79. /*
  80. * 代金券面额列表
  81. */
  82. public function pricelistOp(){
  83. //获得代金券金额列表
  84. $model = Model();
  85. $voucherprice_list = $model->table('voucher_price')->order('voucher_price asc')->page(10)->select();
  86. Tpl::output('list', $voucherprice_list) ;
  87. Tpl::output('show_page',$model->showpage(2));
  88. $this->show_menu('voucher','pricelist');
  89. Tpl::showpage('voucher.pricelist');
  90. }
  91. /*
  92. * 添加代金券面额页面
  93. */
  94. public function priceaddOp(){
  95. if (chksubmit()){
  96. $obj_validate = new Validator();
  97. $validate_arr[] = array('input'=>$_POST['voucher_price'],'require'=>'true','validator'=>'IntegerPositive','message'=>Language::get('admin_voucher_price_error'));
  98. $validate_arr[] = array('input'=>$_POST['voucher_price_describe'],'require'=>'true','message'=>Language::get('admin_voucher_price_describe_error'));
  99. $validate_arr[] = array('input'=>$_POST['voucher_points'],'require'=>'true','validator'=>'IntegerPositive','message'=>Language::get('admin_voucher_price_points_error'));
  100. $obj_validate->validateparam = $validate_arr;
  101. $error = $obj_validate->validate();
  102. //验证面额是否存在
  103. $voucher_price = intval($_POST['voucher_price']);
  104. $voucher_points = intval($_POST['voucher_points']);
  105. $model = Model();
  106. $voucherprice_info = $model->table('voucher_price')->where(array('voucher_price'=>$voucher_price))->find();
  107. if(!empty($voucherprice_info)) {
  108. $error .= Language::get('admin_voucher_price_exist');
  109. }
  110. if ($error != ''){
  111. showMessage($error);
  112. }
  113. else {
  114. //保存
  115. $insert_arr = array(
  116. 'voucher_price_describe'=>trim($_POST['voucher_price_describe']),
  117. 'voucher_price'=>$voucher_price,
  118. 'voucher_defaultpoints'=>$voucher_points,
  119. );
  120. $rs = $model->table('voucher_price')->insert($insert_arr);
  121. if ($rs){
  122. $this->log(L('nc_add,admin_voucher_priceadd').'['.$_POST['voucher_price'].']');
  123. showMessage(Language::get('nc_common_save_succ'),'index.php?act=voucher&op=pricelist');
  124. }else {
  125. showMessage(Language::get('nc_common_save_fail'),'index.php?act=voucher&op=priceadd');
  126. }
  127. }
  128. }else {
  129. $this->show_menu('voucher','priceadd');
  130. Tpl::showpage('voucher.priceadd') ;
  131. }
  132. }
  133. /*
  134. * 编辑代金券面额
  135. */
  136. public function priceeditOp(){
  137. $id = intval($_GET['priceid']);
  138. if ($id <= 0){
  139. $id = intval($_POST['priceid']);
  140. }
  141. if ($id <= 0){
  142. showMessage(Language::get('param_error'),'index.php?act=voucher&op=pricelist');
  143. }
  144. $model = Model();
  145. if (chksubmit()){
  146. $obj_validate = new Validator();
  147. $validate_arr[] = array('input'=>$_POST['voucher_price'],'require'=>'true','validator'=>'IntegerPositive','message'=>Language::get('admin_voucher_price_error'));
  148. $validate_arr[] = array('input'=>$_POST['voucher_price_describe'],'require'=>'true','message'=>Language::get('admin_voucher_price_describe_error'));
  149. $validate_arr[] = array('input'=>$_POST['voucher_points'],'require'=>'true','validator'=>'IntegerPositive','message'=>Language::get('admin_voucher_price_points_error'));
  150. $obj_validate->validateparam = $validate_arr;
  151. $error = $obj_validate->validate();
  152. //验证面额是否存在
  153. $voucher_price = intval($_POST['voucher_price']);
  154. $voucher_points = intval($_POST['voucher_points']);
  155. $voucherprice_info = $model->table('voucher_price')->where(array('voucher_price'=>$voucher_price,'voucher_price_id'=>array('neq',$id)))->find();
  156. if(!empty($voucherprice_info)) {
  157. $error .= Language::get('admin_voucher_price_exist');
  158. }
  159. if ($error != ''){
  160. showMessage($error,'','','error');
  161. }else {
  162. $update_arr = array();
  163. $update_arr['voucher_price_describe'] = trim($_POST['voucher_price_describe']);
  164. $update_arr['voucher_price'] = $voucher_price;
  165. $update_arr['voucher_defaultpoints'] = $voucher_points;
  166. $rs = $model->table('voucher_price')->where(array('voucher_price_id'=>$id))->update($update_arr);
  167. if ($rs){
  168. $this->log(L('nc_edit,admin_voucher_priceadd').'['.$_POST['voucher_price'].']');
  169. showMessage(Language::get('nc_common_save_succ'),'index.php?act=voucher&op=pricelist');
  170. }else {
  171. showMessage(Language::get('nc_common_save_fail'),'index.php?act=voucher&op=pricelist');
  172. }
  173. }
  174. }else {
  175. $voucherprice_info = $model->table('voucher_price')->where(array('voucher_price_id'=>$id))->find();
  176. if (empty($voucherprice_info)){
  177. showMessage(Language::get('param_error'),'index.php?act=voucher&op=pricelist');
  178. }
  179. Tpl::output('info',$voucherprice_info);
  180. $this->show_menu('priceedit','priceedit');
  181. Tpl::showpage('voucher.priceadd');
  182. }
  183. }
  184. /*
  185. * 删除代金券面额
  186. */
  187. public function pricedropOp(){
  188. $voucher_price_id = trim($_POST['voucher_price_id']);
  189. if(empty($voucher_price_id)) {
  190. showMessage(Language::get('param_error'),'index.php?act=voucher&op=pricelist');
  191. }
  192. $model = Model();
  193. $rs = $model->table('voucher_price')->where(array('voucher_price_id'=>array('in',$voucher_price_id)))->delete();
  194. if ($rs){
  195. $this->log(L('nc_del,admin_voucher_priceadd').'[ID:'.$voucher_price_id.']');
  196. showMessage(Language::get('nc_common_del_succ'),'index.php?act=voucher&op=pricelist');
  197. }else{
  198. showMessage(Language::get('nc_common_del_fail'),'index.php?act=voucher&op=pricelist');
  199. }
  200. }
  201. /**
  202. * 套餐管理
  203. **/
  204. public function quotalistOp(){
  205. $model = Model();
  206. //更新过期套餐的状态
  207. $time = time();
  208. $model->table('voucher_quota')->where(array('quota_endtime'=>array('lt',$time),'quota_state'=>"{$this->quotastate_arr['activity'][0]}"))->update(array('quota_state'=>$this->quotastate_arr['expire'][0]));
  209. $param = array();
  210. if(trim($_GET['store_name'])){
  211. $param['quota_storename'] = array('like',"%{$_GET['store_name']}%");
  212. }
  213. $state = intval($_GET['state']);
  214. if($state){
  215. $param['quota_state'] = $state;
  216. }
  217. $list = $model->table('voucher_quota')->where($param)->order('quota_id desc')->page(10)->select();
  218. Tpl::output('show_page',$model->showpage(2));
  219. $this->show_menu('voucher','quotalist');
  220. Tpl::output('list',$list);
  221. Tpl::showpage('voucher.quotalist');
  222. }
  223. /**
  224. * 代金券列表
  225. */
  226. public function templatelistOp(){
  227. $model = Model();
  228. $param = array();
  229. if(trim($_GET['store_name'])){
  230. $param['voucher_t_storename'] = array('like',"%{$_GET['store_name']}%");
  231. }
  232. if(trim($_GET['sdate']) && trim($_GET['edate'])){
  233. $sdate = strtotime($_GET['sdate']);
  234. $edate = strtotime($_GET['edate']);
  235. $param['voucher_t_add_date'] = array('between',"$sdate,$edate");
  236. }elseif (trim($_GET['sdate'])){
  237. $sdate = strtotime($_GET['sdate']);
  238. $param['voucher_t_add_date'] = array('egt',$sdate);
  239. }elseif (trim($_GET['edate'])){
  240. $edate = strtotime($_GET['edate']);
  241. $param['voucher_t_add_date'] = array('elt',$edate);
  242. }
  243. $state = intval($_GET['state']);
  244. if($state){
  245. $param['voucher_t_state'] = $state;
  246. }
  247. if($_GET['recommend'] === '1'){
  248. $param['voucher_t_recommend'] = 1;
  249. } elseif ($_GET['recommend'] === '0'){
  250. $param['voucher_t_recommend'] = 0;
  251. }
  252. $list = $model->table('voucher_template')->where($param)->order('voucher_t_state asc,voucher_t_id desc')->page(10)->select();
  253. Tpl::output('show_page',$model->showpage(2));
  254. $this->show_menu('voucher','templatelist');
  255. Tpl::output('list',$list);
  256. // 输出自营店铺IDS
  257. Tpl::output('flippedOwnShopIds', array_flip(model('store')->getOwnShopIds()));
  258. Tpl::showpage('voucher.templatelist');
  259. }
  260. /*
  261. * 代金券模版编辑
  262. */
  263. public function templateeditOp(){
  264. $t_id = intval($_GET['tid']);
  265. if ($t_id <= 0){
  266. $t_id = intval($_POST['tid']);
  267. }
  268. if ($t_id <= 0){
  269. showMessage(Language::get('param_error'),'index.php?act=voucher&op=templatelist','','error');
  270. }
  271. $model = Model('voucher');
  272. //查询模板信息
  273. $param = array();
  274. $param['voucher_t_id'] = $t_id;
  275. $t_info = $model->table('voucher_template')->where($param)->find();
  276. if (empty($t_info)){
  277. showMessage(Language::get('param_error'),'index.php?act=voucher&op=templatelist','html','error');
  278. }
  279. if(chksubmit()){
  280. $points = intval($_POST['points']);
  281. if ($points < 0){
  282. showMessage(Language::get('admin_voucher_template_points_error'),'','html','error');
  283. }
  284. $update_arr = array();
  285. $update_arr['voucher_t_points'] = $points;
  286. $update_arr['voucher_t_state'] = intval($_POST['tstate']) == $this->templatestate_arr['usable'][0]?$this->templatestate_arr['usable'][0]:$this->templatestate_arr['disabled'][0];
  287. $update_arr['voucher_t_recommend'] = intval($_POST['recommend'])==1?1:0;
  288. $rs = $model->table('voucher_template')->where(array('voucher_t_id'=>$t_info['voucher_t_id']))->update($update_arr);
  289. if($rs){
  290. $this->log(L('nc_edit,nc_voucher_price_manage,admin_voucher_styletemplate').'[ID:'.$t_id.']');
  291. showMessage(Language::get('nc_common_save_succ'),'index.php?act=voucher&op=templatelist','succ');
  292. }else{
  293. showMessage(Language::get('nc_common_save_fail'),'index.php?act=voucher&op=templatelist','error');
  294. }
  295. }else{
  296. //查询店铺分类
  297. $store_class = rkcache('store_class', true);
  298. TPL::output('store_class',$store_class);
  299. if (!$t_info['voucher_t_customimg'] || !file_exists(BASE_UPLOAD_PATH.DS.ATTACH_VOUCHER.DS.$t_info['voucher_t_store_id'].DS.$t_info['voucher_t_customimg'])){
  300. $t_info['voucher_t_customimg'] = '';
  301. }else{
  302. $t_info['voucher_t_customimg'] = UPLOAD_SITE_URL.DS.ATTACH_VOUCHER.DS.$t_info['voucher_t_store_id'].DS.$t_info['voucher_t_customimg'];
  303. }
  304. TPL::output('t_info',$t_info);
  305. $this->show_menu('templateedit','templateedit');
  306. Tpl::showpage('voucher.templateedit');
  307. }
  308. }
  309. /**
  310. * ajax操作
  311. */
  312. public function ajaxOp(){
  313. $model_voucher = Model('voucher');
  314. switch ($_GET['branch']){
  315. case 'voucher_t_recommend':
  316. $model_voucher->editVoucherTemplate(array('voucher_t_id' => intval($_GET['id'])), array($_GET['column'] => intval($_GET['value'])));
  317. $logtext = '';
  318. if (intval($_GET['value']) == 1){//推荐代金券
  319. $logtext = '推荐代金券';
  320. } else {
  321. $logtext = '取消推荐代金券';
  322. }
  323. $this->log($logtext.'[ID:'.intval($_GET['id']).']',1);
  324. echo 'true';exit;
  325. break;
  326. }
  327. }
  328. /**
  329. * 页面内导航菜单
  330. * @param string $menu_key 当前导航的menu_key
  331. * @param array $array 附加菜单
  332. * @return
  333. */
  334. private function show_menu($menu_type,$menu_key='') {
  335. $menu_array = array();
  336. switch ($menu_type) {
  337. case 'voucher':
  338. $menu_array = array(
  339. 3=>array('menu_key'=>'templatelist','menu_name'=>Language::get('admin_voucher_template_manage'), 'menu_url'=>'index.php?act=voucher&op=templatelist'),
  340. 2=>array('menu_key'=>'quotalist','menu_name'=>Language::get('admin_voucher_quota_manage'), 'menu_url'=>'index.php?act=voucher&op=quotalist'),
  341. 5=>array('menu_key'=>'pricelist','menu_name'=>Language::get('admin_voucher_pricemanage'), 'menu_url'=>'index.php?act=voucher&op=pricelist'),
  342. 6=>array('menu_key'=>'priceadd','menu_name'=>Language::get('admin_voucher_priceadd'), 'menu_url'=>'index.php?act=voucher&op=priceadd'),
  343. 4=>array('menu_key'=>'setting','menu_name'=>Language::get('admin_voucher_setting'), 'menu_url'=>'index.php?act=voucher&op=setting'),
  344. );
  345. break;
  346. case 'priceedit':
  347. $menu_array = array(
  348. 1=>array('menu_key'=>'setting','menu_name'=>Language::get('admin_voucher_setting'), 'menu_url'=>'index.php?act=voucher&op=setting'),
  349. 2=>array('menu_key'=>'pricelist','menu_name'=>Language::get('admin_voucher_pricemanage'), 'menu_url'=>'index.php?act=voucher&op=pricelist'),
  350. 3=>array('menu_key'=>'priceedit','menu_name'=>Language::get('admin_voucher_priceedit'), 'menu_url'=>'')
  351. );
  352. break;
  353. case 'templateedit':
  354. $menu_array = array(
  355. 1=>array('menu_key'=>'templatelist','menu_name'=>Language::get('admin_voucher_template_manage'), 'menu_url'=>'index.php?act=voucher&op=templatelist'),
  356. 2=>array('menu_key'=>'templateedit','menu_name'=>Language::get('admin_voucher_template_edit'), 'menu_url'=>'')
  357. );
  358. break;
  359. }
  360. Tpl::output('menu',$menu_array);
  361. Tpl::output('menu_key',$menu_key);
  362. }
  363. }