| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- <?php
- namespace app\jobs;
- use app\models\AlipayGoodsLog;
- use app\models\Attr;
- use app\models\AttrGroup;
- use app\models\Goods;
- use app\models\GoodsPic;
- use app\models\StoreAliMini;
- use app\modules\admin\models\AlipayThirdForm;
- use app\utils\Alipay\alipaySdk\aop\request\AlipayMarketingImageEnhanceUploadRequest;
- use app\utils\Alipay\alipaySdk\aop\request\AlipayOpenAppItemCreateRequest;
- use app\utils\Alipay\alipaySdk\aop\request\AlipayOpenAppItemModifyRequest;
- use yii\base\BaseObject;
- use yii\queue\JobInterface;
- /**
- * 支付宝商品添加
- */
- class AlipayThirdGoodsJob extends BaseObject implements JobInterface
- {
- public $id;
- public $goods_id;
- public $out_item_id;
- public $category_id;
- public $store_id;
- public function execute($queue)
- {
- try {
- $id = $this->id;
- $store_id = $this->store_id;
- $goods_id = $this->goods_id;
- $out_item_id = $this->out_item_id;
- $category_id = $this->category_id;
- $store_mini = StoreAliMini::findOne($id);
- if (empty($goods_id) && strpos($out_item_id, 'cyy_') === 0) {
- $goods_id = str_replace('cyy_', '', $out_item_id);
- }
- if (empty($goods_id)) {
- throw new \Exception('非本商城商品,不可操作');
- }
- $is_edit = 0;
- $request = new AlipayOpenAppItemCreateRequest();
- //判断是否添加过商品
- $alipayGoodsLog = AlipayGoodsLog::get($id, $goods_id);
- if ($alipayGoodsLog) {
- $is_edit = 1;
- $request = new AlipayOpenAppItemModifyRequest();
- }
- $form = new AlipayThirdForm();
- $goodsInfo = Goods::findOne(['id' => $goods_id, 'store_id' => $store_id]);
- $marketingImageResult = $form->uploadMarketingImage($id, $goodsInfo->cover_pic);
- if ($marketingImageResult['code']) {
- throw new \Exception('添加主图失败' . $marketingImageResult['msg']);
- }
- $goods_pic_list = GoodsPic::find()->where(['goods_id' => $goods_id, 'is_delete' => 0])
- ->select('pic_url')->limit(3)->column();
- $image_list = [];
- foreach ($goods_pic_list as $goods_pic_item) {
- $marketingPicListImageResult = $form->uploadMarketingImage($id, $goods_pic_item, AlipayMarketingImageEnhanceUploadRequest::ITEM_IMAGE_LIST);
- if (!$marketingPicListImageResult['code']) {
- $image_list[] = $marketingPicListImageResult['data']['image_id'];
- }
- }
- $sale_status = 'AVAILABLE';
- if (!intval($goodsInfo->status)) {
- $sale_status = 'DELISTING';
- }
- if (intval($goodsInfo->is_delete)) {
- $sale_status = 'FREEZE';
- }
- $sku_list = [];
- if (intval($goodsInfo->use_attr)) {
- Goods::skuAttr($goodsInfo);
- $goods_attr = json_decode($goodsInfo->attr, true);
- foreach ($goods_attr as $goods_attr_index => $goods_attr_item) {
- $sku_list[$goods_attr_index]['sale_status'] = intval($goodsInfo->is_delete) ? $sale_status : 'DELISTING';
- if ($goods_attr_item['num'] > 0) {
- $sku_list[$goods_attr_index]['sale_status'] = $sale_status;
- }
- $sku_attr_list = [];
- foreach ($goods_attr_item['attr_list'] as $attr_item) {
- $attr_name_arr = Attr::find()->alias('a')->leftJoin(['ag' => AttrGroup::tableName()], 'a.attr_group_id = ag.id')
- ->where(['a.id' => $attr_item['attr_id']])->select('a.attr_name, ag.attr_group_name')
- ->asArray()->one();
- $sku_attr_list[] = [
- 'attr_key' => $attr_name_arr['attr_group_name'],
- 'attr_value' => $attr_name_arr['attr_name']
- ];
- }
- $sku_list[$goods_attr_index]['sku_attrs'] = $sku_attr_list;
- $sku_list[$goods_attr_index]['sale_price'] = bcmul($goods_attr_item['price'], 100);
- $sku_list[$goods_attr_index]['out_sku_id'] = $goods_attr_item['cyy_skuId'];
- $thumb_img = '';
- $marketingAttrImageResult = $form->uploadMarketingImage($id, $goods_attr_item['pic'], AlipayMarketingImageEnhanceUploadRequest::ITEM_SKU_THUMB_IMG);
- if (!$marketingAttrImageResult['code']) {
- $thumb_img = $marketingAttrImageResult['data']['image_id'];
- }
- $sku_list[$goods_attr_index]['thumb_img'] = $thumb_img;
- $sku_list[$goods_attr_index]['stock_num'] = $goods_attr_item['num'];
- $sku_list[$goods_attr_index]['barcode'] = $goods_attr_item['no'];
- $sku_list[$goods_attr_index]['original_price'] = bcmul($goods_attr_item['original_price'], 100);
- $sku_list[$goods_attr_index]['sku_type'] = 'SALE';
- }
- }
- $data = [
- 'title' => $goodsInfo->name,
- 'path' => "alipays://platformapi/startApp?appId={$store_mini->auth_app_id}page=goods/goods/goods?id=" . $goodsInfo->id,
- 'head_img' => $marketingImageResult['data']['image_id'],
- 'category_id' => $category_id,//test
- 'out_item_id' => 'cyy_' . $goodsInfo->id,
- 'sale_price' => bcmul($goodsInfo->price, 100),
- 'original_price' => bcmul($goodsInfo->original_price, 100),
- 'sale_status' => $sale_status, //可售卖: AVAILABLE; 已下架: DELISTING; 冻结: FREEZE
- 'item_type' => '1',
- 'desc' => '',
- 'direct_path' => "alipays://platformapi/startApp?appId={$store_mini->auth_app_id}page=goods/goods/goods?id=" . $goodsInfo->id,
- 'image_list' => $image_list,
- 'price_unit' => '元',
- 'stock_num' => $goodsInfo->goods_num,
- 'skus' => $sku_list,
- 'barcode' => $goodsInfo->goods_no,
- 'item_details_page_model' => 1
- ];
- if (empty(trim($category_id))) {
- unset($data['category_id']);
- }
- if (intval($goodsInfo->use_attr)) {
- unset($data['sale_price'], $data['original_price'], $data['sale_status'], $data['stock_num']);
- } else {
- unset($data['skus']);
- }
- if (!$is_edit) {
- unset($data['direct_path']);
- } else {
- unset($data['item_details_page_model']);
- }
- \Yii::error($data);
- $form->biz_content = json_encode($data);
- $result = $form->miniCommon($request, 0, $id);
- if (!empty($result->code) && $result->code == 10000) {
- AlipayGoodsLog::add($id, $goods_id, $result->item_id);
- return [
- 'code' => 0,
- 'msg' => "成功",
- 'data' => $result
- ];
- } else {
- throw new \Exception($result->sub_msg);
- }
- } catch (\Exception $e) {
- debug_log($e->getMessage(), 'alipay_goods.log');
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
-
- }
- }
|