/** * @brief 移动会员,修改会员等级 */ function member_remove() { $user_ids = IFilter::act(IReq::get('check', 'post'), 'int'); $group_id = IFilter::act(IReq::get('move_group', 'post'), 'int'); $point = IFilter::act(IReq::get('move_point', 'post'), 'int'); if ($user_ids && is_array($user_ids)) { $ids = implode(',', $user_ids); if ($ids) { $tb_member = new IModel('member'); $updatearray = array(); //积分改动 if ($point) { $pointObj = new Point(); $userList = $tb_member->query('user_id in(' . $ids . ')', 'user_id,point'); foreach ($userList as $val) { $c_point = intval($point - $val['point']); if ($c_point != 0) { $tip = $c_point > 0 ? '奖励' : '扣除'; $pointConfig = array('user_id' => $val['user_id'], 'point' => $c_point, 'log' => '管理员' . $this->admin['admin_name'] . '修改了积分,' . $tip . $c_point . '积分'); $pointObj->update($pointConfig); } } } $updatearray['group_id'] = $group_id; $tb_member->setData($updatearray); $where = "user_id in (" . $ids . ")"; $tb_member->update($where); } } $this->member_list(); }
function member_save() { $user_id = IFilter::act(IReq::get('user_id'), 'int'); $user_name = IFilter::act(IReq::get('username')); $email = IFilter::act(IReq::get('email')); $password = IFilter::act(IReq::get('password')); $repassword = IFilter::act(IReq::get('repassword')); $group_id = IFilter::act(IReq::get('group_id'), 'int'); $truename = IFilter::act(IReq::get('true_name')); $sex = IFilter::act(IReq::get('sex'), 'int'); $telephone = IFilter::act(IReq::get('telephone')); $mobile = IFilter::act(IReq::get('mobile')); $province = IFilter::act(IReq::get('province'), 'int'); $city = IFilter::act(IReq::get('city'), 'int'); $area = IFilter::act(IReq::get('area'), 'int'); $contact_addr = IFilter::act(IReq::get('contact_addr')); $zip = IFilter::act(IReq::get('zip')); $qq = IFilter::act(IReq::get('qq')); $msn = IFilter::act(IReq::get('msn')); $exp = IFilter::act(IReq::get('exp'), 'int'); $point = IFilter::act(IReq::get('point'), 'int'); $_POST['area'] = ',' . $province . ',' . $city . ',' . $area . ','; if (!$user_id && $password == '') { $errorMsg = '请输入密码!'; } if ($password != $repassword) { $errorMsg = '两次输入的密码不一致!'; } //操作失败表单回填 if (isset($errorMsg)) { $this->userInfo = $_POST; $this->redirect('member_edit', false); Util::showMessage($errorMsg); } $member = array('true_name' => $truename, 'telephone' => $telephone, 'mobile' => $mobile, 'area' => $_POST['area'], 'contact_addr' => $contact_addr, 'qq' => $qq, 'msn' => $msn, 'sex' => $sex, 'zip' => $zip, 'exp' => $exp, 'point' => $point, 'group_id' => $group_id); //创建会员操作类 $userDB = new IModel("user"); $memberDB = new IModel("member"); //添加新会员 if (empty($user_id)) { $user = array('username' => $user_name, 'password' => md5($password), 'email' => $email); $userDB->setData($user); $user_id = $userDB->add(); $member['user_id'] = $user_id; $member['time'] = date('Y-m-d H:i:s'); $memberDB->setData($member); $memberDB->add(); } else { //修改密码 if ($password) { $userDB->setData(array('password' => md5($password))); $userDB->update('id = ' . $user_id); } $member_info = $memberDB->getObj('user_id=' . $user_id); //修改积分记录日志 if ($point != $member_info['point']) { $ctrlType = $point > $member_info['point'] ? '增加' : '减少'; $diffPoint = $point - $member_info['point']; $pointObj = new Point(); $pointConfig = array('user_id' => $user_id, 'point' => $diffPoint, 'log' => '管理员' . $this->admin['admin_name'] . '将积分' . $ctrlType . $diffPoint . '积分'); $pointObj->update($pointConfig); } $memberDB->setData($member); $memberDB->update("user_id = " . $user_id); } $this->redirect('member_list'); }
/** * 支付成功后修改订单状态 * @param $orderNo string 订单编号 * @param $admin_id int 管理员ID * @param $note string 收款的备注 * @return false or int order_id */ public static function updateOrderStatus($orderNo, $admin_id = '', $note = '') { //获取订单信息 $orderObj = new IModel('order'); $orderRow = $orderObj->getObj('order_no = "' . $orderNo . '"'); if (empty($orderRow)) { return false; } if ($orderRow['pay_status'] == 1) { return $orderRow['id']; } else { if ($orderRow['pay_status'] == 0) { $dataArray = array('status' => 2, 'pay_time' => ITime::getDateTime(), 'pay_status' => 1); $orderObj->setData($dataArray); $is_success = $orderObj->update('order_no = "' . $orderNo . '"'); if ($is_success == '') { return false; } //删除订单中使用的道具 $ticket_id = trim($orderRow['prop']); if ($ticket_id != '') { $propObj = new IModel('prop'); $propData = array('is_userd' => 1); $propObj->setData($propData); $propObj->update('id = ' . $ticket_id); } if (intval($orderRow['user_id']) != 0) { $user_id = $orderRow['user_id']; //获取用户信息 $memberObj = new IModel('member'); $memberRow = $memberObj->getObj('user_id = ' . $user_id, 'prop,group_id'); //(1)删除订单中使用的道具 if ($ticket_id != '') { $finnalTicket = str_replace(',' . $ticket_id . ',', ',', ',' . trim($memberRow['prop'], ',') . ','); $memberData = array('prop' => $finnalTicket); $memberObj->setData($memberData); $memberObj->update('user_id = ' . $user_id); } if ($memberRow) { //(2)进行促销活动奖励 $proObj = new ProRule($orderRow['real_amount']); $proObj->setUserGroup($memberRow['group_id']); $proObj->setAward($user_id); //(3)增加经验值 $memberData = array('exp' => 'exp + ' . $orderRow['exp']); $memberObj->setData($memberData); $memberObj->update('user_id = ' . $user_id, 'exp'); //(4)增加积分 $pointConfig = array('user_id' => $user_id, 'point' => $orderRow['point'], 'log' => '成功购买了订单号:' . $orderRow['order_no'] . '中的商品,奖励积分' . $orderRow['point']); $pointObj = new Point(); $pointObj->update($pointConfig); } } //插入收款单 $collectionDocObj = new IModel('collection_doc'); $collectionData = array('order_id' => $orderRow['id'], 'user_id' => $orderRow['user_id'], 'amount' => $orderRow['order_amount'], 'time' => ITime::getDateTime(), 'payment_id' => $orderRow['pay_type'], 'pay_status' => 1, 'if_del' => 0, 'note' => $note, 'admin_id' => $admin_id ? $admin_id : 0); $collectionDocObj->setData($collectionData); $collectionDocObj->add(); /*同步数据*/ //同步团购的数据 if ($orderRow['type'] == 1) { $regimentUserObj = new IModel('regiment_user_relation'); $regimentUserObj->setData(array('is_over' => 1)); $regimentUserObj->update("order_no = '" . $orderRow['order_no'] . "'"); } //更改购买商品的库存数量 self::updateStore($orderRow['id'], 'reduce'); return $orderRow['id']; } else { return false; } } }
function trade_ticket() { $ticketId = IFilter::act(IReq::get('ticket_id', 'post'), 'int'); $message = ''; if (intval($ticketId) == 0) { $message = '请选择要兑换的代金券'; } else { $nowTime = ITime::getDateTime(); $ticketObj = new IModel('ticket'); $ticketRow = $ticketObj->getObj('id = ' . $ticketId . ' and point > 0 and start_time <= "' . $nowTime . '" and end_time > "' . $nowTime . '"'); if (empty($ticketRow)) { $message = '对不起,此代金券不能兑换'; } else { $memberObj = new IModel('member'); $where = 'user_id = ' . $this->user['user_id']; $memberRow = $memberObj->getObj($where, 'point'); if ($ticketRow['point'] > $memberRow['point']) { $message = '对不起,您的积分不足,不能兑换此类代金券'; } else { //生成红包 $dataArray = array('condition' => $ticketRow['id'], 'name' => $ticketRow['name'], 'card_name' => 'T' . IHash::random(8), 'card_pwd' => IHash::random(8), 'value' => $ticketRow['value'], 'start_time' => $ticketRow['start_time'], 'end_time' => $ticketRow['end_time'], 'is_send' => 1); $propObj = new IModel('prop'); $propObj->setData($dataArray); $insert_id = $propObj->add(); //用户prop字段值null时 $memberArray = array('prop' => ',' . $insert_id . ','); $memberObj->setData($memberArray); $result = $memberObj->update('user_id = ' . $this->user["user_id"] . ' and ( prop is NULL or prop = "" )'); //用户prop字段值非null时 if (!$result) { $memberArray = array('prop' => 'concat(prop,"' . $insert_id . ',")'); $memberObj->setData($memberArray); $result = $memberObj->update('user_id = ' . $this->user["user_id"], 'prop'); } //代金券成功 if ($result) { $pointConfig = array('user_id' => $this->user['user_id'], 'point' => '-' . $ticketRow['point'], 'log' => '积分兑换代金券,扣除了 -' . $ticketRow['point'] . '积分'); $pointObj = new Point(); $pointObj->update($pointConfig); } } } } //展示 if ($message != '') { $this->integral(); Util::showMessage($message); } else { $this->redirect('redpacket'); } }
/** * @brief 订单退款操作 * @param int $refundId 退款单ID * @param int $authorId 操作人ID * @param string $type admin:管理员;seller:商家 * @param int $isNotBalance 是否充值到余额, 0:退款余额; 1:不退款到余额 * @return */ public static function refund($refundId, $authorId, $type = 'admin', $isNotBalance = 0) { $orderGoodsDB = new IModel('order_goods'); $refundDB = new IModel('refundment_doc'); //获取goods_id和product_id用于给用户减积分,经验 $refundsRow = $refundDB->getObj('id = ' . $refundId); $order_id = $refundsRow['order_id']; $order_no = $refundsRow['order_no']; $user_id = $refundsRow['user_id']; $orderGoodsRow = $orderGoodsDB->getObj('order_id = ' . $order_id . ' and goods_id = ' . $refundsRow['goods_id'] . ' and product_id = ' . $refundsRow['product_id'] . ' and is_send != 2'); if (!$orderGoodsRow) { return false; } $order_goods_id = $orderGoodsRow['id']; //如果管理员(商家)自定义了退款金额。否则就使用默认的付款商品金额 $amount = $refundsRow['amount'] > 0 ? $refundsRow['amount'] : $orderGoodsRow['goods_nums'] * $orderGoodsRow['real_price']; //库存增加 self::updateStore($order_goods_id, 'add'); //更新退款状态 $orderGoodsDB->setData(array('is_send' => 2)); $orderGoodsDB->update('id = ' . $order_goods_id); //更新order表状态 $isSendData = $orderGoodsDB->getObj('order_id = ' . $order_id . ' and is_send != 2'); $orderStatus = 6; //全部退款 if ($isSendData) { $orderStatus = 7; //部分退款 } $tb_order = new IModel('order'); $tb_order->setData(array('status' => $orderStatus)); $tb_order->update('id=' . $order_id); /** * 进行用户的余额增加操作,积分,经验的减少操作, * 1,当全部退款时候,减少订单中记录的积分和经验;且如果没有发货的商品直接退回订单中的运费,报价,税金等 * 2,当部分退款时候,查询商品表中积分和经验 */ if ($orderStatus == 6) { Order_class::resetOrderProp($order_id); $orderRow = $tb_order->getObj('id = ' . $order_id); //是否返还运费,报价,税金 $isDeliveryData = $orderGoodsDB->getObj('order_id = ' . $order_id . ' and delivery_id > 0'); if (!$isDeliveryData) { $amount += $orderRow['real_freight'] + $orderRow['insured'] + $orderRow['taxes']; } } //退款积分,经验 $goodsDB = new IModel('goods'); $goodsRow = $goodsDB->getObj('id = ' . $orderGoodsRow['goods_id']); $orderRow = array('exp' => $goodsRow['exp'] * $orderGoodsRow['goods_nums'], 'point' => $goodsRow['point'] * $orderGoodsRow['goods_nums'], 'order_no' => $order_no); //更新退款表 $updateData = array('amount' => $amount, 'pay_status' => 2, 'dispose_time' => ITime::getDateTime()); $refundDB->setData($updateData); $refundDB->update('id = ' . $refundId); //更新用户的信息 $obj = new IModel('member'); $memberObj = $obj->getObj('user_id = ' . $user_id, 'exp,point'); $exp = $memberObj['exp'] - $orderRow['exp']; $obj->setData(array('exp' => $exp <= 0 ? 0 : $exp)); $obj->update('user_id = ' . $user_id); //积分记录日志 $pointConfig = array('user_id' => $user_id, 'point' => '-' . $orderRow['point'], 'log' => '退款订单号:' . $orderRow['order_no'] . '中的商品,减掉积分 -' . $orderRow['point']); $pointObj = new Point(); $pointObj->update($pointConfig); //用户余额进行的操作记入account_log表 $log = new AccountLog(); $config = array('user_id' => $user_id, 'event' => 'drawback', 'num' => $amount, 'order_no' => $order_no); if ($type == 'admin') { $config['admin_id'] = $authorId; $adminObj = new IModel('admin'); $adminRow = $adminObj->getObj('id = ' . $authorId); $authorName = $adminRow['admin_name']; } else { if ($type == 'seller') { $config['seller_id'] = $authorId; $sellerObj = new IModel('seller'); $sellerRow = $sellerObj->getObj('id = ' . $authorId); $authorName = $sellerRow['seller_name']; } } //生成订单日志 $tb_order_log = new IModel('order_log'); $tb_order_log->setData(array('order_id' => $order_id, 'user' => $authorName, 'action' => '退款', 'result' => '成功', 'note' => '订单【' . $order_no . '】退款,退款金额:¥' . $amount, 'addtime' => ITime::getDateTime())); $tb_order_log->add(); return $isNotBalance == 0 ? $log->write($config) : true; }
/** * @brief 赠品促销规则奖励操作 * @param array 赠品促销规则奖励信息 */ private function giftAction($giftArray, $user_id) { foreach ($giftArray as $key => $val) { $award_type = $val['award_type']; $award_value = $val['award_value']; switch ($award_type) { //积分 case "3": $pointConfig = array('user_id' => $user_id, 'point' => $award_value, 'log' => '促销奖励,消费满' . $this->sum . '元,奖励' . $award_value . '积分'); $pointObj = new Point(); $pointObj->update($pointConfig); break; //代金券 //代金券 case "4": /*(1)修改prop表*/ $ticketObj = new IModel('ticket'); $where = 'id = ' . $award_value; $ticketRow = $ticketObj->getObj($where); //奖励的红包没有过期 $time = ITime::getDateTime(); if ($time > $ticketRow['start_time'] && $time < $ticketRow['end_time']) { $dataArray = array('condition' => $award_value, 'name' => $ticketRow['name'], 'card_name' => 'T' . IHash::random(8), 'card_pwd' => IHash::random(8), 'value' => $ticketRow['value'], 'start_time' => $ticketRow['start_time'], 'end_time' => $ticketRow['end_time'], 'is_send' => 1); $propObj = new IModel('prop'); $propObj->setData($dataArray); $insert_id = $propObj->add(); /*(2)修改member表*/ $memberObj = new IModel('member'); //用户prop字段值null时 $memberArray = array('prop' => ',' . $insert_id . ','); $memberObj->setData($memberArray); $result = $memberObj->update('user_id = ' . $user_id . ' and ( prop is NULL or prop = "" )'); //用户prop字段值非null时 if (!$result) { $memberArray = array('prop' => 'concat(prop,"' . $insert_id . ',")'); $memberObj->setData($memberArray); $memberObj->update('user_id = ' . $user_id, 'prop'); } } break; //赠送经验 //赠送经验 case "5": $memberObj = new IModel('member'); $memberArray = array('exp' => 'exp' + $award_value); $memberObj->setData($memberArray); $memberObj->update('user_id = ' . $user_id, 'exp'); break; } } }
/** * @brief 订单退款操作 * @param int $refundId 退款单ID * @param int $authorId 操作人ID * @param string $type admin:管理员;seller:商家 * @return */ public static function refund($refundId, $authorId, $type = 'admin') { $orderGoodsDB = new IModel('order_goods'); $refundDB = new IModel('refundment_doc'); //更新退款表 $updateData = array('pay_status' => 2, 'dispose_time' => ITime::getDateTime()); $refundDB->setData($updateData); $refundDB->update('id = ' . $refundId); //获取goods_id和product_id用于给用户减积分,经验 $refundsRow = $refundDB->getObj('id = ' . $refundId); $order_id = $refundsRow['order_id']; $order_no = $refundsRow['order_no']; $amount = $refundsRow['amount']; $user_id = $refundsRow['user_id']; $orderGoodsRow = $orderGoodsDB->getObj('order_id = ' . $order_id . ' and goods_id = ' . $refundsRow['goods_id'] . ' and product_id = ' . $refundsRow['product_id']); $order_goods_id = $orderGoodsRow['id']; //更新退款状态 $orderGoodsDB->setData(array('is_send' => 2)); $orderGoodsDB->update('id = ' . $order_goods_id); //更新order表状态 $isSendData = $orderGoodsDB->getObj('order_id = ' . $order_id . ' and is_send != 2'); $orderStatus = 6; //全部退款 if ($isSendData) { $orderStatus = 7; //部分退款 } $tb_order = new IModel('order'); $tb_order->setData(array('status' => $orderStatus)); $tb_order->update('id=' . $order_id); if ($orderStatus == 6) { Order_class::resetOrderProp($order_id); } //生成订单日志 $authorName = $type == 'admin' ? ISafe::get('admin_name') : ISafe::get('seller_name'); $tb_order_log = new IModel('order_log'); $tb_order_log->setData(array('order_id' => $order_id, 'user' => $authorName, 'action' => '退款', 'result' => '成功', 'note' => '订单【' . $order_no . '】退款,退款金额:¥' . $amount, 'addtime' => ITime::getDateTime())); $tb_order_log->add(); /** * 进行用户的余额增加操作,积分,经验的减少操作, * 1,当全部退款时候,减少订单中记录的积分和经验; * 2,当部分退款时候,查询商品表中积分和经验 */ if ($orderStatus == 6) { $orderRow = $tb_order->getObj('id = ' . $order_id); } else { $goodsDB = new IModel('goods'); $goodsRow = $goodsDB->getObj('id = ' . $orderGoodsRow['goods_id']); $orderRow = array('exp' => $goodsRow['exp'], 'point' => $goodsRow['point'], 'order_no' => $order_no); } $obj = new IModel('member'); $memberObj = $obj->getObj('user_id = ' . $user_id, 'balance,exp,point'); $exp = $memberObj['exp'] - $orderRow['exp']; $balance = $memberObj['balance'] + $amount; $obj->setData(array('balance' => $balance, 'exp' => $exp <= 0 ? 0 : $exp)); $isSuccess = $obj->update('user_id = ' . $user_id); //积分记录日志 $pointConfig = array('user_id' => $user_id, 'point' => '-' . $orderRow['point'], 'log' => '退款订单号:' . $orderRow['order_no'] . '中的商品,减掉积分 -' . $orderRow['point']); $pointObj = new Point(); $pointObj->update($pointConfig); if ($isSuccess) { //用户余额进行的操作记入account_log表 $log = new AccountLog(); $config = array('user_id' => $user_id, 'event' => 'drawback', 'num' => $amount, 'order_no' => $order_no); if ($type == 'admin') { $config['admin_id'] = $authorId; } else { if ($type == 'seller') { $config['seller_id'] = $authorId; } } $re = $log->write($config); return true; } return false; }