2024-06-03 11:25:05 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace app\api\logic\order;
|
|
|
|
|
|
2024-06-03 22:45:25 +08:00
|
|
|
|
use app\common\enum\OrderEnum;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
use app\common\enum\PayEnum;
|
2024-06-03 22:45:25 +08:00
|
|
|
|
use app\common\enum\YesNoEnum;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
use app\common\logic\BaseLogic;
|
2024-06-04 14:15:08 +08:00
|
|
|
|
use app\common\logic\CapitalFlowLogic;
|
2024-06-04 15:21:14 +08:00
|
|
|
|
use app\common\logic\StoreFinanceFlowLogic;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
use app\common\model\merchant\Merchant;
|
|
|
|
|
use app\common\model\order\Cart;
|
2024-06-03 21:57:23 +08:00
|
|
|
|
use app\common\model\store_branch_product\StoreBranchProduct;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
use app\common\model\store_order\StoreOrder;
|
|
|
|
|
use app\common\model\store_order_cart_info\StoreOrderCartInfo;
|
|
|
|
|
use app\common\model\store_product\StoreProduct;
|
|
|
|
|
use app\common\model\store_product_attr_value\StoreProductAttrValue;
|
|
|
|
|
use app\common\model\store_product_unit\StoreProductUnit;
|
2024-06-04 15:21:14 +08:00
|
|
|
|
use app\common\model\system_store\SystemStore;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
use app\common\model\user\User;
|
|
|
|
|
use app\common\model\user\UserAddress;
|
|
|
|
|
use app\Request;
|
|
|
|
|
use support\Log;
|
|
|
|
|
use taoser\exception\ValidateException;
|
2024-06-03 22:45:25 +08:00
|
|
|
|
use think\Exception;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
use think\facade\Db;
|
|
|
|
|
use Yansongda\Pay\Event\PayEnd;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 订单逻辑
|
|
|
|
|
* Class OrderLogic
|
|
|
|
|
* @package app\api\logic\order
|
|
|
|
|
*/
|
|
|
|
|
class OrderLogic extends BaseLogic
|
|
|
|
|
{
|
|
|
|
|
public static $total;
|
2024-06-04 15:21:14 +08:00
|
|
|
|
|
2024-06-03 11:25:05 +08:00
|
|
|
|
/**
|
|
|
|
|
* @notes 获取购物车商品信息
|
|
|
|
|
* @param $params
|
|
|
|
|
* @return array|bool
|
|
|
|
|
*/
|
|
|
|
|
static public function cartIdByOrderInfo($cartId, $addressId, $user = null, $params = [])
|
|
|
|
|
{
|
|
|
|
|
|
2024-06-04 16:51:26 +08:00
|
|
|
|
$where = ['is_pay' => 0];
|
2024-06-03 16:11:14 +08:00
|
|
|
|
$cart_select = Cart::whereIn('id', $cartId)->where($where)->field('product_id as goods,cart_num')->select()->toArray();
|
2024-06-03 11:25:05 +08:00
|
|
|
|
if (empty($cart_select)) {
|
|
|
|
|
self::setError('购物车为空');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
self::$total = 0;
|
|
|
|
|
/** 计算价格 */
|
|
|
|
|
foreach ($cart_select as $k => $v) {
|
2024-06-03 21:57:23 +08:00
|
|
|
|
$find = StoreBranchProduct::where(['id' => $v['goods']])->field('store_name,image,unit,price')->find();
|
2024-06-04 15:21:14 +08:00
|
|
|
|
if (!$find) {
|
2024-06-03 11:25:05 +08:00
|
|
|
|
continue;
|
|
|
|
|
}
|
2024-06-03 16:11:14 +08:00
|
|
|
|
$cart_select[$k]['total'] = bcmul($v['cart_num'], $find['price'], 2);//钱
|
|
|
|
|
$cart_select[$k]['price'] = $find['price'];
|
2024-06-04 16:51:26 +08:00
|
|
|
|
$cart_select[$k]['product_id'] = $v['goods'];
|
2024-06-04 15:21:14 +08:00
|
|
|
|
$cart_select[$k]['old_cart_id'] = implode(',', $cartId);
|
2024-06-03 21:57:23 +08:00
|
|
|
|
$cart_select[$k]['cart_num'] = $v['cart_num'];
|
2024-06-04 16:56:43 +08:00
|
|
|
|
$cart_select[$k]['verify_code'] = $params['verify_code'] ?? '';
|
2024-06-04 15:54:42 +08:00
|
|
|
|
$cart_select[$k]['cart_info'] = json_encode($cart_select[$k]);
|
2024-06-03 21:57:23 +08:00
|
|
|
|
//理论上每笔都是拆分了
|
2024-06-04 17:03:29 +08:00
|
|
|
|
$cart_select[$k]['name'] = $find['store_name'];
|
|
|
|
|
$cart_select[$k]['imgs'] = $find['image'];
|
|
|
|
|
$cart_select[$k]['unit_name'] = StoreProductUnit::where(['id' => $find['unit']])->value('name');
|
2024-06-04 15:21:14 +08:00
|
|
|
|
self::$total = bcadd(self::$total, $cart_select[$k]['total'], 2);
|
2024-06-03 11:25:05 +08:00
|
|
|
|
}
|
|
|
|
|
$order = [
|
2024-06-03 16:11:14 +08:00
|
|
|
|
'add_time' => time(),
|
|
|
|
|
'create_time' => time(),
|
|
|
|
|
'order_id' => getNewOrderId('PF'),
|
|
|
|
|
'total_price' => self::$total,//总价
|
2024-06-03 21:57:23 +08:00
|
|
|
|
'pay_price' => self::$total,//后期可能有降价抵扣
|
2024-06-03 16:11:14 +08:00
|
|
|
|
'total_num' => count($cart_select),//总数
|
2024-06-03 11:25:05 +08:00
|
|
|
|
'pay_type' => $params['pay_type'] ?? 0,
|
|
|
|
|
'cart_id' => implode(',', $cartId),
|
2024-06-04 16:56:43 +08:00
|
|
|
|
'store_id' => $params['store_id'] ?? 0,
|
|
|
|
|
'shipping_type' => $params['shipping_type'] ?? 1//配送方式 1=快递 ,2=门店自提
|
2024-06-03 11:25:05 +08:00
|
|
|
|
];
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
self::setError($e->getMessage());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return ['order' => $order, 'cart_list' => $cart_select];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建新订单
|
2024-06-03 21:57:23 +08:00
|
|
|
|
* @return Object|bool|array
|
2024-06-03 11:25:05 +08:00
|
|
|
|
*/
|
|
|
|
|
static public function createOrder($cartId, $addressId, $user = null, $params = [])
|
|
|
|
|
{
|
2024-06-03 22:45:25 +08:00
|
|
|
|
$verify_code = generateUniqueVerificationCode();
|
|
|
|
|
$params['verify_code'] = $verify_code;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
$orderInfo = self::cartIdByOrderInfo($cartId, $addressId, $user, $params);
|
2024-06-04 15:21:14 +08:00
|
|
|
|
if (!$orderInfo) {
|
2024-06-03 11:25:05 +08:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2024-06-03 21:57:23 +08:00
|
|
|
|
// `delivery_name`快递名称/送货人姓名',
|
|
|
|
|
// `delivery_code`'快递公司编码',
|
|
|
|
|
// `delivery_type` '发货类型',
|
|
|
|
|
// `delivery_id'快递单号/手机号',
|
2024-06-03 11:25:05 +08:00
|
|
|
|
$_order = $orderInfo['order'];
|
|
|
|
|
$_order['deduction_price'] = 0;
|
|
|
|
|
$_order['uid'] = request()->userId;
|
2024-06-04 15:21:14 +08:00
|
|
|
|
$user = User::where('id', \request()->userId)->find();
|
2024-06-03 21:57:23 +08:00
|
|
|
|
$_order['real_name'] = $user['real_name'];
|
|
|
|
|
$_order['mobile'] = $user['mobile'];
|
2024-06-04 16:51:26 +08:00
|
|
|
|
$_order['pay_type'] = $orderInfo['order']['pay_type'];
|
2024-06-03 22:45:25 +08:00
|
|
|
|
$_order['verify_code'] = $verify_code;
|
2024-06-03 21:57:23 +08:00
|
|
|
|
|
2024-06-04 15:21:14 +08:00
|
|
|
|
if ($addressId > 0) {
|
2024-06-04 16:51:26 +08:00
|
|
|
|
$address = UserAddress::where(['id' => $addressId, 'uid' => Request()->userId])->find();
|
2024-06-04 15:21:14 +08:00
|
|
|
|
if ($address) {
|
2024-06-03 11:25:05 +08:00
|
|
|
|
$_order['real_name'] = $address['real_name'];
|
|
|
|
|
$_order['user_phone'] = $address['phone'];
|
|
|
|
|
$_order['user_address'] = $address['detail'];
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-03 21:57:23 +08:00
|
|
|
|
// if($params['pay_type']==PayEnum::WECHAT_PAY_BARCODE){
|
|
|
|
|
// $_order['source']=1;
|
|
|
|
|
// }
|
|
|
|
|
// if($params['pay_type']==PayEnum::CASH_PAY){
|
|
|
|
|
// $_order['money']=$_order['total'];
|
|
|
|
|
// }
|
2024-06-04 15:54:42 +08:00
|
|
|
|
|
2024-06-03 11:25:05 +08:00
|
|
|
|
Db::startTrans();
|
|
|
|
|
try {
|
2024-06-03 16:11:14 +08:00
|
|
|
|
$order = StoreOrder::create($_order);
|
2024-06-03 11:25:05 +08:00
|
|
|
|
$goods_list = $orderInfo['cart_list'];
|
|
|
|
|
foreach ($goods_list as $k => $v) {
|
2024-06-03 21:57:23 +08:00
|
|
|
|
$goods_list[$k]['oid'] = $order->id;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
$goods_list[$k]['uid'] = request()->userId;
|
2024-06-04 15:21:14 +08:00
|
|
|
|
$goods_list[$k]['cart_id'] = implode(',', $cartId);
|
2024-06-03 21:57:23 +08:00
|
|
|
|
$goods_list[$k]['delivery_id'] = $params['store_id'];//商家id
|
2024-06-03 11:25:05 +08:00
|
|
|
|
}
|
2024-06-03 16:11:14 +08:00
|
|
|
|
(new StoreOrderCartInfo())->saveAll($goods_list);
|
2024-06-04 16:51:26 +08:00
|
|
|
|
$where = ['is_pay' => 0];
|
2024-06-04 17:21:57 +08:00
|
|
|
|
Cart::whereIn('id', $cartId)->where($where)->update(['is_pay' => 1, 'delete_time' => time()]);
|
2024-06-03 11:25:05 +08:00
|
|
|
|
Db::commit();
|
|
|
|
|
return $order;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
Db::rollback();
|
|
|
|
|
self::setError($e->getMessage());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @notes 获取购货订单购物车商品信息
|
|
|
|
|
* @param $params
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
static public function cartIdByPurchaseOrderInfo($user, $params)
|
|
|
|
|
{
|
|
|
|
|
if (!$user) {
|
|
|
|
|
self::setError('没有用户信息,请先登录');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
$mer_id = $user['merchant']['mer_id'];
|
2024-06-04 15:21:14 +08:00
|
|
|
|
$where1 = ['paid' => 1, 'is_opurchase' => 0];
|
|
|
|
|
$where1[] = ['pay_type', '<>', 9];
|
2024-06-03 11:25:05 +08:00
|
|
|
|
|
|
|
|
|
$arrs = Cashierclass::where('merchant', $mer_id)->whereDay('create_time')->where($where1)->column('cart_id,id,address_id');
|
|
|
|
|
// $order_id = Cashierclass::where('merchant', $mer_id)->whereDay('create_time')->where($where1)->column('id');
|
|
|
|
|
$cart_arr = [];
|
|
|
|
|
$order_id = [];
|
|
|
|
|
foreach ($arrs as $k => $v) {
|
|
|
|
|
if (empty($v['cart_id'])) {
|
|
|
|
|
self::setError('没有购物车信息');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
// if (empty($v['address_id'])) {
|
|
|
|
|
// self::setError('请先设置配送地址');
|
|
|
|
|
// return false;
|
|
|
|
|
// }
|
2024-06-04 15:21:14 +08:00
|
|
|
|
$arr = explode(',', $v['cart_id']);
|
2024-06-03 11:25:05 +08:00
|
|
|
|
foreach ($arr as $kk => $vv) {
|
|
|
|
|
$cart_arr[] = $vv;
|
|
|
|
|
}
|
|
|
|
|
$order_id[] = $v['id'];
|
|
|
|
|
}
|
|
|
|
|
$where = ['is_pay' => 1, 'is_fail' => 0];
|
|
|
|
|
$cart_select = Cart::whereIn('cart_id', $cart_arr)->where($where)->field('goods_id as goods,cart_num')->select()->toArray();
|
|
|
|
|
if (empty($cart_select)) {
|
|
|
|
|
self::setError('购物车为空');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/** 计算价格 */
|
|
|
|
|
foreach ($cart_select as $k => $v) {
|
|
|
|
|
$sell = Goods::where(['id' => $v['goods']])->value('sell');
|
|
|
|
|
$cart_select[$k]['total'] = bcmul($v['cart_num'], $sell, 2);
|
|
|
|
|
$cart_select[$k]['price'] = $sell;
|
|
|
|
|
}
|
|
|
|
|
$order = [
|
|
|
|
|
'time' => time(),
|
|
|
|
|
'number' => static::getNewOrderId('CG'),
|
|
|
|
|
'total' => array_sum(array_column($cart_select, 'total')),
|
|
|
|
|
'pay_type' => $params['pay_type'] ?? 0,
|
|
|
|
|
'cart_id' => implode(',', $cart_arr),
|
|
|
|
|
'order_arr' => implode(',', $order_id)
|
|
|
|
|
];
|
|
|
|
|
return ['order' => $order, 'cart_list' => $cart_select];
|
|
|
|
|
}
|
2024-06-04 15:21:14 +08:00
|
|
|
|
|
2024-06-03 11:25:05 +08:00
|
|
|
|
/**
|
|
|
|
|
* 创建购货订单
|
|
|
|
|
* @return Object|bool
|
|
|
|
|
*/
|
|
|
|
|
static public function createOpurchaseOrder($user = null, $params = [])
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (!$user) {
|
|
|
|
|
self::setError('没有用户信息,请先登录');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
$mer_id = $user['merchant']['mer_id'];
|
|
|
|
|
// $merchant = Merchant::where('mer_id', $mer_id)->find();
|
|
|
|
|
$orderInfo = self::cartIdByPurchaseOrderInfo($user, $params);
|
|
|
|
|
if (!$orderInfo) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
$_order = $orderInfo['order'];
|
|
|
|
|
// if ($_order['total'] < $merchant['mer_money']) {
|
|
|
|
|
// self::setError('商户余额不足');
|
|
|
|
|
// return false;
|
|
|
|
|
// }
|
|
|
|
|
$_order['merchant'] = $mer_id;
|
|
|
|
|
$_order['money'] = $_order['total'];
|
|
|
|
|
$_order['actual'] = $_order['total'];
|
|
|
|
|
$_order['paid'] = 1;
|
|
|
|
|
Db::startTrans();
|
|
|
|
|
try {
|
|
|
|
|
$order = Opurchaseclass::create($_order);
|
|
|
|
|
|
|
|
|
|
$goods_list = $orderInfo['cart_list'];
|
|
|
|
|
foreach ($goods_list as $k => $v) {
|
|
|
|
|
$goods_list[$k]['nums'] = $v['cart_num'];
|
|
|
|
|
$goods_list[$k]['pid'] = $order->id;
|
|
|
|
|
}
|
|
|
|
|
(new Opurchaseinfo())->saveAll($goods_list);
|
|
|
|
|
// $merchant->mer_money = bcsub($merchant->mer_money, $_order['total'], 2);
|
|
|
|
|
$order_arr = explode(',', $_order['order_arr']);
|
|
|
|
|
Cashierclass::where('id', 'in', $order_arr)->update(['is_opurchase' => 1]);
|
|
|
|
|
Db::commit();
|
|
|
|
|
return $order;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
Db::rollback();
|
|
|
|
|
self::setError($e->getMessage());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-04 15:21:14 +08:00
|
|
|
|
|
2024-06-03 11:25:05 +08:00
|
|
|
|
/**
|
|
|
|
|
* @notes 获取订单号
|
|
|
|
|
* @param $type
|
|
|
|
|
* @return string
|
|
|
|
|
* @author likeadmin
|
|
|
|
|
* @date 2021/7/28 17:05
|
|
|
|
|
*/
|
|
|
|
|
static public function getNewOrderId($type)
|
|
|
|
|
{
|
|
|
|
|
list($msec, $sec) = explode(' ', microtime());
|
|
|
|
|
$msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
|
|
|
|
|
$orderId = $type . $msectime . mt_rand(10000, max(intval($msec * 10000) + 10000, 98369));
|
|
|
|
|
return $orderId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 余额订单支付
|
|
|
|
|
* @param User $user
|
|
|
|
|
* @param $order
|
|
|
|
|
* @return bool
|
|
|
|
|
* @throws Exception
|
|
|
|
|
* @throws ValidateException
|
|
|
|
|
*/
|
|
|
|
|
static public function payBalance(User $user, $order)
|
|
|
|
|
{
|
2024-06-04 16:51:26 +08:00
|
|
|
|
if ($user['now_money'] < $order['pay_price']) {
|
2024-06-03 11:25:05 +08:00
|
|
|
|
self::setError('余额不足,请更换支付方式');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
Db::startTrans();
|
|
|
|
|
try {
|
2024-06-04 16:51:26 +08:00
|
|
|
|
$user->now_money = bcsub($user->now_money, $order['pay_price'], 2);
|
2024-06-03 11:25:05 +08:00
|
|
|
|
$user->save();
|
2024-06-04 14:15:08 +08:00
|
|
|
|
$capitalFlowDao = new CapitalFlowLogic($user);
|
2024-06-04 16:51:26 +08:00
|
|
|
|
$capitalFlowDao->userExpense('user_order_pay', 'order', $order['id'], $order['pay_price']);
|
2024-06-03 11:25:05 +08:00
|
|
|
|
Db::commit();
|
|
|
|
|
return true;
|
2024-06-04 16:51:26 +08:00
|
|
|
|
} catch (\Exception $e) {
|
2024-06-03 11:25:05 +08:00
|
|
|
|
Db::rollback();
|
|
|
|
|
Log::error('余额支付失败' . $e->getMessage() . '。line:' . $e->getLine() . '。file:' . $e->getFile());
|
|
|
|
|
self::setError('余额支付失败' . $e->getMessage());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @notes 订单支付成功
|
|
|
|
|
* @param $order 订单
|
|
|
|
|
* @param $CallbackData 回调数据
|
|
|
|
|
* @date 2021/7/8 00:40
|
|
|
|
|
*/
|
|
|
|
|
static function paySuccess($order, $CallbackData = [])
|
|
|
|
|
{
|
|
|
|
|
Db::startTrans();
|
|
|
|
|
try {
|
|
|
|
|
$order->money = $CallbackData['money'];
|
|
|
|
|
$order->paid = 1;
|
|
|
|
|
$order->save();
|
|
|
|
|
Log::info('支付成功');
|
|
|
|
|
// 提交事务
|
|
|
|
|
Db::commit();
|
|
|
|
|
return true;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
// 回滚事务
|
|
|
|
|
Db::rollback();
|
|
|
|
|
Log::error('支付失败' . $e->getMessage() . '。like:' . $e->getLine());
|
|
|
|
|
self::setError('支付失败' . $e->getMessage());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取用户常用购买记录
|
|
|
|
|
*/
|
|
|
|
|
public static function frequentlyPurchase($params)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$goods_id = StoreOrderCartInfo::where('uid', Request()->userId)->page($params['page_no'])->limit(50)->column('product_id');
|
2024-06-04 15:21:14 +08:00
|
|
|
|
if (!$goods_id) {
|
2024-06-03 11:25:05 +08:00
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
$goods_arr = array_unique($goods_id);
|
|
|
|
|
$select = StoreProduct::where('id', 'in', $goods_arr)->with('unitName')->field('id,name,sell,imgs,unit')->select();
|
|
|
|
|
return $select->toArray();
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
self::setError($e->getMessage());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-04 15:21:14 +08:00
|
|
|
|
public static function purchaseAgain($order_id)
|
|
|
|
|
{
|
|
|
|
|
$arr = StoreOrderCartInfo::where('oid', $order_id)->field('product_id,cart_num,staff_id')->select();
|
|
|
|
|
$data = [];
|
|
|
|
|
foreach ($arr as $k => $v) {
|
|
|
|
|
$data[$k]['product_id'] = $v['product_id'];
|
|
|
|
|
$unique = StoreProductAttrValue::where('product_id', $v['product_id'])->value('v');
|
|
|
|
|
$data[$k]['product_attr_unique'] = $unique;
|
|
|
|
|
$data[$k]['cart_num'] = $v['cart_num'];
|
|
|
|
|
$data[$k]['type'] = '';
|
|
|
|
|
$data[$k]['uid'] = Request()->userId;
|
|
|
|
|
$store_id = StoreProduct::where('id', $v['product_id'])->value('store_id');
|
|
|
|
|
$data[$k]['store_id'] = $store_id;
|
|
|
|
|
$data[$k]['staff_id'] = $v['staff_id'];
|
|
|
|
|
$data[$k]['add_time'] = time();
|
|
|
|
|
$data[$k]['combination_id'] = 0;
|
|
|
|
|
$data[$k]['seckill_id'] = 0;
|
|
|
|
|
$data[$k]['bargain_id'] = 0;
|
|
|
|
|
$data[$k]['discount_id'] = 0;
|
|
|
|
|
$data[$k]['status'] = 1;
|
|
|
|
|
$data[$k]['staff_id'] = 0;
|
|
|
|
|
$data[$k]['is_new'] = 0;
|
|
|
|
|
$data[$k]['is_del'] = 0;
|
|
|
|
|
$data[$k]['is_pay'] = 0;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
}
|
2024-06-04 15:21:14 +08:00
|
|
|
|
if ($data) {
|
|
|
|
|
(new Cart())->saveAll($data);
|
2024-06-03 11:25:05 +08:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function detail($params): array
|
|
|
|
|
{
|
2024-06-04 15:21:14 +08:00
|
|
|
|
$find = StoreOrder::where($params)->findOrEmpty()->toArray();
|
|
|
|
|
if ($find) {
|
2024-06-03 11:25:05 +08:00
|
|
|
|
|
2024-06-04 15:21:14 +08:00
|
|
|
|
$find['goods_list'] = StoreOrderCartInfo::where('oid', $find['id'])
|
2024-06-03 11:25:05 +08:00
|
|
|
|
->with('goodsName')
|
2024-06-04 15:21:14 +08:00
|
|
|
|
->field('product_id,cart_num nums')->select()->each(function ($item) {
|
|
|
|
|
$item['msg'] = '预计48小时发货';
|
|
|
|
|
$item['unit_name'] = StoreProductUnit::where('id', $item['unit'])->value('name');
|
2024-06-03 11:25:05 +08:00
|
|
|
|
});
|
2024-06-04 15:21:14 +08:00
|
|
|
|
$merchant = Merchant::where('mer_id', $find['merchant'])->field('mer_id,uid,mer_name,service_phone,mer_address')->find();
|
|
|
|
|
$merchant['real_name'] = User::where('id', $merchant['uid'])->value('real_name');
|
|
|
|
|
$find['merchant_info'] = $merchant;
|
2024-06-03 11:25:05 +08:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return $find;
|
|
|
|
|
}
|
2024-06-03 22:45:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//核销
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param $params
|
|
|
|
|
* @param $uid
|
|
|
|
|
* @return bool
|
|
|
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
|
|
|
* @throws \think\db\exception\DbException
|
|
|
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
|
|
|
* @author: codeliu
|
|
|
|
|
* @Time: 2024/6/3 22:42
|
|
|
|
|
*/
|
2024-06-04 15:21:14 +08:00
|
|
|
|
public static function writeOff($params, $uid): bool
|
2024-06-03 22:45:25 +08:00
|
|
|
|
{
|
2024-06-04 15:21:14 +08:00
|
|
|
|
$data = StoreOrder::with('store')->where([
|
|
|
|
|
'verify_code' => $params['verify_code'],
|
|
|
|
|
'uid' => $uid
|
|
|
|
|
])->find();
|
|
|
|
|
if (empty($data)) {
|
2024-06-03 22:45:25 +08:00
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
Db::startTrans();
|
|
|
|
|
try {
|
2024-06-04 15:21:14 +08:00
|
|
|
|
StoreOrder::update([
|
|
|
|
|
'status' => OrderEnum::RECEIVED_GOODS,
|
|
|
|
|
'update_time' => time(),
|
|
|
|
|
], ['id' => $data['id']]);
|
|
|
|
|
(new StoreOrderCartInfo())->update([
|
|
|
|
|
'writeoff_time' => time(),
|
|
|
|
|
'is_writeoff' => YesNoEnum::YES,
|
|
|
|
|
'update_time' => time(),
|
|
|
|
|
], ['oid' => $data['id']]);
|
|
|
|
|
$financeFlow = (new StoreFinanceFlowLogic)->getStoreOrder($data['id'], $data['store_id']);
|
|
|
|
|
if (!empty($financeFlow)) {
|
|
|
|
|
$capitalFlowLogic = new CapitalFlowLogic($data->store, 'store');
|
|
|
|
|
$capitalFlowLogic->storeIncome('store_order_income', 'order', $data['id'], $financeFlow['number']);
|
2024-06-03 22:45:25 +08:00
|
|
|
|
}
|
|
|
|
|
Db::commit();
|
|
|
|
|
return true;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
Db::rollback();
|
|
|
|
|
self::setError($e->getMessage());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2024-06-03 11:25:05 +08:00
|
|
|
|
}
|