first commit
This commit is contained in:
462
金壶/ydyd_service/application/common/HyData.php
Normal file
462
金壶/ydyd_service/application/common/HyData.php
Normal file
@@ -0,0 +1,462 @@
|
||||
<?php
|
||||
namespace app\common;
|
||||
|
||||
use PhpParser\Node\NullableType;
|
||||
use think\Exception;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Config;
|
||||
use think\facade\Log;
|
||||
|
||||
class HyData
|
||||
{
|
||||
const EXTEND_SITE_URL='https://www.hyey.cn';
|
||||
const LOGIN_URL='https://www.hyey.cn/ashx/Login.ashx';
|
||||
const SEARCH_URL='https://www.hyey.cn/ashx/GetList2.ashx';
|
||||
const DETAIL_URL='https://www.hyey.cn/YpXq.aspx';
|
||||
const PRICE_DOM=['<input type="hidden" name="ctl00$ContentPlaceHolder1$hfdj" id="ContentPlaceHolder1_hfdj" value="','" />'];
|
||||
const SHOW_PRICE_DOM=['<span id="ContentPlaceHolder1_spLSJ" class="price" style="font-weight: 900">','</span>'];
|
||||
const NAME_DOM=['<span id="ContentPlaceHolder1_spSPMC">','</span>'];
|
||||
const MANUFACTURER_NAME_DOM=['<span id="ContentPlaceHolder1_spCDMC">','</span>'];
|
||||
const COUNTRY_CODE_DOM=['<span id="ContentPlaceHolder1_spPZWH">','</span>'];
|
||||
const TERM_VALIDITY_DOM=['<span id="ContentPlaceHolder1_spYXQ">','</span>'];
|
||||
const SPEC_DESC_DOM=['<span id="ContentPlaceHolder1_spGG">','</span>'];
|
||||
const RETAIL_NUM_DOM=['<span id="ContentPlaceHolder1_spZBZ">','</span>'];
|
||||
const ENTIRETY_NUM_DOM=['<span id="ContentPlaceHolder1_spBZ">','</span>'];
|
||||
const RETAIL_FLAG_DOM=['<span id="ContentPlaceHolder1_spisRetail">','</span>'];
|
||||
const STOCK_NUM_DOM=['<span id="ContentPlaceHolder1_spSL">','</span>'];
|
||||
const DRUG_FORM_DOM=['<span id="ContentPlaceHolder1_spJX">','</span>'];
|
||||
const BATCH_NUMBER_DOM=['<span id="ContentPlaceHolder1_spPH">','</span>'];
|
||||
const PC_CONTENT_DOM=['<span id="ContentPlaceHolder1_spYPSM">','</span>
|
||||
</div>'];
|
||||
|
||||
const IMG_DOM=["<img src='/uploadpic/50","'"];
|
||||
public function makeLogin() {
|
||||
if (!Cache::get('SYSTEM_CONSTANT')['EXTEND_PLAT_USER_DATA']){
|
||||
\app\facade\SystemDeal::initConstant();
|
||||
}
|
||||
$post_fields['UserName'] = Cache::get('SYSTEM_CONSTANT')['EXTEND_PLAT_USER_DATA'][array_rand(Cache::get('SYSTEM_CONSTANT')['EXTEND_PLAT_USER_DATA'],1)];
|
||||
$post_fields['UserPwd'] = Cache::get('SYSTEM_CONSTANT')['EXTEND_PLAT_USER_PASSWORD'];
|
||||
if (!($post_fields['UserName'] && $post_fields['UserPwd'])){
|
||||
//190819 : hy账号密码修改*/
|
||||
$post_fields['UserName'] = Config::get('SYSTEM_CONSTANT')['EXTEND_PLAT_USER_DATA'][array_rand(Config::get('SYSTEM_CONSTANT')['EXTEND_PLAT_USER_DATA'],1)];
|
||||
$post_fields['UserPwd'] = Config::get('SYSTEM_CONSTANT')['EXTEND_PLAT_USER_PASSWORD'];
|
||||
}
|
||||
// $post_fields['UserName'] = 'hajhcj6';
|
||||
// $post_fields['UserPwd'] = 'wasd123456';
|
||||
$post_fields['Yzm'] = '';
|
||||
$post_fields['origURL'] = self::EXTEND_SITE_URL;
|
||||
$post_fields['domain'] = 'www.hyey.cn';
|
||||
$response=curlCookie(self::LOGIN_URL,[],$post_fields,1);
|
||||
//return $response;
|
||||
$json_value=json_decode(getJsonValue($response),true);
|
||||
if ($json_value['isOk']==1) {
|
||||
$cookie=getCookieValue($response);
|
||||
//存储到缓存
|
||||
Cache::set('HY_LOGIN_COOKIE',$cookie);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function search($data,$need_price=false) {
|
||||
//return $this->makeLogin();
|
||||
//return array_rand(Cache::get('SYSTEM_CONSTANT')['EXTEND_PLAT_USER_DATA']);
|
||||
$send_param=[];
|
||||
$send_param['pageIndex']=$data['now_page']??1;
|
||||
$search_words=$data['search_words']??'';
|
||||
$send_param['keys']=htmlspecialchars($search_words);
|
||||
//exit($send_param['keys']);
|
||||
$send_param['Lx']=3;
|
||||
$send_param['jg']=$data['price_order']??'';
|
||||
$send_param['isck']=$data['retail_flag']??'';
|
||||
$send_param['xqid']=$data['term_validity_type']??0;
|
||||
//20190926 新增参数
|
||||
$send_param['FGSID']='';
|
||||
list($usec, $sec) = explode(" ", microtime());
|
||||
//$time = (int)(((float)$usec + (float)$sec) * 1000);
|
||||
$time = (float)sprintf('%.0f',(floatval($usec)+floatval($sec))*1000);
|
||||
$send_param['_'] = $time;
|
||||
|
||||
$search_url = self::SEARCH_URL.'?'.http_build_query($send_param);
|
||||
//return $search_url;
|
||||
//return $need_price;
|
||||
//return curlCookie($search_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false);
|
||||
//return Cache::get('HY_LOGIN_COOKIE');
|
||||
if ($need_price) {
|
||||
//登录状态设置cookie
|
||||
$response=curlCookie($search_url,[],[],0,Cache::get('HY_LOGIN_COOKIE')??[],false);
|
||||
} else {
|
||||
$response=curlCookie($search_url,[],[],0,'',false);
|
||||
}
|
||||
//return $response;
|
||||
$json_value=$this->dealData($response);
|
||||
//return $json_value;
|
||||
if ($need_price) {
|
||||
if (isset($json_value['data'][0]) && isset($json_value['data'][0]['DJ']) && ($json_value['data'][0]['DJ'] == '会员可查')) {
|
||||
//说明没有初始化登录,再做一次登录
|
||||
if ($this->makeLogin()) {
|
||||
$response=curlCookie($search_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false);
|
||||
$json_value=$this->dealData($response);
|
||||
if (isset($json_value['data'][0]) && isset($json_value['data'][0]['DJ']) && ($json_value['data'][0]['DJ'] == '会员可查')) {
|
||||
//还是读不到价格的话,给空数据
|
||||
$json_value=$this->emptyResult();
|
||||
}
|
||||
} else {
|
||||
$json_value=$this->emptyResult();
|
||||
}
|
||||
}
|
||||
}
|
||||
return $json_value;
|
||||
}
|
||||
|
||||
private function dealData($response) {
|
||||
$json_value=json_decode($response,true);
|
||||
if (!isset($json_value['total'])) {
|
||||
$json_value['total']=[];
|
||||
$json_value['total']['record']=0;
|
||||
$json_value['total']['pcount']=0;
|
||||
}
|
||||
if (isset($json_value['data'])) {
|
||||
$data_value=json_decode($json_value['data'],true);
|
||||
} else {
|
||||
$data_value=[];
|
||||
}
|
||||
if (isset($data_value['tables'])) {
|
||||
//处理中包装数量可能存在字符串问题
|
||||
foreach ($data_value['tables'] as $k=>$v) {
|
||||
if (isset($v['ZBZ'])) {
|
||||
$data_value['tables'][$k]['ZBZ'] =(int)$v['ZBZ'];
|
||||
}
|
||||
if (isset($v['BZ'])) {
|
||||
$data_value['tables'][$k]['BZ'] =(int)$v['BZ'];
|
||||
}
|
||||
}
|
||||
//--
|
||||
$json_value['data']=$data_value['tables'];
|
||||
} else {
|
||||
$json_value['data']=[];
|
||||
}
|
||||
return $json_value;
|
||||
}
|
||||
|
||||
private function emptyResult() {
|
||||
$json_value['total']=[];
|
||||
$json_value['total']['record']=0;
|
||||
$json_value['total']['pcount']=0;
|
||||
$json_value['data']=[];
|
||||
return $json_value;
|
||||
}
|
||||
|
||||
//单个药品详情
|
||||
//$need_price是否需要读取价格
|
||||
//$only_price是否只需要读取价格
|
||||
public function detail($data,$need_price=true,$only_price=false) {
|
||||
$send_param=[];
|
||||
$extend_goods_id=$data['extend_goods_id']??'';
|
||||
if ($extend_goods_id=='') {
|
||||
return false;
|
||||
}
|
||||
$send_param['Drugid']=$extend_goods_id;
|
||||
|
||||
$detial_url = self::DETAIL_URL.'?'.http_build_query($send_param);
|
||||
if ($need_price) {
|
||||
$response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false);
|
||||
} else {
|
||||
$response=curlCookie($detial_url,[],[],0,'',false);
|
||||
}
|
||||
|
||||
$price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]);
|
||||
|
||||
if ($price===false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$result['can_show'] = 0;
|
||||
if ($need_price) {
|
||||
$result['can_show'] = 1;
|
||||
if ($price['value'] == '会员可查') {
|
||||
//说明没有初始化登录,再做一次登录
|
||||
if ($this->makeLogin()) {
|
||||
$response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false);
|
||||
$price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]);
|
||||
if ($price===false) {
|
||||
return false;
|
||||
}
|
||||
if ($price['value'] == '会员可查') {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$result['extend_goods_id']=$extend_goods_id;
|
||||
//7.3号价格放大0.01 by tianyihao
|
||||
//$result['price']=$price['value'];
|
||||
//$result['price'] = @number_format(($price['value']+$price['value']*0.05),2,'.','');
|
||||
$result['price'] = @number_format($price['value'],2,'.','');
|
||||
|
||||
//库存都要
|
||||
$stock_num=getBetween($response,self::STOCK_NUM_DOM[0],self::STOCK_NUM_DOM[1]);
|
||||
if ($stock_num['value']=='充足') {
|
||||
$result['stock_num']='99999';
|
||||
} else {
|
||||
$result['stock_num']=$stock_num['value'];
|
||||
}
|
||||
|
||||
//由于存在折扣价,价格处理部分放到前端处理
|
||||
|
||||
if (!$only_price) {
|
||||
//根据具体需求,取其他的详细信息
|
||||
//图片
|
||||
$gallery=getMutiBetween($response,self::IMG_DOM[0],self::IMG_DOM[1]);
|
||||
foreach ($gallery as $k=>$v) {
|
||||
$gallery[$k]=self::EXTEND_SITE_URL.'/uploadpic/400'.$v;
|
||||
}
|
||||
$result['gallery']=$gallery;
|
||||
//建议零售价和单位
|
||||
$show_price=getBetween($response,self::SHOW_PRICE_DOM[0],self::SHOW_PRICE_DOM[1]);
|
||||
$tmp_show_price=explode('元/',$show_price['value']);
|
||||
$result['show_price']=number_format($tmp_show_price[0],2,'.','');
|
||||
$result['unit']=$tmp_show_price[1];
|
||||
if ($result['show_price']) {
|
||||
$tmp_price=explode('.',$result['show_price']);
|
||||
$result['show_price_int'] = $tmp_price[0];
|
||||
$result['show_price_float'] = $tmp_price[1];
|
||||
} else {
|
||||
$result['show_price_int']='0';
|
||||
$result['show_price_float']='00';
|
||||
}
|
||||
//商品名称
|
||||
$name=getBetween($response,self::NAME_DOM[0],self::NAME_DOM[1]);
|
||||
$result['name']=$name['value'];
|
||||
//商品简述先用名称代替
|
||||
$result['sketch']=$name['value'];
|
||||
//生产厂家
|
||||
$manufacturer_name=getBetween($response,self::MANUFACTURER_NAME_DOM[0],self::MANUFACTURER_NAME_DOM[1]);
|
||||
$result['manufacturer_name']=$manufacturer_name['value'];
|
||||
//国药准字
|
||||
$country_code=getBetween($response,self::COUNTRY_CODE_DOM[0],self::COUNTRY_CODE_DOM[1]);
|
||||
$result['country_code']=$country_code['value'];
|
||||
//有效期
|
||||
$term_validity=getBetween($response,self::TERM_VALIDITY_DOM[0],self::TERM_VALIDITY_DOM[1]);
|
||||
$result['term_validity']=$term_validity['value'];
|
||||
//规格
|
||||
$spec_desc=getBetween($response,self::SPEC_DESC_DOM[0],self::SPEC_DESC_DOM[1]);
|
||||
$result['spec_desc']=$spec_desc['value'];
|
||||
//中包装
|
||||
$retail_num=getBetween($response,self::RETAIL_NUM_DOM[0],self::RETAIL_NUM_DOM[1]);
|
||||
$result['retail_num']=(int)$retail_num['value'];
|
||||
//大包装
|
||||
$entirety_num=getBetween($response,self::ENTIRETY_NUM_DOM[0],self::ENTIRETY_NUM_DOM[1]);
|
||||
$result['entirety_num']=(int)$entirety_num['value'];
|
||||
//整零
|
||||
$retail_flag=getBetween($response,self::RETAIL_FLAG_DOM[0],self::RETAIL_FLAG_DOM[1]);
|
||||
if ($retail_flag['value']=='零') {
|
||||
$result['retail_flag']=0;
|
||||
} else {
|
||||
$result['retail_flag']=1;
|
||||
}
|
||||
//库存
|
||||
/*$stock_num=getBetween($response,self::STOCK_NUM_DOM[0],self::STOCK_NUM_DOM[1]);
|
||||
if ($stock_num['value']=='充足') {
|
||||
$result['stock_num']='99999+';
|
||||
} else {
|
||||
$result['stock_num']=$stock_num['value'];
|
||||
}*/
|
||||
//剂型
|
||||
$drug_form=getBetween($response,self::DRUG_FORM_DOM[0],self::DRUG_FORM_DOM[1]);
|
||||
$result['drug_form']=$drug_form['value'];
|
||||
//批号
|
||||
$batch_number=getBetween($response,self::BATCH_NUMBER_DOM[0],self::BATCH_NUMBER_DOM[1]);
|
||||
$result['batch_number']=$batch_number['value'];
|
||||
//详情介绍
|
||||
$pc_content=getBetween($response,self::PC_CONTENT_DOM[0],self::PC_CONTENT_DOM[1]);
|
||||
$result['pc_content']=preg_replace("/<a[^>]*>(.*?)<\/a>/is", "$1", $pc_content['value']);
|
||||
//--
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
//api专用-仅更新价格
|
||||
public function apiPriceDetail($data,$need_price=true) {
|
||||
$send_param=[];
|
||||
$extend_goods_id=$data['extend_goods_id']??'';
|
||||
if ($extend_goods_id=='') {
|
||||
return false;
|
||||
}
|
||||
$send_param['Drugid']=$extend_goods_id;
|
||||
|
||||
$detial_url = self::DETAIL_URL.'?'.http_build_query($send_param);
|
||||
if ($need_price) {
|
||||
$response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false);
|
||||
} else {
|
||||
$response=curlCookie($detial_url,[],[],0,'',false);
|
||||
}
|
||||
|
||||
$price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]);
|
||||
|
||||
if ($price===false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$result['can_show'] = 0;
|
||||
if ($need_price) {
|
||||
$result['can_show'] = 1;
|
||||
if ($price['value'] == '会员可查') {
|
||||
//说明没有初始化登录,再做一次登录
|
||||
if ($this->makeLogin()) {
|
||||
$response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false);
|
||||
$price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]);
|
||||
if ($price===false) {
|
||||
return false;
|
||||
}
|
||||
if ($price['value'] == '会员可查') {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$result['extend_goods_id']=$extend_goods_id;
|
||||
$result['price'] = ceil($price['value']*100)/100;
|
||||
return $result['price'];
|
||||
}
|
||||
|
||||
/**
|
||||
* hy商品下单时校验库存+价格;$extend_goods_id:hy商品id对应ydyd_goods_batch表supplier_sn字段
|
||||
* @param string $extend_goods_id
|
||||
* @param bool $check_more
|
||||
* @return array|bool
|
||||
* 默认校验价格+库存,支持校验更多字段
|
||||
* by dingchao 20200514
|
||||
*/
|
||||
public function checkHyGoods($extend_goods_id='',$check_more = false){
|
||||
$send_param=[];
|
||||
if ($extend_goods_id=='') {
|
||||
return false;
|
||||
}
|
||||
$send_param['Drugid']=$extend_goods_id;
|
||||
|
||||
$detial_url = self::DETAIL_URL.'?'.http_build_query($send_param);
|
||||
|
||||
$response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false);
|
||||
|
||||
$price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]);
|
||||
|
||||
if ($price===false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//注意同步hy官网显示文字变更;旧版:$price['value']== '会员可查'
|
||||
if (!is_numeric($price['value'])) {
|
||||
//说明没有初始化登录,再做一次登录
|
||||
if ($this->makeLogin()) {
|
||||
$response=curlCookie($detial_url,[],[],0,Cache::get('HY_LOGIN_COOKIE'),false);
|
||||
$price=getBetween($response,self::PRICE_DOM[0],self::PRICE_DOM[1]);
|
||||
if ($price===false) {
|
||||
return false;
|
||||
}
|
||||
if (!is_numeric($price['value'])) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;//登录失败
|
||||
}
|
||||
}
|
||||
|
||||
$result['extend_goods_id']=$extend_goods_id;
|
||||
|
||||
$result['price'] = ceil($price*100)/100;
|
||||
|
||||
//库存
|
||||
$stock_num=getBetween($response,self::STOCK_NUM_DOM[0],self::STOCK_NUM_DOM[1]);
|
||||
//old-version:$stock_num['value']=='充足'
|
||||
if (!is_numeric($stock_num['value'])) {
|
||||
$result['stock_num']='99999';
|
||||
} else {
|
||||
$result['stock_num']=$stock_num['value'];
|
||||
}
|
||||
|
||||
//根据具体需求,取其他的详细信息
|
||||
if ($check_more){
|
||||
$more = $this->checkMoreInfo($response);
|
||||
if ($result){
|
||||
$result = array_merge($result,$more);
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function checkMoreInfo($response=[]){
|
||||
if ($response){
|
||||
//图片
|
||||
$gallery=getMutiBetween($response,self::IMG_DOM[0],self::IMG_DOM[1]);
|
||||
foreach ($gallery as $k=>$v) {
|
||||
$gallery[$k]=self::EXTEND_SITE_URL.'/uploadpic/400'.$v;
|
||||
}
|
||||
$result['gallery']=$gallery;
|
||||
//建议零售价和单位
|
||||
$show_price=getBetween($response,self::SHOW_PRICE_DOM[0],self::SHOW_PRICE_DOM[1]);
|
||||
$tmp_show_price=explode('元/',$show_price['value']);
|
||||
$result['show_price']=number_format($tmp_show_price[0],2,'.','');
|
||||
$result['unit']=$tmp_show_price[1];
|
||||
if ($result['show_price']) {
|
||||
$tmp_price=explode('.',$result['show_price']);
|
||||
$result['show_price_int'] = $tmp_price[0];
|
||||
$result['show_price_float'] = $tmp_price[1];
|
||||
} else {
|
||||
$result['show_price_int']='0';
|
||||
$result['show_price_float']='00';
|
||||
}
|
||||
//商品名称
|
||||
$name=getBetween($response,self::NAME_DOM[0],self::NAME_DOM[1]);
|
||||
$result['name']=$name['value'];
|
||||
//商品简述先用名称代替
|
||||
$result['sketch']=$name['value'];
|
||||
//生产厂家
|
||||
$manufacturer_name=getBetween($response,self::MANUFACTURER_NAME_DOM[0],self::MANUFACTURER_NAME_DOM[1]);
|
||||
$result['manufacturer_name']=$manufacturer_name['value'];
|
||||
//国药准字
|
||||
$country_code=getBetween($response,self::COUNTRY_CODE_DOM[0],self::COUNTRY_CODE_DOM[1]);
|
||||
$result['country_code']=$country_code['value'];
|
||||
//有效期
|
||||
$term_validity=getBetween($response,self::TERM_VALIDITY_DOM[0],self::TERM_VALIDITY_DOM[1]);
|
||||
$result['term_validity']=$term_validity['value'];
|
||||
//规格
|
||||
$spec_desc=getBetween($response,self::SPEC_DESC_DOM[0],self::SPEC_DESC_DOM[1]);
|
||||
$result['spec_desc']=$spec_desc['value'];
|
||||
//中包装
|
||||
$retail_num=getBetween($response,self::RETAIL_NUM_DOM[0],self::RETAIL_NUM_DOM[1]);
|
||||
$result['retail_num']=(int)$retail_num['value'];
|
||||
//大包装
|
||||
$entirety_num=getBetween($response,self::ENTIRETY_NUM_DOM[0],self::ENTIRETY_NUM_DOM[1]);
|
||||
$result['entirety_num']=(int)$entirety_num['value'];
|
||||
//整零
|
||||
$retail_flag=getBetween($response,self::RETAIL_FLAG_DOM[0],self::RETAIL_FLAG_DOM[1]);
|
||||
if ($retail_flag['value']=='零') {
|
||||
$result['retail_flag']=0;
|
||||
} else {
|
||||
$result['retail_flag']=1;
|
||||
}
|
||||
//剂型
|
||||
$drug_form=getBetween($response,self::DRUG_FORM_DOM[0],self::DRUG_FORM_DOM[1]);
|
||||
$result['drug_form']=$drug_form['value'];
|
||||
//批号
|
||||
$batch_number=getBetween($response,self::BATCH_NUMBER_DOM[0],self::BATCH_NUMBER_DOM[1]);
|
||||
$result['batch_number']=$batch_number['value'];
|
||||
//详情介绍
|
||||
$pc_content=getBetween($response,self::PC_CONTENT_DOM[0],self::PC_CONTENT_DOM[1]);
|
||||
$result['pc_content']=preg_replace("/<a[^>]*>(.*?)<\/a>/is", "$1", $pc_content['value']);
|
||||
}else{
|
||||
$result = false;
|
||||
}
|
||||
|
||||
return $result;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user