OrderSendService.php 6.1 KB

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