DriverForm.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\alliance\models;
  8. use app\models\Md;
  9. use app\models\Option;
  10. use app\models\StoreCloud;
  11. use yii\base\Model;
  12. use app\models\Store;
  13. use app\models\SaasUser;
  14. use app\models\Driver;
  15. use app\models\DriverLine;
  16. use app\models\DriverLineOrder;
  17. use app\modules\alliance\models\LoginForm;
  18. use app\modules\admin\models\DriverForm as ADriverForm;
  19. class DriverForm extends Model
  20. {
  21. public $status;
  22. public function driverInfo($saas_user_id) {
  23. try{
  24. $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0]);
  25. if(empty($model)){
  26. return [
  27. 'code' => 401,
  28. 'msg' => '暂无司机信息' . $saas_user_id,
  29. ];
  30. }
  31. $saas_user = get_saas_user();
  32. return [
  33. 'code' => 0,
  34. 'msg' => '操作成功',
  35. 'data' => [
  36. 'driver' => $model,
  37. 'saas_user' => $saas_user,
  38. ],
  39. ];
  40. }catch(\Exception $e){
  41. \Yii::error([__METHOD__, $e]);
  42. return [
  43. 'code' => 1,
  44. 'msg' => $e->getMessage(),
  45. ];
  46. }
  47. }
  48. public function driverLineList($saas_user_id) {
  49. try{
  50. $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0]);
  51. if(empty($model)){
  52. return [
  53. 'code' => 401,
  54. 'msg' => '暂无司机信息',
  55. ];
  56. }
  57. $query = DriverLine::find()->where(['is_delete' => 0]);
  58. $query->andWhere(['driver_id' => $model->id]);
  59. if($this->status >= 0){
  60. $query->andWhere(['status' => $this->status]);
  61. }
  62. $query->orderBy('id desc');
  63. $res = pagination_make($query);
  64. foreach ($res['list'] as &$item) {
  65. $driver_line_order = DriverLineOrder::find()->where(['line_id' => $item['id'], 'is_delete' => 0])->groupBy('cloud_store_id')->orderBy('sortkey')->asArray()->all();
  66. foreach($driver_line_order as &$lo){
  67. // $lo['store'] = Store::findOne($lo['store_id']);
  68. }
  69. $item['line_order'] = $driver_line_order;
  70. $item['driver'] = $model;
  71. }
  72. return [
  73. 'code' => 0,
  74. 'msg' => 'success',
  75. 'data' => $res,
  76. 'driver' => $model,
  77. ];
  78. }catch(\Exception $e){
  79. \Yii::error([__METHOD__, $e]);
  80. return [
  81. 'code' => 1,
  82. 'msg' => $e->getMessage(),
  83. ];
  84. }
  85. }
  86. public function driverLineInfo($saas_user_id, $line_id, $order_cloud_store_id) {
  87. try{
  88. $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0]);
  89. if(empty($model)){
  90. return [
  91. 'code' => 401,
  92. 'msg' => '暂无司机信息',
  93. ];
  94. }
  95. $line = DriverLine::findOne($line_id);
  96. $driver_line_order = [];
  97. $driver_line_order1 = DriverLineOrder::find()->where(['line_id' => $line_id, 'is_delete' => 0])->orderBy('sortkey, goods_name');
  98. $order_cloud_store_id && $driver_line_order1->andWhere(['cloud_store_id' => $order_cloud_store_id]);
  99. $driver_line_order1 = $driver_line_order1->asArray()->all();
  100. foreach ($driver_line_order1 as $item) {
  101. // $item['store'] = Store::findOne($item['store_id']);
  102. if(isset($driver_line_order[$item['cloud_store_id']])){
  103. $has = 0;
  104. foreach($driver_line_order[$item['cloud_store_id']]['goods'] as &$order){
  105. if($order['goods_name'] == $item['goods_name'] && $order['goods_attr_name'] == $item['goods_attr_name']){
  106. $has = 1;
  107. $order['goods_num'] += $item['goods_num'];
  108. }
  109. }
  110. if(!$has){
  111. $driver_line_order[$item['cloud_store_id']]['goods'][] = $item;
  112. }
  113. }else{
  114. $driver_line_order[$item['cloud_store_id']] = $item;
  115. $driver_line_order[$item['cloud_store_id']]['goods'] = [$item];
  116. }
  117. $store_cloud = StoreCloud::findOne(['cloud_store_id' => $item['cloud_store_id'], 'is_delete' => 0]);
  118. if ($store_cloud && $store_cloud->store_id) {
  119. $store = Store::findOne($store_cloud->store_id);
  120. if ($store) {
  121. $driver_line_order[$item['cloud_store_id']]['logo'] = $store->logo ?: (Option::get('logo', $store->id, 'store')['value'] ?: Option::get('web_log', $store->id, 'web')['value']);
  122. }
  123. if ($item['md_id']) {
  124. $md = Md::findOne($item['md_id']);
  125. if ($md) {
  126. $driver_line_order[$item['cloud_store_id']]['logo'] = $md->cover_url;
  127. }
  128. }
  129. }
  130. }
  131. $driver_line_order = array_values($driver_line_order);
  132. return [
  133. 'code' => 0,
  134. 'msg' => 'success',
  135. 'data' => $line,
  136. 'driver' => $model,
  137. 'order' => $driver_line_order,
  138. ];
  139. }catch(\Exception $e){
  140. \Yii::error([__METHOD__, $e]);
  141. return [
  142. 'code' => 1,
  143. 'msg' => $e->getMessage(),
  144. ];
  145. }
  146. }
  147. public function driverCarNo($saas_user_id, $id, $car_no, $name, $logo) {
  148. try{
  149. $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0, 'id' => $id]);
  150. if(empty($model)){
  151. return [
  152. 'code' => 401,
  153. 'msg' => '暂无司机信息',
  154. ];
  155. }
  156. $car_no && $model->car_no = $car_no;
  157. $name && $model->name = $name;
  158. $logo && $model->logo = $logo;
  159. $save = $model->save();
  160. if(!$save){
  161. throw new \Exception('操作失败,' . array_shift($model->getFirstErrors()));
  162. }
  163. return [
  164. 'code' => 0,
  165. 'msg' => '操作成功',
  166. ];
  167. }catch(\Exception $e){
  168. \Yii::error([__METHOD__, $e]);
  169. return [
  170. 'code' => 1,
  171. 'msg' => $e->getMessage(),
  172. ];
  173. }
  174. }
  175. public function driverTel($saas_user_id, $id, $tel) {
  176. try{
  177. $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0, 'id' => $id]);
  178. if(empty($model)){
  179. return [
  180. 'code' => 401,
  181. 'msg' => '暂无司机信息',
  182. ];
  183. }
  184. // $verifyCode = $this->verifyCode($code);
  185. // if($verifyCode['code'] != 0){
  186. // throw new \Exception('操作失败,' . $verifyCode['msg']);
  187. // }
  188. $model->tel = $tel;
  189. $save = $model->save();
  190. if(!$save){
  191. throw new \Exception('操作失败,' . array_shift($model->getFirstErrors()));
  192. }
  193. return [
  194. 'code' => 0,
  195. 'msg' => '操作成功',
  196. ];
  197. }catch(\Exception $e){
  198. \Yii::error([__METHOD__, $e]);
  199. return [
  200. 'code' => 1,
  201. 'msg' => $e->getMessage(),
  202. ];
  203. }
  204. }
  205. public function getCode($tel) {
  206. $form = new LoginForm();
  207. $form->phone = $tel;
  208. $form->store_id = get_store_id();
  209. return $form->sendCode(LoginForm::CACHE_KEY_BIND_PHONE);
  210. }
  211. public function verifyCode($code) {
  212. $form = new LoginForm();
  213. $form->verify_code = $code;
  214. // 验证码验证
  215. $result = $form->verifySmsCode(LoginForm::CACHE_KEY_BIND_PHONE);
  216. if ($result['code'] == 1) {
  217. return $result;
  218. }
  219. $form->phone = post_params('phone');
  220. $form->store_id = get_store_id();
  221. return $form->sendCode(LoginForm::CACHE_KEY_BIND_PHONE);
  222. }
  223. //单点送达
  224. public function lineOrderStatus($saas_user_id, $line_id, $order_cloud_store_id) {
  225. $t = \Yii::$app->db->beginTransaction();
  226. try{
  227. $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0]);
  228. if(empty($model)){
  229. return [
  230. 'code' => 401,
  231. 'msg' => '暂无司机信息',
  232. ];
  233. }
  234. $line = DriverLine::findOne(['id' => $line_id, 'driver_id' => $model->id]);
  235. if(empty($line)){
  236. return [
  237. 'code' => 401,
  238. 'msg' => '暂无线路信息',
  239. ];
  240. }
  241. $line_order = DriverLineOrder::find()->where(['line_id' => $line->id, 'is_delete' => 0, 'cloud_store_id' => $order_cloud_store_id])->all();
  242. foreach($line_order as $lorder){
  243. $lorder->finish_time = time();
  244. $lorder->status = DriverLine::STATUS_FINISH;
  245. $save = $lorder->save();
  246. if(!$save){
  247. throw new \Exception('操作失败,' . array_shift($lorder->getFirstErrors()));
  248. }
  249. }
  250. //查看剩余部分
  251. $line_order = DriverLineOrder::find()->where(['line_id' => $line_id, 'is_delete' => 0])->andWhere(['!=', 'status', DriverLine::STATUS_FINISH])->all();
  252. if(!$line_order){
  253. $line->finish_time = time();
  254. $line->status = DriverLine::STATUS_FINISH;
  255. $save = $line->save();
  256. if(!$save){
  257. throw new \Exception('操作失败,' . array_shift($line->getFirstErrors()));
  258. }
  259. }
  260. $t->commit();
  261. return [
  262. 'code' => 0,
  263. 'msg' => '操作成功',
  264. ];
  265. }catch(\Exception $e){
  266. $t->rollBack();
  267. \Yii::error([__METHOD__, $e]);
  268. return [
  269. 'code' => 1,
  270. 'msg' => $e->getMessage(),
  271. 'e' => $e,
  272. ];
  273. }
  274. }
  275. //开始配送
  276. public function lineStatus($saas_user_id, $line_id) {
  277. $t = \Yii::$app->db->beginTransaction();
  278. try{
  279. $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0]);
  280. if(empty($model)){
  281. return [
  282. 'code' => 401,
  283. 'msg' => '暂无司机信息',
  284. ];
  285. }
  286. $line = DriverLine::findOne(['id' => $line_id, 'driver_id' => $model->id]);
  287. $line->start_time = time();
  288. $line->status = DriverLine::STATUS_DOING;
  289. $save = $line->save();
  290. if(!$save){
  291. throw new \Exception('操作失败,' . array_shift($line->getFirstErrors()));
  292. }
  293. $line_order = DriverLineOrder::find()->where(['line_id' => $line->id, 'is_delete' => 0])->all();
  294. foreach($line_order as $lorder){
  295. $lorder->status = DriverLine::STATUS_DOING;
  296. $save = $lorder->save();
  297. if(!$save){
  298. throw new \Exception('操作失败,' . array_shift($lorder->getFirstErrors()));
  299. }
  300. }
  301. $sort = $this->lineOrderSort($line_id);
  302. if($sort['code'] != 0){
  303. throw new \Exception('操作失败,' . $sort['msg']);
  304. }
  305. $t->commit();
  306. return [
  307. 'code' => 0,
  308. 'msg' => '操作成功',
  309. ];
  310. }catch(\Exception $e){
  311. $t->rollBack();
  312. \Yii::error([__METHOD__, $e]);
  313. return [
  314. 'code' => 1,
  315. 'msg' => $e->getMessage(),
  316. ];
  317. }
  318. }
  319. public function lineOrderSort($line_id) {
  320. // $form = new ADriverForm();
  321. $line_order = DriverLineOrder::find()->where(['line_id' => $line_id, 'is_delete' => 0])->groupBy('cloud_store_id')->orderBy('sortkey')->all();
  322. return [
  323. 'code' => 0,
  324. 'msg' => "获取成功",
  325. 'line_order' => $line_order,
  326. ];
  327. }
  328. }