Browse Source

流程管理

shish 5 years ago
parent
commit
1b49bb4cf6

+ 22 - 3
app/ghs/controllers/OrderController.php

@@ -52,7 +52,7 @@ class OrderController extends BaseController
 			$period = dateUtil::formatTime($searchTime, $startTime, $endTime);
 			$where['addTime'] = ['between', [$period['startTime'], $period['endTime']]];
 		}
-
+		
 		$data = OrderClass::getOrderList($where);
 		util::success($data);
 	}
@@ -251,7 +251,16 @@ class OrderController extends BaseController
 		$id = isset($get['id']) ? $get['id'] : 0;
 		$info = OrderClass::getOrderInfo($id);
 		OrderClass::valid($info, $this->shopId);
-		OrderClass::selfSend($info);
+		$connection = Yii::$app->db;
+		$transaction = $connection->beginTransaction();
+		try {
+			OrderClass::selfSend($info);
+			$transaction->commit();
+		} catch (\Exception $exception) {
+			$transaction->rollBack();
+			Yii::info("本店送操作报错:" . $exception->getMessage());
+			util::fail('操作失败');
+		}
 		util::complete();
 	}
 	
@@ -281,9 +290,19 @@ class OrderController extends BaseController
 		$id = isset($get['id']) ? $get['id'] : 0;
 		$info = OrderClass::getOrderInfo($id);
 		OrderClass::valid($info, $this->shopId);
+		$connection = Yii::$app->db;
+		$transaction = $connection->beginTransaction();
+		try {
+			OrderClass::reach($info);
+			$transaction->commit();
+		} catch (\Exception $exception) {
+			$transaction->rollBack();
+			Yii::info("送达操作报错:" . $exception->getMessage());
+			util::fail('操作失败');
+		}
 		util::complete();
 	}
-	
+
 	//快捷付款订单
 	public function actionFastPay()
 	{

+ 349 - 342
biz-ghs/order/classes/OrderClass.php

@@ -15,346 +15,353 @@ use bizGhs\base\classes\BaseClass;
 
 class OrderClass extends BaseClass
 {
-
-    public static $baseFile = '\bizGhs\order\models\Order';
-
-    //已完成
-    const ORDER_STATUS_COMPLETE = 6;
-    //已取消
-    const ORDER_STATUS_CANCEL = 5;
-    //待通知
-    const ORDER_STATUS_UN_NOTICE = 4;
-    //配送中
-    const ORDER_STATUS_SENDING = 3;
-    //待配送
-    const ORDER_STATUS_UN_SEND = 2;
-    //待付款,待确认
-    const ORDER_STATUS_UN_PAY = 1;
-
-    //未确认
-    const SEND_TYPE_UNKNOWN = 1;
-    //自取
-    const SEND_TYPE_NO = 2;
-    //自己送
-    const SEND_TYPE_MYSELF = 3;
-    //快递送,第三方配送
-    const SEND_TYPE_THIRD = 4;
-
-    //待付款,待确认
-    const PAY_STATUS_UN_PAY = 1;
-    //已付款
-    const PAY_STATUS_HAS_PAY = 2;
-
-    //待配送
-    const SEND_STATUS_UN_SEND = 1;
-    //配送中
-    const SEND_STATUS_SENDING = 2;
-    //配送完成
-    const SEND_STATUS_COMPLETE = 3;
-
-
-    //订单总流程数
-    const TOTAL_FLOW = 3;
-
-    //添加订单 shish 2019.12.5
-    public static function addOrder($data)
-    {
-        $merchantId = $data['merchantId'] ?? 0;
-        $month = date("Ym");
-        $orderSn = orderSn::getGhsOrderSn();
-        $data['orderSn'] = $orderSn;
-        $data['payStatus'] = self::PAY_STATUS_UN_PAY;
-
-        //花材列表
-        $product = $data['product'];
-        OrderItemClass::replace($orderSn, $product);
-
-        //将花店每月的总订单数作为编号
-        $riseNum = StatOrderCountClass::addOrder($month, $merchantId);
-        $data['sendNum'] = $riseNum;
-        $data['num'] = 1;
-        $data['smallNum'] = 1;
-        $data['sendTime'] = isset($data['sendTime']) && !empty($data['sendTime']) ? $data['sendTime'] : '0000-00-00 00:00:00';
-        //订单30分钟后过期
-        $data['deadline'] = date("Y-m-d H:i:s", (time() + 1800));
-        $data['sendCost'] = isset($data['sendCost']) && is_numeric($data['sendCost']) ? $data['sendCost'] : 0;
-        $return = self::add($data);
-        $orderId = $return['id'];
-
-        //全部订单+1,待付款订单+1
-        $merchantAsset = MerchantAssetClass::getByMerchantId($merchantId, true);
-        $merchantAsset->unPayOrder += 1;
-        $merchantAsset->totalOrder += 1;
-        $merchantAsset->save();
-
-        //增加下单流程
-        $payTime = date("Y-m-d H:i:s");
-        $sendData = ['orderId' => $orderId, 'orderSn' => $orderSn, 'payTime' => $payTime];
-        OrderSendClass::placeOrder($sendData);
-
-        //扣库存 2021.2.23 linqh
-        foreach ($product as $key => $val) {
-            ProductClass::decreaseStock($val['productId'], $val['num'], $val['smallNum']);
-        }
-        return $return;
-    }
-
-    //根据订单编号查询 shish 2021.19
-    public static function getByOrderSn($orderSn)
-    {
-        return self::getByCondition(['orderSn' => $orderSn]);
-    }
-
-    //订单列表 shish 2021.1.19
-    public static function getOrderList($where)
-    {
-        $data = self::getList('*', $where, 'addTime DESC');
-        $data['list'] = self::groupOrder($data['list'], true, false, false, false, true);
-        $data['allNum'] = 0;
-        $data['unPayNum'] = 0;
-        $data['unSendNum'] = 0;
-        $data['sendingNum'] = 0;
-        $data['finishNum'] = 0;
-        return $data;
-    }
-
-    //显示操作按钮
-    public static function getShowButton($showButton, $isList, $order)
-    {
-        if ($showButton == false) {
-            return [];
-        }
-        //列表页显示的按钮
-        if ($isList) {
-            $item = ['type' => 'item', 'show' => 1, 'disable' => 1];
-            $send = ['type' => 'send', 'show' => 1, 'disable' => 0];
-            $selfGet = ['type' => 'selfGet', 'show' => 1, 'disable' => 1];
-            if (in_array($order['status'], [self::ORDER_STATUS_UN_PAY, self::ORDER_STATUS_UN_SEND])) {
-                //待付款和待配送订单,改花材按钮才能点击
-                $item['disable'] = 0;
-            }
-            if ($order['sendType'] == self::SEND_TYPE_NO) {
-                //自取订单,发货按钮不可点
-                $send['disable'] = 1;
-            }
-            if ($order['sendType'] == self::SEND_TYPE_UNKNOWN) {
-                //只有未确认配送方式的订单才可点击自取
-                $selfGet['disable'] = 0;
-            }
-            return [$item, $send, $selfGet];
-        }
-
-        //待确认订单显示延期付和已付款
-        if ($order['status'] == OrderClass::ORDER_STATUS_UN_PAY) {
-            $debtPay = ['type' => 'debtPay', 'show' => 1, 'disable' => 0];
-            $hasPay = ['type' => 'hasPay', 'show' => 1, 'disable' => 0];
-            return [$debtPay, $hasPay];
-        }
-
-        //待配送订单显示打印、发货和自取
-        if ($order['status'] == OrderClass::ORDER_STATUS_UN_SEND) {
-            //没有花材的订单按钮全部置灰色不可点
-            $print = ['type' => 'print', 'show' => 1, 'disable' => 1];
-            $item = ['type' => 'item', 'show' => 1, 'disable' => 1];
-            $selfGet = ['type' => 'selfGet', 'show' => 1, 'disable' => 1];
-            $send = ['type' => 'send', 'show' => 1, 'disable' => 1];
-            if ($order['hasItem'] == 2) {
-                return [$print, $item, $selfGet, $send];
-            }
-            $print['disable'] = 0;
-            $selfGet['disable'] = 0;
-            $send['disable'] = 0;
-            $item['disable'] = 0;
-            return [$print, $item, $selfGet, $send];
-        }
-        //配送中显示按钮
-        if ($order['status'] == OrderClass::ORDER_STATUS_SENDING) {
-            $print = ['type' => 'print', 'show' => 1, 'disable' => 1];
-            $send = ['type' => 'send', 'show' => 1, 'disable' => 1];
-            return [$print, $send];
-        }
-        if ($order['status'] == OrderClass::ORDER_STATUS_COMPLETE) {
-            $print = ['type' => 'print', 'show' => 1, 'disable' => 1];
-            $send = ['type' => 'send', 'show' => 1, 'disable' => 1];
-            //自取订单不显示发货按钮
-            if ($order['sendType'] == self::SEND_TYPE_NO) {
-                $send['show'] = 0;
-            }
-            return [$print, $send];
-        }
-        return [];
-    }
-
-    //显示进度 shish 2021.3.1
-    public static function getShowProgress($showProgress, $order)
-    {
-        if ($showProgress == false) {
-            return [];
-        }
-        $create = ['name' => '创建', 'complete' => 1];
-        $unConfirm = ['name' => '待确认', 'complete' => 0];
-        if ($order['status'] > 0) {
-            $unConfirm['complete'] = 1;
-        }
-        $out = ['name' => '出库', 'complete' => 0];
-        if ($order['status'] > 1) {
-            $out['complete'] = 1;
-        }
-        return [$create, $unConfirm, $out];
-    }
-
-    public static function getShowItem($showItem, $order)
-    {
-        if ($showItem == false) {
-            return ['list' => [], 'itemStat' => []];
-        }
-        $orderSn = $order['orderSn'];
-        $list = OrderItemClass::getOrderItem($orderSn);
-        $totalPrice = 0;
-        $totalBigNum = 0;
-        $totalSmallNum = 0;
-        $kind = 0;
-        $itemStat = [];
-        if (!empty($list)) {
-            foreach ($list as $key => $val) {
-                $list[$key]['property'] = $val['rank'] . '级';
-                $price = $val['price'];
-                $totalPrice = stringUtil::calcAdd($totalPrice, $price);
-                $kind++;
-                $currentBigNum = $val['bigNum'];
-                $currentSmallNum = $val['smallNum'];
-                $totalBigNum = stringUtil::calcAdd($totalBigNum, $currentBigNum);
-                $totalSmallNum = stringUtil::calcAdd($totalSmallNum, $currentSmallNum);
-            }
-            $itemStat = ['kind' => $kind, 'bigNum' => $totalBigNum, 'smallNun' => $totalSmallNum, 'totalPrice' => $totalPrice];
-        }
-        return ['list' => $list, 'itemStat' => $itemStat];
-    }
-
-    //整合订单员工和供货商等信息 shish 2021.1.19
-    //$isList 是否列表页
-    public static function groupOrder($list, $showButton = false, $showProgress = false, $showItem = false, $showExpress = false, $isList = false)
-    {
-        if (empty($list)) {
-            return $list;
-        }
-
-        $customIds = array_unique(array_filter(array_column($list, 'customId')));
-        $customInfo = CustomClass::getCustomByIds($customIds);
-
-        $adminIds = array_unique(array_filter(array_column($list, 'adminId')));
-        $adminInfo = AdminClass::getAdminByIds($adminIds, null, 'id');
-
-        foreach ($list as $key => $val) {
-            $adminId = $val['adminId'] ?? 0;
-            $list[$key]['adminName'] = $adminInfo[$adminId]['adminName'] ?? '';
-            $customId = $val['customId'] ?? 0;
-            $list[$key]['customName'] = $customInfo[$customId]['name'] ?? '';
-            $list[$key]['customAvatar'] = $customInfo[$customId]['smallAvatar'] ?? '';
-            $list[$key]['customMobile'] = $customInfo[$customId]['mobile'] ?? '';
-            $list[$key]['customAddress'] = $customInfo[$customId]['address'] ?? '';
-            //显示列表页的操作按钮
-            $list[$key]['buttonList'] = self::getShowButton($showButton, $isList, $val);
-            //显示进度条
-            $list[$key]['progress'] = self::getShowProgress($showProgress, $val);
-            //显示产品
-            $showItem = self::getShowItem($showItem, $val);
-            $list[$key]['product'] = $showItem['list'];
-            $list[$key]['productStat'] = $showItem['itemStat'];
-
-            //显示重选花材按钮
-            $showResetItem = 1;
-            //配送中和已完成的不显示重选花材按钮
-            if (in_array($val['sendStatus'], [self::SEND_STATUS_SENDING, self::SEND_STATUS_COMPLETE])) {
-                $showResetItem = 0;
-            }
-            $list[$key]['showResetItem'] = $showResetItem;
-            //获取配送进展
-            $list[$key]['expressProgress'] = OrderExpressClass::getProgress($showExpress, $val);
-        }
-        return $list;
-    }
-
-    //订单的验证 shish 2021.3.2
-    public static function valid($info, $shopId)
-    {
-        if (empty($info)) {
-            util::fail('没有找到订单');
-        }
-        if (isset($info['shopId']) && $info['shopId'] == $shopId) {
-            return true;
-        }
-        util::fail('没有权限操作的订单');
-    }
-
-    //获取订单详情 shish 2021.1.21
-    public static function getOrderInfo($id, $showButton = false, $showProgress = false, $showItem = false, $showExpress = false, $isList = false)
-    {
-        $info = self::getById($id);
-        if (empty($info)) {
-            util::fail('没有找到订单');
-        }
-        $respond = self::groupOrder([$info], $showButton, $showProgress, $showItem, $showExpress, $isList);
-        return current($respond);
-    }
-
-    //订单到期未付款未确认的订单置成取消状态 shish 2021.1.23
-    public static function setExpire($order)
-    {
-        $now = time();
-        if (isset($order['deadline']) && $now > $order['deadline']) {
-            if ($order['status'] == self::ORDER_STATUS_UN_PAY) {
-                $id = $order['id'];
-                self::updateById($id, ['status' => self::ORDER_STATUS_CANCEL]);
-            }
-        }
-    }
-
-    //本店送 shish 2021.1.24
-    public static function selfSend($info)
-    {
-        if (isset($info['status']) == false || $info['status'] != self::ORDER_STATUS_UN_PAY) {
-            util::fail('订单不是待配送状态!');
-        }
-        if (isset($info['status']) == false || $info['status'] != self::ORDER_STATUS_UN_SEND) {
-            util::fail('订单不是待配送状态');
-        }
-        $id = $info['id'];
-        self::updateById($id, [
-            'status' => self::ORDER_STATUS_SENDING,
-            'sendType' => self::SEND_TYPE_MYSELF,
-        ]);
-    }
-
-    //自取和免发货流程的处理 shish 2021.1.24
-    public static function withoutSend($order)
-    {
-        $id = $order['id'];
-        if ($order['status'] == self::ORDER_STATUS_COMPLETE) {
-            util::fail('订单已完成');
-        }
-
-        //订单状态变更
-        self::updateById($id, ['sendType' => self::SEND_TYPE_NO, 'totalFlow' => OrderClass::TOTAL_FLOW, 'currentFlow' => OrderClass::TOTAL_FLOW]);
-        self::complete($order, self::TOTAL_FLOW);
-
-        OrderSendClass::withoutSend($order);
-
-        //待发货订单-1,完成订单+1
-        $merchantId = $order['merchantId'];
-        $asset = MerchantAssetClass::getByMerchantId($merchantId, true);
-        $asset->finishOrder += 1;
-        $asset->unSendOrder -= 1;
-        $asset->save();
-
-        return self::TOTAL_FLOW;
-    }
-
-    //订单完成 shish 2020.3.12
-    public static function complete($order, $currentFlow)
-    {
-        $id = $order['id'];
-        self::updateById($id, ['status' => OrderClass::ORDER_STATUS_COMPLETE, 'currentFlow' => $currentFlow]);
-    }
-
+	
+	public static $baseFile = '\bizGhs\order\models\Order';
+	
+	//已退款
+	const ORDER_STATUS_REFUND = 6;
+	//已取消
+	const ORDER_STATUS_CANCEL = 5;
+	//已完成
+	const ORDER_STATUS_COMPLETE = 4;
+	//配送中
+	const ORDER_STATUS_SENDING = 3;
+	//待配送
+	const ORDER_STATUS_UN_SEND = 2;
+	//待付款,待确认
+	const ORDER_STATUS_UN_PAY = 1;
+	
+	//未确认
+	const SEND_TYPE_UNKNOWN = 1;
+	//自取
+	const SEND_TYPE_NO = 2;
+	//自己送
+	const SEND_TYPE_MYSELF = 3;
+	//快递送
+	const SEND_TYPE_THIRD = 4;
+	
+	//待付款,待确认
+	const PAY_STATUS_UN_PAY = 1;
+	//已付款
+	const PAY_STATUS_HAS_PAY = 2;
+	
+	//待配送
+	const SEND_STATUS_UN_SEND = 1;
+	//配送中
+	const SEND_STATUS_SENDING = 2;
+	//配送完成
+	const SEND_STATUS_COMPLETE = 3;
+	
+	//订单总流程数
+	const TOTAL_FLOW = 3;
+	
+	//添加订单 shish 2019.12.5
+	public static function addOrder($data)
+	{
+		$merchantId = $data['merchantId'] ?? 0;
+		$month = date("Ym");
+		$orderSn = orderSn::getGhsOrderSn();
+		$data['orderSn'] = $orderSn;
+		$data['payStatus'] = self::PAY_STATUS_UN_PAY;
+		
+		//花材列表
+		$product = $data['product'];
+		OrderItemClass::replace($orderSn, $product);
+		
+		//将花店每月的总订单数作为编号
+		$riseNum = StatOrderCountClass::addOrder($month, $merchantId);
+		$data['sendNum'] = $riseNum;
+		$data['num'] = 1;
+		$data['smallNum'] = 1;
+		$data['sendTime'] = isset($data['sendTime']) && !empty($data['sendTime']) ? $data['sendTime'] : '0000-00-00 00:00:00';
+		//订单30分钟后过期
+		$data['deadline'] = date("Y-m-d H:i:s", (time() + 1800));
+		$data['sendCost'] = isset($data['sendCost']) && is_numeric($data['sendCost']) ? $data['sendCost'] : 0;
+		$return = self::add($data);
+		$orderId = $return['id'];
+		
+		//全部订单+1,待付款订单+1
+		$merchantAsset = MerchantAssetClass::getByMerchantId($merchantId, true);
+		$merchantAsset->unPayOrder += 1;
+		$merchantAsset->totalOrder += 1;
+		$merchantAsset->save();
+		
+		//增加下单流程
+		$payTime = date("Y-m-d H:i:s");
+		$sendData = ['orderId' => $orderId, 'orderSn' => $orderSn, 'payTime' => $payTime];
+		OrderSendClass::placeOrder($sendData);
+		
+		//扣库存 2021.2.23 linqh
+		foreach ($product as $key => $val) {
+			ProductClass::decreaseStock($val['productId'], $val['num'], $val['smallNum']);
+		}
+		return $return;
+	}
+	
+	//根据订单编号查询 shish 2021.19
+	public static function getByOrderSn($orderSn)
+	{
+		return self::getByCondition(['orderSn' => $orderSn]);
+	}
+	
+	//订单列表 shish 2021.1.19
+	public static function getOrderList($where)
+	{
+		$data = self::getList('*', $where, 'addTime DESC');
+		$data['list'] = self::groupOrder($data['list'], true, false, false, false, true);
+		$data['allNum'] = 0;
+		$data['unPayNum'] = 0;
+		$data['unSendNum'] = 0;
+		$data['sendingNum'] = 0;
+		$data['finishNum'] = 0;
+		return $data;
+	}
+	
+	//显示操作按钮
+	public static function getShowButton($showButton, $isList, $order)
+	{
+		if ($showButton == false) {
+			return [];
+		}
+		//列表页显示的按钮
+		if ($isList) {
+			$item = ['type' => 'item', 'show' => 1, 'disable' => 1];
+			$send = ['type' => 'send', 'show' => 1, 'disable' => 0];
+			$selfGet = ['type' => 'selfGet', 'show' => 1, 'disable' => 1];
+			if (in_array($order['status'], [self::ORDER_STATUS_UN_PAY, self::ORDER_STATUS_UN_SEND])) {
+				//待付款和待配送订单,改花材按钮才能点击
+				$item['disable'] = 0;
+			}
+			if ($order['sendType'] == self::SEND_TYPE_NO) {
+				//自取订单,发货按钮不可点
+				$send['disable'] = 1;
+			}
+			if ($order['sendType'] == self::SEND_TYPE_UNKNOWN) {
+				//只有未确认配送方式的订单才可点击自取
+				$selfGet['disable'] = 0;
+			}
+			return [$item, $send, $selfGet];
+		}
+		
+		//待确认订单显示延期付和已付款
+		if ($order['status'] == OrderClass::ORDER_STATUS_UN_PAY) {
+			$debtPay = ['type' => 'debtPay', 'show' => 1, 'disable' => 0];
+			$hasPay = ['type' => 'hasPay', 'show' => 1, 'disable' => 0];
+			return [$debtPay, $hasPay];
+		}
+		
+		//待配送订单显示打印、发货和自取
+		if ($order['status'] == OrderClass::ORDER_STATUS_UN_SEND) {
+			//没有花材的订单按钮全部置灰色不可点
+			$print = ['type' => 'print', 'show' => 1, 'disable' => 1];
+			$item = ['type' => 'item', 'show' => 1, 'disable' => 1];
+			$selfGet = ['type' => 'selfGet', 'show' => 1, 'disable' => 1];
+			$send = ['type' => 'send', 'show' => 1, 'disable' => 1];
+			if ($order['hasItem'] == 2) {
+				return [$print, $item, $selfGet, $send];
+			}
+			$print['disable'] = 0;
+			$selfGet['disable'] = 0;
+			$send['disable'] = 0;
+			$item['disable'] = 0;
+			return [$print, $item, $selfGet, $send];
+		}
+		//配送中显示按钮
+		if ($order['status'] == OrderClass::ORDER_STATUS_SENDING) {
+			$print = ['type' => 'print', 'show' => 1, 'disable' => 1];
+			$send = ['type' => 'send', 'show' => 1, 'disable' => 1];
+			return [$print, $send];
+		}
+		if ($order['status'] == OrderClass::ORDER_STATUS_COMPLETE) {
+			$print = ['type' => 'print', 'show' => 1, 'disable' => 1];
+			$send = ['type' => 'send', 'show' => 1, 'disable' => 1];
+			//自取订单不显示发货按钮
+			if ($order['sendType'] == self::SEND_TYPE_NO) {
+				$send['show'] = 0;
+			}
+			return [$print, $send];
+		}
+		return [];
+	}
+	
+	//显示进度 shish 2021.3.1
+	public static function getShowProgress($showProgress, $order)
+	{
+		if ($showProgress == false) {
+			return [];
+		}
+		$create = ['name' => '创建', 'complete' => 1];
+		$unConfirm = ['name' => '待确认', 'complete' => 0];
+		if ($order['status'] > 0) {
+			$unConfirm['complete'] = 1;
+		}
+		$out = ['name' => '出库', 'complete' => 0];
+		if ($order['status'] > 1) {
+			$out['complete'] = 1;
+		}
+		return [$create, $unConfirm, $out];
+	}
+	
+	public static function getShowItem($showItem, $order)
+	{
+		if ($showItem == false) {
+			return ['list' => [], 'itemStat' => []];
+		}
+		$orderSn = $order['orderSn'];
+		$list = OrderItemClass::getOrderItem($orderSn);
+		$totalPrice = 0;
+		$totalBigNum = 0;
+		$totalSmallNum = 0;
+		$kind = 0;
+		$itemStat = [];
+		if (!empty($list)) {
+			foreach ($list as $key => $val) {
+				$list[$key]['property'] = $val['rank'] . '级';
+				$price = $val['price'];
+				$totalPrice = stringUtil::calcAdd($totalPrice, $price);
+				$kind++;
+				$currentBigNum = $val['bigNum'];
+				$currentSmallNum = $val['smallNum'];
+				$totalBigNum = stringUtil::calcAdd($totalBigNum, $currentBigNum);
+				$totalSmallNum = stringUtil::calcAdd($totalSmallNum, $currentSmallNum);
+			}
+			$itemStat = ['kind' => $kind, 'bigNum' => $totalBigNum, 'smallNun' => $totalSmallNum, 'totalPrice' => $totalPrice];
+		}
+		return ['list' => $list, 'itemStat' => $itemStat];
+	}
+	
+	//整合订单员工和供货商等信息 shish 2021.1.19
+	//$isList 是否列表页
+	public static function groupOrder($list, $showButton = false, $showProgress = false, $showItem = false, $showExpress = false, $isList = false)
+	{
+		if (empty($list)) {
+			return $list;
+		}
+		
+		$customIds = array_unique(array_filter(array_column($list, 'customId')));
+		$customInfo = CustomClass::getCustomByIds($customIds);
+		
+		$adminIds = array_unique(array_filter(array_column($list, 'adminId')));
+		$adminInfo = AdminClass::getAdminByIds($adminIds, null, 'id');
+		
+		foreach ($list as $key => $val) {
+			$adminId = $val['adminId'] ?? 0;
+			$list[$key]['adminName'] = $adminInfo[$adminId]['adminName'] ?? '';
+			$customId = $val['customId'] ?? 0;
+			$list[$key]['customName'] = $customInfo[$customId]['name'] ?? '';
+			$list[$key]['customAvatar'] = $customInfo[$customId]['smallAvatar'] ?? '';
+			$list[$key]['customMobile'] = $customInfo[$customId]['mobile'] ?? '';
+			$list[$key]['customAddress'] = $customInfo[$customId]['address'] ?? '';
+			//显示列表页的操作按钮
+			$list[$key]['buttonList'] = self::getShowButton($showButton, $isList, $val);
+			//显示进度条
+			$list[$key]['progress'] = self::getShowProgress($showProgress, $val);
+			//显示产品
+			$showItem = self::getShowItem($showItem, $val);
+			$list[$key]['product'] = $showItem['list'];
+			$list[$key]['productStat'] = $showItem['itemStat'];
+			
+			//显示重选花材按钮
+			$showResetItem = 1;
+			//配送中和已完成的不显示重选花材按钮
+			if (in_array($val['sendStatus'], [self::SEND_STATUS_SENDING, self::SEND_STATUS_COMPLETE])) {
+				$showResetItem = 0;
+			}
+			$list[$key]['showResetItem'] = $showResetItem;
+			//获取配送进展
+			$list[$key]['expressProgress'] = OrderExpressClass::getProgress($showExpress, $val);
+		}
+		return $list;
+	}
+	
+	//订单的验证 shish 2021.3.2
+	public static function valid($info, $shopId)
+	{
+		if (empty($info)) {
+			util::fail('没有找到订单');
+		}
+		if (isset($info['shopId']) && $info['shopId'] == $shopId) {
+			return true;
+		}
+		util::fail('没有权限操作的订单');
+	}
+	
+	//获取订单详情 shish 2021.1.21
+	public static function getOrderInfo($id, $showButton = false, $showProgress = false, $showItem = false, $showExpress = false, $isList = false)
+	{
+		$info = self::getById($id);
+		if (empty($info)) {
+			util::fail('没有找到订单');
+		}
+		$respond = self::groupOrder([$info], $showButton, $showProgress, $showItem, $showExpress, $isList);
+		return current($respond);
+	}
+	
+	//订单到期未付款未确认的订单置成取消状态 shish 2021.1.23
+	public static function setExpire($order)
+	{
+		$now = time();
+		if (isset($order['deadline']) && $now > $order['deadline']) {
+			if ($order['status'] == self::ORDER_STATUS_UN_PAY) {
+				$id = $order['id'];
+				self::updateById($id, ['status' => self::ORDER_STATUS_CANCEL]);
+			}
+		}
+	}
+	
+	//确认送达 shish 2021.3.4
+	public static function reach($order)
+	{
+		if ($order['status'] != OrderClass::ORDER_STATUS_SENDING) {
+			util::fail('订单没有在配送状态');
+		}
+		self::updateById($id, ['status' => self::ORDER_STATUS_COMPLETE, 'totalFlow' => OrderClass::TOTAL_FLOW, 'currentFlow' => OrderClass::TOTAL_FLOW]);
+		OrderSendClass::reach($order);
+	}
+
+	//本店送 shish 2021.1.24
+	public static function selfSend($info)
+	{
+		if ($info['status'] == self::ORDER_STATUS_UN_PAY) {
+			util::fail('订单未付款');
+		}
+		if ($info['status'] != self::ORDER_STATUS_UN_SEND) {
+			util::fail('不是待配送订单');
+		}
+		$id = $info['id'];
+		self::updateById($id, ['status' => self::ORDER_STATUS_SENDING, 'sendType' => self::SEND_TYPE_MYSELF,]);
+		OrderSendClass::selfSend($info);
+	}
+	
+	//自取和免发货流程的处理 shish 2021.1.24
+	public static function withoutSend($order)
+	{
+		$id = $order['id'];
+		if ($order['status'] == self::ORDER_STATUS_COMPLETE) {
+			util::fail('订单已完成');
+		}
+		
+		//订单状态变更
+		self::updateById($id, ['sendType' => self::SEND_TYPE_NO, 'totalFlow' => OrderClass::TOTAL_FLOW, 'currentFlow' => OrderClass::TOTAL_FLOW]);
+		self::complete($order, self::TOTAL_FLOW);
+		
+		OrderSendClass::withoutSend($order);
+		
+		//待发货订单-1,完成订单+1
+		$merchantId = $order['merchantId'];
+		$asset = MerchantAssetClass::getByMerchantId($merchantId, true);
+		$asset->finishOrder += 1;
+		$asset->unSendOrder -= 1;
+		$asset->save();
+		
+		return self::TOTAL_FLOW;
+	}
+	
+	//订单完成 shish 2020.3.12
+	public static function complete($order, $currentFlow)
+	{
+		$id = $order['id'];
+		self::updateById($id, ['status' => OrderClass::ORDER_STATUS_COMPLETE, 'currentFlow' => $currentFlow]);
+	}
+	
 }

+ 103 - 77
biz-ghs/order/classes/OrderSendClass.php

@@ -7,83 +7,109 @@ use common\components\util;
 
 class OrderSendClass extends BaseClass
 {
+	
+	public static $baseFile = '\bizGhs\order\models\OrderSend';
+	
+	//流程键名与ID关系
+	const ACTION_RELATION = ['placeOrder' => 10, 'deliver' => 30, 'reach' => 40];
+	const ACTION_LIST = [
+		10 => ['name' => '下单', 'sign' => 'placeOrder'],
+		30 => ['name' => '发货', 'sign' => 'deliver'],
+		40 => ['name' => '送达', 'sign' => 'reach']
+	];
+	
+	//自己送和本店送 shish 2021.3.4
+	public static function selfSend($order)
+	{
+		$orderSn = $order['orderSn'];
+		$action_data = self::ACTION_RELATION;
+		$currentId = $relation['deliver'] ?? 0;
+		if (empty($currentId)) {
+			util::fail('没有找到流程ID');
+		}
+		$send = self::getByCondition(['orderSn' => $orderSn, 'actionId' => $currentId], true);
+		if (empty($send)) {
+			util::fail('配送信息错误');
+		}
+		//0没有选择 1本店送 2发快递
+		$send->option = 1;
+		$send->save();
+	}
+	
+	//下单操作完成 shish 2019.12.13
+	public static function placeOrder($data)
+	{
+		//下单完成
+		$orderSn = $data['orderSn'];
+		$payTime = $data['payTime'];
+		$relation = self::ACTION_RELATION;
+		$actionList = self::ACTION_LIST;
+		$currentId = $relation['placeOrder'] ?? 0;
+		if (empty($currentId)) {
+			util::fail('没有找到流程ID');
+		}
+		$currentName = $actionList[$currentId]['name'] ?? '';
+		$data = ['actionId' => $currentId, 'actionName' => $currentName, 'orderSn' => $orderSn, 'finishTime' => $payTime, 'inTurn' => $currentId, 'status' => 1];
+		self::add($data);
+		
+		OrderClass::updateByCondition(['orderSn' => $orderSn], ['currentFlow' => 1]);
+		
+		//制单未开始
+		$nextId = $relation['deliver'] ?? 0;
+		if (empty($nextId)) {
+			util::fail('下单后没有找到下一步的流程ID');
+		}
+		$nextName = $actionList[$nextId]['name'] ?? '';
+		$data = ['actionId' => $nextId, 'actionName' => $nextName, 'orderSn' => $orderSn, 'inTurn' => $nextId, 'status' => 0];
+		self::add($data);
+	}
+	
+	//当前待执行的动作 shish 2019.12.16
+	public static function toDoActionId($orderSn)
+	{
+		$action = self::getByCondition(['orderSn' => $orderSn], false, 'inTurn DESC');
+		$actionId = 0;
+		if (empty($action['finishTime'])) {
+			$actionId = $action['actionId'];
+		}
+		return $actionId;
+	}
+	
+	//送达 shish 2020.6.1
+	public static function reach($order)
+	{
+		$orderSn = $order['orderSn'];
+		$time = date("Y-m-d H:i:s");
+		$relation = self::ACTION_RELATION;
+		$actionList = self::ACTION_LIST;
+		$currentId = $relation['reach'] ?? 0;
+		if (empty($currentId)) {
+			util::fail('没有找到流程ID');
+		}
+		$currentName = $actionList[$currentId]['name'] ?? '';
+		$has = OrderSendClass::getByCondition(['orderSn' => $orderSn, 'actionId' => $currentId]);
+		if ($has) {
+			util::fail('已经确认送达');
+		}
 
-    public static $baseFile = '\bizGhs\order\models\OrderSend';
-
-    //流程键名与ID关系
-    const ACTION_RELATION = ['placeOrder' => 10, 'deliver' => 30, 'reach' => 40];
-    const ACTION_LIST = [
-        10 => ['name' => '下单', 'sign' => 'placeOrder'],
-        30 => ['name' => '发货', 'sign' => 'deliver'],
-        40 => ['name' => '送达', 'sign' => 'reach']
-    ];
-
-    //下单操作完成 shish 2019.12.13
-    public static function placeOrder($data)
-    {
-        //下单完成
-        $orderId = $data['orderId'];
-        $orderSn = $data['orderSn'];
-        $payTime = $data['payTime'];
-        $relation = self::ACTION_RELATION;
-        $actionList = self::ACTION_LIST;
-        $currentId = $relation['placeOrder'] ?? 0;
-        if (empty($currentId)) {
-            util::fail('没有找到流程ID');
-        }
-        $currentName = $actionList[$currentId]['name'] ?? '';
-        $data = ['actionId' => $currentId, 'actionName' => $currentName, 'orderSn' => $orderSn, 'finishTime' => $payTime, 'inTurn' => $currentId, 'status' => 1];
-        self::add($data);
-
-        OrderClass::updateById($orderId, ['currentFlow' => 1]);
-
-        //制单未开始
-        $nextId = $relation['deliver'] ?? 0;
-        if (empty($nextId)) {
-            util::fail('下单后没有找到下一步的流程ID');
-        }
-        $nextName = $actionList[$nextId]['name'] ?? '';
-        $data = ['actionId' => $nextId, 'actionName' => $nextName, 'orderSn' => $orderSn, 'inTurn' => $nextId, 'status' => 0];
-        self::add($data);
-    }
-
-    //当前待执行的动作 shish 2019.12.16
-    public static function toDoActionId($id)
-    {
-        $action = self::getByCondition(['orderId' => $id], false, 'inTurn DESC');
-        $actionId = 0;
-        if (empty($action['finishTime'])) {
-            $actionId = $action['actionId'];
-        }
-        return $actionId;
-    }
-
-    //送达 shish 2020.6.1
-    public static function reach($order)
-    {
-        $id = $order['id'];
-        //1 确认送达
-        $option = 1;
-        $time = time();
-        $actionIdList = self::ACTION_RELATION;
-        $reachId = $actionIdList['reach'];
-        OrderSendClass::updateByCondition(['orderId' => $id, 'actionId' => $reachId], ['option' => $option, 'finishTime' => $time]);
-
-        $userId = $order['userId'];
-        $user = UserClass::getById($userId);
-        $merchantId = $order['merchantId'];
-        $merchant = MerchantClass::getById($merchantId);
-        //完成通知客户
-        //InformUserClass::sendComplete($user, $order, $merchant);
-        //完成通知管理员
-        //InformAdminClass::sendComplete($order);
-    }
-
-    //免发货和自取流程处理 shish 2021.1.24
-    public static function withoutSend($info)
-    {
-        $orderSn = $info['orderSn'];
-        self::deleteByCondition(['orderSn' => $orderSn]);
-    }
+		$preId = $relation['deliver'] ?? 0;
+		$preActionId = $relation['deliver'] ?? 0;
+		$preInfo = OrderSendClass::getByCondition(['orderSn' => $orderSn, 'actionId' => $preActionId], true);
+		if (empty($preInfo)) {
+			util::fail('配送信息错误,没有找到前面个流程');
+		}
+		$preInfo->status = 1;
+		$preInfo->save();
 
+		$sendData = ['actionId' => $currentId, 'actionName' => $currentName, 'orderSn' => $orderSn, 'finishTime' => $time, 'inTurn' => $currentId, 'status' => 1];
+		OrderSendClass::add($sendData);
+	}
+	
+	//免发货和自取流程处理 shish 2021.1.24
+	public static function withoutSend($info)
+	{
+		$orderSn = $info['orderSn'];
+		self::deleteByCondition(['orderSn' => $orderSn]);
+	}
+	
 }

+ 153 - 150
biz-ghs/order/services/OrderSendService.php

@@ -10,154 +10,157 @@ use Yii;
 
 class OrderSendService extends BaseService
 {
-
-    public static $baseFile = '\bizGhs\order\classes\OrderSendClass';
-
-
-    //制单 shish 2019.12.17
-    public static function printOrder($data)
-    {
-        $id = $data['id'];
-        $option = $data['option'];
-        $actionRelation = OrderSendClass::ACTION_RELATION;
-        $printOrderId = $actionRelation['printOrder'];
-        $currentId = OrderSendClass::toDoActionId($id);
-        if ($printOrderId != $currentId) {
-            util::fail('当前流程无法操作');
-        }
-        //1有配送单 2 填单制单
-        if (in_array($option, [1, 2]) == false) {
-            util::fail('操作无效');
-        }
-        $time = time();
-        OrderSendClass::updateByCondition(['orderId' => $id, 'actionId' => $printOrderId], ['option' => $option, 'finishTime' => $time]);
-        $hasDeliver = 0;
-        if ($option == 1) {
-            //有纸质配送单
-            $hasDeliver = 1;
-        }
-        if ($option == 2) {
-            //填单制单
-            $hasDeliver = 2;
-        }
-        OrderClass::updateById($id, ['status' => OrderClass::ORDER_STATUS_UN_SEND, 'currentFlow' => 2, 'printStatus' => 1, 'hasDeliver' => $hasDeliver]);
-
-        //进入发货流程
-        $deliverId = $actionRelation['deliver'];
-        $data = ['actionId' => $deliverId, 'orderId' => $id, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $deliverId];
-        OrderSendClass::add($data);
-        $actionList = OrderSendClass::ACTION_LIST;
-        $data['actionSign'] = isset($actionList[$deliverId]['sign']) ? $actionList[$deliverId]['sign'] : '';
-        util::success(['nextAction' => $data]);
-    }
-
-    //发货 shish 2019.12.17
-    public static function deliver($data)
-    {
-        $id = $data['id'];
-        $option = $data['option'];
-        $actionRelation = OrderSendClass::ACTION_RELATION;
-        $deliverId = $actionRelation['deliver'];
-        $currentId = OrderSendClass::toDoActionId($id);
-        if ($deliverId != $currentId) {
-            util::fail('当前流程无法操作');
-        }
-        $time = time();
-
-        $sendType = isset($data['sendType']) ? $data['sendType'] : OrderClass::SEND_TYPE_UNKNOWN;
-
-        $sendInfo = [];
-        if ($sendType == OrderClass::SEND_TYPE_THIRD) {
-
-            util::fail('即将开通...');
-
-            $side = $data['sendSide'];
-            $sendTime = strtotime(date("Y-m-d") . ' ' . $data['sendTime']);
-            if ($sendTime < ($time + 20 * 60)) {
-                util::fail('请选择20分钟之后的时间');
-            }
-            $sendInfo = [
-                'sideId' => $side,
-                'sendTime' => $sendTime,
-                'addTime' => $time,
-                'sendTip' => 0,
-                'merchantId' => $data['merchantId'],
-                'orderId' => $id,
-                'cost' => 6,
-                'tip' => 0,
-                'distance' => 7,
-                'sendTime' => $sendTime,
-                'side' => $side,
-            ];
-            OrderExpressClass::add($sendInfo);
-        }
-
-        OrderSendClass::updateByCondition(['orderId' => $id, 'actionId' => $deliverId], ['option' => $option, 'finishTime' => $time]);
-        OrderClass::updateById($id, ['status' => OrderClass::ORDER_STATUS_SENDING, 'currentFlow' => 3, 'sendType' => $sendType]);
-
-        //待发货订单-1,配送中订单+1
-        $merchantId = $data['merchantId'];
-        $asset = MerchantAssetClass::getByMerchantId($merchantId, true);
-        $asset->unSendOrder -= 1;
-        $asset->sendingOrder += 1;
-        $asset->save();
-
-        //进入送达流程
-        $reachId = $actionRelation['reach'];
-        $data = ['actionId' => $reachId, 'orderId' => $id, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $reachId];
-        OrderSendClass::add($data);
-        $actionList = OrderSendClass::ACTION_LIST;
-        $data['actionSign'] = isset($actionList[$reachId]['sign']) ? $actionList[$reachId]['sign'] : '';
-        util::success(['nextAction' => $data, 'sendInfo' => $sendInfo]);
-    }
-
-    //送达 shish 2019.12.17
-    public static function reach($order, $data)
-    {
-        $id = $order['id'];
-        $actionRelation = OrderSendClass::ACTION_RELATION;
-        $reachId = $actionRelation['reach'];
-        $currentId = OrderSendClass::toDoActionId($id);
-        if ($reachId != $currentId) {
-            util::fail('当前流程无法操作');
-        }
-        OrderSendClass::reach($order);
-        OrderClass::complete($order, OrderClass::ORDER_TOTAL_FLOW);
-        //配送中订单-1,完成订单+1
-        $merchantId = $order['merchantId'];
-        $asset = MerchantAssetClass::getByMerchantId($merchantId, true);
-        $asset->sendingOrder -= 1;
-        $asset->finishOrder += 1;
-        $asset->save();
-        util::complete();
-    }
-
-    //发货详情 shish 2019.12.15
-    public static function sendList($order)
-    {
-        $orderId = $order['id'];
-        $orderSn = $order['orderSn'];
-        $list = OrderSendClass::getAllByCondition(['orderSn' => $orderSn], 'inTurn DESC', '*');
-        if (empty($list)) {
-            return [];
-        }
-        $actionList = OrderSendClass::ACTION_LIST;
-        $actionRelation = OrderSendClass::ACTION_RELATION;
-        foreach ($list as $key => $val) {
-            $currentId = $val['actionId'];
-            $list[$key]['actionName'] = $actionList[$currentId]['name'] ?? '';
-            $list[$key]['actionSign'] = $actionList[$currentId]['sign'] ?? '';
-
-            //发货需要显示的信息
-            if ($currentId == $actionRelation['deliver']) {
-                $list[$key]['sendInfo'] = $order['sendType'] == OrderClass::SEND_TYPE_THIRD ? OrderExpressClass::getExpress($orderId) : [];
-            }
-            //送达需要显示的信息
-            if ($currentId == $actionRelation['reach']) {
-
-            }
-        }
-        return $list;
-    }
-
+	
+	public static $baseFile = '\bizGhs\order\classes\OrderSendClass';
+	
+	
+	//制单 shish 2019.12.17
+	public static function printOrder($data)
+	{
+		$id = $data['id'];
+		$orderSn = $data['orderSn'];
+		$option = $data['option'];
+		$actionRelation = OrderSendClass::ACTION_RELATION;
+		$printOrderId = $actionRelation['printOrder'];
+		$currentId = OrderSendClass::toDoActionId($orderSn);
+		if ($printOrderId != $currentId) {
+			util::fail('当前流程无法操作');
+		}
+		//1有配送单 2 填单制单
+		if (in_array($option, [1, 2]) == false) {
+			util::fail('操作无效');
+		}
+		$time = time();
+		OrderSendClass::updateByCondition(['orderId' => $id, 'actionId' => $printOrderId], ['option' => $option, 'finishTime' => $time]);
+		$hasDeliver = 0;
+		if ($option == 1) {
+			//有纸质配送单
+			$hasDeliver = 1;
+		}
+		if ($option == 2) {
+			//填单制单
+			$hasDeliver = 2;
+		}
+		OrderClass::updateById($id, ['status' => OrderClass::ORDER_STATUS_UN_SEND, 'currentFlow' => 2, 'printStatus' => 1, 'hasDeliver' => $hasDeliver]);
+		
+		//进入发货流程
+		$deliverId = $actionRelation['deliver'];
+		$data = ['actionId' => $deliverId, 'orderId' => $id, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $deliverId];
+		OrderSendClass::add($data);
+		$actionList = OrderSendClass::ACTION_LIST;
+		$data['actionSign'] = isset($actionList[$deliverId]['sign']) ? $actionList[$deliverId]['sign'] : '';
+		util::success(['nextAction' => $data]);
+	}
+	
+	//发货 shish 2019.12.17
+	public static function deliver($data)
+	{
+		$id = $data['id'];
+		$orderSn = $data['orderSn'];
+		$option = $data['option'];
+		$actionRelation = OrderSendClass::ACTION_RELATION;
+		$deliverId = $actionRelation['deliver'];
+		$currentId = OrderSendClass::toDoActionId($orderSn);
+		if ($deliverId != $currentId) {
+			util::fail('当前流程无法操作');
+		}
+		$time = time();
+		
+		$sendType = isset($data['sendType']) ? $data['sendType'] : OrderClass::SEND_TYPE_UNKNOWN;
+		
+		$sendInfo = [];
+		if ($sendType == OrderClass::SEND_TYPE_THIRD) {
+			
+			util::fail('即将开通...');
+			
+			$side = $data['sendSide'];
+			$sendTime = strtotime(date("Y-m-d") . ' ' . $data['sendTime']);
+			if ($sendTime < ($time + 20 * 60)) {
+				util::fail('请选择20分钟之后的时间');
+			}
+			$sendInfo = [
+				'sideId' => $side,
+				'sendTime' => $sendTime,
+				'addTime' => $time,
+				'sendTip' => 0,
+				'merchantId' => $data['merchantId'],
+				'orderId' => $id,
+				'cost' => 6,
+				'tip' => 0,
+				'distance' => 7,
+				'sendTime' => $sendTime,
+				'side' => $side,
+			];
+			OrderExpressClass::add($sendInfo);
+		}
+		
+		OrderSendClass::updateByCondition(['orderId' => $id, 'actionId' => $deliverId], ['option' => $option, 'finishTime' => $time]);
+		OrderClass::updateById($id, ['status' => OrderClass::ORDER_STATUS_SENDING, 'currentFlow' => 3, 'sendType' => $sendType]);
+		
+		//待发货订单-1,配送中订单+1
+		$merchantId = $data['merchantId'];
+		$asset = MerchantAssetClass::getByMerchantId($merchantId, true);
+		$asset->unSendOrder -= 1;
+		$asset->sendingOrder += 1;
+		$asset->save();
+		
+		//进入送达流程
+		$reachId = $actionRelation['reach'];
+		$data = ['actionId' => $reachId, 'orderId' => $id, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $reachId];
+		OrderSendClass::add($data);
+		$actionList = OrderSendClass::ACTION_LIST;
+		$data['actionSign'] = isset($actionList[$reachId]['sign']) ? $actionList[$reachId]['sign'] : '';
+		util::success(['nextAction' => $data, 'sendInfo' => $sendInfo]);
+	}
+	
+	//送达 shish 2019.12.17
+	public static function reach($order, $data)
+	{
+		$id = $order['id'];
+		$orderSn = $data['orderSn'];
+		$actionRelation = OrderSendClass::ACTION_RELATION;
+		$reachId = $actionRelation['reach'];
+		$currentId = OrderSendClass::toDoActionId($orderSn);
+		if ($reachId != $currentId) {
+			util::fail('当前流程无法操作');
+		}
+		OrderSendClass::reach($order);
+		OrderClass::complete($order, OrderClass::ORDER_TOTAL_FLOW);
+		//配送中订单-1,完成订单+1
+		$merchantId = $order['merchantId'];
+		$asset = MerchantAssetClass::getByMerchantId($merchantId, true);
+		$asset->sendingOrder -= 1;
+		$asset->finishOrder += 1;
+		$asset->save();
+		util::complete();
+	}
+	
+	//发货详情 shish 2019.12.15
+	public static function sendList($order)
+	{
+		$orderId = $order['id'];
+		$orderSn = $order['orderSn'];
+		$list = OrderSendClass::getAllByCondition(['orderSn' => $orderSn], 'inTurn DESC', '*');
+		if (empty($list)) {
+			return [];
+		}
+		$actionList = OrderSendClass::ACTION_LIST;
+		$actionRelation = OrderSendClass::ACTION_RELATION;
+		foreach ($list as $key => $val) {
+			$currentId = $val['actionId'];
+			$list[$key]['actionName'] = $actionList[$currentId]['name'] ?? '';
+			$list[$key]['actionSign'] = $actionList[$currentId]['sign'] ?? '';
+			
+			//发货需要显示的信息
+			if ($currentId == $actionRelation['deliver']) {
+				$list[$key]['sendInfo'] = $order['sendType'] == OrderClass::SEND_TYPE_THIRD ? OrderExpressClass::getExpress($orderId) : [];
+			}
+			//送达需要显示的信息
+			if ($currentId == $actionRelation['reach']) {
+			
+			}
+		}
+		return $list;
+	}
+	
 }

+ 8 - 9
biz/order/classes/OrderClass.php

@@ -25,18 +25,17 @@ class OrderClass extends BaseClass
 
     //已退款
     const ORDER_STATUS_REFUND = 6;
+	//已取消
+	const ORDER_STATUS_CANCEL = 5;
     //完成
-    const ORDER_STATUS_COMPLETE = 5;
-    //已取消
-    const ORDER_STATUS_CANCEL = 4;
-    //待通知
-    const ORDER_STATUS_UN_NOTICE = 3;
+    const ORDER_STATUS_COMPLETE = 4;
     //配送中
-    const ORDER_STATUS_SENDING = 2;
+    const ORDER_STATUS_SENDING = 3;
     //待配送
-    const ORDER_STATUS_UN_SEND = 1;
+    const ORDER_STATUS_UN_SEND = 2;
     //待付款
-    const ORDER_STATUS_UN_PAY = 0;
+    const ORDER_STATUS_UN_PAY = 1;
+
     //订单总流程数
     const ORDER_TOTAL_FLOW = 4;
 
@@ -46,7 +45,7 @@ class OrderClass extends BaseClass
     const SEND_TYPE_NO = 1;
     //自己送
     const SEND_TYPE_MYSELF = 2;
-    //
+    //快递
     const SEND_TYPE_THIRD = 3;
 
     //送达时间段

+ 86 - 86
biz/order/classes/OrderSendClass.php

@@ -17,90 +17,90 @@ use biz\base\classes\BaseClass;
 
 class OrderSendClass extends BaseClass
 {
-
-    public static $baseFile = '\biz\order\models\OrderSend';
-
-    //流程id与名称
-    public static $actionId = ['placeOrder' => 10, 'printOrder' => 20, 'deliver' => 30, 'reach' => 40];
-    public static $action = [
-        10 => ['name' => '下单', 'sign' => 'placeOrder'],
-        20 => ['name' => '制单', 'sign' => 'printOrder',],
-        30 => ['name' => '发货', 'sign' => 'deliver'],
-        40 => ['name' => '送达', 'sign' => 'reach']
-    ];
-
-    //下单操作完成 shish 2019.12.13
-    public static function placeOrder($data)
-    {
-        //下单完成
-        $orderId = $data['orderId'];
-        $payTime = $data['payTime'];
-        $actionId = self::$actionId;
-        $placeOrderId = $actionId['placeOrder'];
-        $time = time();
-        $data = ['actionId' => $placeOrderId, 'orderId' => $orderId, 'finishTime' => $payTime, 'addTime' => $time, 'inTurn' => $placeOrderId];
-        self::add($data);
-
-        OrderClass::updateById($orderId, ['currentFlow' => 1]);
-
-        //制单未开始
-        $printOrderId = $actionId['printOrder'];
-        $data = ['actionId' => $printOrderId, 'orderId' => $orderId, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $printOrderId];
-        self::add($data);
-    }
-
-    //当前待执行的动作 shish 2019.12.16
-    public static function toDoActionId($id)
-    {
-        $action = self::getByCondition(['orderId' => $id], false, 'inTurn DESC');
-        $actionId = 0;
-        if (empty($action['finishTime'])) {
-            $actionId = $action['actionId'];
-        }
-        return $actionId;
-    }
-
-    //免发货流程的处理 shish 2020.3.12
-    public static function withoutSend($order)
-    {
-        $id = $order['id'];
-        if ($order['status'] == OrderClass::ORDER_STATUS_COMPLETE) {
-            util::fail('订单已完成');
-        }
-        self::deleteByCondition(['orderId' => $id]);
-        //订单状态变更
-        OrderClass::updateById($id, ['sendType' => 1, 'totalFlow' => OrderClass::ORDER_TOTAL_FLOW, 'currentFlow' => OrderClass::ORDER_TOTAL_FLOW]);
-        OrderClass::complete($order, OrderClass::ORDER_TOTAL_FLOW);
-
-        //待发货订单-1,完成订单+1
-        $merchantId = $order['merchantId'];
-        $asset = MerchantAssetClass::getByMerchantId($merchantId, true);
-        $asset->finishOrder += 1;
-        $asset->unSendOrder -= 1;
-        $asset->save();
-
-        return OrderClass::ORDER_TOTAL_FLOW;
-    }
-
-    //送达 shish 2020.6.1
-    public static function reach($order)
-    {
-        $id = $order['id'];
-        //1 确认送达
-        $option = 1;
-        $time = time();
-        $actionIdList = self::$actionId;
-        $reachId = $actionIdList['reach'];
-        OrderSendClass::updateByCondition(['orderId' => $id, 'actionId' => $reachId], ['option' => $option, 'finishTime' => $time]);
-
-        $userId = $order['userId'];
-        $user = UserClass::getById($userId);
-        $merchantId = $order['merchantId'];
-        $merchant = MerchantClass::getById($merchantId);
-        //完成通知客户
-        InformUserClass::sendComplete($user, $order, $merchant);
-        //完成通知管理员
-        InformAdminClass::sendComplete($order);
-    }
-
+	
+	public static $baseFile = '\biz\order\models\OrderSend';
+	
+	//流程id与名称
+	public static $actionId = ['placeOrder' => 10, 'printOrder' => 20, 'deliver' => 30, 'reach' => 40];
+	public static $action = [
+		10 => ['name' => '下单', 'sign' => 'placeOrder'],
+		20 => ['name' => '制单', 'sign' => 'printOrder',],
+		30 => ['name' => '发货', 'sign' => 'deliver'],
+		40 => ['name' => '送达', 'sign' => 'reach']
+	];
+	
+	//下单操作完成 shish 2019.12.13
+	public static function placeOrder($data)
+	{
+		//下单完成
+		$orderId = $data['orderId'];
+		$payTime = $data['payTime'];
+		$actionId = self::$actionId;
+		$placeOrderId = $actionId['placeOrder'];
+		$time = time();
+		$data = ['actionId' => $placeOrderId, 'orderId' => $orderId, 'finishTime' => $payTime, 'addTime' => $time, 'inTurn' => $placeOrderId];
+		self::add($data);
+		
+		OrderClass::updateById($orderId, ['currentFlow' => 1]);
+		
+		//制单未开始
+		$printOrderId = $actionId['printOrder'];
+		$data = ['actionId' => $printOrderId, 'orderId' => $orderId, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $printOrderId];
+		self::add($data);
+	}
+	
+	//当前待执行的动作 shish 2019.12.16
+	public static function toDoActionId($orderSn)
+	{
+		$action = self::getByCondition(['orderSn' => $orderSn], false, 'inTurn DESC');
+		$actionId = 0;
+		if (empty($action['finishTime'])) {
+			$actionId = $action['actionId'];
+		}
+		return $actionId;
+	}
+	
+	//免发货流程的处理 shish 2020.3.12
+	public static function withoutSend($order)
+	{
+		$id = $order['id'];
+		if ($order['status'] == OrderClass::ORDER_STATUS_COMPLETE) {
+			util::fail('订单已完成');
+		}
+		self::deleteByCondition(['orderId' => $id]);
+		//订单状态变更
+		OrderClass::updateById($id, ['sendType' => 1, 'totalFlow' => OrderClass::ORDER_TOTAL_FLOW, 'currentFlow' => OrderClass::ORDER_TOTAL_FLOW]);
+		OrderClass::complete($order, OrderClass::ORDER_TOTAL_FLOW);
+		
+		//待发货订单-1,完成订单+1
+		$merchantId = $order['merchantId'];
+		$asset = MerchantAssetClass::getByMerchantId($merchantId, true);
+		$asset->finishOrder += 1;
+		$asset->unSendOrder -= 1;
+		$asset->save();
+		
+		return OrderClass::ORDER_TOTAL_FLOW;
+	}
+	
+	//送达 shish 2020.6.1
+	public static function reach($order)
+	{
+		$id = $order['id'];
+		//1 确认送达
+		$option = 1;
+		$time = time();
+		$actionIdList = self::$actionId;
+		$reachId = $actionIdList['reach'];
+		OrderSendClass::updateByCondition(['orderId' => $id, 'actionId' => $reachId], ['option' => $option, 'finishTime' => $time]);
+		
+		$userId = $order['userId'];
+		$user = UserClass::getById($userId);
+		$merchantId = $order['merchantId'];
+		$merchant = MerchantClass::getById($merchantId);
+		//完成通知客户
+		InformUserClass::sendComplete($user, $order, $merchant);
+		//完成通知管理员
+		InformAdminClass::sendComplete($order);
+	}
+	
 }

+ 6 - 3
biz/order/services/OrderSendService.php

@@ -22,10 +22,11 @@ class OrderSendService extends BaseService
 	public static function printOrder($data)
 	{
 		$id = $data['id'];
+		$orderSn = $data['orderSn'];
 		$option = $data['option'];
 		$actionIdList = OrderSendClass::$actionId;
 		$printOrderId = $actionIdList['printOrder'];
-		$currentId = OrderSendClass::toDoActionId($id);
+		$currentId = OrderSendClass::toDoActionId($orderSn);
 		if ($printOrderId != $currentId) {
 			util::fail('当前流程无法操作');
 		}
@@ -59,10 +60,11 @@ class OrderSendService extends BaseService
 	public static function deliver($data)
 	{
 		$id = $data['id'];
+		$orderSn = $data['orderSn'];
 		$option = $data['option'];
 		$actionIdList = OrderSendClass::$actionId;
 		$deliverId = $actionIdList['deliver'];
-		$currentId = OrderSendClass::toDoActionId($id);
+		$currentId = OrderSendClass::toDoActionId($orderSn);
 		if ($deliverId != $currentId) {
 			util::fail('当前流程无法操作');
 		}
@@ -119,9 +121,10 @@ class OrderSendService extends BaseService
 	public static function reach($order, $data)
 	{
 		$id = $order['id'];
+		$orderSn = $data['orderSn'];
 		$actionIdList = OrderSendClass::$actionId;
 		$reachId = $actionIdList['reach'];
-		$currentId = OrderSendClass::toDoActionId($id);
+		$currentId = OrderSendClass::toDoActionId($orderSn);
 		if ($reachId != $currentId) {
 			util::fail('当前流程无法操作');
 		}

+ 3 - 2
sql.sql

@@ -1369,7 +1369,8 @@ ADD COLUMN `inTurn`  int(11) NOT NULL DEFAULT 0 COMMENT '排序,数字越大
 == shish 2021-3-4
 ALTER TABLE xhOrder DROP COLUMN `addTime`;
 ALTER TABLE xhOrder ADD `addTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间' AFTER `createTime`;
-ALTER TABLE xhGhsOrder MODIFY `status` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '订单状态 1待付款 2待配送 3配送中 4已完成 5已取消';
-ALTER TABLE `xhOrder` MODIFY `status` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '订单状态 1待付款 2待配送 3配送中 4已完成 5已取消';
+ALTER TABLE xhGhsOrder MODIFY `status` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '订单状态 1待付款 2待配送 3配送中 4已完成 5已取消 6已退款';
+ALTER TABLE `xhOrder` MODIFY `status` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '订单状态 1待付款 2待配送 3配送中 4已完成 5已取消 6已退款';
+ALTER TABLE xhOrderSend ADD orderSn CHAR(20) NOT NULL DEFAULT '' COMMENT '订单编号' AFTER `id`;
 
 确认国兰全部订单已经配送完成后 请将国兰订单全部置为已完成或已取消状态 其中付款的已完成 未付款的已取消