| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\admin\models\worker;
- use app\models\District;
- use app\models\SaasUser;
- use app\models\Order;
- use app\models\Cash;
- use app\models\User;
- use app\models\Worker;
- use app\models\WorkerCatExt;
- use app\models\WorkerOrderExt;
- use app\models\WorkerCat;
- use app\models\WorkerLevel;
- use app\models\WorkerPic;
- use app\models\WorkerSetting;
- use app\models\OrderComment;
- use app\models\OrderDetail;
- use app\utils\Notice\NoticeSend;
- use app\modules\client\models\v1\LoginForm;
- use app\models\UserShareMoney;
- use app\modules\client\models\OrderComplete;
- class WorkerForm extends Model
- {
- public $store_id;
-
- public $verify_code;
- public $id;
- public $name; //名称
- public $gender;
- public $age;
- public $form;
- public $type;
- public $cat_id;
- public $user;
- public $user_id;
- public $worker_id;
- public $level;
- public $desc;
- public $tel;
- public $logo;
- public $status;
- public $open_status;
- public $reason;
- public $area;
- public $lat;
- public $lng;
- public $province_id;
- public $city_id;
- public $district_id;
- public $address;
- public $nickname;
- public $order_id;
- public $goods_name;
- public $score;
- public $order_range;
- public $begin;
- public $end;
- public $key_word;
- public $is_hide;
- public $setting;
- public $pic_url;
- public function rules()
- {
- return [
- [['id', 'user_id', 'level', 'type', 'status', 'province_id', 'city_id', 'district_id', 'open_status', 'gender', 'age'], 'integer'],
- [['desc', 'name', 'tel', 'logo', 'reason', 'area', 'lat', 'lng', 'address', 'nickname', 'verify_code', 'cat_id'], 'string'],
- [['user', 'form', 'order_id', 'worker_id', 'goods_name', 'score', 'begin', 'end', 'key_word', 'gender', 'is_hide', 'setting', 'pic_url', 'order_range'], 'safe'],
- ];
- }
- public function workerList() {
- try {
- $store_id = $this->store_id;
- $status = $this->status;
- $open_status = $this->open_status;
- $name = $this->name;
- $cat_id = $this->cat_id;
- $level = $this->level;
- $nickname = $this->nickname;
- $tel = $this->tel;
- $query = Worker::find()->alias('w')->where(['w.store_id' => $store_id, 'w.status' => [Worker::STATUS_WAIT_AUDIT, Worker::STATUS_VALID, Worker::STATUS_REJECT]]);
- if (!is_null($status) && in_array($status, [Worker::STATUS_WAIT_AUDIT, Worker::STATUS_VALID, Worker::STATUS_REJECT])) {
- $query->andWhere(['w.status' => $status]);
- }
- if (is_null($status)) {
- $query->andWhere(['w.status' => Worker::STATUS_VALID]);
- }
- if ($name) {
- $query->andWhere(['LIKE', 'w.name', $name]);
- }
- if ($tel) {
- $query->andWhere(['w.tel' => $tel]);
- }
- if ($cat_id) {
- $cat_id = explode(',', $cat_id);
- $worker_ = WorkerCatExt::find()->where(['cat_id' => $cat_id, 'is_delete' => 0])->select('worker_id')->column();
- $worker_ = array_merge($worker_, [0]);
- $query->andWhere(['w.id' => $worker_]);
- }
- if ($level) {
- $query->andWhere(['w.level' => $level]);
- }
- if ($nickname) {
- $query->andWhere(['LIKE', 'su.name', $nickname]);
- }
- // if (!is_null($open_status) && in_array($open_status, [1, 2, 3])) {
- // $query->andWhere(['w.status' => $status]);
- // }
- if (!is_null($open_status)) {
- if (in_array($open_status, [0, 1])) {
- $query->andWhere(['w.open_status' => $open_status]);
- if ((int)$open_status === 1) {
- $worker_ids = WorkerOrderExt::find()->where(['AND',
- ['user_revoke' => 0],
- ['<', 'time_outgoing', time()],
- ['>', 'time_end_service', time()]])->select('worker_id')->column();
- $worker_ids = array_merge($worker_ids, [0]);
- $query->andWhere(['NOT IN', 'w.id', $worker_ids]);
- }
- }
- if ((int)$open_status === 2) {
- $query->leftJoin(['o' => WorkerOrderExt::tableName()], 'o.worker_id = w.id');
- $query->andWhere(['AND',
- ['w.open_status' => 1, 'o.user_revoke' => 0],
- ['<', 'o.time_outgoing', time()],
- ['>', 'o.time_end_service', time()]
- ]);
- }
- }
- $query->leftJoin(['u' => User::tableName()], 'w.user_id = u.id')
- ->leftJoin(['su' => SaasUser::tableName()], 'w.saas_user_id = su.id')
- ->select('w.*, su.name nickname')
- ->orderBy('w.created_at desc');
- $list = pagination_make($query);
- foreach ($list['list'] as &$item) {
- $item['form'] = json_decode($item['form'], true);
- $item['status'] = (int)$item['status'];
- $item['open_status'] = (int)$item['open_status'];
- if ($item['book_end_time'] <= 0 && $item['book_start_time'] <= 0) {
- $item['worker_time'] = '未设置服务时间';
- }
- if ($item['book_start_time'] > 0) {
- if (strlen($item['book_start_time']) === 3) {
- $item['book_start_time'] = '0' . $item['book_start_time'];
- }
- $hour = substr($item['book_start_time'], 0, 2);
- $minute = substr($item['book_start_time'], -2);
- $item['worker_time'] = $hour . ':' . $minute;
- } else {
- $item['worker_time'] = "00:00";
- }
- if ($item['book_end_time'] > 0) {
- if (strlen($item['book_end_time']) === 3) {
- $item['book_end_time'] = '0' . $item['book_end_time'];
- }
- $hour = substr($item['book_end_time'], 0, 2);
- $minute = substr($item['book_end_time'], -2);
- $item['worker_time'] .= '-'. $hour . ':' . $minute;
- } else {
- $item['worker_time'] .= "-00:00";
- }
- if ($item['open_status'] === 1) {
- $order_ext = WorkerOrderExt::find()->where(['AND',
- ['user_revoke' => 0, 'worker_id' => $item['id']],
- ['<=', 'time_start_service', time()],
- ['>=', 'time_end_service', time()]
- ])->one();
- if ($order_ext) {
- $item['open_status'] = 2;
- }
- if ($item['open_status'] === 1) {
- if ($item['book_end_time'] < date("Hi")) {
- $item['open_status'] = 0;
- }
- }
- }
- //订单数量
- $order_ext = WorkerOrderExt::find()->where(['worker_id' => $item['id']])->select('order_id')->asArray()->all();
- $item['order_num'] = (int)count($order_ext);
- $item['province'] = District::find()->where(['id' => $item['province_id']])->select('name')->scalar();
- $item['city'] = District::find()->where(['id' => $item['city_id']])->select('name')->scalar();
- $item['district'] = District::find()->where(['id' => $item['district_id']])->select('name')->scalar();
- // $item['address'] = $area['address'];
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- $item['updated_at'] = date('Y-m-d H:i:s', $item['updated_at']);
- $item['pic_url'] = WorkerPic::find()->where(['worker_id' => $item['id'], 'is_delete' => 0])->select('pic_url')->asArray()->all();
- if ($item['pic_url']) {
- foreach ($item['pic_url'] as &$value) {
- if (strpos($value['pic_url'], 'https:') === false && strpos($value['pic_url'], 'http:') === false) {
- $value['pic_url'] = 'https:' . $value['pic_url'];
- }
- }
- }
- $item['cat_id'] = WorkerCatExt::find()->where(['worker_id' => $item['id'], 'is_delete' => 0])->select('cat_id')->column();
- $item['cat_name'] = WorkerCat::find()->where(['id' => $item['cat_id']])->select('name')->column();
- }
- $worker_level = WorkerLevel::find()->where(['status' => 1, 'store_id' => $store_id, 'is_delete' => 0])->select('level id, name')
- ->asArray()->all();
- $worker_cat = WorkerCat::find()->where(['is_show' => 1, 'store_id' => $store_id, 'is_delete' => 0])->select('id, name')->orderBy('sort desc')
- ->asArray()->all();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list['list'],
- 'worker_level' => $worker_level,
- 'worker_cat' => $worker_cat,
- 'pageNo' => $list['pageNo'],
- 'totalCount' => $list['totalCount'],
- ],
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- public function workerSave() {
- $t = \Yii::$app->db->beginTransaction();
- try {
- $id = $this->id;
- $name = $this->name;
- $cat_id = $this->cat_id;
- $user_id = $this->user_id;
- $level = $this->level;
- $desc = $this->desc;
- $tel = $this->tel;
- $logo = $this->logo;
- $lat = $this->lat;
- $lng = $this->lng;
- $province_id = $this->province_id;
- $city_id = $this->city_id;
- $district_id = $this->district_id;
- $pic_url = $this->pic_url;
- $store_id = $this->store_id;
- //查询用户信息
- $user = User::findOne(['store_id' => $store_id, 'id' => $user_id, 'is_delete' => 0]);
- if (!$user || !$user->binding) {
- throw new \Exception('商城用户信息查询失败');
- }
- $saas_user = SaasUser::findOne(['mobile' => $user->binding]);
- if (!$saas_user) {
- throw new \Exception('用户信息查询失败');
- }
- //查询分类信息
- $work_cat = WorkerCat::findOne(['id' => $cat_id, 'store_id' => $store_id, 'is_show' => 1]);
- if (!$work_cat) {
- throw new \Exception('分类信息查询失败');
- }
- //查询等级信息
- if ($level) {
- $worker_level = WorkerLevel::findOne(['level' => $level, 'status' => 1, 'store_id' => $store_id]);
- if (!$worker_level) {
- throw new \Exception('服务人员等级查询失败');
- }
- } else {
- $worker_level = WorkerLevel::find()->where(['status' => 1, 'store_id' => $store_id])
- ->orderBy('id ASC')->select('level')->asArray()->one();
- if (!$worker_level) {
- throw new \Exception('服务人员等级查询失败');
- }
- $level = $worker_level['level'];
- }
- if ($province_id && $city_id && $district_id) {
- //地址信息
- $province = District::find()->where(['id' => $province_id])->select('name')->scalar();
- $city = District::find()->where(['id' => $city_id])->select('name')->scalar();
- $district = District::find()->where(['id' => $district_id])->select('name')->scalar();
- if (!$province || !$city || !$district) {
- throw new \Exception('省市区查询失败');
- }
- }
- $worker = Worker::findOne(['id' => $id, 'store_id' => $store_id]);
- if (!$worker) {
- $worker = new Worker();
- $worker->store_id = $store_id;
- $worker->form = '';
- }
- $worker->status = 1;
- $worker->name = $name;
- // $worker->cat_id = $cat_id;
- $worker->user_id = $user->id;
- $worker->saas_user_id = $saas_user->id;
- $worker->level = $level;
- $worker->name = $name;
- // $worker->desc = $desc ?? '';
- // $worker->tel = $tel ?? $saas_user->mobile;
- // $worker->logo = $logo ?? $saas_user->avatar;
- // $worker->area = '';//$area;
- // $worker->lat = $lat ?? '0.00';
- // $worker->lng = $lng ?? '0.00';
- // $worker->province_id = $province_id ?? 0;
- // $worker->city_id = $city_id ?? 0;
- // $worker->district_id = $district_id ?? 0;
- if (!$worker->save()) {
- throw new \Exception(implode(';', array_values($worker->firstErrors)));
- }
- WorkerCatExt::deleteAll(['worker_id' => $worker->id]);
- $cat_id = explode(',', $cat_id);
- foreach ($cat_id as $cat_id_) {
- $worker_cat = WorkerCat::findOne(['id' => $cat_id_, 'is_delete' => 0, 'is_show' => 1]);
- if ($worker_cat) {
- $worker_cat_ext = new WorkerCatExt();
- $worker_cat_ext->cat_id = $cat_id_;
- $worker_cat_ext->worker_id = $worker->id;
- $worker_cat_ext->store_id = $store_id;
- $worker_cat_ext->save();
- }
- }
- if (!is_null($pic_url)) {
- WorkerPic::updateAll(['is_delete' => 1], ['worker_id' => $worker->id, 'is_delete' => 0]);
- $pic_url = json_decode($pic_url, true);
- foreach ($pic_url as $item) {
- $pic = new WorkerPic();
- $pic->worker_id = $worker->id;
- $pic->pic_url = $item['pic_url'];
- if (!$pic->save()) {
- throw new \Exception(json_encode($pic->errors));
- }
- }
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '操作成功'
- ];
- } catch (\Exception $e) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
- public function workerStatus() {
- $t = \Yii::$app->db->beginTransaction();
- try {
- $id = $this->id;
- $status = (int)$this->status;
- $reason = $this->reason;
- $store_id = $this->store_id;
- $worker = Worker::findOne(['id' => $id, 'store_id' => $store_id]);
- if (!$worker) {
- throw new \Exception('查询信息失败');
- }
- if (!in_array($status, [Worker::STATUS_VALID, Worker::STATUS_REJECT, Worker::STATUS_CLOSE])) {
- throw new \Exception('状态参数错误');
- }
- if ((int)$worker->status !== Worker::STATUS_WAIT_AUDIT && in_array($status, [Worker::STATUS_VALID, Worker::STATUS_REJECT])) {
- throw new \Exception('已审核完成,请勿重复操作');
- }
- // if ((int)$worker->status !== Worker::STATUS_WAIT_AUDIT && $status === Worker::STATUS_REJECT) {
- // throw new \Exception('数据状态错误');
- // }
- if (in_array($status, [Worker::STATUS_VALID, Worker::STATUS_REJECT])) {
- if ($status === Worker::STATUS_REJECT) {
- if (!$reason) {
- throw new \Exception('请填写原因');
- } else {
- $worker->reason = $reason;
- }
- }
- }
- $worker->status = $status;
- if ($status == Worker::STATUS_CLOSE) {
- WorkerCatExt::deleteAll(['worker_id' => $worker->id]);
- }
- if (!$worker->save()) {
- throw new \Exception(json_encode($worker->errors));
- }
- $t->commit();
- if (in_array($status, [Worker::STATUS_VALID, Worker::STATUS_REJECT])) {
- $res = NoticeSend::AgentExamine($worker->id, 3);
- if (isset($res['code']) && $res['code'] !== 0) {
- debug_log($res, 'sms.log');
- }
- }
- return [
- 'code' => 0,
- 'msg' => '操作成功'
- ];
- } catch (\Exception $e) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
- }
-
- public function reg() {
- try {
- $form = new LoginForm();
- $form->store_id = $this->store_id;
- $form->phone = $this->tel;
- $form->verify_code = $this->verify_code;
- $verifySmsCode = $form->verifySmsCode(LoginForm::CACHE_KEY_BIND_PHONE);
- if ($verifySmsCode['code'] != 0) {
- return $verifySmsCode;
- }
- $saas_user = SaasUser::findOne(['mobile' => $this->user->binding]);
- if (!$saas_user) {
- throw new \Exception('用户信息查询失败');
- }
- $worker = Worker::findOne(['user_id' => $this->user->id, 'status' => Worker::STATUS_VALID]);
- if ($worker) {
- if($worker->status != Worker::STATUS_REJECT){
- throw new \Exception('状态异常');
- }
- }else{
- $worker = new Worker();
- $worker->store_id = $this->store_id;
- }
- $worker->cat_id = $this->cat_id;
- $worker->name = $this->name;
- $worker->user_id = $this->user->id;
- $worker->saas_user_id = $saas_user->id;
- $worker->tel = $this->tel;
- $worker->logo = $this->logo;
- $worker->gender = $this->gender;
- $worker->age = $this->age;
- $worker->logo = $this->logo;
- $worker->province_id = $this->province_id ?? 0;
- $worker->city_id = $this->city_id ?? 0;
- $worker->district_id = $this->district_id ?? 0;
- $worker->form = is_string($this->form) ? $this->form : json_encode($this->form);
- $worker->lat = $this->lat;
- $worker->lng = $this->lng;
- $worker->status = 0;
- if (!$worker->save()) {
- throw new \Exception('保存失败' . array_shift($worker->getFirstErrors()));
- }
-
- return [
- 'code' => 0,
- 'msg' => '申请成功,请等待审核'
- ];
- } catch (\Exception $e) {
- return [
- 'code' => 1,
- 'msg' => '保存失败' . $e->getMessage()
- ];
- }
- }
-
- //分配订单-服务人员列表
- public function canBindWorkerList()
- {
- $store_id = $this->store_id;
- $order_id = $this->order_id;
- $type = $this->type;
- $setting = WorkerSetting::getByStoreId($store_id);
- $orderSpace = $setting['order_space'];
- $WorkerOrderExt = WorkerOrderExt::findOne(['store_id' => $store_id, 'order_id' => $order_id, 'status_ext' => WorkerOrderExt::STATUS_EXT_WAIT_BIND]);
- if(empty($WorkerOrderExt)){
- return [
- 'code' => 1,
- 'msg' => '参数错误,订单ext不存在',
- ];
- }
- $order = Order::findOne($order_id);
- $gnum = count($order->detail);
-
- $sql = '
- SELECT
- w.id
- FROM
- cyy_worker w
- LEFT JOIN (
- SELECT
- count(id) num,
- worker_id
- FROM
- cyy_worker_goods
- WHERE
- goods_id IN (
- SELECT goods_id FROM cyy_order_detail WHERE order_id = :order_id AND is_delete=0
- )
- GROUP BY
- worker_id
- ) wg ON w.id = wg.worker_id
- WHERE
- wg.num = :gnum AND w.status != :status';
- $queryWorkerId = \Yii::$app->db->createCommand($sql, [':order_id' => $order_id, ':gnum' => $gnum, ':status' => Worker::STATUS_VALID])->getRawSql();
- $queryOrder = Worker::find()->alias('w')->leftJoin([
- 'woe' => WorkerOrderExt::find()->where([
- 'and',
- ['>=', 'status_ext', WorkerOrderExt::STATUS_EXT_HAS_BIND],
- ['<', 'status_ext', WorkerOrderExt::STATUS_EXT_CANCEL],
- ])->select('id doing, worker_id')
- ], 'w.id = woe.worker_id')->where([
- 'w.store_id' => $store_id,
- 'w.status' => Worker::STATUS_VALID,
- ]);
- if($this->name){
- $queryOrder->andWhere(['like', 'w.name', $this->name]);
- }
- if($this->tel){
- $queryOrder->andWhere(['like', 'w.tel', $this->tel]);
- }
- if($type == 1){
- $queryOrder->andWhere(['woe.doing' => null]);
- }
- if($type == 2){
- $queryOrder->andWhere(['>', 'woe.doing', 0]);
- }
- if($type == 3){
- $queryOrder->andWhere(['w.open_status' => 0]);
- }
- $queryOrder->andWhere('w.id in ('. $queryWorkerId .')');
- $queryDis = 'ROUND(st_distance_sphere(point('. $WorkerOrderExt->lng .', '. $WorkerOrderExt->lat .'), point(w.lng, w.lat)), 2)';
- $queryOrder->andWhere($queryDis . " < :dis", [':dis' => $orderSpace]);
- $queryOrder->select('*');
- $queryOrder->addSelect([$queryDis . ' dis']);
- $queryOrder->orderBy('dis ASC, doing ASC');
- $data = pagination_make($queryOrder);
- foreach($data['list'] as &$item){
- $item['ignore'] = 0;
- $cacheV = WorkerOrderExt::cacheIgnoreOrderId($item->id);
- if($cacheV && in_array($order_id, array_keys($cacheV))){
- $item['ignore'] = 1;
- }
- $item['canBind'] = 1;
- if(empty($item['doing'])){
- $item['canBind'] = 1;
- }
- if($item['doing']){
- $item['canBind'] = 2;
- }
- if(empty($item['open_status'])){
- $item['canBind'] = 3;
- }
- }
- $res = [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $data,
- 'q' => $queryOrder->createCommand()->getRawSql(),
- ];
- return $res;
- }
-
- //分配订单
- public function bindWorker()
- {
- $store_id = $this->store_id;
- $order_id = $this->order_id;
- $worker_id = $this->worker_id;
- if(empty($order_id) || empty($worker_id)){
- return [
- 'code' => 1,
- 'msg' => '参数错误1',
- '$order_id' => $order_id,
- '$worker_id' => $worker_id,
- ];
- }
- $orderExt = WorkerOrderExt::findOne(['store_id' => $store_id, 'order_id' => $order_id, 'status_ext' => WorkerOrderExt::STATUS_EXT_WAIT_BIND]);
- if(empty($orderExt)){
- return [
- 'code' => 1,
- 'msg' => '参数错误,订单ext不存在',
- ];
- }
- $t = \Yii::$app->db->beginTransaction();
- try{
- $orderExt = WorkerOrderExt::find()->where('id = :id FOR UPDATE', [':id' => $orderExt->id])->one();
- if(!$orderExt){
- throw new \Exception('锁失败');
- }
- $orderExt->worker_id = $worker_id;
- $orderExt->status_ext = WorkerOrderExt::STATUS_EXT_WAIT_BIND_OK;
- $save = $orderExt->save();
- if(!$save){
- throw new \Exception(array_shift($orderExt->getFirstErrors()));
- }
- $t->commit();
- $order = Order::findOne($order_id);
- NoticeSend::PlaceOrder($order->order_no, $order->md_id, $order->store_id, $order);
- return [
- 'code' => 0,
- 'msg' => 'success',
- ];
- } catch (\Exception $ex) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '操作失败,' . $ex->getMessage(),
- ];
- }
- }
-
- //确认收款
- public function orderIsPay()
- {
- $store_id = $this->store_id;
- $order_id = $this->order_id;
- if(empty($order_id)){
- return [
- 'code' => 1,
- 'msg' => '参数错误1',
- '$order_id' => $order_id,
- ];
- }
- $order = Order::findOne(['id' => $order_id, 'store_id' => $store_id, 'trade_status' => Order::ORDER_FLOW_DEFAULT]);
- if(empty($order)){
- return [
- 'code' => 1,
- 'msg' => '参数错误,订单不存在或状态异常',
- ];
- }
- $t = \Yii::$app->db->beginTransaction();
- try{
- $order = Order::find()->where('id = :id FOR UPDATE', [':id' => $order_id])->one();
- if(!$order){
- throw new \Exception('锁失败');
- }
- $order->is_pay = 1;
- $order->pay_type = 3;
- $order->pay_time = time();
- $order->trade_status = Order::ORDER_FLOW_NO_SEND;
- $save = $order->save();
- if(!$save){
- throw new \Exception(array_shift($order->getFirstErrors()));
- }
- // 支付完成后,相关操作
- $form = new OrderComplete();
- $form->order_id = $order->id;
- $form->order_type = 0;
- $form->store_id = $store_id;
- $form->notify();
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '操作成功',
- ];
- } catch (\Exception $ex) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '操作失败,' . $ex->getMessage(),
- ];
- }
- }
-
- //确认收货
- public function orderConfirm()
- {
- $store_id = $this->store_id;
- $order_id = $this->order_id;
- if(empty($order_id)){
- return [
- 'code' => 1,
- 'msg' => '参数错误1',
- '$order_id' => $order_id,
- ];
- }
- $order = Order::findOne(['id' => $order_id, 'store_id' => $store_id, 'is_pay' => 1]);
- if(empty($order)){
- return [
- 'code' => 1,
- 'msg' => '参数错误,订单不存在或订单未付款',
- ];
- }
- $t = \Yii::$app->db->beginTransaction();
- try{
- $order = Order::find()->where('id = :id FOR UPDATE', [':id' => $order_id])->one();
- if(!$order){
- throw new \Exception('锁失败');
- }
- $order->trade_status = Order::ORDER_FLOW_CONFIRM;
- $order->confirm_time = time();
- $save = $order->save();
- if(!$save){
- throw new \Exception(array_shift($order->getFirstErrors()));
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '操作成功',
- ];
- } catch (\Exception $ex) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '操作失败,' . $ex->getMessage(),
- ];
- }
- }
-
- public function commentList() {
- $store_id = $this->store_id;
- $queryOrder = WorkerOrderExt::find()->where(['store_id' => $store_id])->select('order_id');
- $query = OrderComment::find()->alias('oc')->leftJoin([
- 'woe' => WorkerOrderExt::tableName()
- ], 'oc.order_id = woe.order_id')->leftJoin([
- 'w' => Worker::tableName()
- ], 'w.id = woe.worker_id')->leftJoin([
- 'o' => Order::tableName()
- ], 'oc.order_id = o.id')->leftJoin([
- 'od' => OrderDetail::tableName()
- ], 'oc.order_detail_id = od.id')->leftJoin([
- 'u' => User::tableName()
- ], 'oc.user_id = u.id')->leftJoin([
- 'su' => SaasUser::tableName()
- ], 'su.mobile = u.binding')->where([
- 'oc.order_id' => $queryOrder,
- 'oc.is_delete' => OrderComment::IS_DELETE_FALSE,
-
- ])->groupBy('oc.id');
- if(isset($this->is_hide) && $this->is_hide >= 0){
- $query->andWhere(['oc.is_hide' => $this->is_hide]);
- }
- if($this->goods_name){
- $query->andWhere(['like', 'od.goods_name', $this->goods_name]);
- }
- if($this->nickname){
- $query->andWhere(['like', 'su.name', $this->nickname]);
- }
- if($this->key_word){
- $query->andWhere(['like', 'od.content', $this->key_word]);
- }
- if($this->score > 0){
- if($this->score == 3){
- $query->andWhere(['>=', 'oc.score', $this->score]);
- }else{
- $query->andWhere(['oc.score' => $this->score]);
- }
- }
- if($this->begin){
- $query->andWhere(['>=', 'oc.created_at', $this->begin]);
- }
- if($this->end){
- $query->andWhere(['<=', 'oc.created_at', $this->end]);
- }
- $queryOrderBy = 'oc.id DESC';
- if($orderby == 1){
- $queryOrderBy = 'oc.id DESC';
- }else if($orderby == 2){
- $queryOrderBy = 'oc.id ASC';
- }
- $query->orderBy($queryOrderBy);
- $query->select('oc.*, o.order_no, od.goods_name, od.pic goods_pic, su.name su_name, su.avatar su_avatar, w.name w_name, w.logo w_logo, w.tel w_tel');
- $data = pagination_make($query);
- foreach($data['list'] as &$item){
- $item['pic_list'] = json_decode($item['pic_list']);
- }
- $data['data'] = $data['list'];
- unset($data['list']);
- $res = [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $data,
- 'q' => $query->createCommand()->getRawSql(),
- ];
- return $res;
- }
-
- public function setting() {
- $store_id = $this->store_id;
- $setting = WorkerSetting::getByStoreId($store_id);
- if($this->setting){
- $post = $this->setting;
- if(is_string($post)){
- $post = json_decode($post, true);
- }
- if (!$setting) {
- $setting = new WorkerSetting();
- $setting->store_id = $this->store_id;
- }
- $setting->setAttributes($post, false);
- if($post['form_apply']['list']){
- foreach($post['form_apply']['list'] as $i => &$item){
- if(empty($item['id'])){
- $item['id'] = time() . random_int(10000, 99999);
- }
- }
- }
- $setting->form_apply = $post['form_apply'] ? json_encode($post['form_apply']) : '';
- $setting->tag = $post['tag'];
- $setting->banner = $post['banner'] ? json_encode($post['banner']) : '';
- if (!$setting->save()) {
- // throw new \Exception('保存失败' . array_shift($setting->getFirstErrors()));
- return [
- 'code' => 1,
- 'msg' => '保存失败' . array_shift($setting->getFirstErrors()),
- ];
- }
- }
- if($setting){
- $setting->form_apply = json_decode($setting->form_apply, true);
- $setting->banner = json_decode($setting->banner, true);
- }
- return [
- 'code' => 0,
- 'msg' => 'ok',
- 'setting' => $setting ?? (object)[],
- ];
- }
- //佣金列表
- public function storeWorkerProfitList() {
- $query = Order::find()->alias('o')->leftJoin(['oe' => WorkerOrderExt::tableName()], 'o.id = oe.order_id')->where([
- 'o.is_delete' => 0, 'o.store_id' => $this->store_id
- ])->andWhere([
- '<>', 'o.trade_status', Order::ORDER_FLOW_CANCEL
- ]);
- $query->orderBy('o.id DESC');
- $pagination = pagination_make($query);
- $listArray = $pagination['list'];
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $listArray,
- 'pageNo' => $pagination['pageNo'],
- 'pageSize' => $pagination['pageSize'],
- 'totalCount' => $pagination['totalCount'],
- ],
- ];
- }
- //服务人员佣金列表
- public function workerProfitList($is_price_no = 0) {
- $query = Order::find()->alias('o')
- ->leftJoin(['oe' => WorkerOrderExt::tableName()], 'o.id = oe.order_id')
- ->where([
- 'o.is_delete' => 0, 'o.store_id' => $this->store_id
- ])->andWhere([
- '<>', 'o.trade_status', Order::ORDER_FLOW_CANCEL
- ])->andWhere([
- 'oe.worker_id' => $this->worker_id,
- 'o.is_pay' => 1,
- ]);
- $sumQuery = clone $query;
- $sum_money = $sumQuery->sum('worker_price');
- $sumQueryIsPriceNo = clone $query;
- $sumQueryIsPriceNo->andWhere(['worker_is_price' => 0]);
- $sumMoneyIsPriceNo = $sumQueryIsPriceNo->sum('worker_price');
-
- if($is_price_no){
- $query->andWhere(['worker_is_price' => 0]);
- }
- $query->select('o.order_no, o.id, o.pay_time, oe.worker_is_price_time, oe.worker_is_price, oe.worker_price');
- $query->orderBy('o.id DESC');
- $pagination = pagination_make($query);
- $listArray = $pagination['list'];
- foreach($listArray as &$item){
- $item['source_name'] = '服务人员佣金';
- $item['created_at'] = $item['pay_time'];
- $item['send_time'] = $item['worker_is_price_time'];
- $item['money'] = $item['worker_price'];
- $item['is_price'] = $item['worker_is_price'];
- }
- return [
- 'sum_money' => (float)$sum_money,
- 'sumMoneyIsPriceNo' => (float)$sumMoneyIsPriceNo,
- 'data' => $listArray,
- 'pageNo' => $pagination['pageNo'],
- 'pageSize' => $pagination['pageSize'],
- 'totalCount' => $pagination['totalCount'],
- ];
- }
- //发放佣金
- public static function workerProfitSend($order_id = 0) {
- $woe = WorkerOrderExt::findOne(['order_id' => $order_id, 'worker_is_price' => 0]);
- if(!$woe){
- return [
- 'code' => 1,
- 'msg' => '订单不存在或已发放',
- ];
- }
- $key = 'workerProfitSend_' . $order_id;
- if(cache()->get($key)){
- return [
- 'code' => 1,
- 'msg' => '已操作,稍后再试',
- ];
- }
- cache()->set($key, 1, 60);
- $t = \Yii::$app->db->beginTransaction();
- try{
- $woe->worker_is_price = 1;
- $woe->worker_is_price_time = time();
- $save = $woe->save();
- if(!$save){
- throw new \Exception('发放状态修改失败' . array_shift($woe->getFirstErrors()));
- }
- $worker = Worker::findOne($woe->worker_id);
- $user = User::findOne($worker->user_id);
- $profit = $woe['worker_price'];
- $user->total_price += $profit;
- $user->price += $profit;
- $save = $user->save();
- if(!$save){
- throw new \Exception('用户佣金信息修改失败' . array_shift($user->getFirstErrors()));
- }
- UserShareMoney::set($profit, $user->id, $woe->order_id, 0, 1, $woe->store_id, Order::ORDER_TYPE_WORKER);
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'ok',
- ];
- } catch (\Exception $ex) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '操作失败,' . $ex->getMessage(),
- ];
- }
- }
- /**
- * 获取提现列表
- * @return array
- */
- public function getStoreWorkerCashList(){
- $query = Cash::find()->alias('c')
- ->where(['c.is_delete' => Cash::IS_DELETE_NO, 'c.store_id' => $this->store_id])
- ->leftJoin(['u' => User::tableName()], 'u.id=c.user_id')
- ->leftJoin(['w' => Worker::tableName()], 'w.user_id=c.user_id')
- ->andWhere([
- 'c.cash_type' => Cash::IS_CASH_TYPE_WORKER
- ]);
- if ($this->keyword) {
- $query->andWhere([
- 'or',
- ['like', 'u.nickname', $this->keyword],
- ['like', 'w.name', $this->keyword]
- ]);
- }
- if ($this->dateStart) {
- $query->andWhere(['>=', 'c.created_at', strtotime($this->dateStart)]);
- }
- if ($this->dateEnd) {
- $query->andWhere(['<=', 'c.created_at', strtotime($this->dateEnd)]);
- }
- if ($this->status == Cash::STATUS_APPLY and $this->status != '') {//待审核
- $query->andWhere(['c.status' => Cash::STATUS_APPLY]);
- }
- if ($this->status == Cash::STATUS_CONFIRM) {//待打款
- $query->andWhere(['c.status' => Cash::STATUS_CONFIRM]);
- }
- if ($this->status == Cash::STATUS_GIVEN) {//已打款
- $query->andWhere(['in', 'c.status', [Cash::STATUS_GIVEN, Cash::STATUS_RECHARGE]]);
- }
- if ($this->status == Cash::STATUS_REFUSE) {//无效
- $query->andWhere(['c.status' => Cash::STATUS_REFUSE]);
- }
- if ($this->id) {
- $query->andWhere(['w.id' => $this->id]);
- }
- $query->distinct()->orderBy('c.status ASC,c.created_at DESC')->select([
- 'c.*', 'u.nickname','u.platform', 'u.avatar_url','u.binding'
- ]);
- $pagination = pagination_make($query);
- $list = $pagination['list'];
- foreach($list as &$value){
- $value['service_money'] = $value['service_charge'] * $value['price'] / 100;
- $value['created_at'] = date('Y-m-d H:i:s', $value['created_at']);
- $value['updated_at'] = !empty($value['updated_at']) ? date('Y-m-d H:i:s', $value['updated_at']) : '';
- $value['money'] = Cash::getServiceMoney($value);
- $sassuser = SaasUser::findOne(['mobile' => $value['binding']]);
- $value['avatar_url'] = !empty($sassuser['avatar']) ? $sassuser['avatar'] : $value['avatar_url'];
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list,
- 'pageNo' => $pagination['pageNo'],
- 'totalCount' => $pagination['totalCount'],
- ],
- ];
- }
- /**
- * 获取提现列表
- * @return array
- */
- public function getWorkerCashList(){
- $worker = Worker::findOne(['user_id' => $this->user_id, 'status' => 1]);
- if(!$worker){
- return [
- 'code' => 1,
- 'msg' => '用户不存在',
- ];
- }
- $query = Cash::find()->alias('c')
- ->where(['c.is_delete' => Cash::IS_DELETE_NO, 'c.store_id' => $this->store_id])
- ->andWhere([
- 'c.user_id' => $this->user_id,
- 'c.cash_type' => Cash::IS_CASH_TYPE_WORKER
- ]);
- if ($this->dateStart) {
- $query->andWhere(['>=', 'c.created_at', strtotime($this->dateStart)]);
- }
- if ($this->dateEnd) {
- $query->andWhere(['<=', 'c.created_at', strtotime($this->dateEnd)]);
- }
- if ($this->status == Cash::STATUS_APPLY and $this->status != '') {//待审核
- $query->andWhere(['c.status' => Cash::STATUS_APPLY]);
- }
- if ($this->status == Cash::STATUS_CONFIRM) {//待打款
- $query->andWhere(['c.status' => Cash::STATUS_CONFIRM]);
- }
- if ($this->status == Cash::STATUS_GIVEN) {//已打款
- $query->andWhere(['in', 'c.status', [Cash::STATUS_GIVEN, Cash::STATUS_RECHARGE]]);
- }
- if ($this->status == Cash::STATUS_REFUSE) {//无效
- $query->andWhere(['c.status' => Cash::STATUS_REFUSE]);
- }
- $query->distinct()->orderBy('c.status ASC,c.created_at DESC');
- $pagination = pagination_make($query);
- $list = $pagination['list'];
- foreach($list as &$value){
- $value['service_money'] = $value['service_charge'] * $value['price'] / 100;
- $value['created_at'] = date('Y-m-d H:i:s', $value['created_at']);
- $value['updated_at'] = !empty($value['updated_at']) ? date('Y-m-d H:i:s', $value['updated_at']) : '';
- $value['money'] = Cash::getServiceMoney($value);
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list,
- 'pageNo' => $pagination['pageNo'],
- 'totalCount' => $pagination['totalCount']
- ],
- ];
- }
- }
|