ThinkPhp5.1-验证器+一键保存数据【对数组格式验证】

①: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'].':剩余量不足,请及时补货!');
                }
            }

        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值