Files
CompanyProject/金壶/ydyd_service/application/common/service/GoodsService.php
2024-09-27 01:32:49 +08:00

981 lines
39 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\common\service;
use app\common\model\SkuModel;
use app\facade\AppConstant;
use app\facade\HyData;
use app\facade\Pinyin;
use think\Exception;
use think\facade\Cache;
use think\facade\Config;
use think\facade\Request;
use traits\controller\Jump;
use think\Db;
class GoodsService
{
use Jump;
const SEARCH_LIMIT=10;
const NO_HY_PRICE = '已售罄';
const APP_DEFAULT_IMG_URL = 'ydyd-develop-file.oss-cn-hangzhou.aliyuncs.com/pc_shop_pic_url_1588925532218.jpg';
/**
* 商品管理列表20190907
* 数据检索字段:名称、供应商、厂商、商品上下架状态、批次号、批次类型
*/
public function getList($search_data = [])
{
$_where = [];
$_where[] = ['gba.is_delete','=',0];
//默认排序
$_order = ['gba.is_onshelf'=>'asc','g.goods_id'=>'desc'];
//提成比例排序
if (isset($search_data['iSortCol_0'])&&isset($search_data['sSortDir_0'])&&($search_data['iSortCol_0']==10)&&in_array($search_data['sSortDir_0'],['asc','desc'])){
$_order = ['gba.platform_royalty'=>$search_data['sSortDir_0'],'gba.is_onshelf'=>'asc','g.goods_id'=>'desc'];
}
//商品名称:拼音+中文
if (isset($search_data['goods_name'])&&$search_data['goods_name']){
//判断$search_data['goods_name']是否含有中文;注意1.药品名称为英文也要搜索药品名称(此时不含中文) 2.药品名称中文+字母混合,搜索字母部分也要搜索药品名称
//临时封装函数is_str_include_chinese待完善
if (is_str_include_chinese($search_data['goods_name'])){
$_where[] = ['g.name','like','%'.$search_data['goods_name'].'%'];
}else{
$_where[] = ['g.name|g.simple_pinyin|g.pinyin','like','%'.$search_data['goods_name'].'%'];
}
}
if (isset($search_data['batch_number'])&&$search_data['batch_number']){
$_where[] = ['gb.batch_number','=',$search_data['batch_number']];
}
if (isset($search_data['batch_type'])&&in_array($search_data['batch_type'],['1','2','all'])){
if (in_array($search_data['batch_type'],['1','2'])){
$_where[] = ['gb.batch_type','=',$search_data['batch_type']];
}
}
if (isset($search_data['supplier'])&&$search_data['supplier']){
$_where[] = ['s.supplier_name','like','%'.$search_data['supplier'].'%'];
}
if (isset($search_data['manufacturer'])&&$search_data['manufacturer']){
$_where[] = ['m.name','like','%'.$search_data['manufacturer'].'%'];
}
if (isset($search_data['is_onshelf'])&&in_array($search_data['is_onshelf'],['0','1','2','all'])){
if (in_array($search_data['is_onshelf'],['0','1','2'])){
$_where[] = ['gba.is_onshelf','=',$search_data['is_onshelf']];
}
}
if(isset($search_data['inIds']) && $search_data['inIds']){
$_where[] = ['gba.id','in',$search_data['inIds']];
}
if(isset($search_data['notIds']) && $search_data['notIds']){
$_where[] = ['gba.id','not in',$search_data['notIds']];
}
if(isset($search_data['isOnlySelf']) && $search_data['isOnlySelf']){
$_where[] = ['gb.supplier_id','=',10000];
}
$_field = '';
//goods
$_field.='g.goods_id,g.name,g.spec_desc,g.unit,g.drug_form,g.sort_order,app_thumb,pc_thumb,';
//supplier
$_field.='s.supplier_name,';
//manufacturer
$_field.='m.name as manufacturer_name,';
//goods_batch
$_field.='gb.batch_number,gb.retail_flag,gb.batch_type,gb.cost_price,gb.stock_num,';
//gba
$_field.='gba.id as gba_id,gba.is_onshelf,gba.area_id,gba.price,gba.platform_royalty,gba.discount_price,gba.discount_num,gba.sort';
//药品列表数据
$res_list = Db::name('goods_batch_area_relation')->alias('gba')->field($_field)
->leftJoin('goods_batch gb','gba.batch_id=gb.batch_id')
->leftJoin('goods g','g.goods_id=gb.goods_id')
->leftJoin('goods_supplier_relation gsr','gb.relation_id=gsr.id')
->leftJoin('suppliers s','s.supplier_id=gsr.supplier_id')
->leftJoin('manufacturer m','m.id=g.manufacturer_id')
->where($_where)
->order($_order)
->paginate($search_data['limit'], false, ['page' => $search_data['page']]);
return $res_list;
}
/**
* 商品列表-默认
*/
public function getGoodsList($params){
$per_page = $params['per_page']??20;
$current_page = $params['current_page']??1;
$fields = 'g.goods_id,g.name as goods_name,g.show_price,g.is_online_sale,g.country_code,g.app_thumb,g.pc_thumb,g.drug_form,g.keyword,g.sketch,m.name as manufacturer_name,g.spec_desc,';
$fields .= 'spu.batch_type,spu.retail_flag,spu.retail_num,spu.entirety_num,spu.batch_number,spu.stock_num,spu.term_validity,spu.supplier_sn,';
$fields .= 'sku.id as sku_id,sku.area_id,sku.price,sku.price_type,sku.discount_price,sku.discount_num,sku.discount_start_time,sku.discount_end_time';
$where = [];
$where[] = ['g.status','=',1];
$where[] = ['spu.batch_status','=',1];
$where[] = ['spu.stock_num','>',0];
$where[] = ['sku.is_onshelf','=',1];
$where[] = ['sku.is_delete','=',0];
$order_by = [];
$order_by[] = ['sku.sort','asc'];
$order_by[] = ['sku.id','desc'];
$order_by[] = ['spu.batch_id','desc'];
$order_by[] = ['g.goods_id','desc'];
$goods_list = Db::name('goods_batch_area_relation')->alias('sku')
->field($fields)
->join('goods_batch spu','spu.batch_id=sku.batch_id')
->join('goods g','g.goods_id=spu.goods_id')
->join('manufacturer m','m.id=g.manufacturer_id')
->where($where)->order($order_by)
->paginate($per_page,false,['page'=>$current_page])
->toArray();
$res = [];
$res['code'] = 200;
$res['msg'] = 'success';
$res['data'] = $goods_list;
return $res;
}
/**
* 商品详情
* @done 用户收藏
* @done 已购状态(首营逻辑已变更-无需处理(默认认证即完成首营资料))
* @done 控销采购权
* @todo 新人价:新人对应新人活动价,老客户对应常规销售价格
* @todo 活动商品库存管理---订单处理---goods_batch add 活动库存字段 or 操作价格表库存字段discount_number
* @todo 活动-关联sku设置
*
*/
public function getGoodsDetail($init_data,$sku_id){
//$sku_id = input('param.sku_id');
$login = $init_data?true:false;
$fields = '"0" as is_collect,g.goods_id,g.name as goods_name,g.prescribe_flag,g.pc_content,g.app_content,g.show_price,g.is_online_sale,g.country_code,g.app_thumb,g.pc_thumb,g.drug_form,g.keyword,g.sketch,m.name as manufacturer_name,g.spec_desc,';
//限购字段
$fields .= 'g.max_purchase,g.max_purchase_period,g.unit,';
$fields .= 'spu.batch_id,spu.batch_type,spu.retail_flag,spu.retail_num,spu.entirety_num,spu.batch_number,spu.stock_num,spu.term_validity,spu.supplier_id,spu.supplier_sn,';
$fields .= 'sku.id as price_id,sku.original_price,sku.area_id,sku.price,sku.price_type,sku.new_price,sku.discount_price,sku.discount_num,sku.discount_start_time,sku.discount_end_time';
$where = [];
$where[] = ['g.status','=',1];
$where[] = ['g.is_online_sale','=',0];
$where[] = ['spu.batch_status','=',1];
$where[] = ['spu.stock_num','>',0];
$where[] = ['sku.is_onshelf','=',1];
$where[] = ['sku.is_delete','=',0];
$detail = Db::name('goods_batch_area_relation')->alias('sku')
->field($fields)
->join('goods_batch spu','spu.batch_id=sku.batch_id')
->join('goods g','spu.goods_id=g.goods_id')->join('manufacturer m','m.id=g.manufacturer_id')
->where('sku.id',$sku_id)->find();
if (!$detail){
$res = [];
$res['code'] = -107;
$res['message'] = '商品不存在或者已下架';
return $res;
}
//库存预处理
$sale_pack_num = '';
if ($detail){
$detail['is_buy'] = 1;//是否可以加入购物车
$sale_pack_num = $detail['retail_flag']==0?$detail['retail_num']:$detail['entirety_num'];
if (empty($detail['pc_thumb'])){
$detail['pc_thumb'] = $detail['app_thumb']?:self::APP_DEFAULT_IMG_URL;
}
if($detail['pc_thumb'] == 'www.hyey.cn'){
$detail['pc_thumb'] = self::APP_DEFAULT_IMG_URL;
}
//非网处理
if (isset($detail['is_online_sale'])&&$detail['is_online_sale']==1){
$detail['is_buy'] = 0;
}
//是否已加入购物车
$detail['is_in_cart'] = 0;
$detail['num_in_cart'] = 0;
if ($login){
$cart_where = [];
$cart_where[] = ['user_id','=',$init_data['user_id']];
$cart_where[] = ['price_id','=',$sku_id];
$cart_where[] = ['price_type','=',0];//冗余-兼容代理价格
$num_in_cart = Db::name('user_cart')->where($cart_where)->value('goods_number');
if ($num_in_cart){
$detail['is_in_cart'] = 1;
$detail['num_in_cart'] = $num_in_cart;
}
}
//处理hy商品价格更新
//@todo hy被更改为自营待处理(列表已过滤,此处待完善)
if ($detail['supplier_id']==10006){
if ($login){
$extend_price_rate = $init_data['extend_price_rate']??1.05;
$hy_price = $this->getHyPrice($detail['supplier_sn'],$extend_price_rate);
if ($hy_price){
$detail['price'] = $hy_price;
}else{
$detail['price'] = self::NO_HY_PRICE;
$detail['is_buy'] = 0;
}
}else{
$detail['price'] = '登录后查看价格';
$detail['is_buy'] = 0;
}
}
}
//价格处理:活动价(特殊情况:新人活动价)/正常销售价
/**
* 新人活动:
* 1.用户新人身份判定(users表判定字段)
* 2.新人活动判定activity_name='新人优惠' 查询对应activity_id 绑定的商品price_id
* 3.当前商品sku_id是否包含于2的price_id
*/
//存在活动价格设置为0数据库记录 0.0000/0.00)的情况
if ($detail && $detail['supplier_id']!=10006 && isset($detail['discount_price'])){
//$sale_pack_num = $detail['retail_flag']==0?$detail['retail_num']:$detail['entirety_num'];
//discount_start_time/discount_end_time int(10)
//@todo 活动价格与正常销售价格都存在,且当前活动状态正常(时间有效且库存满足)只保留活动价不展示正常销售价格else 显示 活动价格+正常价格 ,当前处理为不共存)
$date = time();
// if ($detail['discount_start_time']<$date && $detail['discount_end_time']>$date && $detail['discount_num']>=$sale_pack_num){
if (((!$detail['discount_start_time'] && !$detail['discount_end_time']) || ($detail['discount_start_time']<$date && $detail['discount_end_time']>$date)) && ($detail['discount_num']>=$sale_pack_num || $detail['discount_num']==0)){
if ($detail['discount_price']*10000){
$detail['price'] = $detail['discount_price'];
}
//$detail['stock_num'] = $detail['discount_num'];
//unset($detail['price']);//保留new_price,后文处理
unset($detail['discount_price']);
}else{
//活动状态无效,保留常规销售价格
unset($detail['discount_start_time']);
unset($detail['discount_end_time']);
unset($detail['discount_price']);
unset($detail['new_price']);//新人价格、活动价格 默认周期一样
}
}
//收藏状态+新人价格处理新人活动价or普通活动价or常规销售价
if ($login && $detail){
$detail['is_collect'] = 0;
$where = [];
$where[] = ['user_id','=',$init_data['user_id']];
$where[] = ['goods_id','=',$detail['goods_id']];
$user_collect = Db::name('user_collect')->where($where)->find();
if ($user_collect){
$detail['is_collect'] = 1;
}
//新人身份,活动有效性上文已判定
$is_new_user = $init_data['is_new_user'];
$date = time();
if ($is_new_user && isset($detail['new_price']) && ((!$detail['discount_start_time'] && !$detail['discount_end_time']) || ($detail['discount_start_time']<$date && $detail['discount_end_time']>$date)) && ($detail['discount_num']>=$sale_pack_num || $detail['discount_num']==0)){
//上文已处理,活动价与常规销售价不共存
/* if (isset($detail['price'])){
unset($detail['price']);
}*/
if (isset($detail['discount_price'])){
unset($detail['discount_price']);
}
if ($detail['new_price']*10000){
$detail['price'] = $detail['new_price'];
}
unset($detail['new_price']);
//$detail['stock_num'] = $detail['discount_num'];
//$detail['discount_num'] && $detail['stock_num'] = $detail['discount_num'];
}
if (!$is_new_user){
if (isset($detail['new_price'])){
unset($detail['new_price']);
}
}
}
//控销采购--只针对优势商品
if ($detail && isset($detail['batch_type']) && $detail['batch_type']==2 && $login && $detail['supplier_id']!=10006){
$where = [];
$where[] = ['goods_id','=',$detail['goods_id']];
$where[] = ['user_id','=',$init_data['user_id']];
$where[] = ['status','=',1];
$goods_limit_check = Db::name('goods_limit_relation')->where($where)->find();
if ($goods_limit_check){
switch ($goods_limit_check['status']){
case 0:
$detail['purchase_right']= 0;
$detail['purchase_right_remark'] = '采购权申请中,等待审核通过后购买!';
break;
case 1:
$detail['purchase_right']= 1;
$detail['purchase_right_remark'] = '采购权已通过!';
break;
case 2:
$detail['purchase_right']= 2;
$detail['purchase_right_remark'] = '采购权申请未通过!';
$detail['purchase_right_verify_msg'] = $goods_limit_check['verify_remark'];
break;
}
}else{
$detail['purchase_right'] = -1;
$detail['purchase_right_remark'] = '当前商品为控销商品,尚未未申请采购权!';
}
}
//限购处理
if ($detail){
$detail['is_limit'] = 0;
//限购逻辑:优势+限购周期+限购量
if ($detail['supplier_id']!=10006 &&isset($detail['max_purchase'])&&isset($detail['max_purchase_period'])&&$detail['max_purchase']&&$detail['max_purchase_period']){
$detail['is_limit'] = 1;
$detail['limit_info'] = $detail['max_purchase_period'].'天内限购'.$detail['max_purchase'].$detail['unit'];
}
}
//登录状态-价格展示
if(!$login){
isset($detail['price'])&&($detail['price']= '登录后查价');
isset($detail['new_price'])&&($detail['new_price']= '登录后查价');
isset($detail['discount_price'])&&($detail['discount_price']= '登录后查看当前价格');
isset($detail['original_price'])&&($detail['original_price']= '登录后查看价格');
}
//价格字段统一处理成price(discount_price、new_price、price)
//优先级 new_price》discount_price》price
if ($detail){
if (isset($detail['new_price']) && $detail['new_price']*10000 && isset($detail['discount_price'])&&$detail['discount_price']*10000){
$detail['price'] = $detail['new_price']??$detail['discount_price']??$detail['price'];
}
}
//存在or空或0值
$res = [];
if ($detail){
$res['code'] = 200;
$res['message'] = 'success';
$res['data'] = $detail;
}else{
$res['code'] = -100;
$res['message'] = '商品不存在或者已下架';
}
return $res;
}
/**
* 商品数据-此处实现列表+搜索;
* 活动+专区拆分独立
*
* 默认搜索支持:药品名称(关键词)、分类(cate_id)、
* 药品分类(cate_id)+活动楼层:活动(activity_id)--列表页实现?
*/
public function getGoodsSearch($init_data,$param){
$login = $init_data?true:false;
$fields = '';
$order = [];
//自营排序优先级>流通
$order['spu.supplier_id'] = 'asc';
$where = [];
//基础条件
$where[] = ['g.status','=',1];
$where[] = ['g.is_online_sale','=',0];
$where[] = ['spu.batch_status','=',1];
$where[] = ['spu.stock_num','>',0];
$where[] = ['sku.is_onshelf','=',1];
$where[] = ['sku.is_delete','=',0];
//有效期
$where[] = ['spu.term_validity','>',date('Y-m-d')];
//@todo 导致筛选条件变更的因素关联筛选条件处理
//分类
if (isset($param['cate_id']) && $param['cate_id']){
//goods_id
$goods_id_list = Db::name('goods_cate_relation')->where('cate_id',$param['cate_id'])->column('goods_id');
if ($goods_id_list){
$where[] = ['g.goods_id','in',$goods_id_list];
}else{
$where[] = ['g.goods_id','=',0];
}
}
//搜索词---暂时只处理药品名称搜索,不考虑 药品+规格+厂商等
$search_words = $param['search_words']??'';
if ($search_words){
$where[] = ['g.name|g.simple_pinyin|g.pinyin','like','%'.htmlspecialchars($search_words).'%'];
}
//活动:关键词存在则不查询活动
$is_activity = false;
if (!$search_words && isset($param['activity_id']) && $param['activity_id']){
$activity_sku_id_list = Db::name('activity_goods_relation')->where('activity_id',$param['activity_id'])->column('price_id');
//$where[] = ['sku.id','in',$activity_sku_id_list];
if ($activity_sku_id_list){
$where[] = ['sku.id','in',$activity_sku_id_list];
$is_activity = true;
}else{
$where[] = ['sku.id','=',0];
}
}
//零整
$retail_flag = $param['retail_flag']??'';//取值空/0/1/
if ($retail_flag!==''){
$where[] = ['spu.retail_flag','=',$retail_flag];
}
//剂型
$drug_form = $param['drug_form']??'';//后期剂型--改为int+维护剂型缓存数据
if ($drug_form!==''){
$where[] = ['g.drug_form','=',$drug_form];
}
//有效期 0半年以上1一年以上,2:所有3近效期
$term_validity = $param['term_validity']??2;
if ($term_validity!==2){
switch ($term_validity){
case 0:
$where[] = ['spu.term_validity','>',date('Y-m-d',strtotime('+6 month'))];
break;
case 1:
$where[] = ['spu.term_validity','>',date('Y-m-d',strtotime('+1 year'))];
break;
case 3:
$where[] = ['spu.term_validity','<',date('Y-m-d',strtotime('+90 day'))];
}
}
//价格区间--销售价活动价or正常销售价处于搜索价格区间
$price_start = $param['price_start']??'';
$price_end = $param['price_end']??'';
if ($price_start!=='' && $price_end!==''){
$where[] = ['sku.price|sku.discount_price','between',[$price_start,$price_end]];
}
//排序处理
if ($is_activity){
$order['sku.sort'] = 'desc';
}
$sort_field = $param['sort_field']??'';
$sort_order = $param['sort_order']??0;
$sort_fields_limit = ['price','default','sale','term_validity'];
if ($sort_field && in_array_case($sort_field,$sort_fields_limit)){
$sort_order_seq = ['asc','desc'];
$sort_order = $sort_order_seq[(int)$sort_order]??'asc';
switch ($sort_field){
case 'price':
//$order[] = ['sku.price|sku.discount_price',$sort_order];
$order['sku.price']=$sort_order;
break;
case 'sale':
$order['spu.sale_num'] = $sort_order;
break;
case 'term_validity':
$order['spu.term_validity'] = $sort_order;
break;
}
}
//默认排序
$order['sku.sort'] = 'asc';
$order['sku.id'] = 'desc';
$order['spu.batch_id'] = 'desc';
$order['g.goods_id'] = 'desc';
//初始化信息,登录状态、认证状态
if ($login==false){
$fields .='"价格登录可见" as price,"价格登录可见" as original_price,"活动价格登录可见" as discount_price,';//下文处理是否为活动商品
}else{
$fields .='sku.price,sku.original_price as original_price, sku.discount_price,';//活动价、正常销售价?
}
$fields .= 'g.goods_id,g.name as goods_name,g.max_purchase_period,g.max_purchase,g.show_price,g.is_online_sale,g.country_code,g.app_thumb,g.pc_thumb,g.drug_form,g.keyword,g.sketch,m.name as manufacturer_name,g.spec_desc,';
//限购字段
$fields .= 'g.max_purchase,g.max_purchase_period,g.unit,';
$fields .= 'spu.batch_type,spu.supplier_id,spu.supplier_sn,spu.batch_id,spu.retail_flag,spu.retail_num,spu.entirety_num,spu.batch_number,spu.stock_num,spu.term_validity,spu.supplier_sn,spu.sale_num,';
$fields .= 'sku.id as sku_id,sku.area_id,sku.price_type,sku.discount_num,sku.discount_start_time,sku.discount_end_time';
//筛选条件处理
$manufacturer_name = $param['manufacturer']??'';
if ($manufacturer_name){
$where[] = ['m.name|m.simple_pinyin','like','%'.htmlspecialchars($manufacturer_name).'%'];
}
//分页
$per_page = $param['per_page']??30;
$current_page = $param['current_page']??1;
//查询
/**
* paginate 返回数据(对象类型)如下
* [
* 'current_page'=>$current_page,
* 'data'=>[],//查询结果$fields数组
* 'last_page'=>'',
* 'per_page'=>'',
* 'total'=>''
* ]
*/
$data = Db::name('goods_batch_area_relation')->alias('sku')->field($fields)
->join('goods_batch spu','spu.batch_id=sku.batch_id')
->join('goods g','g.goods_id=spu.goods_id')
->join('manufacturer m','m.id=g.manufacturer_id')
->where($where)->order($order)//->buildSql();exit();
->paginate($per_page,false,['page'=>$current_page])
->toArray();
$extend_price_rate = $init_data['extend_price_rate']??1.05;
$up_hy = $param['is_update_hy']??true;//is_update_hy:0/1
$to_del_num = 0;
//@todo 是否已加入购物车
/* $user_cart_data_now = [];
$uc_price_id_data_now = [];
$uc_supplier_sn_now = [];
if ($login){
$user_cart_data = Db::name('user_cart')->field('id as uc_id,batch_id,price_id,type')->where('user_id',$init_data['user_id'])->select();
}*/
if ($up_hy){
foreach ($data['data'] as $key=>$value){
if (empty($value['pc_thumb'])){
$data['data'][$key]['pc_thumb'] = $value['app_thumb']?:self::APP_DEFAULT_IMG_URL;
}
if($value['pc_thumb'] == 'www.hyey.cn'){
$data['data'][$key]['pc_thumb'] = self::APP_DEFAULT_IMG_URL;
}
$data['data'][$key]['is_buy'] = $login?1:0;
//价格处理:活动价/正常销售价处理;
if ($value['supplier_id']!=10006 && isset($value['discount_price']) && $value['discount_price'] * 10000){
$date = strtotime(time());
$sale_pack_num = $value['retail_flag']==0?$value['retail_num']:$value['entirety_num'];
//未对分页结果数量产生影响
if (((!$value['discount_start_time'] && !$value['discount_end_time']) || ($value['discount_start_time']<$date && $value['discount_end_time']>$date)) && ($value['discount_num']>=$sale_pack_num || $value['discount_num']==0)){
$data['data'][$key]['price'] = $data['data'][$key]['discount_price'];
// unset($data['data'][$key]['price']);
}else{
unset($data['data'][$key]['discount_start_time']);
unset($data['data'][$key]['discount_end_time']);
unset($data['data'][$key]['discount_price']);
unset($data['data'][$key]['discount_num']);
}
}
//非网处理
if (isset($data['data'][$key]['is_online_sale'])&& $data['data'][$key]['is_online_sale']==1){
$data['data'][$key]['is_buy'] = 0;
}
//限购
$data['data'][$key]['is_limit'] = 0;
if ($value['max_purchase_period'] && $value['max_purchase'] && $value['supplier_id']!=10006){
$data['data'][$key]['is_limit'] = 1;
$data['data'][$key]['limit_info'] = $value['max_purchase_period'].'天内限购'.$value['max_purchase'].$value['unit'];
}
if ($value['supplier_id']==10006){
if ($value['supplier_sn']){
if ($login){
$hy_price = $this->getHyPrice($value['supplier_sn'],$extend_price_rate);
if ($hy_price){
$data['data'][$key]['price'] = $hy_price;
}else{
//$data['data'][$key]['price'] = self::NO_HY_PRICE;
//$data['data'][$key]['is_buy'] = 0;
//获取hy价格失败-改为不展示
$to_del_num++;
unset($data['data'][$key]);
}
}else{
$data['data'][$key]['price'] = '登录后查看价格';
$data['data'][$key]['is_buy'] = 0;
}
}else{
$to_del_num++;
unset($data['data'][$key]);
}
}
}
}
//分页+数据(索引)整理
if ($to_del_num){
$data['total']-=$to_del_num;
$data['last_page'] = ceil($data['total']/$data['per_page']);
$data['data'] = array_merge($data['data']);
}
$res = [];
$res['code'] = 200;
$res['msg'] = 'success';
$res['data'] = $data;
return $res;
}
/**
* 获取hy商品价格-丁超-20200514
* 单独采集hy价格入库ydyd_hy_data,保持定期更新,后期查询从中获取
* @param $supplier_sn string hy商品id
* @param $price_rate float 折扣等级
* @return mixed 成功返回价格-失败返回false
*
* hy商品字段说明
* {
"RN": "15",//列表序号
"BOSS": "a0540",//
"YPBH": "8029034",//药品编号
"ISRETAIL": "1",//零整标志
"ID": "A74926EE-F7D9-412E-9C38-9A46A4A48D5D",//药品id
"YPMC": "注射用阿莫西林钠克拉维酸钾",//药品名称
"YPDM": "ZSYAMXLNKLWSJEYK",//药品编码?
"GG": "0.6g",//规格
"CDMC": "苏州二叶制药有限公司",//产地名称(厂家名称)
"CDDM": "SZEYZYYXGS",//厂家编码
"PH": "K1190901",//批号
"SL": "2080",//库存数量
"BZ": "600",//包装
"ZBZ": "10",//中包装
"NZBZ": "10",
"DW": "瓶",//单位
"DJ": "会员可查",//销售定价
"LSJ": "25",//建议零售价=国规价
"YXQ": "2021-08",//有效期
"PZWH": "H20045122.",//批准文号=国药准字
"CK": "aa",//仓库?
"JX": "粉针剂",//剂型
"PICNAME": "/uploadpic/600/a0540/8029034/8029034_0.jpg",//图片
"PICNAME2": "",
"FID": "",
"SID": "",
"ZRPZ": "0",
"ISG": "0",
"FGSMC": "自营",//分公司名称?
"FGSID": "0",//分公司id
"PROMOTIONID": "0",//活动id 参考电商promotion概念
"DISCOUNTRATE": "1"//折扣
},
*
*/
public function getHyPrice($supplier_sn,$price_rate=1.05){
$price_cache = Cache::get($supplier_sn);//false、number
if (!$price_cache){
$price = Db::name('hy_data')->where('sn',$supplier_sn)->limit(1)->value('price');
if ($price){
Cache::set($supplier_sn,$price,86400);
$price_cache = ceil($price*$price_rate*100)/100;
}
}else{
$price_cache = ceil($price_cache*$price_rate*100)/100;
}
return $price_cache;
}
//预留华源商品校验--调用HyData类的checkHyGoods()方法(默认校验价格+库存,支持校验更多字段)
public function checkHyGoods($supplier_sn,$price_rate=1.05){
}
/**
* 商品搜索列表
*/
public function searchList($parames)
{
if (empty($parames['name'])) {
throw new Exception('没有你需要的药品');
}
$_where = [];
//基础条件
$_where[] = ['g.status', '=', 1];
$_where[] = ['spu.batch_status', '=', 1];
$_where[] = ['spu.stock_num', '>', 0];
$_where[] = ['sku.is_onshelf', '=', 1];
$_where[] = ['sku.is_delete', '=', 0];
//有效期
$_where[] = ['spu.term_validity', '>', date('Y-m-d')];
//搜索
if (isset($parames['name']) && $parames['name']) {
//药品名称 厂商 规格 搜索
$search_array = explode(' ', trim($parames['name']));
switch (count($search_array)) {
case 1:
$_where[] = ['g.name|m.name|g.simple_pinyin|g.pinyin|m.simple_pinyin', 'like', '%' .$search_array[0]. '%'];
break;
case 2:
$_where[] = ['g.name|m.name|g.simple_pinyin|g.pinyin|m.simple_pinyin', 'like', '%' .$search_array[0]. '%'];
$_where[] = ['g.name|m.name|g.simple_pinyin|g.pinyin|m.simple_pinyin', 'like', '%' .$search_array[1]. '%'];
break;
}
}
$_fields = 'g.name,g.goods_id,m.name as manufacturer_name,spu.supplier_id,spu.supplier_sn';
$res = Db::name('goods_batch_area_relation')->alias('sku')->distinct(true)->field($_fields)
->join('goods_batch spu', 'spu.batch_id=sku.batch_id')
->join('goods g', 'g.goods_id=spu.goods_id')
->join('manufacturer m', 'm.id=g.manufacturer_id')
->where($_where)
->limit(100)->select();
$arr_hy_goods_id = [];
foreach ($res as $k=>$v){
if ($v['supplier_id']==10006){
if ($v['supplier_sn']){
$arr_hy_goods_id[] = $v['supplier_sn'];
}
}
}
$hy = [];
if(count($arr_hy_goods_id)>0){
//hy商品-有价格
$hy = Db::name('hy_data')->where('sn','in',$arr_hy_goods_id )->column('sn');
}
$res2 = [];
foreach ($res as $val){
if(count($res2)>=10) break;
$tmp_data = $val;
//$tmp_data = [];
//$tmp_data['name'] = $val['name'];
//$tmp_data['manufacturer_name'] = $val['manufacturer_name'];
if( $val['supplier_id'] != 10006){
$res2[] = $tmp_data;
}elseif(count($hy)>0 && $val['supplier_id']== 10006 && in_array($val['supplier_sn'], $hy)){
$res2[] = $tmp_data;
}
}
//$result = array_slice($tmp_arr,0,10);
return $res2;
}
/**
* 商品收藏
*
*/
public function addCollect_App($user_id,$goods_id,$status){
//status == 1添加收藏 2删除收藏
if($status == 1){
$collect_arr = explode(",", $goods_id);
$collect_arr = array_unique($collect_arr);
if(count($collect_arr)>0){
//bug 备注find只查询单条
$__where = [];
$__where[] = ['user_id','=',$user_id];
$__where[] = ['goods_id','in',$collect_arr];
$tmp = Db::name('user_collect')->where($__where)->select();
//严格条数一致,未收藏的继续添加收藏
if($tmp && count($tmp)==count($collect_arr)){
$result['errmsg'] = '商品已收藏';
return $result;
}
$has_collect = [];
if ($tmp){
$has_collect = array_column($tmp,'goods_id');
}
$add_data = [];
//新增user_collect表数据
foreach ($collect_arr as $v) {
if (!in_array($v,$has_collect)){
$tmp_add_data=[];
$tmp_add_data['goods_id'] = $v;
$tmp_add_data['user_id'] = $user_id;
//$tmp_add_data['collect_time'] = date("Y-m-d H:i:s");
$add_data[]=$tmp_add_data;
}
}
if (count($add_data)>0) {
Db::startTrans();
try{
foreach ($add_data as $val){
$exist = Db::name('user_collect')->where($val)->find();
if (!$exist){
$tmp_x = $val;
$tmp_x['collect_time'] = date("Y-m-d H:i:s");
$res_insert = Db::name('user_collect')->insert($tmp_x);
if ($res_insert){
Db::name('goods')->where('goods_id',$tmp_x['goods_id'])->setInc('collect_count');
}
}
}
//事务结束
Db::commit();
}catch (Exception $exception){
Db::rollback();
$result['errmsg'] = $exception->getMessage();
return $result;
}
}else{
$result['errmsg'] = '商品已收藏';
return $result;
}
$result['errmsg'] = '收藏成功';
return $result;
}else{
$result['errmsg'] = '参数为空!';
return $result;
}
}elseif ($status == 2){
if($goods_id){
$goods_id = explode(',',$goods_id);
try{
Db::name("user_collect")->where("user_id",$user_id)->where("goods_id",'in',$goods_id)->delete();
$result['errmsg'] = '已取消收藏';
return $result;
}catch (Exception $exception){
$result['errmsg'] = $exception->getMessage();
return $result;
}
}else{
$result['errmsg'] = '参数不能为空!';
return $result;
}
}
$result['errmsg'] = '参数不合法!';
return $result;
}
/**
* 商品收藏列表
*
*/
public function Collectlsit ($params){
// $data = Request::only(['now_page','page_size']);
// if(!session('user_id')){
// $result['errcode'] = -1;
// $result['errmsg'] = '获取收藏商品列表异常';
// return $result;
// }
// $_where['a.user_id'] = $params['user_id];
$_where['a.user_id'] = $params['user_id'];
$_goods_join = "goods b";
$_goods_join_on = "a.goods_id = b.goods_id";
$_factory_join = "manufacturer m";
$_factory_join_on = "m.id = b.manufacturer_id";
$_field = "a.user_id,a.goods_id,a.collect_time,b.name,b.pinyin,b.sketch,b.spec_desc,b.status,'' as show_price,b.pc_thumb,b.pc_gallery,b.pc_content,b.app_thumb,b.app_gallery,b.app_content,b.country_code,b.drug_form,m.name as factory_name";
$_order = "a.collect_time desc";
// $total_count = Db::name('user_collect')->alias('a')->join($_goods_join,$_goods_join_on,"RIGHT")->join($_factory_join,$_factory_join_on,"LEFT")->where($_where)->count();
// $total_page = ceil($total_count/$data['page_size']);
// $list = Db::name('user_collect')->alias('a')->join($_goods_join,$_goods_join_on,"RIGHT")->join($_factory_join,$_factory_join_on,"LEFT")->page($data['now_page'],$data['page_size'])->where($_where)->field($_field)->order($_order)->select();
$list = Db::name('user_collect')->alias('a')->join($_goods_join,$_goods_join_on,"RIGHT")->join($_factory_join,$_factory_join_on,"LEFT")->where($_where)->field($_field)->order($_order)->select();
foreach ($list as $k=>$v){
if ($v['pc_thumb']=='' || $v['pc_thumb']=='www.hyey.cn'){
$list[$k]['pc_thumb'] = self::APP_DEFAULT_IMG_URL;
}
}
// $result['errcode'] = 0;
$result['errmsg'] = '获取收藏商品列表成功';
$result['data']['list'] = $list;
// $result['data']['total_count'] = $total_count;
// $result['data']['total_page'] = $total_page;
return $result;
}
/**
* 药品排行
*
*/
public function goodsRanking()
{
$param['sort_field'] = 'sale';
$param['sort_order'] = 1;
$param['is_update_hy'] = 0;
$param['per_page'] = 30;
$result = $this->getGoodsSearch(false,$param);
$list = $result['data']['data']??array();
$ret = array();
$int = 0;
$nameArray = [];
foreach ($list as $k=>$item)
{
$item['goods_name'] = str_replace("(","",$item['goods_name']);
$names = explode("",$item['goods_name']);
$item['goods_name'] = $names[0]??'';
if($item['goods_name']){
if(!in_array($item['goods_name'],$nameArray)){
$nameArray[] = $item['goods_name'];
$i['name'] = $item['goods_name'];
$i['goods_id'] = $item['goods_id'];
$ret[] = $i;
++$int;
}
}
if($int>=20){
break;
}
}
return $ret;
}
/**
* sku详情处理和下单校验(GoodsService/OrderGoodsControlService)
* 一、价格处理
* 用户身份+活动价格/新人活动价/常规活动价格
* 二、采购权
* 三、有限购需求的商品
*/
public function goodsDetailProcess(){
}
}