%s ";
static public $transformHtmlLI = "
%s ";
// 获取项目类型json格式
static public function getJsonProjectTypes()
{
return ProjectTypeResource::collection(ProjectType::where([
['status', '=', ProjectType::STATUS_ON]
])->orderBy('sort', 'ASC')->get());
}
// 拼装获取项目 function_type model dot
static public function getJsonProjectGoodsByTypeId($type_id)
{
// 添加缓存
$projectGoodsInfo = Cache::get(static::PROJECT_GOODS_CACHE_KEY);
if (!$projectGoodsInfo) {
$dbProjectFuncTypes = static::getProjectFuncTypesByOneLevel([$type_id, 0]);
$dbProjectFuncTypes = array_column($dbProjectFuncTypes->toArray(), null, 'id');
foreach ($dbProjectFuncTypes as $funcTypeKey => &$funcTypeVal) {
$modelsTmp = static::getProjectModelsByOneLevel([$funcTypeVal['id']]);
$modelsTmp = array_column($modelsTmp->toArray(), null, 'id');
foreach ($modelsTmp as $modelsTmpKey => &$modelsTmpVal) {
$tmpDots = static::getProjectDotByOneLevel([$modelsTmpVal['id']]);
$modelsTmpVal['dots'] = array_column($tmpDots->toArray(), null, 'id');
}
$funcTypeVal['models'] = $modelsTmp;
}
$expiresAt = Carbon::now()->addMinutes(120);// 缓存2个小时
Cache::put(static::PROJECT_GOODS_CACHE_KEY, \GuzzleHttp\json_encode($dbProjectFuncTypes), $expiresAt);
return $dbProjectFuncTypes;
}
return \GuzzleHttp\json_decode($projectGoodsInfo);
}
// 获取项目类型
static public function getProjectTypes($form = 1)
{
$default = [];
if($form){
$default = ['-1'=>'请选择','0' => '全部'];
}else{
$default = ['0' => '全部'];
}
$dbProjectTypes = ProjectType::pluck('type_name', 'id')->all();
$projectTypes = $default + $dbProjectTypes;
return $projectTypes;
}
// 获取项目功能分类管理 一级操作
static public function getProjectFuncTypesByOneLevel($type_id = [])
{
if (count($type_id) == 1 && in_array(0, $type_id)) {
return ProjectFunctype::where([
['status', '=', ProjectFunctype::STATUS_ON]
])->orderBy('sort', 'ASC')->get();
}
$dbProjectFuncTypes = ProjectFunctype::where([
['status', '=', ProjectFunctype::STATUS_ON]
])->orderBy('sort', 'ASC')->whereIn('type_id', $type_id)->get();
return $dbProjectFuncTypes;
}
// 获取项目功能模块管理 一级操作
static public function getProjectModelsByOneLevel($functype_id = [])
{
if (in_array(0, $functype_id)) {
return ProjectModel::where([
['status', '=', ProjectModel::STATUS_ON]
])->orderBy('sort', 'ASC')->get();
}
$dbProjectModels = ProjectModel::where([
['status', '=', ProjectModel::STATUS_ON]
])->orderBy('sort', 'ASC')->whereIn('functype_id', $functype_id)->get();
return $dbProjectModels;
}
// 获取功能点
static public function getProjectDotByOneLevel($model_id = [])
{
if (in_array(0, $model_id)) {
return ProjectFuncdot::where([
['status', '=', ProjectFuncdot::STATUS_ON]
])->orderBy('sort', 'ASC')->get();
}
$dbProjectModels = ProjectFuncdot::where([
['status', '=', ProjectFuncdot::STATUS_ON]
])->orderBy('sort', 'ASC')->whereIn('model_id', $model_id)->get();
return $dbProjectModels;
}
// 转换成商城商品
static public function transform($type_id,$projectGoods){
$projectTypeInfo = ProjectType::find($type_id);// 项目类型信息
if(!$type_id || !$projectGoods || empty($projectTypeInfo)){
return 0;
}
$funcTypeIds =[];
$modelIds = [];
$dotIds = [];
$descHtml = '';
$checkedProductPrice = $projectTypeInfo->basal_price;// 真实零售价格
$checkedShowPrice = $projectTypeInfo->basal_price;// 展示价格
foreach($projectGoods as $proVal){
if(!empty($proVal['checkdotsNum']) && !empty($proVal['models'])){
$funcTypeIds[] = $proVal['id'];
$modelsHtml = '';
foreach($proVal['models'] as $modelVal){
if(empty($modelVal['dots'])){
continue;
}
$dotsHtml = '';
foreach($modelVal['dots'] as $dotsVal){
if(!empty($dotsVal['checked'])){
if(!in_array($dotsVal['model_id'],$modelIds)){
$modelIds[] = $dotsVal['model_id'];
}
$dotIds[] = $dotsVal['id'];
$checkedProductPrice = PriceCalculate($checkedProductPrice,'+',$dotsVal['discount_price']);
$checkedShowPrice = PriceCalculate($checkedShowPrice,'+',$dotsVal['price']);
$dotsHtml .= sprintf(self::$transformHtmlLI,$dotsVal['funcdot_name']);
}
}
$dotsHtml = sprintf(self::$transformHtml,$dotsHtml);
$modelsHtml .= sprintf(self::$transformHtmlLI,$modelVal['model_name']);
$modelsHtml .=$dotsHtml;
}
$modelsHtml = sprintf(self::$transformHtml,$modelsHtml,'');
$descHtml .= sprintf(self::$transformHtmlLI,$proVal['functype_name']);
$descHtml .= $modelsHtml;
$descHtml = sprintf(self::$transformHtml,$descHtml);
}
}
sort($funcTypeIds);sort($modelIds);sort($dotIds);
$goods_sn = md5($type_id.'_'.implode("_",$funcTypeIds).implode("_",$modelIds).implode("_",$dotIds));
$goodsInfo = ShopGoods::getGoodsDetail(['goods_sn'=>$goods_sn]);
if($goodsInfo){
return $goodsInfo;
}
$newGoods = new ShopGoods();
$newGoods->category_id = 0; // 分类id
$newGoods->goods_name = $projectTypeInfo->type_name; // 商品名称
$newGoods->brand_id = $projectTypeInfo->brand_id; //品牌id
$newGoods->is_on_sale = ShopGoods::STATE_ON_SALE; // 是否上架
$newGoods->goods_number = 100; // 商品库存量
$newGoods->primary_pic_url = $projectTypeInfo->type_img; // 商品主图
$newGoods->list_pic_url = $projectTypeInfo->carousel_imgs; // 商品列表图
$newGoods->keywords = $projectTypeInfo->type_name; // 商品关键词
$newGoods->goods_brief = $projectTypeInfo->type_desc; // 商品摘要
$newGoods->goods_sn = $goods_sn;// 商品编号
$newGoods->goods_desc = $descHtml; // 商品描述
$newGoods->counter_price = $checkedShowPrice; // 专柜价格
$newGoods->retail_price = $checkedProductPrice; // 零售价格
$newGoods->promotion_desc = '';// 促销描述
$newGoods->promotion_tag = '';// 促销标签
$newGoods->vip_exclusive_price = $checkedProductPrice;// 会员专享价
$newGoods->is_vip_exclusive = ShopGoods::STATE_NOT_VIP;// 是否是会员专属
$newGoods->is_limited = ShopGoods::STATE_SALE_NOT_LIMIT;// 是否限购
$newGoods->save();
return $newGoods;
}
// 获取项目类型
static public function getJsonForProjectTypes()
{
$dbProjectTypes = ProjectType::select('type_name as text', 'id')->where(
['status'=> ProjectType::STATUS_ON]
)->get()->toArray();
$projectTypes = array_merge([['id'=>'-1','text'=> '请选择'],['id'=>'0','text' => '全部']], $dbProjectTypes);
return $projectTypes;
}
}