-
operating system:windows7
-
Web server:xampp
-
browser type:ie,ff
-
Yii version ,1.1.12
下面的代码比较多,只是为了提供完整的环境信息,调用流程并不复杂,希望帮助查看解决。谢谢。
问题概要:
代码1函数中 如果取消注释 import Stock,则整个过程执行正常符合预期。
如果注释掉 import Stock 则整个过程执行异常。在代码3处无法调用 Stock 的静态方法
但代码3 开始就 import 了 Stock。。。。
代码1:下面的代码通过 ajax 调用
public function actionCheck2() {
Yii::import('application.modules.stock.models.Alert');
//Yii::import('application.modules.stock.models.Stock'); //这里如果注释掉程序异常
$transaction = Yii::app()->db->beginTransaction();
try {
if (!$this->_check(2)) {
throw new Exception();
}
$this->plan2record(); // 确认入库
Alert::check(); // 产品入库后要更新报警状态
$transaction->commit();
echo json_encode(array('type' => 'flash-success', 'msg' => '操作成功!'));
} catch (Exception $e) {
echo json_encode(array('type' => 'flash-error', 'msg' => '操作错误!')); // 审批
$transaction->rollback();
}
}
代码2:Alert::check 部分代码
public static function check() {
Yii::import('application.modules.stock.models.Stock');
$pid = Yii::app()->user->pid;
// 取出此项目所有 打开的报警器
$models = self::model()->findAllByAttributes(array('pid' => $pid, 'active' => 1));
foreach ($models as $model) {
$name = $model->name;
$value = unserialize($model->value);
$result = $model->$name($value);
// 这里不用重置 报警状态,因为在一个肯定回滚的事务内。无法保存。
// 经过分析 这里可以保存:在事务内时,不会保存。
// 当进行正常出库后,事务外执行,则更新并保存了 报警的状态。
$model->state = $result;
$model->save();
if ($result == 3) // 有任何一个 达到限制 则返回
return "【警报】" . $value['text'] . " 受限";
}
return true;
}
代码3:上面:$result = $model->$name($value); 会调用下面的代码:
问题:这里的Stock::ssum();调用失败,不执行,Stock::ssum() 又其他过程调用没有问题。
public function goods_amount($value) {
Yii::import('application.modules.stock.models.Stock');
$test1 = Stock::test1();
$test2 = 3;
$stock = Stock::ssum($value['gid']);
if($stock > $value['v1']) return 0;
else if(($stock > $value['v2'])) return 1;
else if(($stock > $value['v3'])) return 2;
else return 3;
}