OrderSendService.php 7.9 KB

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