You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

947 lines
31 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace app\integral\logic;
use app\base\logic\Freight;
use app\base\model\user\User;
use app\base\model\user\UserAddress;
use app\integral\model\IntegralCart;
use app\integral\model\IntegralConfig;
use app\integral\model\IntegralMy;
use app\integral\model\IntegralOrder;
use app\integral\model\IntegralOrderCheck;
use app\integral\model\IntegralOrderProduct;
use app\integral\model\IntegralProduct;
use app\integral\model\IntegralProductSku;
use app\integral\model\IntegralStore;
use app\integral\model\IntegralStoreChecker;
use app\money\logic\Money;
use Godruoyi\Snowflake\Snowflake;
use kdniao\Logistics;
use think\facade\Db;
use think\facade\Request;
class Order extends Base
{
/**
* 获取下单数据
* @param int $buy_type 购买类型 1--购物车 2--立即购买
* @param int $delivery_type 到货类型 1--邮寄 2--自提
* @param int $my_address_id 我的地址ID
* @param int $product_id buy_type=2时产品ID
* @param string $product_sku buy_type=2时产品SKU
* @param int $number buy_type=2时购买数量
* @date 2022-11-17
*/
public function getOrderReady($buy_type, $delivery_type, $my_address_id, $product_id, $product_sku, $number)
{
$freight_logic = new Freight();
$address_model = new UserAddress();
$config_model = new IntegralConfig();
$order_service = new \app\integral\service\Order();
// 获取购买的商品
$order_product = $order_service->getOrderProduct($buy_type, $product_id, $product_sku, $number);
if (empty($order_product)) {
return sendErrorArray(3001, '无有效商品');
}
// 判断商品类型是否一致
// 订单类型 1--实物 2--虚拟
$order_type = $order_product[0]['product_type'];
foreach ($order_product as $k => $v) {
if ($v['product_type'] != $order_type) {
return sendErrorArray(3002, '下单商品类型不一致');
}
}
// 虚拟物品不需要配送
if ($order_type == 2) {
$delivery_type = '';
} else {
if(empty($delivery_type)){
// 获取配送方式
$config = $config_model->getOneData([
['uid', '=', $this->mid]
], 'id,delivery_type');
$config['delivery_type'] = explode(',', $config['delivery_type']);
// 默认到货方式 1--邮寄 2--自提
$delivery_type = '';
if (in_array(2, $config['delivery_type'])) {
$delivery_type = 2;
}
if (in_array(1, $config['delivery_type'])) {
$delivery_type = 1;
}
}
}
$my_address = [];
if($delivery_type == 1){
// 获取我的地址 如果前台传了地址ID则获取选中地址否则获取默认地址
if (!empty($my_address_id)) {
// 获取指定地址
$my_address = $address_model->getAddress($my_address_id);
} else {
// 获取默认地址
$my_address = $address_model->getDefaultAddress();
}
}
// 商品总积分
$total_integral = 0;
// 商品总价钱
$total_price = 0;
// 运费
$freight = 0;
foreach ($order_product as $k => $v) {
// 总价钱 = 总价钱 + 产品价钱 * 数量
$total_price += $v['product_price'] * $v['number'];
// 总积分 = 总积分 + 产品积分 * 数量
$total_integral += $v['product_integral'] * $v['number'];
// 如果有地址,计算运费
if (!empty($my_address) && $delivery_type == 1) {
// 运费类型 1--统一运费 2--运费模板
if ($v['freight_type'] == 2) {
$freight += $freight_logic->getFreight($v['freight_id'], $v['weight'], $v['number'], $v['product_price'],
isset($my_address['province_id']) ? $my_address['province_id'] : '',
isset($my_address['city_id']) ? $my_address['city_id'] : '',
isset($my_address['area_id']) ? $my_address['area_id'] : '');
} else {
$freight += $v['freight_money'] * $v['number'];
}
}
unset($order_product[$k]['product_stock']);
unset($order_product[$k]['freight_type']);
unset($order_product[$k]['freight_id']);
unset($order_product[$k]['freight_money']);
unset($order_product[$k]['weight']);
}
// 是否满足整单免运费满足运费置0
if ($delivery_type == 1) {
$free_freight_limit = $config_model->getField('free_freight_limit');
if ($total_price >= $free_freight_limit) {
$freight = 0;
}
} else {
$freight = 0;
}
// 支付价钱
$pay_money = $total_price + $freight;
$r_data = [
// 选中地址
'my_address' => $my_address,
// 购买产品
'order_product' => $order_product,
// 总积分
'total_integral' => $total_integral,
// 总价钱
'total_price' => $total_price,
// 运费
'freight' => $freight,
// 实际付款
'pay_money' => round($pay_money, 2),
// 实际付积分
'pay_integral' => $total_integral,
// 订单类型 1--实物 2--虚拟
'order_type' => $order_type
];
return sendSuccessArray($r_data);
}
/**
* 提交订单
* @param int $buy_type 购买类型 1--购物车 2--立即购买
* @param int $delivery_type 到货类型 1--邮寄 2--自提
* @param int $my_address_id 我的地址ID
* @param int $store_id 门店ID
* @param int $product_id buy_type=2时产品ID
* @param string $product_sku buy_type=2时产品SKU
* @param int $number buy_type=2时购买数量
* @param int $pay_type 支付方式 0--不用支付 1--微信支付 2--支付宝支付 3--余额支付
* @param string $remark 备注
* @date 2022-11-18
*/
public function insertOrder($buy_type, $delivery_type, $my_address_id, $store_id, $product_id, $product_sku, $number, $pay_type, $remark)
{
$order_model = new IntegralOrder();
$order_product_model = new IntegralOrderProduct();
$cart_model = new IntegralCart();
$address_model = new UserAddress();
$product_model = new IntegralProduct();
$freight_logic = new Freight();
$config_model = new IntegralConfig();
$store_model = new IntegralStore();
$my_model = new IntegralMy();
$order_service = new \app\integral\service\Order();
$snow_flake_class = new Snowflake();
// 获取购买的商品
$order_product = $order_service->getOrderProduct($buy_type, $product_id, $product_sku, $number);
if (empty($order_product)) {
return sendErrorArray(3001, '无有效商品');
}
// 订单类型 1--实物 2--虚拟
$order_type = $order_product[0]['product_type'];
foreach ($order_product as $k => $v) {
// 判断商品类型是否一致
if ($v['product_type'] != $order_type) {
return sendErrorArray(3002, '下单商品类型不一致');
}
}
if ($order_type == 2) {
$delivery_type = '';
}
// 邮寄
if ($delivery_type == 1) {
// 获取指定地址
$my_address = $address_model->getAddress($my_address_id);
} else if ($delivery_type == 2) {
$store = $store_model->getOneData([
['id', '=', $store_id]
], 'id,name,address,lat,lng');
}
// 商品总积分
$total_integral = 0;
// 商品总价钱
$total_price = 0;
// 总数量
$total_number = 0;
// 运费
$freight = 0;
foreach ($order_product as $k => $v) {
if ($v['number'] > $v['product_stock']) {
return sendErrorArray(3003, $v['product_name'] . '商品' . $v['product_sku_name'] . '库存不足');
}
// 商品快照
$product_snapshot = $product_model->getOneData([
['id', '=', $v['product_id']]
])->toArray();
$order_product_data[] = [
'id' => $snow_flake_class->id(),
'uid' => $this->mid,
'product_id' => $v['product_id'],
'product_type' => $v['product_type'],
'product_name' => $v['product_name'],
'product_cover_img' => $v['product_cover_img'],
'is_product_spec_open' => $v['is_product_spec_open'],
'product_sku' => $v['product_sku'],
'product_sku_name' => $v['product_sku_name'],
'product_integral' => $v['product_integral'],
'product_price' => $v['product_price'],
'number' => $v['number'],
'total_integral' => $v['number'] * $v['product_integral'],
'total_price' => $v['number'] * $v['product_price'],
'product_snapshot' => serialize($product_snapshot)
];
// 总积分 = 总积分 + 产品积分 * 数量
$total_integral += $v['product_integral'] * $v['number'];
// 总价钱 = 总价钱 + 产品价钱 * 数量
$total_price += $v['product_price'] * $v['number'];
// 总数量 = 总数量 + 数量
$total_number += $v['number'];
// 邮寄时,计算运费
if ($delivery_type == 1) {
// 运费类型 1--统一运费 2--运费模板
if ($v['freight_type'] == 2) {
$freight += $freight_logic->getFreight($v['freight_id'], $v['weight'], $v['number'], $v['product_price'],
$my_address['province_id'], $my_address['city_id'], $my_address['area_id']);
} else {
$freight += $v['freight_money'] * $v['number'];
}
}
}
// 邮寄时是否满足整单免运费满足运费置0
if ($delivery_type == 1) {
$free_freight_limit = $config_model->getField('free_freight_limit');
if ($total_price >= $free_freight_limit) {
$freight = 0;
}
} else {
$freight = 0;
}
// 积分是否足够
$my_integral = $my_model->getMyIntegral($this->userId);
if ($my_integral['integral'] < $total_integral) {
return sendErrorArray(3004, '您的积分不足');
}
// 生成订单数据
$data = [
'uid' => $this->mid,
'user_agent' => $this->userAgent,
'user_id' => $this->userId,
'delivery_type' => $delivery_type,
'product_type' => $order_type,
'order_number' => $order_model->createOrderNumber('I'),
'total_integral' => $total_integral,
'total_price' => $total_price,
'total_number' => $total_number,
'freight' => $freight, //自提运费为0
'pay_integral' => $total_integral,
'pay_money' => $total_price + $freight,
'remark' => $remark,
'pay_type' => $pay_type,
'linkman' => $delivery_type == 1 ? $my_address['linkman'] : '',
'mobile_phone' => $delivery_type == 1 ? $my_address['mobile_phone'] : '',
'province' => $delivery_type == 1 ? $my_address['province'] : '',
'city' => $delivery_type == 1 ? $my_address['city'] : '',
'area' => $delivery_type == 1 ? $my_address['area'] : '',
'address' => $delivery_type == 1 ? $my_address['address'] : '',
'store_id' => $delivery_type == 2 ? $store['id'] : '',
'store_name' => $delivery_type == 2 ? $store['name'] : '',
'store_address' => $delivery_type == 2 ? $store['address'] : '',
'store_lat' => $delivery_type == 2 ? $store['lat'] : '',
'store_lng' => $delivery_type == 2 ? $store['lng'] : '',
'is_pay' => 0,
'status' => 1
];
// 特殊情况支付金额小于0时修改为0
if ($data['pay_money'] < 0) {
$data['pay_money'] = 0;
}
Db::startTrans();
// 存入订单总表
$order_id = $order_model->dataUpdate($data);
if (!$order_id) {
Db::rollback();
return sendErrorArray(3005, '生成总订单失败');
}
// 批量存入订单商品表
foreach ($order_product_data as $k => $v) {
$order_product_data[$k]['order_id'] = $order_id;
$order_product_data[$k]['create_time'] = time();
$order_product_data[$k]['update_time'] = time();
}
$res = $order_product_model->insertAll($order_product_data);
if (!$res) {
Db::rollback();
return sendErrorArray(3006, '生成订单商品失败');
}
// 购物车方式清空购物车
if ($buy_type == 1) {
$res = $cart_model->deleteCartSelectedProduct($this->userId);
if (!$res) {
Db::rollback();
return sendErrorArray(3007, '清空兑换车失败');
}
}
// 下单减少库存
foreach ($order_product as $k => $v) {
$res = $order_service->productStockChange($v['product_id'], $v['product_sku'], -$v['number']);
if ($res['code'] != 0) {
Db::rollback();
return $res;
}
}
Db::commit();
// 订单支付金额为0即不用支付
if ($data['pay_money'] == 0) {
Db::startTrans();
$res = $order_service->afterOrderPaySuccess($order_id);
if ($res['code'] != 0) {
Db::rollback();
return $res;
}
Db::commit();
return sendSuccessArray([
// 是否需要支付
'need_pay' => 0
]);
}
// 调起支付
$res = $order_service->createPayOrder($order_id);
if ($res['code'] != 0) {
return $res;
}
return $res;
}
/**
* 我的订单列表
* @param int $last_id 列表最后一条数据ID
* @param int $index 订单状态 0--所有 1--待支付 2--待发货 3--待收货 4--已完成
* @date 2022-11-20
*/
public function listMyOrder($last_id, $index)
{
$order_model = new IntegralOrder();
$where = [
['uid', '=', $this->mid],
['user_id', '=', $this->userId],
// 用户未删除
['is_user_delete', '=', 0]
];
// 在最后一条数据ID之前的订单
if (!empty($last_id)) {
$where[] = ['id', '<', $last_id];
}
// 订单状态 0--所有 1--待支付 2--待发货 3--待收货 4--已完成
if (!empty($index)) {
if ($index == 4) {
$where[] = ['status', '=', 5];
} else {
$where[] = ['status', '=', $index];
}
}
$filed = 'id,delivery_type,order_number,status,pay_money,pay_integral,delivery_code,store_name,store_address,store_lat,store_lng,total_number';
$list = $order_model->listMyOrderByLastId($where, $filed);
return sendSuccessArray([
'list' => $list
]);
}
/**
* 我的订单详情
* @param int $order_id 订单ID
* @param int $is_check_user 是否检查是不是用户自己的单0--不检查(订单核销时) 1--检查
* @date 2022-11-20
*/
public function getMyOrder($order_id, $is_check_user = 1)
{
$config_model = new IntegralConfig();
$order_model = new IntegralOrder();
$where = [
['id', '=', $order_id],
['uid', '=', $this->mid],
['is_user_delete', '=', 0]
];
if ($is_check_user == 1) {
$where[] = ['user_id', '=', $this->userId];
}
$field = 'id,order_number,delivery_type,delivery_code,product_type,status,pay_type,total_integral,total_price,freight,pay_integral,pay_money,remark
,create_time,pay_time,express_time,confirm_time,cancel_time
,linkman,mobile_phone,province,city,area,address,store_id,store_name,store_address,store_lat,store_lng';
$order = $order_model->getMyOrder($where, $field);
if (empty($order)) {
return sendErrorArray(3001, '订单不存在');
}
$order = $order->toArray();
$order['create_time'] = date("Y-m-d H:i", strtotime($order['create_time']));
if ($order['pay_time']) {
$order['pay_time'] = date("Y-m-d H:i", strtotime($order['pay_time']));
}
if ($order['express_time']) {
$order['express_time'] = date("Y-m-d H:i", strtotime($order['express_time']));
}
if ($order['confirm_time']) {
$order['confirm_time'] = date("Y-m-d H:i", strtotime($order['confirm_time']));
}
if ($order['cancel_time']) {
$order['cancel_time'] = date("Y-m-d H:i", strtotime($order['cancel_time']));
}
// 未付款状态下,获取自动取消订单倒计时
$order['cancel_rest_second'] = 0;
if ($order['status'] == 1) {
// 获取商城配置-X分钟自动取消订单
$order_cancel_minute = $config_model->getOneData([
['uid', '=', $this->mid]
], 'order_cancel_minute');
// 剩余X秒自动取消订单
$order['cancel_rest_second'] = strtotime($order['create_time']) + $order_cancel_minute * 60 - time();
}
return sendSuccessArray([
// 订单详情
'order' => $order
]);
}
/**
* 订单再支付
* @param int $order_id 订单ID
* @param int $pay_type 支付方式 1--微信支付 2--支付宝支付 3--余额支付
* @date 2022-11-21
*/
public function rePayOrder($order_id, $pay_type)
{
$order_model = new IntegralOrder();
$order_service = new \app\integral\service\Order();
$order = $order_model->getOneData([
['id', '=', $order_id]
], 'id,user_agent,status,order_number');
// 非待支付状态
if ($order['status'] != 1) {
return sendErrorArray(3001, '订单状态不支持支付');
}
// 查询单号是否支付
if ($pay_type == 1) {
$wxpay_param = get_wxpay_config_with_weixin($order['user_agent']);
$wxpay_class = new \tencent\wechat\pay\Wxpay($wxpay_param);
// 查询订单
$result = $wxpay_class->queryByOutTradeNumber($order['order_number']);
if ($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS') {
if ($result['trade_state'] == 'SUCCESS') {
return sendErrorArray(3002, '订单已支付');
}
}
}
Db::startTrans();
// 更新订单总表
$data_update = [
'id' => $order_id,
'pay_type' => $pay_type,
];
$order_id = $order_model->dataUpdate($data_update);
if (!$order_id) {
Db::rollback();
return sendErrorArray(4001, '生成总订单失败');
}
Db::commit();
// 调起支付
$res = $order_service->createPayOrder($order_id);
if ($res['code'] != 0) {
return $res;
}
return $res;
}
/**
* 订单取消
* @param int $order_id 订单ID
* @param int $type 1--用户操作 2--后台操作 3--定时
* @date 2022-11-21
*/
public function cancelOrder($order_id, $type = 1)
{
$order_model = new IntegralOrder();
$order_product_model = new IntegralOrderProduct();
$order_service = new \app\integral\service\Order();
// 获取订单信息
$order = $order_model->getOneData([
['id', '=', $order_id]
], 'id,user_id,status');
if (empty($order)) {
return sendErrorArray(3001, '订单不存在');
}
if ($type == 1 && $order['user_id'] != $this->userId) {
return sendErrorArray(3002, '非本人操作');
}
if ($order['status'] != 1) {
return sendErrorArray(3003, '订单状态有变化,请刷新后查看');
}
Db::startTrans();
// 更改订单状态
$data_update = [
'status' => 8,
'cancel_time' => time()
];
$res = $order_model->dataUpdate($data_update, [
['id', '=', $order_id]
]);
if (!$res) {
Db::rollback();
return sendErrorArray(3004, '取消失败');
}
// 查找订单产品
$order_product = $order_product_model->getAllData([
['order_id', '=', $order_id]
], 'id,product_id,product_sku,number')->toArray();
// 取消订单,产品增加库存
foreach ($order_product as $k => $v) {
$res = $order_service->productStockChange($v['product_id'], $v['product_sku'], $v['number']);
if ($res['code'] != 0) {
Db::rollback();
return $res;
}
}
Db::commit();
return sendSuccessArray([], '取消成功');
}
/**
* 订单提醒发货
* @param integer $order_id 订单ID
* @date 2022-11-21
*/
public function remindOrder($order_id)
{
$order_model = new IntegralOrder();
// 获取订单信息
$order = $order_model->getOneData([
['id', '=', $order_id]
], 'id,user_id,status');
if (empty($order)) {
return sendErrorArray(3001, '订单不存在');
}
if ($order['user_id'] != $this->userId) {
return sendErrorArray(3002, '非本人操作');
}
if ($order['status'] != 2) {
return sendErrorArray(3003, '订单状态不支持提醒发货');
}
// 更改订单状态
$data_update = [
'remind_time' => time()
];
$res = $order_model->dataUpdate($data_update, [
['id', '=', $order_id]
]);
if (!$res) {
return sendErrorArray(3004, '提醒发货失败');
}
return sendSuccessArray([], '已提醒店家尽快发货');
}
/**
* 订单确认收货
* @param integer $user_id $oprate_type==1时为用户ID $oprate_type==2时为后台登录账号ID
* @param integer $type 操作类型 1--用户操作 2--后台操作 3--定时操作
* @date 2022-11-20
*/
public function finishOrder($order_id, $type = 1)
{
$order_model = new IntegralOrder();
// 获取订单信息
$order = $order_model->getOneData([
['id', '=', $order_id]
], 'id,user_id,status');
if (empty($order)) {
return sendErrorArray(3001, '订单不存在');
}
if ($type == 1 && $order['user_id'] != $this->userId) {
return sendErrorArray(3002, '非本人操作');
}
if ($order['status'] != 3) {
return sendErrorArray(3003, '订单状态不支持确认收货');
}
Db::startTrans();
// 更改订单状态
$data_update = [
// 直接为已完成 暂时没有待评价状态
'status' => 5,
'confirm_time' => time()
];
$res = $order_model->dataUpdate($data_update, [
['id', '=', $order_id]
]);
if (!$res) {
Db::rollback();
return sendErrorArray(3004, '确认收货失败');
}
Db::commit();
return sendSuccessArray([], '确认收货成功');
}
/**
* 订单删除
* @param int $order_id 订单ID
* @param int $type 1--用户操作 2--后台操作
* @date 2022-11-21
*/
public function deleteOrder($order_id, $type = 1)
{
$order_model = new IntegralOrder();
// 获取订单信息
$order = $order_model->getOneData([
['id', '=', $order_id]
], 'id,user_id,status');
if (empty($order)) {
return sendErrorArray(3001, '订单不存在');
}
if ($type == 1 && $order['user_id'] != $this->userId) {
return sendErrorArray(3002, '非本人操作');
}
if (!($order['status'] == 8 || $order['status'] == 5)) {
return sendErrorArray(3003, '订单状态不支持删除');
}
// 更改订单状态
$data_update = [
'is_user_delete' => 1,
'user_delete_time' => time()
];
$res = $order_model->dataUpdate($data_update, [
['id', '=', $order_id]
]);
if (!$res) {
return sendErrorArray(3004, '删除失败');
}
return sendSuccessArray([], '删除成功');
}
/**
* 订单物流
* @date 2022-11-22
*/
public function getLogistics($order_id)
{
$order_model = new IntegralOrder();
$kdniao_param = get_kdniao_config();
$logistic_class = new Logistics($kdniao_param);
$where = [
['uid', '=', $this->mid],
['user_id', '=', $this->userId],
['is_user_delete', '=', 0],
['id', '=', $order_id]
];
// 查找订单
$field = 'id,order_number,total_number,express_name,express_number,express_code,province,city,area,address';
$order = $order_model->getMyOrder($where, $field);
if (empty($order)) {
return sendErrorArray(3001, '订单不存在');
}
$order = $order->toArray();
foreach ($order['integralOrderProduct'] as $k => $v) {
unset($order['integralOrderProduct'][$k]['is_product_spec_open']);
unset($order['integralOrderProduct'][$k]['product_type']);
unset($order['integralOrderProduct'][$k]['product_sku_name']);
}
// 查看物流
$result = $logistic_class->getLogistics($order['express_number'], $order['express_code']);
// 有错误
if ($result['Success'] != 'true') {
// 物流状态
$logistics['logistics_status'] = 0;
// 物流状态显示文本
$logistics['logistics_text'] = $result['Reason'];
// 物流轨迹
$logistics['logistics'] = [
[
'accept_date' => '',
'accept_time' => '',
'content' => '该订单编号暂时无法获取物流轨迹'
]
];
} else {
// 物流状态
$logistics['logistics_status'] = $result['State'];
// 物流状态显示文本
$logistics['logistics_text'] = $result['logistics_text'];
// 物流轨迹
$result['Traces'] = array_reverse($result['Traces']);
foreach ($result['Traces'] as $k => $v) {
$logistics['logistics'][$k]['accept_date'] = date('Y-m-d', strtotime($v['AcceptTime']));
$logistics['logistics'][$k]['accept_time'] = date('H:i:s', strtotime($v['AcceptTime']));
$logistics['logistics'][$k]['content'] = $v['AcceptStation'];
}
}
return sendSuccessArray([
// 订单信息
'order' => $order,
// 物流信息
'logistics' => $logistics
]);
}
/**
* 是否有核销权限
* @param int $order_id 订单ID
* @date 2022-11-20
*/
public function isCanWriteOffOrder($order_id)
{
$order_model = new IntegralOrder();
$checker_model = new IntegralStoreChecker();
// 获取订单信息
$order = $order_model->getOneData([
['id', '=', $order_id]
], 'id,store_id');
$checker = $checker_model->getOneData([
['store_id', '=', $order['store_id']],
['user_id', '=', $this->userId],
], 'id');
return sendSuccessArray([
// 是否有核销权限
'is_can_write_off' => empty($checker) ? 0 : 1
]);
}
/**
* 订单确认收货
* @param int $order_id 订单ID
* @param int $type 1--小程序 2--后台
* @date 2022-11-20
*/
public function writeOffOrder($order_id, $type = 1)
{
$order_model = new IntegralOrder();
$checker_model = new IntegralStoreChecker();
$check_model = new IntegralOrderCheck();
// 获取订单信息
$order = $order_model->getOneData([
['id', '=', $order_id]
], 'id,user_id,store_id,delivery_type,status');
if (empty($order)) {
return sendErrorArray(3001, '订单不存在');
}
if ($order['status'] != 3 || $order['delivery_type'] != 2) {
return sendErrorArray(3002, '订单状态不支持核销');
}
// 是否是该门店核销员
$checker = $checker_model->getOneData([
['store_id', '=', $order['store_id']],
['user_id', '=', $this->userId],
], 'id');
if (empty($checker)) {
return sendErrorArray(3003, '您没有权限操作该订单');
}
Db::startTrans();
// 更改订单状态
$data_update = [
// 直接为已完成 暂时没有待评价状态
'status' => 5,
'confirm_time' => time()
];
$res = $order_model->dataUpdate($data_update, [
['id', '=', $order_id]
]);
if (!$res) {
Db::rollback();
return sendErrorArray(3004, '确认收货失败');
}
$check_data = [
'uid' => $this->mid,
'user_id' => $type == 1 ? $this->userId : '',
'store_id' => $order['store_id'],
'order_id' => $order_id,
'type' => $type,
'system_loginer_id' => $type == 2 ? LID : ''
];
$res = $check_model->dataUpdate($check_data);
if (!$res) {
Db::rollback();
return sendErrorArray(3005, '核销失败');
}
Db::commit();
return sendSuccessArray([], '核销成功');
}
/**
* 获取自提地址列表
* @param string $lat 纬度
* @param string $lng 经度
* @param int $is_location 是否定位 0--没有 1--有
* @date 2022-11-17
*/
public function listStore($lat, $lng, $is_location)
{
$store_model = new IntegralStore();
// 门店列表
$where = [
['uid', '=', $this->mid],
['is_publish', '=', 1]
];
if ($is_location == 1) {
$field = 'id,name,address,ROUND(2 * asin(sqrt(pow(sin((lat * pi() / 180 - ' . $lat . ' * pi() / 180) / 2),2) +
cos(lat * pi() / 180) * cos( ' . $lat . ' * pi() / 180) * pow(sin((lng * pi() / 180 - ' . $lng . ' * pi() / 180) / 2),2))) * 6378.137,1) as distance';
$order = 'distance';
} else {
$field = 'id,name,address';
$order = 'id desc';
}
$store_list = $store_model->getAllData($where, $field, $order);
return sendSuccessArray([
// 门店列表
'store_list' => $store_list,
]);
}
}