OrderSendService.php 7.8 KB

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