OrderSendService.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. namespace bizMall\order\services;
  3. use bizMall\base\services\BaseService;
  4. use bizMall\goods\classes\CategoryClass;
  5. use bizMall\goods\classes\UsageClass;
  6. use bizMall\merchant\classes\MerchantAssetClass;
  7. use bizMall\order\classes\OrderClass;
  8. use bizMall\order\classes\OrderExpressClass;
  9. use bizMall\order\classes\OrderSendClass;
  10. use common\components\util;
  11. use Yii;
  12. use linslin\yii2\curl;
  13. class OrderSendService extends BaseService
  14. {
  15. public static $baseFile = '\bizMall\order\classes\OrderSendClass';
  16. //制单 ssh 2019.12.17
  17. public static function printOrder($data)
  18. {
  19. $id = $data['id'] ?? 0;
  20. $option = $data['option'] ?? '';
  21. $orderSn = $data['orderSn'] ?? '';
  22. $actionIdList = OrderSendClass::$actionId;
  23. $printOrderId = $actionIdList['printOrder'];
  24. $currentId = OrderSendClass::toDoActionId($id);
  25. if ($printOrderId != $currentId) {
  26. util::fail('当前流程无法操作');
  27. }
  28. //1有配送单 2 填单制单
  29. if (in_array($option, [1, 2]) == false) {
  30. util::fail('操作无效');
  31. }
  32. $time = time();
  33. OrderSendClass::updateByCondition(['orderId' => $id, 'actionId' => $printOrderId], ['option' => $option, 'finishTime' => $time]);
  34. $hasDeliver = 0;
  35. if ($option == 1) {
  36. //有纸质配送单
  37. $hasDeliver = 1;
  38. }
  39. if ($option == 2) {
  40. //填单制单
  41. $hasDeliver = 2;
  42. }
  43. OrderClass::updateById($id, ['status' => OrderClass::ORDER_STATUS_UN_SEND, 'currentFlow' => 2, 'printStatus' => 1, 'hasDeliver' => $hasDeliver]);
  44. //进入发货流程
  45. $deliverId = $actionIdList['deliver'];
  46. $data = ['actionId' => $deliverId, 'orderId' => $id, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $deliverId, 'orderSn' => $orderSn];
  47. OrderSendClass::add($data);
  48. $actionList = OrderSendClass::$action;
  49. $data['actionSign'] = isset($actionList[$deliverId]['sign']) ? $actionList[$deliverId]['sign'] : '';
  50. util::success(['nextAction' => $data]);
  51. }
  52. //发货 ssh 2019.12.17
  53. public static function deliver($data)
  54. {
  55. $id = $data['id'];
  56. $option = $data['option'];
  57. $orderSn = $data['orderSn'] ?? '';
  58. $actionIdList = OrderSendClass::$actionId;
  59. $deliverId = $actionIdList['deliver'];
  60. $currentId = OrderSendClass::toDoActionId($id);
  61. if ($deliverId != $currentId) {
  62. util::fail('当前流程无法操作');
  63. }
  64. $time = time();
  65. $sendType = isset($data['sendType']) ? $data['sendType'] : OrderClass::SEND_TYPE_UNKNOWN;
  66. $sendInfo = [];
  67. if ($sendType == OrderClass::SEND_TYPE_OTHER) {
  68. util::fail('即将开通...');
  69. $side = $data['sendSide'];
  70. $sendTime = strtotime(date("Y-m-d") . ' ' . $data['sendTime']);
  71. if ($sendTime < ($time + 20 * 60)) {
  72. util::fail('请选择20分钟之后的时间');
  73. }
  74. $sendInfo = [
  75. 'sideId' => $side,
  76. 'sendTime' => $sendTime,
  77. 'addTime' => $time,
  78. 'sendTip' => 0,
  79. 'sjId' => $data['sjId'],
  80. 'orderId' => $id,
  81. 'cost' => 6,
  82. 'tip' => 0,
  83. 'distance' => 7,
  84. 'sendTime' => $sendTime,
  85. 'side' => $side,
  86. ];
  87. OrderExpressClass::add($sendInfo);
  88. }
  89. OrderSendClass::updateByCondition(['orderId' => $id, 'actionId' => $deliverId], ['option' => $option, 'finishTime' => $time]);
  90. OrderClass::updateById($id, ['status' => OrderClass::ORDER_STATUS_SENDING, 'currentFlow' => 3, 'sendType' => $sendType]);
  91. //待发货订单-1,配送中订单+1
  92. $sjId = $data['sjId'];
  93. $asset = MerchantAssetClass::getBySjId($sjId, true);
  94. $asset->unSendOrder -= 1;
  95. $asset->sendingOrder += 1;
  96. $asset->save();
  97. //进入送达流程
  98. $reachId = $actionIdList['reach'];
  99. $data = ['actionId' => $reachId, 'orderId' => $id, 'finishTime' => 0, 'addTime' => $time, 'inTurn' => $reachId, 'orderSn' => $orderSn];
  100. OrderSendClass::add($data);
  101. $actionList = OrderSendClass::$action;
  102. $data['actionSign'] = isset($actionList[$reachId]['sign']) ? $actionList[$reachId]['sign'] : '';
  103. util::success(['nextAction' => $data, 'sendInfo' => $sendInfo]);
  104. }
  105. //送达 ssh 2019.12.17
  106. public static function reach($order, $data)
  107. {
  108. $id = $order['id'];
  109. $actionIdList = OrderSendClass::$actionId;
  110. $reachId = $actionIdList['reach'];
  111. $currentId = OrderSendClass::toDoActionId($id);
  112. if ($reachId != $currentId) {
  113. util::fail('当前流程无法操作');
  114. }
  115. OrderSendClass::reach($order);
  116. OrderClass::complete($order, OrderClass::ORDER_TOTAL_FLOW);
  117. //配送中订单-1,完成订单+1
  118. $sjId = $order['sjId'];
  119. $asset = MerchantAssetClass::getBySjId($sjId, true);
  120. $asset->sendingOrder -= 1;
  121. $asset->finishOrder += 1;
  122. $asset->save();
  123. util::complete();
  124. }
  125. //发货详情 ssh 2019.12.15
  126. public static function sendList($order)
  127. {
  128. $orderId = $order['id'];
  129. $list = OrderSendClass::getAllByCondition(['orderId' => $orderId], 'inTurn DESC', '*');
  130. if (empty($list)) {
  131. return [];
  132. }
  133. $nameList = OrderSendClass::$action;
  134. $idList = OrderSendClass::$actionId;
  135. foreach ($list as $key => $val) {
  136. $actionId = $val['actionId'];
  137. $list[$key]['actionName'] = isset($nameList[$actionId]['name']) ? $nameList[$actionId]['name'] : '';
  138. $list[$key]['actionSign'] = isset($nameList[$actionId]['sign']) ? $nameList[$actionId]['sign'] : '';
  139. if ($actionId == $idList['printOrder']) {
  140. $list[$key]['receive'] = [];
  141. if (!empty($order['receiveUserName'])) {
  142. $list[$key]['receive'] = [
  143. 'receiveUserName' => $order['receiveUserName'],
  144. 'receiveMobile' => $order['receiveMobile'],
  145. 'address' => $order['address'],
  146. 'floor' => $order['floor'],
  147. 'fullAddress' => $order['fullAddress'],
  148. ];
  149. }
  150. }
  151. if ($actionId == $idList['deliver']) {
  152. $list[$key]['sendInfo'] = $order['sendType'] == OrderClass::SEND_TYPE_OTHER ? OrderExpressClass::getExpress($orderId) : [];
  153. }
  154. if ($actionId == $idList['reach']) {
  155. $list[$key]['classify'] = [];
  156. if ($order['classify'] == 1) {
  157. $category = CategoryClass::getById($order['categoryId']);
  158. $categoryName = isset($category['categoryName']) ? $category['categoryName'] : '';
  159. $usage = UsageClass::getById($order['usageId']);
  160. $usageName = isset($usage['usageName']) ? $usage['usageName'] : '';
  161. $list[$key]['classify'] = ['category' => $categoryName, 'usage' => $usageName];
  162. }
  163. }
  164. }
  165. return $list;
  166. }
  167. }