person_bonus.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <?php
  2. /**
  3. * 会员红包管理
  4. *
  5. ***/
  6. defined('InShopNC') or exit('Access Invalid!');
  7. require_once(BASE_ROOT_PATH . '/helper/algorithm.php');
  8. require_once(BASE_ROOT_PATH . '/helper/account_helper.php');
  9. require_once(BASE_ROOT_PATH . '/helper/member_helper.php');
  10. require_once(BASE_ROOT_PATH . '/helper/sms_helper.php');
  11. require_once(BASE_ROOT_PATH . '/mobile/util/errcode.php');
  12. require_once(BASE_ROOT_PATH . '/helper/util_helper.php');
  13. require_once(BASE_ROOT_PATH . '/helper/employee_award.php');
  14. class activity_bonus
  15. {
  16. const admin_member_id = 36429;
  17. private $mErrMessage;
  18. public function err() {
  19. return $this->mErrMessage;
  20. }
  21. private function parse_rate($bonus_rate)
  22. {
  23. $params = explode('#', urldecode($bonus_rate));
  24. $result = [];
  25. foreach ($params as $val)
  26. {
  27. if(preg_match_all('/^(\d{1,3})\|(\d{1,7})\|(\d{1,4})$/', $val, $match))
  28. {
  29. $item['rate'] = intval($match[1][0]);
  30. $item['amount'] = intval($match[2][0]);
  31. $item['num'] = intval($match[3][0]);
  32. $result[] = $item;
  33. }
  34. }
  35. if(empty($result)) {
  36. return false;
  37. }
  38. else {
  39. return $result;
  40. }
  41. }
  42. private function check_param($input, &$ret)
  43. {
  44. if(!isset($input['start_time'])) {
  45. $ret = array('code' => errcode::ErrParamter,'msg' => "请输入活动开始和结束时间.");
  46. return false;
  47. }
  48. $start_tm = strtotime($input['start_time']);
  49. if($start_tm == false || $start_tm < time()) {
  50. $start_tm = time();
  51. }
  52. if(isset($input['end_time'])) {
  53. $end_tm = strtotime($input['end_time']);
  54. } else {
  55. $end_tm = $start_tm + 24 * 3600;
  56. }
  57. if($end_tm <= $start_tm) {
  58. $end_tm = $start_tm + 24 * 3600;
  59. }
  60. $param = [];
  61. $param['send_start_date'] = $start_tm;
  62. $param['send_end_date'] = $end_tm;
  63. return $param;
  64. }
  65. public function make($input)
  66. {
  67. if(empty($input['bonus_rate'])) {
  68. $this->mErrMessage = "bonus_rate 参数为空";
  69. return false;
  70. }
  71. $result = [];
  72. $result['type_name'] = $input['type_name'];
  73. $result['type_bless'] = $input['type_bless'];
  74. $result['sender_id'] = self::admin_member_id;
  75. $result['sender_name'] = "熊猫美妆";
  76. $result['send_type'] = $input['send_type'];
  77. $result['usable_days'] = $input['usable_days'];
  78. $rate_moneys = $this->parse_rate($input['bonus_rate']);
  79. if($rate_moneys == false) {
  80. $this->mErrMessage = "bonus_rate 或者 send_type 参数错误";
  81. return false;
  82. } else {
  83. $result['rate_money'] = $rate_moneys;
  84. }
  85. $param = $this->check_param($input,$ret);
  86. if($param == false) {
  87. $this->mErrMessage = $ret['msg'];
  88. return false;
  89. }
  90. $result = array_merge($param,$result);
  91. $ret = predeposit_helper::admin_make_bonus($result,$rate_moneys);
  92. if($ret === false) {
  93. return false;
  94. }
  95. else
  96. {
  97. $type_sn = $ret['type_sn'];
  98. if(BASE_SITE_URL == 'https://manager.lrlz.com') {
  99. $url = "https://passport.lrlz.com/mobile/index.php?act=bonusex&op=open&client_type=wap&type_sn={$type_sn}";
  100. } else {
  101. $url = BASE_SITE_URL . "/mobile/index.php?act=bonusex&op=open&client_type=wap&type_sn={$type_sn}";
  102. }
  103. return array('type_sn' => $type_sn,'url' => "{$url}");
  104. }
  105. }
  106. }
  107. class person_bonusControl extends SystemControl
  108. {
  109. const EXPORT_SIZE = 5000;
  110. public function __construct()
  111. {
  112. parent::__construct();
  113. Language::read('points');
  114. }
  115. public function addOp()
  116. {
  117. if (chksubmit())
  118. {
  119. $obj_validate = new Validator();
  120. $obj_validate->validateparam = array(
  121. array("input"=>$_POST["bonus_rate"], "require"=>"true",'validator'=>'Compare','operator'=>' >= ','to'=> 1,"message" => '红包抵扣率必须大于0'),
  122. array("input"=>$_POST["bonus_amount"], "require"=>"true",'validator'=>'Compare','operator'=>' >= ','to'=> 0.01,"message" => '金额最少一分钱')
  123. );
  124. $error = $obj_validate->validate();
  125. if ($error != ''){
  126. showMessage($error,'','','error');
  127. }
  128. $optype = intval($_POST['operatetype']);
  129. if ($optype == 1)
  130. {
  131. $params = $this->add_params($_POST,$error);
  132. if($params == false) {
  133. showMessage($error,'index.php?act=person_bonus&op=add','','error');
  134. } else {
  135. QueueClient::push('sendBonusAndSMS',$params);
  136. showMessage(Language::get('nc_common_save_succ'),'index.php?act=person_bonus&op=add');
  137. }
  138. }
  139. else
  140. {
  141. $members = member_helper::from_mobiles($_POST['members'],$error);
  142. if(!empty($members))
  143. {
  144. $rate = intval($_POST['bonus_rate']);
  145. $amount = doubleval($_POST['bonus_amount']);
  146. foreach ($members as $member) {
  147. $member_id = $member['member_id'];
  148. $ret = account_helper::withhold_bonus($rate,$amount,$member_id);
  149. }
  150. showMessage(Language::get('nc_common_save_succ'),'index.php?act=person_bonus&op=add');
  151. } else {
  152. showMessage("手机列表为空",'index.php?act=person_bonus&op=add','','error');
  153. }
  154. }
  155. }
  156. else
  157. {
  158. $items = Model()->table('sms_template')->where(array('disable' => 0))->field('yuntx_id,title,content')->select();
  159. Tpl::output('sms_tpls',$items);
  160. Tpl::showpage('person_bonus.add');
  161. }
  162. }
  163. private function add_params($input, &$err)
  164. {
  165. $params= [];
  166. $params['member']['input_type'] = $input['input_type'];
  167. if(empty($input['members'])) {
  168. $err = "手机号码或者SQL语句为空";
  169. return false;
  170. } else {
  171. $params['member']['data'] = $input['members'];
  172. }
  173. $params['member']['ex_brand'] = $input['ex_brand'] == 'on' ? true : false;
  174. $params['member']['ex_lrlz'] = $input['ex_lrlz'] == 'on' ? true : false;
  175. $params['bonus']['rate'] = intval($input['bonus_rate']);;
  176. $params['bonus']['amount'] = doubleval($input['bonus_amount']);;
  177. $params['bonus']['bless'] = $input['bonus_bless'];
  178. $params['bonus']['can_share'] = intval($input['can_share']);
  179. $params['sms']['open'] = $input['send_sms'] == 'on' ? true : false;
  180. if($params['sms']['open'])
  181. {
  182. $tmpid = $input['sms_template'];
  183. if($tmpid <= 0) {
  184. $err = "错误的短信模版";
  185. return false;
  186. }
  187. $params['sms']['template_id'] = $tmpid;
  188. }
  189. return $params;
  190. }
  191. public function checkmemberOp()
  192. {
  193. $name = trim($_GET['name']);
  194. if (!$name){
  195. echo ''; die;
  196. }
  197. /**
  198. * 转码
  199. */
  200. if(strtoupper(CHARSET) == 'GBK'){
  201. $name = Language::getGBK($name);
  202. }
  203. $obj_member = Model('member');
  204. $member_info = $obj_member->getMemberInfo(array('member_name'=>$name));
  205. if (is_array($member_info) && count($member_info)>0){
  206. if(strtoupper(CHARSET) == 'GBK'){
  207. $member_info['member_name'] = Language::getUTF8($member_info['member_name']);
  208. }
  209. echo json_encode(array('id'=>$member_info['member_id'],
  210. 'name'=>$member_info['member_name'],
  211. 'points'=>$member_info['member_points']));
  212. } else {
  213. echo ''; die;
  214. }
  215. }
  216. public function promotionOp()
  217. {
  218. if(chksubmit())
  219. {
  220. $copies = intval($_POST['copies']);
  221. if($copies <=0 ) {
  222. $copies = 1;
  223. }
  224. if($copies == 1)
  225. {
  226. $maker = new activity_bonus();
  227. $ret = $maker->make($_POST);
  228. if($ret == false) {
  229. $err = $maker->err();
  230. showMessage($err,'index.php?act=person_bonus&op=promotion','','error');
  231. } else {
  232. Tpl::output('type_sn',$ret['type_sn']);
  233. Tpl::output('bonus_url',$ret['url']);
  234. Tpl::showpage('person_bonus.activity');
  235. }
  236. }
  237. else
  238. {
  239. $urls = [];
  240. for($i = 0; $i < $copies; ++$i)
  241. {
  242. $maker = new activity_bonus();
  243. $ret = $maker->make($_POST);
  244. if($ret != false) {
  245. $urls[] = $ret['url'];
  246. }
  247. }
  248. $bonus_url = implode(",",$urls);
  249. Tpl::output('type_sn',"multi_type_sn");
  250. Tpl::output('bonus_url',$bonus_url);
  251. Tpl::showpage('person_bonus.activity');
  252. }
  253. }
  254. else
  255. {
  256. Tpl::showpage('person_bonus.activity');
  257. }
  258. }
  259. public function annual_meetingOp()
  260. {
  261. if(chksubmit())
  262. {
  263. $awards = intval($_POST['awards']);
  264. $members = trim($_POST['members']);
  265. if(empty($awards) || empty($members)) {
  266. showMessage('奖项、员工工号 不能为空','index.php?act=person_bonus&op=annual_meeting','','error');
  267. return;
  268. }
  269. else {
  270. $awarder = new employee_award();
  271. $awarder->send($awards,$members);
  272. showMessage(Language::get('nc_common_save_succ'),'index.php?act=person_bonus&op=annual_meeting');
  273. }
  274. }
  275. else {
  276. Tpl::showpage('person_bonus.annual_meeting');
  277. }
  278. }
  279. }