①:addStockLogsList【控制器】-(入口)
// 保存数据-的入口控制器
public function addStockLogsList(Request $request)
{
// 仅对参数格式是否合法进行效验
(new StockLogsValidate())->goCheck();
$stock_logs_list = $request->param('stock_logs_list');
$admin_id = $request->user->id;
$fitness_id = $request->user->fitness_id;
$company_id = $request->user->company_id;
$stockLogsServices = new StockLogsServices();
$stockLogsServices->addStockLogsList($stock_logs_list,$admin_id,$fitness_id, $company_id);
$this->success('添加成功');
}
②:库存验证器
<?php
namespace app\common\validate;
use app\exceptions\ParameterException;
/**
* 进销存
* 已数组格式保存数据
* Class StockLogsValidate
* @package app\common\validate
*/
class StockLogsValidate extends BaseValidate
{
protected $rule = [
'stock_logs_list' => 'require|checkProducts'
];
protected $singleRule = [
'stock_product_id' => 'require',
'count' => 'require',
'type_id' => 'require'
];
/**
* 对商品列表参数格式进行验证
* @param $values
* @return bool
* @throws ParameterException
* @author: deng (2019/4/12 13:58)
*/
protected function checkProducts($values)
{
if (empty($values)) {
throw new ParameterException('商品参数不能为空');
}
if (!is_array($values)) {
throw new ParameterException('商品列表不能为空');
}
foreach ($values as $value) {
// 对其中一个数组进行验证
$this->checkStockLogs($value);
}
}
/**
* @param $value
* @return bool
* @throws ParameterException
* @author: deng (2019/4/12 14:55)
*/
protected function checkStockLogs($value)
{
$validate = new BaseValidate($this->singleRule);
$result = $validate->check($value);
if (!$result) {
throw new ParameterException($validate->error);
}
}
}
③:基类-验证器
<?php
namespace app\common\validate;
use app\exceptions\ParameterException;
use think\facade\Request;
use think\Validate;
/**
* 验证器-基类
* Class BaseValidate
* @package app\common\validate
*/
class BaseValidate extends Validate
{
/**
* 验证器入口
* @return bool
* @throws ParameterException
* @author: deng (2019/4/12 13:40)
*/
public function goCheck()
{
$request = Request::instance();
$params = $request->param();
if ($this->check($params)) {
$msgError = is_array($this->error) ? implode(
';', $this->error) : $this->error;
throw new ParameterException($msgError);
}
return true;
}
}
④::app\common\service\StockLogsServices
<?php
/**
* Created by PhpStorm.
* User: 12155
* Date: 2019/4/12
* Time: 15:03
*/
namespace app\common\service;
use app\common\model\StockLogs;
use app\common\model\StockProducts;
use app\exceptions\ParameterException;
use think\Db;
/**
* 进销存-服务器
* Class StockLogs
* @package app\common\service
*/
class StockLogsServices
{
protected $params_stock_logs_list;
protected $stock_logs_list;
protected $user_id;
public function __construct()
{
}
/**
* @author: deng (2019/4/12 15:06)
* @param $params_stock_logs_list
* @return int
* @throws ParameterException
*/
public function addStockLogsList($params_stock_logs_list,$admin_id,$fitness_id, $company_id)
{
$this->params_stock_logs_list = $params_stock_logs_list;
$this->stock_logs_list = $this->getStockLogsByLogs($params_stock_logs_list);
// 检查库存
$this->getStockLogsStatus();
$saveDataList = [];
foreach ($params_stock_logs_list as $params_stock_logs) {
$saveData = $params_stock_logs;
$saveData['admin_id'] = $admin_id;
$saveData['fitness_id'] = $fitness_id;
$saveData['company_id'] = $company_id;
$saveData['add_time'] = date('Y-m-d H:i:s');
$saveDataList[] = $saveData;
}
// 添加数据
$stockLogs = new StockLogs();
$arr = $stockLogs->saveAll($saveDataList);
// 库存减少:
foreach ($this->params_stock_logs_list as $params_stock_logs) {
$id = $params_stock_logs['stock_product_id'];
$type_id = $params_stock_logs['type_id'];
if ($type_id == 0) {
// 出库
$count_stock = $this->stock_logs_list[$id]['count'] - $params_stock_logs['count'];
} else if ($type_id == 1) {
// 入库
$count_stock = $this->stock_logs_list[$id]['count'] + $params_stock_logs['count'];
}
$stockProductsArr = [
'id' => $params_stock_logs['stock_product_id'],
'count' => $count_stock
];
$stockProductsData[] = $stockProductsArr;
}
$stockProducts = new StockProducts();
$stockProducts->saveAll($stockProductsData);
return true;
}
// 根据订单查找真实商品
protected function getStockLogsByLogs($params_stock_logs_list)
{
$paramsIds = [];
foreach ($params_stock_logs_list as $params_stock_logs) {
array_push($paramsIds, $params_stock_logs['stock_product_id']);
}
$stockLogs = StockProducts::all($paramsIds)
->toArray();
$arr = [];
foreach ($stockLogs as $stockLog) {
$arr[$stockLog['id']] = $stockLog;
}
return $arr;
}
/**
* 真实数据进行验证
* $this->params_stock_logs_list 获取的参数
* $this->stock_logs_list 真实数据
* @throws ParameterException
* @author: deng (2019/4/12 16:31)
*/
protected function getStockLogsStatus()
{
foreach ($this->params_stock_logs_list as $params_stock_logs) {
// 查询出所有的参数列表,然后与数据库的对应关系
$id = $params_stock_logs['stock_product_id'];
// 1.检查当前参数是否存在
if ($params_stock_logs['stock_product_id'] != $this->stock_logs_list[$id]['id']) {
throw new ParameterException('当前商品不存在,请刷新重试!');
}
$stock_logs_find = $this->stock_logs_list[$id];
// 当前商品存在,售卖状态时,检查库存
$type_id = $params_stock_logs['type_id'];
// type_id = 0 出库 = 1 入库
if ($type_id == 0) {
$params_count = $params_stock_logs['count'];
$new_count = $stock_logs_find['count'];
if ($new_count - $params_count < 0) {
throw new ParameterException($this->stock_logs_list[$id]['name'].':剩余量不足,请及时补货!');
}
}
}
}
}