Ejemplo n.º 1
0
 /**
  * 记录管理员的操作日志
  *
  * @param string $operate 操作
  * @param string $operate_desc 操作描述
  * @param string $operate_data 操作数据,用于记录一些重要数据
  */
 public static function logAdminOperate($operate, $operate_desc, $operate_data)
 {
     $dataMapper = new DataMapper('admin_log');
     $authAdminUser = AuthHelper::getAuthUser();
     $dataMapper->user_id = $authAdminUser['user_id'];
     $dataMapper->user_name = $authAdminUser['user_name'];
     $dataMapper->operate = $operate;
     $dataMapper->operate_desc = $operate_desc;
     $dataMapper->operate_time = Time::gmTime();
     $dataMapper->operate_data = $operate_data;
     $dataMapper->save();
     unset($dataMapper);
 }
Ejemplo n.º 2
0
 /**
  * 记录帐户变动
  * @param   int    $userId        用户id
  * @param   float  $userMoney     可用余额变动
  * @param   float  $frozenMoney   冻结余额变动
  * @param   int    $rankPoints    等级积分变动
  * @param   int    $payPoints     消费积分变动
  * @param   string $changeDesc    变动说明
  * @param   int    $changeType    变动类型:参见常量文件
  *
  * @return  void
  */
 function logChange($userId, $userMoney = 0, $frozenMoney = 0, $rankPoints = 0, $payPoints = 0, $changeDesc = '', $changeType = AccountLog::ACT_OTHER, $adminUserId = 0)
 {
     /* 插入帐户变动记录 */
     $accountLogInfo = array('user_id' => $userId, 'user_money' => $userMoney, 'frozen_money' => $frozenMoney, 'rank_points' => $rankPoints, 'pay_points' => $payPoints, 'change_time' => Time::gmTime(), 'change_desc' => $changeDesc, 'change_type' => $changeType, 'admin_user_id' => $adminUserId);
     // 插入一条记录
     $dataMapper = new DataMapper('account_log');
     $dataMapper->copyFrom($accountLogInfo);
     $dataMapper->save();
     // 更新用户信息
     $sql = "UPDATE " . DataMapper::tableName('users') . " SET user_money = user_money + ('{$userMoney}')," . " frozen_money = frozen_money + ('{$frozenMoney}')," . " rank_points = rank_points + ('{$rankPoints}')," . " pay_points = pay_points + ('{$payPoints}')" . " WHERE user_id = ? Order By user_id asc LIMIT 1 ";
     $dbEngine = DataMapper::getDbEngine();
     $dbEngine->exec($sql, $userId);
 }
Ejemplo n.º 3
0
 /**
  * 添加一个 Cron Task 到执行任务列表中
  *
  * @param string $user_name    哪个用户添加的
  * @param string $task_name    任务名
  * @param string $task_desc    任务描述
  * @param string $task_class   实现 ICronTask 接口的类名称(全名,包括 namespace)
  * @param int    $task_time    任务执行的时间,GMT 时间
  * @param array  $paramArray   任务执行需要的参数
  * @param string $search_param 用于任务的搜索
  */
 public function addCronTask($user_name, $task_name, $task_desc, $task_class, $task_time, array $paramArray, $search_param = null)
 {
     // 验证任务是否可以添加
     if (!CronHelper::loadTaskClass($task_class)) {
         throw new \InvalidArgumentException('class [' . $task_class . '] illegal');
     }
     $dataMapper = new DataMapper('cron_task');
     $dataMapper->user_name = $user_name;
     $dataMapper->task_name = $task_name;
     $dataMapper->task_desc = $task_desc;
     $dataMapper->task_class = $task_class;
     $dataMapper->task_time = $task_time;
     $dataMapper->task_param = json_encode($paramArray);
     $dataMapper->search_param = $search_param;
     $dataMapper->save();
     unset($dataMapper);
 }
Ejemplo n.º 4
0
 /**
  * 商品数据转化
  */
 private function convertGoods()
 {
     global $f3;
     // 在这里配置源商品图片的路径前缀
     $f3->set('srcImagePrefix', "http://img.bangzhufu.com/static/");
     $tableMigrate = new TableMigrate();
     $tableMigrate->batchProcessCount = 100;
     // 每次批处理 100 个商品,防止商品过多搞死系统
     // 清空数据
     $dstTable = new DstDataMapper('goods');
     $tableMigrate->clearTable($dstTable);
     $goodsGalleryTable = new DstDataMapper('goods_gallery');
     $tableMigrate->clearTable($goodsGalleryTable);
     $tableMigrate->setAutoIncValue($goodsGalleryTable, 1);
     $goodsAttrTable = new DstDataMapper('goods_attr');
     $tableMigrate->clearTable($goodsAttrTable);
     $tableMigrate->setAutoIncValue($goodsAttrTable, 1);
     //转化数据
     $currentTime = time();
     $tableMigrate->convertTable('team', array(array('begin_time < ? and end_time > ?', $currentTime, $currentTime)), array('order' => 'id asc'), 'goods', array('id' => 'goods_id', 'user_id' => 'goods_sn', 'title' => 'goods_name', 'summary' => 'goods_brief', 'group_id' => 'cat_id', 'partner_id' => 'suppliers_id', 'team_price' => 'shop_price', 'market_price' => 'market_price', 'agent_price' => 'suppliers_price', 'product' => 'goods_name_short', 'condbuy' => 'condbuy', 'image' => null, 'image1' => null, 'image2' => null, 'agent_fare' => 'suppliers_shipping_fee', 'farefree' => 'shipping_free_number', 'detail' => 'goods_desc', 'notice' => 'goods_notice', 'sort_order' => 'sort_order', 'seo_title' => 'seo_title', 'seo_keyword' => 'seo_keyword', 'seo_description' => 'seo_description', 'express_relate' => 'shipping_fee', 'city_id' => 'goods_number'), array('user_id' => function ($user_id, $record) {
         global $f3;
         //在这里生成 goods_sn
         return $f3->get('sysConfig[goods_sn_prefix]') . $record->id;
     }, 'express_relate' => function ($express_relate, $record) {
         // 最土系统 -1 表示免邮费,我们这里修改邮费为 0
         if ($record['farefree'] < 0) {
             return 0;
         }
         $dataArray = unserialize($express_relate);
         $maxShippingFee = 0;
         // 取最大的快递费
         foreach ($dataArray as $data) {
             $maxShippingFee = $data['price'] > $maxShippingFee ? $data['price'] : $maxShippingFee;
         }
         return $maxShippingFee;
     }, 'farefree' => function ($farefree, $record) {
         // 最土 -1 表示免运费,我们这里一律改成不免邮费
         if ($farefree < 0) {
             return 0;
         }
         return $farefree;
     }, 'city_id' => function ($city_id, $record) {
         return 1000;
         // 所有库存缺省都设置为 1000
     }), function ($srcRecord) {
         global $f3;
         $srcImagePrefix = $f3->get('srcImagePrefix');
         $fetchImageArray = array();
         if (!empty($srcRecord->image)) {
             $fetchImageArray[] = $srcImagePrefix . $srcRecord->image;
         }
         if (!empty($srcRecord->image1)) {
             $fetchImageArray[] = $srcImagePrefix . $srcRecord->image1;
         }
         if (!empty($srcRecord->image2)) {
             $fetchImageArray[] = $srcImagePrefix . $srcRecord->image2;
         }
         if (!empty($fetchImageArray)) {
             // 设置 fetchImageArray 的值,用于后面图片抓取
             $f3->set('fetchImageArray_' . $srcRecord->id, $fetchImageArray);
         }
     }, function ($srcRecord, $dstRecord) {
         global $f3;
         $fetchImageArray = $f3->get('fetchImageArray_' . $srcRecord->id);
         if (empty($fetchImageArray)) {
             return;
         }
         // 我们在这里做图片的抓取操作
         foreach ($fetchImageArray as $fetchImageUrl) {
             fetchGoodsImage($srcRecord->id, $fetchImageUrl);
             //usleep(200000); // 睡 200 ms,防止抓取太快服务器不响应
         }
         // 释放资源
         $f3->clear('fetchImageArray_' . $srcRecord->id);
         // 处理 condbuy 字段
         if (empty($srcRecord->condbuy)) {
             return;
         }
         // 需要更新商品的选择
         $dstRecord->goods_type = $f3->get('sysConfig[condbuy_goods_type]');
         // 删除旧的数据
         $sql = 'delete from ' . DataMapper::tableName('goods_attr') . ' where goods_id = ?';
         $dbEngine = DstDataMapper::getDbEngine();
         $dbEngine->exec($sql, $srcRecord->id);
         // 解析 condbuy {红色}{绿色}{蓝色}
         $condBuyArray = explode('}{', '}' . $srcRecord->condbuy . '{');
         foreach ($condBuyArray as $condBuyItem) {
             if (empty($condBuyItem)) {
                 continue;
             }
             $dataMapper = new DataMapper('goods_attr');
             $dataMapper->goods_id = $srcRecord->id;
             $dataMapper->attr_id = $f3->get('sysConfig[condbuy_attr_id]');
             $dataMapper->attr_value = $condBuyItem;
             $dataMapper->attr_price = 0;
             $dataMapper->save();
             unset($dataMapper);
         }
     });
     // 重设表的 AUTO_INCREMENT 值
     $tableMigrate->resetAutoIncValue($dstTable, 'goods_id');
     // 清理数据
     unset($tableMigrate);
     unset($dstTable);
     unset($result);
 }
Ejemplo n.º 5
0
 /**
  * 增加商品关联
  *
  * @param $f3
  */
 public function ajaxAddLink($f3)
 {
     // 权限检查
     $this->requirePrivilege('manage_goods_edit_edit_post', true);
     // 首先做参数验证
     $validator = new Validator($f3->get('GET'));
     $errorMessage = '';
     $goods_id = $validator->required()->digits()->min(1)->validate('goods_id');
     $link_goods_id = $validator->required()->digits()->min(1)->validate('link_goods_id');
     if (!$this->validate($validator)) {
         $errorMessage = implode('|', $this->flashMessageArray);
         goto out_fail;
     }
     $dataMapper = new DataMapper('link_goods');
     $dataMapper->loadOne(array('goods_id = ? and link_goods_id = ?', $goods_id, $link_goods_id));
     // 已经关联了,不要重复关联
     if (!$dataMapper->isEmpty()) {
         goto out;
     }
     $authAdminUser = AuthHelper::getAuthUser();
     // 添加记录
     $dataMapper->goods_id = $goods_id;
     $dataMapper->link_goods_id = $link_goods_id;
     $dataMapper->admin_id = $authAdminUser['user_id'];
     $dataMapper->save();
     //清除缓存,确保商品显示正确
     ClearHelper::clearGoodsCacheById($goods_id);
     // 记录商品编辑日志
     $goodsLogService = new GoodsLogService();
     $goodsLogService->addGoodsLog($goods_id, $authAdminUser['user_id'], $authAdminUser['user_name'], '添加商品关联', $link_goods_id);
     out:
     Ajax::header();
     echo Ajax::buildResult(null, null, null);
     return;
     out_fail:
     // 失败,返回出错信息
     Ajax::header();
     echo Ajax::buildResult(-1, $errorMessage, null);
 }
Ejemplo n.º 6
0
 public function get($f3)
 {
     // 权限检查
     $this->requirePrivilege('manage_goods_create');
     // 参数验证
     $validator = new Validator($f3->get('GET'));
     $goods_id = $validator->required('商品ID不能为空')->digits()->min(1)->validate('goods_id');
     if (!$this->validate($validator)) {
         goto out_fail;
     }
     // 取得商品信息
     $goodsBasicService = new GoodsBasicService();
     $goods = $goodsBasicService->loadGoodsById($goods_id);
     if ($goods->isEmpty()) {
         $this->addFlashMessage('非法商品ID');
         goto out_fail;
     }
     $authAdminUser = AuthHelper::getAuthUser();
     // 1. 复制 goods 信息
     $goodsArray = $goods->toArray();
     unset($goodsArray['goods_id']);
     // 清除主键
     // 新商品缺省为下线状态
     $goodsArray['is_on_sale'] = 0;
     // 清除购买数量统计
     $goodsArray['user_buy_number'] = 0;
     $goodsArray['user_pay_number'] = 0;
     // 设置复制人
     $goodsArray['admin_user_id'] = $authAdminUser['user_id'];
     $goodsArray['admin_user_name'] = $authAdminUser['user_name'];
     // 处理商品的规格
     if (!empty($goodsArray['goods_spec'])) {
         $goodsSpecService = new GoodsSpecService();
         $goodsSpecService->initWithJson($goodsArray['goods_spec']);
         $goodsSpecService->clearGoodsSpecImgIdArray();
         // 清除图片 ID 的关联
         $goodsArray['goods_spec'] = $goodsSpecService->getJsonStr();
         unset($goodsSpecService);
     }
     $goodsArray['add_time'] = Time::gmTime();
     $newGoods = $goodsBasicService->loadGoodsById(0);
     $newGoods->copyFrom($goodsArray);
     $newGoods->save();
     // 更新 goods_sn
     $newGoods->goods_sn = $f3->get('sysConfig[goods_sn_prefix]') . $newGoods['goods_id'];
     $newGoods->save();
     unset($goodsArray);
     // 2. 复制 goods_attr 信息
     if ($goods->type_id > 0) {
         $goodsTypeService = new GoodsTypeService();
         $goodsAttrValueArray = $goodsTypeService->fetchGoodsAttrItemValueArray($goods->goods_id, $goods->type_id);
         foreach ($goodsAttrValueArray as $goodsAttrValue) {
             $goodsAttr = $goodsTypeService->loadGoodsAttrById(0);
             $goodsAttr->goods_id = $newGoods->goods_id;
             $goodsAttr->attr_item_id = $goodsAttrValue['meta_id'];
             $goodsAttr->attr_item_value = $goodsAttrValue['attr_item_value'];
             $goodsAttr->save();
             unset($goodsAttr);
         }
         unset($goodsAttrValueArray);
         unset($goodsTypeService);
     }
     // 3. 复制 goods_gallery 信息
     $goodsGalleryService = new GoodsGalleryService();
     $goodsGalleryArray = $goodsGalleryService->fetchGoodsGalleryArrayByGoodsId($goods_id);
     foreach ($goodsGalleryArray as $goodsGalleryItem) {
         // 新建一个 goods_gallery 记录
         $goodsGallery = $goodsGalleryService->loadGoodsGalleryById(0);
         unset($goodsGalleryItem['img_id']);
         $goodsGallery->copyFrom($goodsGalleryItem);
         $goodsGallery->goods_id = $newGoods['goods_id'];
         $goodsGallery->save();
         unset($goodsGallery);
     }
     unset($goodsGalleryArray);
     unset($goodsGalleryService);
     // 4. 复制 goods_team 信息
     $goodsTeam = $goodsBasicService->loadGoodsTeamByGoodsId($goods_id);
     if (!$goodsTeam->isEmpty()) {
         $goodsTeamInfo = $goodsTeam->toArray();
         unset($goodsTeamInfo['team_id']);
         $goodsTeamInfo['goods_id'] = $newGoods['goods_id'];
         $newGoodsTeam = new DataMapper('goods_team');
         $newGoodsTeam->copyFrom($goodsTeamInfo);
         $newGoodsTeam->save();
         unset($newGoodsTeam);
         unset($goodsTeamInfo);
         unset($goodsTeam);
     }
     // 5. 复制 link_goods 信息
     $linkGoodsArray = $goodsBasicService->fetchSimpleLinkGoodsArray($goods_id);
     foreach ($linkGoodsArray as $linkGoodsItem) {
         unset($linkGoodsItem['link_id']);
         $linkGoodsItem['goods_id'] = $newGoods['goods_id'];
         $linkGoodsItem['admin_id'] = $authAdminUser['user_id'];
         $linkGoods = new DataMapper('link_goods');
         $linkGoods->copyFrom($linkGoodsItem);
         $linkGoods->save();
         unset($linkGoods);
     }
     unset($linkGoodsArray);
     // 6. 复制 goods_promote 信息
     $goodsPromote = $goodsBasicService->loadGoodsPromoteByGoodsId($goods_id);
     if (!$goodsPromote->isEmpty()) {
         $goodsPromoteInfo = $goodsPromote->toArray();
         unset($goodsPromoteInfo['promote_id']);
         $goodsPromoteInfo['goods_id'] = $newGoods['goods_id'];
         $newGoodspromote = new DataMapper('goods_promote');
         $newGoodspromote->copyFrom($goodsPromoteInfo);
         $newGoodspromote->save();
         unset($newGoodspromote);
     }
     unset($goodsPromote);
     // 记录编辑日志
     $goodsLogContent = '从 [' . $goods_id . '] 复制过来';
     $goodsLogService = new GoodsLogService();
     $goodsLogService->addGoodsLog($newGoods['goods_id'], $authAdminUser['user_id'], $authAdminUser['user_name'], '复制商品', $goodsLogContent);
     $this->addFlashMessage('复制新建商品成功');
     RouteHelper::reRoute($this, RouteHelper::makeUrl('/Goods/Edit/Edit', array('goods_id' => $newGoods['goods_id']), true));
     return;
     //正常返回
     out_fail:
     RouteHelper::reRoute($this, '/Goods/Search');
 }
Ejemplo n.º 7
0
 public function doAuthSnsUser($sns_login, $user_name, $email, $autoRegister = true)
 {
     global $f3;
     $user = new DataMapper('users');
     $user->loadOne(array('sns_login = ?', $sns_login), array('order' => 'user_id asc'));
     if (!$user->isEmpty()) {
         // 记录登录时间和IP地址
         $user->last_login = Time::gmTime();
         $user->last_ip = $f3->get('IP');
         $user->save();
         return $user;
     }
     if (!$autoRegister) {
         return false;
     }
     // 自动注册用户
     $user->sns_login = $sns_login;
     $user->user_name = $user_name;
     $user->email = $email;
     $user->password = uniqid();
     // 记录登录时间和IP地址
     $user->last_login = $user->reg_time = Time::gmTime();
     $user->last_ip = $user->reg_ip = $f3->get('IP');
     $user->save();
     return $user;
 }