Files
littleTiger/application/common/logic/VirtualLogic.php
2019-02-28 19:48:21 +08:00

187 lines
7.4 KiB
PHP

<?php
/**
* tpshop
* ============================================================================
* 版权所有 2015-2027 深圳搜豹网络科技有限公司,并保留所有权利。
* 网站地址: http://www.tp-shop.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
* ============================================================================
* Author: wangqh
* Date: 2015-09-09
*/
namespace app\common\logic;
use think\Model;
use think\Db;
/**
* 虚拟订单logic
* Class CatsLogic
* @package common\Logic
*/
class VirtualLogic extends Model
{
protected $goods;//商品模型
public function __construct()
{
parent::__construct();
$this->session_id = session_id();
}
public function check_virtual_goods($goods_id,$item_id=0,$goods_num=0){
if(empty($goods_id)){
return array('status'=>-1 , 'msg'=>'请求参数错误');
}
$goods = M('goods')->where(array('goods_id'=>$goods_id))->find();
if(!$goods){
return array('status'=>-1 , 'msg'=>'该商品不允许购买,原因有:商品下架、不存在、过期等');
}
if($goods['is_virtual'] == 1 && $goods['virtual_indate']>time() && $goods['store_count']>0){
$goods_num = $goods['goods_num'] = $goods_num;
if($goods_num < 1){
return array('status'=>-1 , 'msg'=>'最少购买1件');
}
if ($goods['virtual_limit'] > $goods['store_count'] || $goods['virtual_limit'] == 0) {
$goods['virtual_limit'] = $goods['store_count'];
}
if($item_id>0){
$specGoodsPrice = M('SpecGoodsPrice')->where(array('item_id'=>$item_id))->cache(true,TPSHOP_CACHE_TIME)->find(); // 获取商品对应的规格价钱 库存 条码
if($specGoodsPrice) // 有选择商品规格
{
if($specGoodsPrice['store_count'] < $goods_num){
return array('status'=>-1 , 'msg'=>'该商品规格库存不足');
}
$goods['goods_spec_key'] = $specGoodsPrice['key'];
$goods['spec_key_name'] = $specGoodsPrice['key_name'];
$spec_price = $specGoodsPrice['price']; // 获取规格价格
$goods['shop_price'] = empty($spec_price) ? $goods['shop_price'] : $spec_price;
}
}
$goods['goods_fee'] = $goods['shop_price']*$goods['goods_num'];
return array('status'=>1 , 'goods'=>$goods);
}else{
return array('status'=>-1 , 'msg'=>'该商品不允许购买,原因可能:商品下架、不存在、过期等');
}
}
/**
* 虚拟订单列表
* @param $user_id
* @param $type
* @param $search_key
* @return array
*/
public function orderList($user_id, $type, $search_key)
{
$order = new \app\common\model\Order();
//删除的订单不列出来, 作废订单不列出来,虚拟订单不列出来
$where = 'user_id=:user_id and deleted = 0 and order_status <> 5 and prom_type = 5 ';
$bind['user_id'] = $user_id;
//条件搜索
if ($type) {
$where .= C(strtoupper($type));
}
// 搜索订单 根据商品名称 或者 订单编号
$search_key = trim($search_key);
if ($search_key) {
$where .= " and (order_sn like :search_key1 or order_id in (select order_id from `" . C('database.prefix') . "order_goods` where goods_name like :search_key2) ) ";
$bind['search_key1'] = '%' . $search_key . '%';
$bind['search_key2'] = '%' . $search_key . '%';
}
$count = $order->where($where)->bind($bind)->count();
$page = new \think\Page($count, 10);
$order_str = "order_id DESC";
//获取订单
$order_list = $order->order($order_str)->where($where)->bind($bind)->limit($page->firstRow, $page->listRows)->select();
return [
'order_list' => $order_list,
'page' => $page
];
}
/**
* 虚拟订单列表
* @param $user_id
* @param $type
* @param $search_key
* @return array
*/
public function orderListApi($user_id, $type, $search_key)
{
$order = new \app\common\model\Order();
//删除的订单不列出来, 作废订单不列出来,虚拟订单不列出来
$where = 'user_id=:user_id and deleted = 0 and order_status <> 5 and prom_type = 5 ';
$bind['user_id'] = $user_id;
//条件搜索
if ($type) {
$where .= C(strtoupper($type));
}
// 搜索订单 根据商品名称 或者 订单编号
$search_key = trim($search_key);
if ($search_key) {
$where .= " and (order_sn like :search_key1 or order_id in (select order_id from `" . C('database.prefix') . "order_goods` where goods_name like :search_key2) ) ";
$bind['search_key1'] = '%' . $search_key . '%';
$bind['search_key2'] = '%' . $search_key . '%';
}
$count = $order->where($where)->bind($bind)->count();
$page = new \think\Page($count, 10);
$order_str = "order_id DESC";
//获取订单
$order_list = $order->order($order_str)->with('OrderGoods')->where($where)->bind($bind)->limit($page->firstRow, $page->listRows)->select();
if($order_list){
$order_list = collection($order_list)->append(['virtual_order_button','order_status_detail'])->toArray();
}
return $order_list;
}
/**
* 检查虚拟订单兑换码状态
* @param $order
* @return array
* @throws \think\Exception
*/
public function check_virtual_code($order){
$vrOrders = Db::name('vr_order_code')->where(array('order_id'=>$order['order_id']))->select();
$vr_code_count = count($vrOrders);
$order['no_confirm'] = 0;
if($vr_code_count > 0){
$overdue_num=0; //计算订单过期兑换码数量
$unused =0; //计算订单过期兑换码数量
foreach($vrOrders as $codeKey => $codeVal){
if($codeVal['vr_state'] == 0) { //没使用
$unused++;
if ($codeVal['vr_indate'] < time()) { //超过有效期
$overdue_num++;
Db::name('vr_order_code')->where(['vr_indate' => $codeVal['vr_indate']])->update(['vr_state' => 2]);//已过期
$vrOrders[$codeKey]['vr_state'] = 2;
}
}
}
if($overdue_num == count($vrOrders)){ //全部过期就作废
Db::name('order')->where(['order_id'=>$order['order_id']])->update(['order_status'=>5]);
$order['order_status']=5;
$order['virtual_order_button']['receive_btn'] = 0;
}
}
if($overdue_num < $vr_code_count || $unused = $vr_code_count){
$order['no_confirm'] = 1;
}
$data=[
'vrorders' => $vrOrders,
'order_info' => $order,
];
return $data;
}
}