Files
xk-api-yii/admin/controllers/store/StoreController.php
2024-09-19 11:32:39 +08:00

335 lines
12 KiB
PHP

<?php
namespace admin\controllers\store;
use admin\components\BaseAdminController;
use admin\controllers\AuthController;
use admin\models\Admin;
use common\enums\UserRoleEnum;
use common\models\AdminAccessToken;
use common\models\DrugStoreDrug;
use common\models\DrugStoreRelations;
use common\models\Role;
use common\models\Store;
use common\modelsgii\Drug;
use yii\db\Exception;
/**
* @doc-module 门店
*/
class StoreController extends BaseAdminController
{
/**
* @doc-name 门店药品列表--西药中成药
* @doc-param int store_id 门店id
* @doc-return mixed @List{id,drug_id,type-int-类型1中药2西药3颗粒配方,stock-int-库存,store_price-int-门店销售价格,drugstore_price-int-仓库销售价格,market_price-int-市场价,buy_price-float-采购价,store_status-int-门店状态1下架2上架,drugstore_status-int-仓库状态1下架2上架,name-string-药名,pinyin_simple-string-拼音首拼,is_otc-int-是否处方,price_percent-string-销售价比例,buy_price_percent-string-采购价比例} 门店药品信息
* @doc-return mixed @Pagination{total-int-总数量,totalPage-int-总页数,pageSize-int-每页条数} 分页数据
*/
public function actionDrugList()
{
$get = \Yii::$app->request->get();
$this->requestValidate($get, [
['store_id', 'required']
]);
$query = DrugStoreRelations::find()->alias('ds')->where(['ds.store_id' => $get['store_id']]);
$query->joinWith(['drug' => function ($d) {
$d->andWhere(['type' =>[ 2,4]]);
}]);
if (!empty($get['status'])) {
$query->andWhere(['ds.status' => $get['status']]);
}
$this->field = [
DrugStoreRelations::class => [
'id', 'drug_id',
'type' => 'drug.type',
'name' => 'drug.drug_name',
'pinyin_simple' => 'drug.pinyin_simple',
'is_otc' => 'drug.is_otc',
'store_price' => 'price',
'drugstore_price' => 'drugStoreDrug.price',
'market_price' => 'drugStoreDrug.market_price',
'stock' => 'drugStoreDrug.stock',
'buy_price',
'store_status' => 'status',
'drugstore_status' => 'drugStoreDrug.status',
'image' => 'drug.image',
'is_forbid'
]
];
return $this->create($query, $get);
}
/**
* @doc-name 门店设置西药价格
* @doc-param int store_id 门店ID
* @doc-param int drug_id 药品ID
* @doc-param float price 销售价 / optional
*/
public function actionUpdatePrice()
{
$post = \Yii::$app->request->post();
$this->requestValidate($post, [
[['store_id', 'drug_id'], 'required']
]);
$DrugStoreDrug = DrugStoreDrug::find()->where([
'drug_id' => $post['drug_id']
])->one();
if (!$DrugStoreDrug) throw new Exception('仓库中没有该药品');
// if ($DrugStoreDrug->type == 1 || $DrugStoreDrug->type == 3) throw new Exception('您不能修改中药或配方颗粒的销售价格');
$DrugStoreRelations = DrugStoreRelations::find()->where([
'store_id' => $post['store_id'],
'drug_id' => $post['drug_id'],
])->one();
if (!$DrugStoreRelations) throw new Exception('门店没有该药品');
$DrugStoreRelations->price = $post['price'] ?? $DrugStoreRelations->price;
if (!$DrugStoreRelations->saveOrFail()) throw new Exception('修改失败');
return ['修改成功'];
}
/**
* @doc-name 门店设置上下架
* @doc-param int store_id 门店ID
* @doc-param int drug_id 药品ID
* @doc-param int status 1下架2上架
*/
public function actionUpdateStatus()
{
$post = \Yii::$app->request->post();
$this->requestValidate($post, [
[['store_id', 'drug_id', 'status'], 'required']
]);
$DrugStoreRelations = DrugStoreRelations::find()->where([
'store_id' => $post['store_id'],
'drug_id' => $post['drug_id'],
])->one();
if (!$DrugStoreRelations) throw new Exception('门店中药品不存在');
$DrugStoreRelations->status = $post['status'];
if (!$DrugStoreRelations->saveOrFail()) {
throw new Exception('修改失败');
}
return ['修改成功'];
}
/**
* @doc-name 添加子账号
* @doc-param string mobile 手机号
* @doc-param string role 角色
* @doc-param string password 密码
* @doc-param string username 用户名
* @doc-param int store_id 门店
*/
public function actionAddAccount()
{
$post = \Yii::$app->request->post();
$this->requestValidate($post, [
[['mobile', 'password', 'username','store_id','role'], 'required']
]);
$admin = \Yii::$app->user->identity;
$t = \Yii::$app->db->beginTransaction();
try {
$is_admin = Admin::find()->where([
'mobile' => $post['mobile'],
'is_delete' => 0
])->one();
if ($is_admin) throw new Exception('该账号已注册过');
if (! Store::find()->where(['id'=>$post['store_id']])->one()){
throw new Exception('门店不存在');
}
if (! Role::find()->where(['id'=>$post['role']])->one()){
throw new Exception('角色不存在');
}
$model = new Admin();
$model->is_sub = 1;//子账号
$model->mobile = $post['mobile'];
$model->role = $post['role'];
$model->username = $post['username'];
$model->store_id = $post['store_id'];
$model->setPassword($post['password']);
$model->role = $admin->role;
$model->store_id = $admin->store_id ?? '';
$model->saveOrFail();
$token = AdminAccessToken::createToken($model->id, 'admin');
$t->commit();
return [
'token' => $token,
'user' => Admin::findOne($model->uid),
];
} catch (\yii\db\Exception $e) {
$t->rollBack();
throw new Exception($e->getMessage());
}
}
/**
* @doc-name 门店设置自己的销售比例
* @doc-param float store_set_sale_z 门店自己设置中药销售比例
* @doc-param float store_set_sale_g 门店自己设置配方颗粒的销售比例
*/
public function actionStoreSetPercent()
{
$post = \Yii::$app->request->post();
$admin = \Yii::$app->user->identity;
if ($admin->role != UserRoleEnum::STORE_ADMIN) {
throw new Exception('你不是门店管理员');
}
$Store = Store::find()->where(['id' => $admin->store_id])->one();
$t = \Yii::$app->db->beginTransaction();
try {
$Store->z_sale_percent = $post['store_set_sale_z'] ?? $Store->z_sale_percent;
$Store->g_sale_percent = $post['store_set_sale_g'] ?? $Store->g_sale_percent;
$Store->store_set_sale_z = $post['store_set_sale_z'] ?? $Store->store_set_sale_z;
$Store->store_set_sale_g = $post['store_set_sale_g'] ?? $Store->store_set_sale_g;
$Store->saveOrFail();
if (!empty($post['store_set_sale_z'])) {
$chinese = DrugStoreDrug::find()->select(['drug_id'])->where(['type' => 1])->column();
$chinese_price = DrugStoreDrug::find()->select(['drug_id', 'market_price','price'])->where(['type' => 1])->all();
$DrugStoreRelations = DrugStoreRelations::find()->select(['id', 'drug_id'])->where([
'store_id' => $admin->store_id,
])->andWhere(['in','drug_id',$chinese])->all();
foreach ($DrugStoreRelations as $val) {
foreach ($chinese_price as $v) {
if ($val['drug_id'] == $v['drug_id']) {
\Yii::$app->db->createCommand()->update('yii_drug_store_relations', ['price' =>bcdiv(bcmul($post['store_set_sale_z'],$v['price'],4) ,100,4)], ['id' => $val['id']])->execute();
}
}
}
}
if (!empty($post['store_set_sale_g'])) {
$granular= DrugStoreDrug::find()->select(['drug_id'])->where(['type' => 3])->column();
$granular_price = DrugStoreDrug::find()->select(['drug_id', 'market_price','price'])->where(['type' => 3])->all();
$DrugStoreRelations = DrugStoreRelations::find()->select(['id', 'drug_id'])->where([
'store_id' => $admin->store_id,
])->andWhere(['in','drug_id',$granular])->all();
foreach ($DrugStoreRelations as $val) {
foreach ($granular_price as $v) {
if ($val['drug_id'] == $v['drug_id']) {
\Yii::$app->db->createCommand()->update('yii_drug_store_relations', ['price' =>bcdiv(bcmul( $post['store_set_sale_g'],$v['price'],4) ,100,4) ], ['id' => $val['id']])->execute();
}
}
}
}
$t->commit();
return ['设置成功'];
} catch (\Exception $e) {
$t->rollBack();
throw new Exception($e->getMessage());
}
}
/**
* @doc-name 设置是否开启查看毛利率
* @doc-param int store_id 门店id
*/
public function actionSeeRate()
{
$get = \Yii::$app->request->get();
$this->requestValidate($get,[
['store_id','required']
]);
$admin = \Yii::$app->user->identity;
if ($admin->role != UserRoleEnum::STORE_ADMIN) {
throw new Exception('你不是门店管理员');
}
$Store = Store::find()->where(['id' => $get['store_id']])->one();
if (!$Store) throw new Exception('诊所不存在');
$t = \Yii::$app->db->beginTransaction();
try {
$Store->see_rate=$Store->see_rate==0? 1:0;
$Store->saveOrFail();
$t->commit();
return [$Store->see_rate==0?'关闭':'开启'];
}catch (\Exception $exception){
$t->rollBack();
throw new $exception;
}
}
/**
* @doc-name 门店查看是否开启毛利
* @doc-param int store_id 门店id
*/
public function actionIsSeeRate()
{
$get = \Yii::$app->request->get();
$this->requestValidate($get,[
['store_id','required']
]);
$admin = \Yii::$app->user->identity;
if ($admin->role != UserRoleEnum::STORE_ADMIN) {
throw new \yii\db\Exception('你不是门店管理员');
}
$Store = Store::find()->where(['id' => $get['store_id']])->one();
if (!$Store) throw new \yii\base\Exception('诊所不存在');
return $Store;
}
/**
* @doc-name 平台控制门店西药是否禁售
* @doc-param int store_id 门店id
* @doc-param int drug_id 药品id
*/
public function actionSetDrugStatus()
{
$get = \Yii::$app->request->get();
$this->requestValidate($get,[
[['store_id','drug_id'],'required']
]);
$Drug=Drug::find()->where(['id'=>$get['drug_id']])->one();
if (!$Drug) throw new Exception('药品不存在');
$DrugStoreRelations=DrugStoreRelations::find()->where(['store_id'=>$get['store_id'],'drug_id'=>$get['drug_id']])->one();
if (!$DrugStoreRelations) throw new Exception('门店没有该药品');
$DrugStoreRelations->is_forbid=$DrugStoreRelations->is_forbid==0?1 :0;
if ($DrugStoreRelations->is_forbid==1){//禁售
$DrugStoreRelations->status=1;//下架
}else{//在售
$DrugStoreRelations->status=2;//上架
}
$DrugStoreRelations->saveOrFail();
return [ $DrugStoreRelations->is_forbid==1?'禁售':'在售'];
}
/**
* @doc-name 查看门店信息
*/
public function actionSeeStorePercent()
{
$get = \Yii::$app->request->get();
$this->requestValidate($get,[
['store_id','required']
]);
$Store = Store::find()->select(['z_buy_percent','z_sale_percent','g_bug_percent','g_sale_percent'])->where(['id' => $get['store_id'],'is_delete'=>0])->one();
if (!$Store) throw new Exception('门店不存在');
return $Store;
}
}