| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?php
- namespace bizHd\order\services;
- use biz\shop\models\Shop;
- use bizHd\base\services\BaseService;
- use bizHd\goods\classes\CategoryClass;
- use bizHd\goods\classes\UsageClass;
- use biz\sj\classes\MerchantAssetClass;
- use bizHd\order\classes\OrderClass;
- use bizHd\order\classes\OrderExpressClass;
- use bizHd\order\classes\OrderSendClass;
- use common\components\util;
- use Yii;
- use linslin\yii2\curl;
- class OrderSendService extends BaseService
- {
- public static $baseFile = '\bizHd\order\classes\OrderSendClass';
- //制单 ssh 2019.12.17
- public static function printOrder($data)
- {
- $id = $data['id'];
- $orderSn = $data['orderSn'];
- $option = $data['option'];
- $actionIdList = OrderSendClass::$actionId;
- $printOrderId = $actionIdList['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 = $actionIdList['deliver'];
- $data = ['actionId' => $deliverId, 'orderId' => $id, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $deliverId, 'orderSn' => $orderSn];
- OrderSendClass::add($data);
- $actionList = OrderSendClass::$action;
- $data['actionSign'] = isset($actionList[$deliverId]['sign']) ? $actionList[$deliverId]['sign'] : '';
- util::success(['nextAction' => $data]);
- }
- //发货 ssh 2019.12.17
- public static function deliver($data, $order)
- {
- $id = $data['id'];
- $orderSn = $data['orderSn'];
- $option = $data['option'];
- $actionIdList = OrderSendClass::$actionId;
- $deliverId = $actionIdList['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['expressId'];
- $sendTime = date("Y-m-d") . ' ' . $data['sendTime'];
- if (strtotime($sendTime) < ($time + 20 * 60)) {
- util::fail('请选择20分钟之后的时间');
- }
- $sendInfo = [
- 'sideId' => $side,
- 'sendTime' => $sendTime,
- 'addTime' => $time,
- 'sendTip' => 0,
- 'sjId' => $data['sjId'],
- '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
- $shopId = $order['shopId'] ?? 0;
- $shop = Shop::findBySql('select * from ' . Shop::tableName() . ' where id = :id for update', ['id' => $shopId])->one();
- if (empty($shop)) {
- util::fail('没有找到门店56');
- }
- $shop->unSendOrder -= 1;
- $shop->sendingOrder += 1;
- $shop->save();
- //进入送达流程
- $reachId = $actionIdList['reach'];
- $data = ['actionId' => $reachId, 'orderId' => $id, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $reachId, 'orderSn' => $orderSn];
- OrderSendClass::add($data);
- $actionList = OrderSendClass::$action;
- $data['actionSign'] = isset($actionList[$reachId]['sign']) ? $actionList[$reachId]['sign'] : '';
- util::success(['nextAction' => $data, 'sendInfo' => $sendInfo]);
- }
- //送达 ssh 2019.12.17
- public static function reach($order)
- {
- $orderSn = $order['orderSn'] ?? '';
- $actionIdList = OrderSendClass::$actionId;
- $reachId = $actionIdList['reach'];
- $currentId = OrderSendClass::toDoActionId($orderSn);
- if ($reachId != $currentId) {
- util::fail('当前流程无法操作');
- }
- OrderSendClass::reach($order);
- $id = $order['id'] ?? 0;
- OrderClass::updateById($id, ['status' => OrderClass::ORDER_STATUS_COMPLETE, 'currentFlow' => OrderClass::ORDER_TOTAL_FLOW]);
- //配送中订单-1,完成订单+1
- $shopId = $order['shopId'] ?? 0;
- $shop = Shop::findBySql('select * from ' . Shop::tableName() . ' where id = :id for update', ['id' => $shopId])->one();
- $shop->sendingOrder -= 1;
- $shop->finishOrder += 1;
- $shop->save();
- util::complete();
- }
- //发货详情 ssh 2019.12.15
- public static function sendList($order)
- {
- $orderId = $order['id'];
- $list = OrderSendClass::getAllByCondition(['orderId' => $orderId], 'inTurn DESC', '*');
- if (empty($list)) {
- return [];
- }
- $nameList = OrderSendClass::$action;
- $idList = OrderSendClass::$actionId;
- foreach ($list as $key => $val) {
- $actionId = $val['actionId'];
- $list[$key]['actionName'] = isset($nameList[$actionId]['name']) ? $nameList[$actionId]['name'] : '';
- $list[$key]['actionSign'] = isset($nameList[$actionId]['sign']) ? $nameList[$actionId]['sign'] : '';
- if ($actionId == $idList['printOrder']) {
- $list[$key]['receive'] = [];
- if (!empty($order['receiveUserName'])) {
- $list[$key]['receive'] = [
- 'receiveUserName' => $order['receiveUserName'],
- 'receiveMobile' => $order['receiveMobile'],
- 'address' => $order['address'],
- 'floor' => $order['floor'],
- 'fullAddress' => $order['fullAddress'],
- 'receiveAddress' => $order['address'],
- 'receiveFloor' => $order['floor'],
- 'receiveFullAddress' => $order['fullAddress'],
- 'showAddress' => $order['showAddress'],
- ];
- }
- }
- if ($actionId == $idList['deliver']) {
- $list[$key]['sendInfo'] = $order['sendType'] == OrderClass::SEND_TYPE_THIRD ? OrderExpressClass::getExpress($orderId) : [];
- }
- if ($actionId == $idList['reach']) {
- $list[$key]['classify'] = [];
- if ($order['classify'] == 1) {
- $category = CategoryClass::getById($order['categoryId']);
- $categoryName = isset($category['categoryName']) ? $category['categoryName'] : '';
- $usage = UsageClass::getById($order['usageId']);
- $usageName = isset($usage['usageName']) ? $usage['usageName'] : '';
- $list[$key]['classify'] = ['category' => $categoryName, 'usage' => $usageName];
- }
- }
- }
- return $list;
- }
- }
|