Просмотр исходного кода

1. 批发端添加图文功能 -- 图文列表、购买须知
2. oss 图文删除

shizhongqi 11 месяцев назад
Родитель
Сommit
c566dd2d9b

+ 62 - 0
app-ghs/controllers/ItemController.php

@@ -9,6 +9,7 @@ use bizGhs\book\classes\BookItemClass;
 use bizGhs\custom\classes\CustomClass;
 use bizGhs\item\classes\ItemClass;
 use bizGhs\shop\classes\ShopAdminClass;
+use bizGhs\pictext\classes\PicTextGhsItemClass;
 use common\components\dict;
 use common\components\imgUtil;
 use common\components\miniUtil;
@@ -1209,4 +1210,65 @@ class ItemController extends BaseController
         util::complete('修改成功');
     }
 
+    //获取花材描述
+    public function actionDesc()
+    {
+        $itemId = Yii::$app->request->get('itemId', 0);
+        $picText = PicTextGhsItemClass::getByCondition(['mainId'=> $this->mainId, 'ghsItemId' => $itemId, 'delStatus' => 0], true);
+        if (empty($picText)) {
+            // 适配前端的返回处理 -- 本来要使用 util::fail()
+            util::success('not_exist');
+        }
+        if ($picText->mainId != $this->mainId) {
+            util::fail('没有找到描述');
+        }
+        util::success($picText);
+    }
+
+    //创建花材描述(花材介绍)
+    public function actionCreateDesc()
+    {
+        $form = new \ghs\models\item\CreateDescForm();
+        $form->load(Yii::$app->request->post(), '');
+        if (!$form->validateForm()) {
+            return;
+        }
+
+        $data = $form->attributes;
+        $exists = PicTextGhsItemClass::exists(['mainId'=>$this->mainId, 'ghsItemId' => $data['itemId'], 'delStatus' => 0]);
+        if ($exists) {
+            util::fail('该商品已存在图文内容,请勿重复添加');
+        }
+
+        $data['mainId'] = $this->mainId;
+        $data['ghsItemId'] = $data['itemId'];
+        $result = PicTextGhsItemClass::add($data);
+        if ($result) {
+            util::success($result);
+        }
+
+        util::fail('创建失败');
+    }
+
+    //更新花材描述(花材介绍)
+    public function actionUpdateDesc()
+    {
+        $form = new \ghs\models\item\CreateDescForm();
+        $form->load(Yii::$app->request->post(), '');
+        if (!$form->validateForm()) {
+            return;
+        }
+        $data = $form->attributes;
+        $id = $data['id'];
+        $info = PicTextGhsItemClass::getById($id, false, 'id');
+        if (empty($info)) {
+            util::fail('描述不存在');
+        }
+        $data['mainId'] = $this->mainId;
+        $result = PicTextGhsItemClass::updateById($id, $data);
+        if ($result) {
+            util::success($result);
+        }
+        util::fail('更新失败');
+    }
 }

+ 21 - 10
app-ghs/controllers/PicTextController.php

@@ -3,8 +3,7 @@ namespace ghs\controllers;
 
 use biz\shop\models\ShopExt;
 use Yii;
-use bizHd\goods\classes\CategoryClass;
-use bizHd\pictext\classes\PicTextClass;
+use bizGhs\pictext\classes\PicTextClass;
 use common\components\util;
 
 class PicTextController extends BaseController
@@ -14,11 +13,16 @@ class PicTextController extends BaseController
      */
     public function actionList()
     {
+        // 当要兼容不同类型时,请从前端传过来
+        $typeArr = [PicTextClass::TYPE_CATEGORY, PicTextClass::TYPE_BEFORE_AFTER_SAIL];
+        $type = intval(Yii::$app->request->get('type'));
+        if (!in_array($type, $typeArr)) {
+            util::fail('类型不对');
+        }
         $where = [];
         $where['mainId'] = $this->mainId;
         $where['delStatus'] = 0;
-        // 当要兼容不同类型时,请从前端传过来
-        $where['type'] = PicTextClass::TYPE_BEFORE_AFTER_SAIL;
+        $where['type'] = $type;
         
         $list = PicTextClass::getList('id, title, addTime', $where, 'addTime desc');
         util::success($list);
@@ -37,7 +41,10 @@ class PicTextController extends BaseController
         // $post['staffId'] = intval($this->shopAdmin->id);
 
         // 类别 1. 花束分类说明(运用于分类的商品) 2. 商品特有说明(非商品简介,优先级可高于分类说明) 3. 购买须知、售前与售后说明
-        $post['type'] = PicTextClass::TYPE_BEFORE_AFTER_SAIL; // type 默认为 3
+        $post['type'] = intval($post['type']);
+        if (!in_array($post['type'], [1, 2, 3])) {
+            util::fail('类型不对');
+        }
         $id = PicTextClass::add($post);
         util::success($id);
     }
@@ -60,17 +67,21 @@ class PicTextController extends BaseController
         util::success('修改成功');
     }
 
-    public function actionUpdatePurchaseGuide()
+    // 门店购买须知开启/关闭
+    public function actionSwitch()
     {
         $post = Yii::$app->request->post();
-        $id = $post['id'];
+        $switch = intval($post['switch']);
         $shopId = intval($this->shopId);
         if ($shopId <= 0) {
             util::fail('门店出错');
         }
-       // 检测门店状态 TODO
-        
-        $updateCount = ShopExt::updateByCondition(['shopId' => $shopId], ['purchaseGuide' => $id]);
+        if($switch == 1) {
+            $picTextId = intval($post['picTextId']);
+            $updateCount = ShopExt::updateByCondition(['shopId' => $shopId], ['purchaseGuide' => $picTextId]);
+        }else{
+            $updateCount = ShopExt::updateByCondition(['shopId' => $shopId], ['purchaseGuide' => 0]);
+        }
         if ($updateCount <= 0) {
             util::fail('变更失败');
         }

+ 5 - 0
app-ghs/controllers/ShopController.php

@@ -11,6 +11,7 @@ use bizGhs\custom\classes\CustomClass;
 use bizGhs\ghs\classes\GhsClass;
 use bizGhs\merchant\classes\ShopClass;
 use bizGhs\merchant\services\ShopService;
+use bizGhs\pictext\classes\PicTextClass;
 use bizHd\saas\services\RegionService;
 use common\components\arrayUtil;
 use common\components\dict;
@@ -584,7 +585,11 @@ class ShopController extends BaseController
             util::fail('门店数据错误');
         }
         $shopExt = ShopExtClass::getByCondition(['shopId'=>$shopId], false, false, 'id, shopId, purchaseGuide');
+        if ($shopExt['purchaseGuide'] > 0){
+            $picText = PicTextClass::getById($shopExt['purchaseGuide'], false, 'id, title');
+        }
         if ($shopExt) {
+            $shopExt['title'] = isset($picText['title']) ? $picText['title'] : '';
             util::success(['shopExt'=>$shopExt]);
         }
         util::fail('获取数据失败');

+ 64 - 4
app-ghs/controllers/UploadController.php

@@ -3,15 +3,12 @@
 namespace ghs\controllers;
 
 use bizHd\goods\services\CategoryService;
-use bizHd\goods\services\PicCategoryService;
-use bizHd\goods\services\PicService;
 use common\components\business;
 use common\components\dirUtil;
 use common\components\noticeUtil;
 use common\components\stringUtil;
 use Yii;
 use common\components\util;
-use yii\imagine\Image;
 use common\components\oss;
 
 class UploadController extends BaseController
@@ -22,6 +19,12 @@ class UploadController extends BaseController
     //保存图片上传
     public function actionSaveFile()
     {
+        $uploadPath = 'uploads';
+        // 对上传的文件进行多文件夹管理
+        $rootPath = Yii::$app->request->post('rootPath');
+        if (!empty($rootPath) && in_array($rootPath, oss::ROOT_PATHS)) {
+            $uploadPath = $rootPath;
+        }
         $file = $_FILES['file'];
         if (!is_uploaded_file($file['tmp_name'])) {
             util::fail('please upload img');
@@ -43,7 +46,7 @@ class UploadController extends BaseController
         $newFile = $preFileName . ".jpg";
         $fullPathFile = $path . $newFile;
         if (move_uploaded_file($file['tmp_name'], $fullPathFile)) {
-            $img = "uploads/{$mainId}/{$shopId}/{$month}/{$date}/" . $newFile;
+            $img = "{$uploadPath}/{$mainId}/{$shopId}/{$month}/{$date}/" . $newFile;
             oss::uploadImage($img, $fullPathFile);
             $data = business::formatUploadImg($img);
             $data['shortUrl'] = $img;
@@ -203,4 +206,61 @@ class UploadController extends BaseController
         }
     }
 
+    //删除oss上的图片
+    public function actionDeleteFile()
+    {
+        $filePath = Yii::$app->request->post('filePath');
+        if(empty($filePath)){
+            util::fail('参数错误');
+        }
+        // 删除前判断文件是否存在
+        if(!oss::fileExist($filePath)){
+            Yii::error('file not exist: ' . $filePath);
+            util::fail('file not exist');
+        } else {
+            Yii::info('file exist: ' . $filePath);
+        }
+        // 删除OSS文件
+        try {
+            // 设置超时时间为15秒
+            set_time_limit(15);
+            $startTime = time();
+            $timeout = 15; // 15秒超时
+
+            oss::deleteObject($filePath);
+
+            // 检查是否超时
+            if (time() - $startTime > $timeout) {
+                throw new \Exception('删除文件操作超时');
+            }
+        } catch (\Exception $e) {
+            util::fail('删除文件失败:' . $e->getMessage());
+        }
+        util::success('success');
+    }
+
+    //批量删除oss上的图片
+    public function actionDeleteFiles()
+    {
+        $filePaths = Yii::$app->request->post('filePaths');
+        if(empty($filePaths) || !is_array($filePaths)){
+            util::fail('参数错误');
+        }
+        foreach($filePaths as $filePath){
+            if(!oss::fileExist($filePath)){
+                Yii::error('file not exist: ' . $filePath);
+                util::fail('file not exist');
+            } else {
+                Yii::info('file exist: ' . $filePath);
+            }
+        }
+        // 删除OSS文件
+        try {
+            oss::deleteObjects($filePaths);
+        } catch (\Exception $e) {
+            util::fail('删除文件失败:' . $e->getMessage());
+        }
+        util::success('success');
+    }
+
 }

+ 27 - 0
app-ghs/models/BaseForm.php

@@ -0,0 +1,27 @@
+<?php
+namespace ghs\models;
+
+use yii\base\Model;
+use common\components\util;
+
+/**
+ * 管理员表单基类
+ */
+class BaseForm extends Model
+{
+    /**
+     * 验证表单数据并返回结果
+     *
+     * @return bool 验证是否通过
+     */
+    public function validateForm()
+    {
+        if (!$this->validate()) {
+            $errors = $this->getFirstErrors();
+            $message = reset($errors);
+            util::fail($message);
+            return false;
+        }
+        return true;
+    }
+}

+ 52 - 0
app-ghs/models/item/CreateDescForm.php

@@ -0,0 +1,52 @@
+<?php
+namespace ghs\models\item;
+
+use bizGhs\item\classes\ItemClass;
+use ghs\models\BaseForm;
+use Yii;
+
+/**
+ * 创建花材描述表单模型
+ */
+class CreateDescForm extends BaseForm
+{
+    public $id;
+    public $mainId;
+    public $title;
+    public $itemId;
+    public $content;
+
+    public function rules()
+    {
+        return [
+            [['itemId'], 'required'],
+            ['title', 'string', 'max' => 60],
+            [['id', 'itemId', 'mainId'], 'integer'],
+            ['itemId', 'validateItemId'],
+            ['content', 'safe'],
+        ];
+    }
+
+    public function attributeLabels()
+    {
+        return [
+            'title' => '标题',
+            'itemId' => '商品ID',
+            'content' => '图文内容',
+        ];
+    }
+
+    /**
+     * 验证商品ID
+     * @param $attribute
+     */
+    public function validateItemId($attribute)
+    {
+        if (!$this->hasErrors()) {
+            $item = ItemClass::getById($this->itemId, true, 'mainId');
+            if (empty($item) || $item->mainId != Yii::$app->controller->mainId) {
+                $this->addError($attribute, '花材不存在或不属于当前商户');
+            }
+        }
+    }
+}

+ 7 - 1
app-hd/controllers/GhsController.php

@@ -9,6 +9,8 @@ use bizGhs\custom\classes\CustomClass;
 use bizGhs\custom\classes\CustomLevelClass;
 use bizGhs\merchant\classes\WlClass;
 use bizHd\purchase\classes\PurchaseClass;
+use bizHd\shop\classes\ShopExtClass;
+use bizHd\shop\models\ShopExt;
 use bizHd\stat\classes\StatVisitClass;
 use common\components\dict;
 use common\components\imgUtil;
@@ -246,7 +248,6 @@ class GhsController extends BaseController
         $info['needAddPackFreight'] = $needAddPackFreight;
         $info['lackExpend'] = $lackExpend;
         $info['showSold'] = $ghsShop->showSold ?? 0;
-        $info['buyNotice'] = $ghsShop->buyNotice ?? 0;
         $info['lsShopId'] = $ghsShop->lsShopId ?? 0;
         //预订单的最低公斤数和每公斤服务费
         $info['kiloFee'] = $ghsShop->kiloFee ?? 0;
@@ -281,6 +282,11 @@ class GhsController extends BaseController
             }
         }
 
+        // 弃用 buyNotice, 使用 xhShopExt 表里的 purchaseGuide
+        // $info['buyNotice'] = $ghsShop->buyNotice ?? 0;
+        $shopExt = ShopExtClass::getByCondition(['shopId'=>$ghsShopId], false, false, 'purchaseGuide');
+        $info['buyNotice'] = $shopExt['purchaseGuide'] > 0 ? 1 : 0; //兼容原有设定:购买须知 0.没有 1.有
+
         util::success($info);
     }
 

+ 2 - 0
app-hd/controllers/GoodsController.php

@@ -309,6 +309,7 @@ class GoodsController extends BaseController
             util::fail('该商品已存在图文内容,请勿重复添加');
         }
 
+        $data['mainId'] = $this->mainId;
         $result = PicTextGoodsClass::add($data);
         if ($result) {
             util::success($result);
@@ -331,6 +332,7 @@ class GoodsController extends BaseController
         if (empty($info)) {
             util::fail('描述不存在');
         }
+        $data['mainId'] = $this->mainId;
         $result = PicTextGoodsClass::updateById($id, $data);
         if ($result) {
             util::success($result);

+ 19 - 0
app-hd/controllers/PicTextController.php

@@ -3,6 +3,7 @@ namespace hd\controllers;
 
 use bizHd\goods\classes\CategoryClass;
 use bizHd\goods\models\Pic;
+use bizHd\shop\classes\ShopExtClass;
 use Yii;
 use bizHd\pictext\classes\PicTextClass;
 use common\components\util;
@@ -135,4 +136,22 @@ class PicTextController extends BaseController
 
         util::success($picText);
     }
+
+    public function actionGetPurchaseGuide()
+    {
+        $ghsShopId = intval(Yii::$app->request->get('shopId'));
+        $shopExt = ShopExtClass::getByCondition(['shopId'=>$ghsShopId], false, false, 'purchaseGuide');
+        if (empty($shopExt)) {
+            util::fail('数据出错');
+        }
+        if ($shopExt['purchaseGuide'] == 0) {
+            util::success(['picText' => []]);
+        }
+
+        $pt = PicTextClass::getById($shopExt['purchaseGuide'], true);
+        if (empty($pt)) {
+            util::fail('数据出错');
+        }
+        util::success(['picText'=>$pt]);
+    }
 }

+ 22 - 0
biz-ghs/pictext/classes/PicTextClass.php

@@ -0,0 +1,22 @@
+<?php
+namespace bizGhs\pictext\classes;
+
+use bizGhs\base\classes\BaseClass;
+
+class PicTextClass extends BaseClass
+{
+    public static $baseFile = '\bizGhs\pictext\models\PicText';
+
+    // 类别
+    // 1.花束分类说明(运用于分类的商品)
+    const TYPE_CATEGORY = 1;
+    // 2.商品特有说明(非商品简介,优先级可高于分类说明)
+    const TYPE_GOODS_SPEC = 2;
+    // 3.购买须知、售前与售后说明
+    const TYPE_BEFORE_AFTER_SAIL = 3;
+
+    public static function addBase($data, $bool = false)
+    {
+        return self::add($data, $bool);
+    }
+}

+ 10 - 0
biz-ghs/pictext/classes/PicTextGhsItemClass.php

@@ -0,0 +1,10 @@
+<?php
+namespace bizGhs\pictext\classes;
+
+use bizGhs\base\classes\BaseClass;
+
+class PicTextGhsItemClass extends BaseClass
+{
+    public static $baseFile = '\bizGhs\pictext\models\PicTextGhsItem';
+
+}

+ 10 - 0
biz-ghs/pictext/classes/PicTextGoodsClass.php

@@ -0,0 +1,10 @@
+<?php
+namespace bizGhs\pictext\classes;
+
+use bizGhs\base\classes\BaseClass;
+
+class PicTextGoodsClass extends BaseClass
+{
+    public static $baseFile = '\bizGhs\pictext\models\PicTextGoods';
+
+}

+ 12 - 0
biz-ghs/pictext/models/PicText.php

@@ -0,0 +1,12 @@
+<?php
+namespace bizGhs\pictext\models;
+use bizGhs\base\models\Base;
+
+class PicText extends Base
+{
+    public static function tableName()
+    {
+        return 'xhPicText';
+    }
+    
+}

+ 12 - 0
biz-ghs/pictext/models/PicTextGhsItem.php

@@ -0,0 +1,12 @@
+<?php
+namespace bizGhs\pictext\models;
+use bizGhs\base\models\Base;
+
+class PicTextGhsItem extends Base
+{
+    public static function tableName()
+    {
+        return 'xhPicTextGhsItem';
+    }
+    
+}

+ 12 - 0
biz-ghs/pictext/models/PicTextGoods.php

@@ -0,0 +1,12 @@
+<?php
+namespace bizGhs\pictext\models;
+use bizGhs\base\models\Base;
+
+class PicTextGoods extends Base
+{
+    public static function tableName()
+    {
+        return 'xhPicTextGoods';
+    }
+    
+}

+ 4 - 0
common/base/classes/BaseClass.php

@@ -118,6 +118,10 @@ class BaseClass
 
     /**
      * 根据主键ID查出一条记录
+     * @param $id
+     * @param bool $returnObject
+     * @param string $field
+     * @return array|\yii\db\ActiveRecord|null
      */
     public static function getById($id, $returnObject = false, $field = '*')
     {

+ 4 - 0
common/base/models/Base.php

@@ -157,6 +157,10 @@ class Base extends ActiveRecord
 
     /**
      * 根据主键ID查出一条记录
+     * @param $id
+     * @param bool $returnObject
+     * @param string $field
+     * @return array|ActiveRecord|null
      */
     public function getById($id, $returnObject = false, $field = '*')
     {