all(); $param['poi_id'] = $request->user['store_id']; $productType = $this->service->productType(); $data = $this->service->setModel()->getList($param,null,true,['types'],['types' => function($query,$resp) use($productType){ $productTypeArr = []; foreach ($productType as $val) { $productTypeArr[$val['key']] = $val['name']; } return $productTypeArr[$resp['product_type']]??''; }]); return successTrans(100010,pageFormat($data),200); } catch (\Throwable $th) { return error($th->getMessage()); } } /** * 商品详情 * @param Request $request * @return Response */ #[GetMapping('detail')] public function getGoodDetail(Request $request): Response { try { $param = $this->_valid([ "id.require" => trans("empty.require"), "product_id.require" => trans("empty.require"), ],$request->method()); if (!is_array($param)) return error($param); $detail = $this->model->where("id",$param["id"])->with(['skuSpecs'])->findOrEmpty(); if ($detail->isEmpty()) return errorTrans("empty.data"); if ($detail['poi_id'] <> $request->user['store_id']) return errorTrans("error.param"); $detail['sold_start_times'] = [(string)$detail['sold_start_time'],(string)$detail['sold_end_time']]; $detail['use_times'] = [(string)$detail['use_time_start'],(string)$detail['use_time_end']]; return successTrans('success.data',$detail->toArray()); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } #[PostMapping("template")] public function getTemplate(Request $request): Response { try { $param = $this->_valid([ "product_type.require" => trans("empty.require"), "category.require" => trans("empty.require"), ],$request->method()); if (!is_array($param)) return error($param); $data = (new BaseData)->config([ "appid" => sConf("wechat.appid"), "secret" => sConf("wechat.secret"), "account" => sConf("wechat.shop_id"), ])->token()->getStoreCategoryTemplate($param['category'][2],$param['product_type']); return success("ok",$data); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } #[GetMapping('type')] public function getProductType(Request $request): Response { try { $poiId = $request->user['store_id']; $productType = $this->store->where("poi_id", $poiId)->value("product_type"); if (empty($productType)) return error("未配置"); $typeData = []; foreach ($this->service->productType() as $key => $value) { if (in_array($value['key'],json_decode($productType,true))) { $typeData[] = $value; } } return success('ok', $typeData); } catch (\Throwable $th) { return error($th->getMessage()); } } /** * 新增商品 * @param Request $request * @return Response */ #[PostMapping("save")] public function saveGoods(Request $request): Response { try { $param = $request->post(); if (empty($param['auto_renew'])) $param['auto_renew'] = 0; $param['image_list'] = empty($param['image_list']) ? [] : json_encode($param['image_list']); $param['detail_image_list'] = empty($param['detail_image_list']) ? [] : json_encode($param['detail_image_list']); $param['environment_image_list'] = empty($param['environment_image_list']) ? [] : json_encode($param['environment_image_list']); $param['notification'] = empty($param['notification']) ? [] : json_encode($param['notification']); if (empty($param['specs'])) return error("至少添加一组搭配信息"); if (is_array($param['specs'])) $param['specs'] = json_encode($param['specs']); if (is_array($param['category'])) { $param['category_id'] = $param['category'][2]??0; $param['category'] = json_encode($param['category']); } if (!isset($param['id'])) { $param['product_id'] = strtoupper(CodeExtend::random(18,3)); } $param['price'] = $param['price']*100; $param['poi_id'] = $request->user['store_id']; if (!empty($param['no_use_weeks']) && count($param['no_use_weeks']) == 7) return error("至少需要保留一天可用"); $skuData = []; if (is_array($param['skuSpecs'])) { foreach ($param['skuSpecs'] as $key => $value) { $skuData[$key] = $value; $skuData[$key]['product_id'] = $param['product_id']; $skuData[$key]['specs'] = json_encode($value['specs']); } } $param['spu_id'] = CodeExtend::uniqidDate(18); unset($param['skuSpecs']); $param['line_price'] = $param['line_price'] * 100; $store = (new SaasStore)->where("poi_id",$request->user['store_id'])->findOrEmpty(); if ($store->isEmpty()) return errorTrans("error.data"); // 获取attr_key_value_map参数 $valMap = (new BaseData)->config([ "appid" => sConf("wechat.appid"), "secret" => sConf("wechat.secret"), "account" => sConf("wechat.shop_id"), ])->token()->getStoreCategoryTemplate($param['category_id'],$param['product_type']); if (empty($valMap['product_attrs'])) return errorTrans("error.data"); $data = (new BaseData)->config([ "appid" => sConf("wechat.mini_appid"), "secret" => sConf("wechat.mini_secret"), ])->token()->createGoodsData($param,$skuData,$store->toArray(),$valMap); // return errorTrans("error.data"); print_r($data); if (empty($data['product_id'])) return error($data['description']); $param['goods_id'] = $data['product_id']; // return errorTrans("error.data"); $stateSku = false; if (!empty($skuData)) { [$stateSku,$msg] = $this->skuData($skuData); if (!$stateSku) return error($msg); } $state = $this->model->setAutoData($param); if (!$state && !$stateSku) return errorTrans("error.data"); return successTrans("success.data"); } catch (\Throwable $throwable) { echo $throwable->getLine()."\n"; echo $throwable->getFile()."\n"; echo $throwable->getMessage()."\n"; return error($throwable->getMessage()); } } /** * SKU编辑 * @param array $skuData * @return array */ protected function skuData(array $skuData = []): array { try { if (empty($skuData)) return [0,trans('empty.require')]; foreach ($skuData as $vo) { $sku = $this->skuModel->where("sku_id",$vo['sku_id'])->findOrEmpty(); if ($sku->isEmpty()) { $sku->insertGetId($vo); } else { $sku->update($vo); } } return [1,'success']; } catch (\Throwable $throwable) { return [0,$throwable->getMessage()]; } } }