admin/app/model/order/OrderCreateTool.php

225 lines
7.6 KiB
PHP

<?php
/**
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.cdcloudshop.com
* =========================================================
*/
namespace app\model\order;
use addon\b2c\model\member\MemberLevel;
use addon\o2o\model\store\Store;
use app\model\BaseModel;
use app\model\goods\GoodsMember;
use app\model\member\Growth;
use app\model\member\Hongbao;
use app\model\member\Member;
use app\model\member\MemberAccount;
use app\model\member\MemberAddress;
use app\model\member\MemberCoupon;
use app\model\member\Point;
use app\model\member\SiteMember;
use app\model\shop\Shop;
use app\model\site\Site;
use think\facade\Cache;
/**
* 订单创建 可调用的工具类
*
* @author Administrator
*
*/
Trait OrderCreateTool
{
/**
* 生成订单编号
*
* @param array $site_id
*/
public function createOrderNo($site_id, $member_id = 0)
{
$time_str = date('YmdHis');
$max_no = Cache::handler()->incr($site_id . "_" . $member_id . "_" . $time_str,1);
Cache::handler()->expire($site_id . "_" . $member_id . "_" . $time_str,120);
$order_no = $time_str . $member_id . sprintf("%03d", $max_no);
return $order_no;
}
public function initStore($data)
{
$store_id = $data['store_id'];
$store_model = new \app\model\store\Store();
$site_id = $data['site_id'];
if ($store_id == 0) {
$store_info = $store_model->getDefaultStore(['site_id' => $site_id])['data'] ?? [];
$data['store_info'] = $store_info;
$data['store_id'] = $store_info['store_id'];
} else {
$store_info = $store_model->getStoreInfo([['site_id', '=', $site_id], ['store_id', '=', $store_id]])['data'] ?? [];
$data['store_info'] = $store_info;
}
return $data;
}
/**
* 初始化站点信息
* @param $data
* @return mixed
*/
public function initSiteData($data)
{
$site_id = $data['site_id'];
$site_model = new Shop();
$site_condition = array(
['site_id', '=', $site_id]
);
$site_info = $site_model->getShopInfo($site_condition)['data'] ?? [];
$data['site_info'] = $site_info;
return $data;
}
/**
* 初始化会员账户
* @param $data
* @return mixed
*/
public function initMemberAccount($data)
{
$member_id = $data['member_id'] ?? 0;
$site_id = $data['site_id'];
if (empty($member_id))
return $data;
$member_model = new Member();
$member_condition = array(
['member_id', '=', $member_id],
);
$member_info = $member_model->getMemberInfo($member_condition)['data'] ?? [];
if (empty($member_info))
return $data;
$data['member_info'] = $member_info;
return $data;
}
/**
* 初始化收货地址
* @param unknown $data
*/
public function initMemberAddress($data)
{
$member_address = new MemberAddress();
$address = $member_address->getMemberAddressInfo([['member_id', '=', $data['member_id']], ['is_default', '=', 1]]);
$data['member_address'] = $address['data'];
return $data;
}
/**
* 获取商品会员价格
* @param $goods_info
* @param $data
*/
public function getGoodsMemberPrice($goods_info, $data)
{
$store_id = $data['store_id'] ?? 0;
$sku_id = $goods_info['sku_id'];
$member_id = $data['member_id'];
if ($member_id > 0) {
$condition = [
['sku_id', '=', $sku_id]
];
$goods_sku_info = model('goods_sku')->getInfo($condition, '*');
if (!empty($goods_sku_info)) {
if (addon_is_exit("memberprice")) {
if ($goods_sku_info['is_consume_discount']) {
$price = $goods_info['price'];
$alias = 'm';
$join = [
['member_level ml', 'ml.level_id = m.member_level', 'inner'],
];
$member_info = model("member")->getInfo([['member_id', '=', $member_id]], 'm.member_level,ml.consume_discount', $alias, $join);
if (!empty($member_info)) {
if ($goods_sku_info['discount_config'] == 1) {
// 自定义优惠
$goods_sku_info['member_price'] = json_decode($goods_sku_info['member_price'], true);
$value = isset($goods_sku_info['member_price'][$goods_sku_info['discount_method']][$member_info['member_level']]) ? $goods_sku_info['member_price'][$goods_sku_info['discount_method']][$member_info['member_level']] : 0;
switch ($goods_sku_info['discount_method']) {
case "discount":
// 打折
if ($value == 0) {
$member_price = $price;
} else
$member_price = number_format($price * $value / 10, 2, '.', '');
break;
case "manjian":
if ($value == 0) {
$member_price = $price;
} else
// 满减
$member_price = number_format($price - $value, 2, '.', '');
break;
case "fixed_price":
if ($value == 0) {
$member_price = $goods_sku_info['price'];
} else
// 指定价格
$member_price = number_format($value, 2, '.', '');
break;
}
} else {
// 默认按会员享受折扣计算
$member_price = number_format($price * $member_info['consume_discount'] / 100, 2, '.', '');
}
return $this->success($member_price);
}
}
}
}
}
return $this->error();
}
/**
* 扣除商品库存
* @param $params
*/
public function skuDecStock($goods_info, $store_id = 0)
{
$goods_class = $goods_info['goods_class'] ?? 0;
if (!empty($goods_class)) {
if (in_array($goods_class, [1, 2, 3, 4, 5 ])) {
$order_stock = new OrderStock();
$stock_result = $order_stock->decOrderSaleStock($goods_info['sku_id'], $goods_info['num'], $store_id,$goods_info['site_id']);
if ($stock_result['code'] < 0) {
return $stock_result;
}
}
}
return $this->success();
}
/**
* 次卡优惠计算
* @param $goods_info
*/
public function cardCalculate($goods_info){
$goods_money = $goods_info['goods_money'];
//次卡抵扣优惠
}
}