cxgj/modules/api/models/StoreUserForm.php
2023-11-27 09:45:13 +08:00

285 lines
8.7 KiB
PHP

<?php
/**
* @author Any
* @description KISS
* @date 2020-12-2
* @version 1.0.0
*
* _____LOG_____
*
*/
namespace app\modules\api\models;
use function AlibabaCloud\Client\value;
use app\components\FlashStorage;
use app\components\SiteHelper;
use app\models\Box;
use app\models\Coach;
use app\models\DeviceUniqueBindUser;
use app\models\Order;
use app\models\OrderDetail;
use app\models\sms\SmsMsgHelper;
use app\models\sms\SmsTpl;
use app\models\Store;
use app\models\StoreBj;
use app\models\StoreMake;
use app\models\StoreUser;
use app\models\User;
use app\components\auth\AToken;
use app\components\EncryptHelper;
use app\modules\api\components\ApiHelper;
use app\modules\api\components\GetDistance;
use function Symfony\Component\String\b;
use function Symfony\Component\String\s;
use yii\data\Pagination;
class StoreUserForm extends ApiModel
{
public $store_id;
public $user_id;
public $username;
public $date;
public $data;
public function rules()
{
}
public function page()
{
$store = Store::findOne(['id' => $this->store_id]);
$status = empty($store->content_page) ? 2 : 1;
$data = [];
$data['code'] = 0;
$data['msg'] = 'ok';
$data['data'] = $store->content_page ?? '';
$data['status'] = $status;
return $data;
}
/**
* 门店店长申请
*/
public function apply()
{
if (!$this->username) {
return $this->apiReturnError('姓名不能为空');
}
if (!$this->store_id) {
return $this->apiReturnError('所属门店不能为空');
}
$model = StoreUser::findOne([
'user_id' => $this->user_id,
'is_delete' => 0
]);
if ($model) {
return $this->apiReturnError('已申请过店长,不能再申请');
}
$model = new StoreUser();
$model->user_id = $this->user_id;
$model->store_id = $this->store_id;
$model->username = $this->username;
$model->created_at = time();
$model->user_type = 1;
$model->status = 0;
if (!$model->save()) {
return $this->getModelError($model);
}
return $this->apiReturnSuccess('提交申请成功');
}
/**
* 店长预约
*/
public function shopowner_make()
{
if (!$this->store_id) {
return $this->apiReturnError('所属门店不能为空');
}
if (!$this->date) {
return $this->apiReturnError('预约时间不能为空');
}
$begintime = date("Y-m-d H:i:s", mktime(0, 0, 0, date('m'), date('d'), date('Y')));
$endtime = date("Y-m-d H:i:s", mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1);
$date_time = strtotime($this->date);
$begin_time = strtotime($begintime);
$end_time = strtotime($endtime);
if ($date_time >= $begin_time && $date_time <= $end_time) {
return $this->apiReturnError('预约时间不能为当天');
}
$model = StoreMake::findOne([
'make_time' => $this->date,
'user_id' => $this->user_id,
'store_id' => $this->store_id,
'status' => 1
]);
if ($model) {
return $this->apiReturnError('已预约过店长,请勿重复预约');
}
//预约日期 的 开始跟结束时间
$date_start = strtotime($this->date);
$date_end = $date_start + 86400;
$all = StoreMake::find()->select('*')
->where(['store_id' => $this->store_id])
->andWhere(['IN', 'status', [0, 1]])
->andWhere(['between', 'make_time', $date_start, $date_end - 1])
->asArray()
->all();
if ($all) {
return $this->apiReturnError('店长已安排,请勿重复预约');
}
$model = new StoreMake();
$model->user_id = $this->user_id;
$model->store_id = $this->store_id;
$model->make_time = strtotime($this->date);
$model->created_at = time();
$model->msg = $this->data ?? '';
$model->status = 0;
if (!$model->save()) {
return $this->getModelError($model);
}
return $this->apiReturnSuccess('预约成功');
}
/**
* showdoc
* @catalog 店长预约
* @title 店长预约-已预约信息
*/
public function actionShopownerMakeList()
{
if (empty($this->store_id)) {
return $this->apiReturnError('所属门店不能为空');
}
$select = StoreMake::find()->andWhere([
'store_id' => $this->store_id,
'is_delete' => 0,
])->andWhere([
'in', 'status', [0, 1]
])->andWhere([
'>=', 'make_time', strtotime('Y-m-d'),
])->select('user_id,make_time')->all();
$res = [];
foreach ($select as $key => $val) {
$status = 1;
if (intval($val['user_id']) === intval($this->user_id)) {
$status = 2;
}
if (!empty($res[$val['make_time']]) && $res[$val['make_time']]['status'] === 2) {
continue; # 为自己,直接跳过
}
$res[$val['make_time']] = [
'time' => $val['make_time'],
'status' => $status,
'date' => date('Y-m-d', $val['make_time']),
];
}
// 获取本月开始时间
$t = strtotime(date('Y-m-01'));
$e = strtotime(date('Y-m-1', strtotime('next month')) . '+1 month -1 day');
$result = [];
while (true) {
if (!empty($res[$t])) {
$result[] = $res[$t];
} else {
$result[] = [
'time' => $t,
'status' => 0,
'date' => date('Y-m-d', $t),
];
}
if ($t > $e) {
break;
}
$t += 60 * 60 * 24;
}
return $this->apiReturnSuccess('success', $result);
}
/**
* 离店
* @return array
* @throws \Exception
*/
public function checkOut()
{
if (empty($this->store_id)) {
return $this->apiReturnError('所属门店不能为空');
}
//查询是否有
$all = Order::find()->alias('o')
->leftJoin(['rt' => OrderDetail::tableName()], 'o.id=rt.order_id')
->leftJoin(['s' => Store::tableName()], 'o.store_id=s.id')
->leftJoin(['bj' => StoreBj::tableName()], 'o.store_id=bj.store_id')
->leftJoin(['b' => Box::tableName()], 'b.id=o.coach_id')
->select('s.name as store_name,b.name as box_name,s.store_mobile,bj.mobile as bj_mobile,s.location_detail,s.store_mobile,rt.end_at')
->where(['o.is_pay' => 1, 'o.cancel_status' => 0, 'o.is_delete' => 0, 'o.plugin_sign' => 'box_book'])
->andWhere(['o.status' => 1])
->andWhere(['o.user_id' => $this->user_id])
->asArray()
->one();
if (!$all) {
return $this->apiReturnError('暂未进行中的订单');
}
$redis_name = "cxgyc:store_checkout:" . $this->user_id;
$get = FlashStorage::getCache($redis_name);
if ($get) {
return $this->apiReturnError('已通知保洁人员打扫');
}
$sms_sender = new SmsMsgHelper(0);
$tpl_type = SmsTpl::getTplKey(3);
//查询是否有保洁人员
$bj = StoreBj::find()->where(['store_id' => $this->store_id])
->andWhere(['status' => 1, 'is_delete' => 0])->asArray()->all();
//没有保洁 通知门店
if (!$bj) {
FlashStorage::setCache($redis_name, 1, 60 * 10);
$sms_sender->sender($all['store_mobile'], $tpl_type, '86', 0, [
'store' => $all['store_name'],
'name' => $all['box_name'],
'location' => $all['location_detail'],
'phone' => $all['store_mobile'],
]);
return $this->apiReturnSuccess('ok', []);
}
FlashStorage::setCache($redis_name, 1, 60 * 10);
foreach ($bj as $index => $item) {
$sms_sender->sender($item['bj_mobile'], $tpl_type, '86', 0, [
'store' => $all['store_name'],
'name' => $all['box_name'],
'location' => $all['location_detail'],
'phone' => $all['store_mobile'],
]);
}
return $this->apiReturnSuccess('ok', []);
}
}