123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <?php
- namespace app\store\model;
- use app\common\model\Goods as GoodsModel;
- use app\store\service\Goods as GoodsService;
- /**
- * 商品模型
- * Class Goods
- * @package app\store\model
- */
- class Goods extends GoodsModel
- {
- /**
- * 添加商品
- * @param array $data
- * @return bool
- * @throws \think\exception\PDOException
- */
- public function add(array $data)
- {
- if (!isset($data['images']) || empty($data['images'])) {
- $this->error = '请上传商品图片';
- return false;
- }
- $data['content'] = isset($data['content']) ? $data['content'] : '';
- $data['wxapp_id'] = $data['sku']['wxapp_id'] = self::$wxapp_id;
- // 开启事务
- $this->startTrans();
- try {
- // 添加商品
- $this->allowField(true)->save($data);
- // 商品规格
- $this->addGoodsSpec($data);
- // 商品图片
- $this->addGoodsImages($data['images']);
- $this->commit();
- return true;
- } catch (\Exception $e) {
- $this->error = $e->getMessage();
- $this->rollback();
- return false;
- }
- }
- /**
- * 添加商品图片
- * @param $images
- * @return int
- * @throws \think\Exception
- * @throws \think\exception\PDOException
- */
- private function addGoodsImages($images)
- {
- $this->image()->delete();
- $data = array_map(function ($image_id) {
- return [
- 'image_id' => $image_id,
- 'wxapp_id' => self::$wxapp_id
- ];
- }, $images);
- return $this->image()->saveAll($data);
- }
- /**
- * 编辑商品
- * @param $data
- * @return bool|mixed
- */
- public function edit($data)
- {
- if (!isset($data['images']) || empty($data['images'])) {
- $this->error = '请上传商品图片';
- return false;
- }
- $data['spec_type'] = isset($data['spec_type']) ? $data['spec_type'] : $this['spec_type'];
- $data['content'] = isset($data['content']) ? $data['content'] : '';
- $data['wxapp_id'] = $data['sku']['wxapp_id'] = self::$wxapp_id;
- return $this->transaction(function () use ($data) {
- // 保存商品
- $this->allowField(true)->save($data);
- // 商品规格
- $this->addGoodsSpec($data, true);
- // 商品图片
- $this->addGoodsImages($data['images']);
- return true;
- });
- }
- /**
- * 添加商品规格
- * @param $data
- * @param $isUpdate
- * @throws \Exception
- */
- private function addGoodsSpec($data, $isUpdate = false)
- {
- // 更新模式: 先删除所有规格
- $model = new GoodsSku;
- $isUpdate && $model->removeAll($this['goods_id']);
- // 添加规格数据
- if ($data['spec_type'] == '10') {
- // 单规格
- $this->sku()->save($data['sku']);
- } else if ($data['spec_type'] == '20') {
- // 添加商品与规格关系记录
- $model->addGoodsSpecRel($this['goods_id'], $data['spec_many']['spec_attr']);
- // 添加商品sku
- $model->addSkuList($this['goods_id'], $data['spec_many']['spec_list']);
- }
- }
- /**
- * 修改商品状态
- * @param $state
- * @return false|int
- */
- public function setStatus($state)
- {
- return $this->allowField(true)->save(['goods_status' => $state ? 10 : 20]) !== false;
- }
- /**
- * 软删除
- * @return false|int
- */
- public function setDelete()
- {
- if (!GoodsService::checkIsAllowDelete($this['goods_id'])) {
- $this->error = '当前商品正在参与其他活动,不允许删除';
- return false;
- }
- return $this->allowField(true)->save(['is_delete' => 1]);
- }
- /**
- * 获取当前商品总数
- * @param array $where
- * @return int|string
- * @throws \think\Exception
- */
- public function getGoodsTotal($where = [])
- {
- return $this->where('is_delete', '=', 0)->where($where)->count();
- }
- }
|