feat:depotPurchase

This commit is contained in:
LAPTOP-7SGDREK0\shiweijun
2025-01-23 17:55:14 +08:00
parent 4e11fbaec8
commit d58b773dc8
4 changed files with 182 additions and 1 deletions

View File

@@ -0,0 +1,46 @@
<?php
declare(strict_types=1);
namespace App\Model;
use Hyperf\DbConnection\Model\Model;
/**
* @property int $id
* @property int $depot_id
* @property int $material_id
* @property int $supplier_id
* @property int $type
* @property string $purchase_price
* @property string $number
* @property string $sum_price
* @property int $status
* @property int $city_id
* @property int $kitchen_id
* @property int $operator_id
* @property int $is_del
* @property string $create_time
* @property string $update_time
*/
class DepotPurchase extends Model
{
/**
* The table associated with the model.
*/
protected ?string $table = 'depot_purchase';
/**
* The attributes that are mass assignable.
*/
protected array $fillable = [];
/**
* The attributes that should be cast to native types.
*/
protected array $casts = ['id' => 'integer', 'depot_id' => 'integer', 'material_id' => 'integer', 'supplier_id' => 'integer', 'type' => 'integer', 'status' => 'integer', 'city_id' => 'integer', 'kitchen_id' => 'integer', 'operator_id' => 'integer', 'is_del' => 'integer'];
const CREATED_AT = 'create_time';
const UPDATED_AT = 'update_time';
}

View File

@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Model;
use App\Constants\Common\DishCode;
use Hyperf\Database\Model\Builder;
use Hyperf\DbConnection\Model\Model;
/**
@@ -43,4 +45,13 @@ class Dish extends Model
const string CREATED_AT = 'create_time';
const string UPDATED_AT = 'update_time';
/**
* @param int $id
* @return \Hyperf\Database\Model\Model|Builder|null
*/
public function getInfoById(int $id): \Hyperf\Database\Model\Model|Builder|null
{
return $this->where('id',$id)->where('is_del',DishCode::IS_NO_DEL)->first();
}
}

View File

@@ -0,0 +1,48 @@
<?php
declare(strict_types=1);
namespace App\Model;
use App\Constants\Common\MaterialCode;
use Hyperf\Database\Model\Builder;
use Hyperf\DbConnection\Model\Model;
/**
* @property int $id
* @property int $material_id
* @property int $depot_id
* @property int $supplier_id
* @property string $current_stock
* @property string $unit_price
* @property int $is_del
* @property string $create_time
* @property string $update_time
*/
class MaterialStock extends Model
{
/**
* The table associated with the model.
*/
protected ?string $table = 'material_stock';
/**
* The attributes that are mass assignable.
*/
protected array $fillable = [];
/**
* The attributes that should be cast to native types.
*/
protected array $casts = ['id' => 'integer', 'material_id' => 'integer', 'depot_id' => 'integer', 'supplier_id' => 'integer', 'is_del' => 'integer'];
public function getMaterial(int $material_id,int $depot_id,int $supplier_id): \Hyperf\Database\Model\Model|Builder|null
{
return $this->where('is_del',MaterialCode::IS_NO_DEL)
->where('material_id',$material_id)
->where('depot_id',$depot_id)
->where('supplier_id',$supplier_id)
->where('is_del',MaterialCode::IS_NO_DEL)
->first();
}
}

View File

@@ -8,6 +8,9 @@ use App\Constants\Admin\DepotCode;
use App\Exception\ErrException;
use App\Model\Depot;
use App\Model\DepotPurchase;
use App\Model\Material;
use App\Model\MaterialStock;
use App\Model\Supplier;
use App\Service\Admin\BaseService;
use Hyperf\Di\Annotation\Inject;
@@ -20,7 +23,13 @@ class DepotService extends BaseService{
protected Depot $DepotModel;
#[Inject]
protected DepotPurchase $DepotPurchaseModel;
protected Material $MaterialModel;
#[Inject]
protected Supplier $SupplierModel;
#[Inject]
protected MaterialStock $MaterialStockModel;
public function handle()
{
@@ -112,5 +121,72 @@ class DepotService extends BaseService{
return $this->return->success();
}
public function purchase():array
{
$depotId = (int)$this->request->input('depot_id');
$depotInfo = $this->DepotModel->getInfoById($depotId);
if (empty($depotInfo)) throw new ErrException('仓库不存在');
$materialId = (int)$this->request->input('material_id');
$materialInfo = $this->MaterialModel->getInfoById($materialId);
if (empty($materialInfo)) throw new ErrException("材料不存在");
$supplierId = (int)$this->request->input('supplier_id');
$supplierInfo = $this->SupplierModel->getInfoById($supplierId);
if (empty($supplierInfo)) throw new ErrException('供应商不存在');
$type = (int)$this->request->input('type');
$purchase_price = (double)$this->request->input('purchase_price');
$number = (double)$this->request->input('number');
if (!empty($purchase_price) && !empty($number)){
$sum_price = $purchase_price * $number;
}
$cityId = (int)$this->request->input('city_id');
$kitchenId = (int)$this->request->input('kitchen_id');
$depotPurchase = new DepotPurchase();
$depotPurchase->depot_id = $depotId;
$depotPurchase->material_id = $materialId;
$depotPurchase->supplier_id = $supplierId;
$depotPurchase->type = $type;
$depotPurchase->purchase_price = $purchase_price;
$depotPurchase->number = $number;
$depotPurchase->sum_price = $sum_price;
$depotPurchase->city_id = $cityId;
$depotPurchase->kitchen_id = $kitchenId;
$depotPurchase->operator_id = $this->adminId;
$materialStock = $this->MaterialStockModel
->where('depot_id',$depotId)
->where('material_id',$materialId)
->where('supplier_id',$supplierId)
->first();
if (empty($materialStock)){
$materialStock = new MaterialStock();
$materialStock->depot_id = $depotId;
$materialStock->material_id = $materialId;
$materialStock->supplier_id = $supplierId;
$materialStock->current_stock = $number;
$materialStock->unit_price = $purchase_price;
}
else{
//采购入库
if ($depotPurchase->type == 1){
$materialStock->current_stock = $materialStock->current_stock + $number;
}
//采购退货
else
$materialStock->current_stock = $materialStock->current_stock - $number;
}
if (!$depotPurchase->save() || !$materialStock->save()) throw new ErrException('采购添加失败');
return $this->return->success();
}
}