wang hou sheng 7 months ago
parent bc2be7fe76
commit e2b9fa6323
  1. 40
      app/api/controller/Goods.php
  2. 4
      app/api/controller/Wxserver.php
  3. 109
      app/api/model/Goods.php
  4. 46
      app/common/library/wxserver/Server.php

@ -13,6 +13,7 @@ declare (strict_types=1);
namespace app\api\controller;
use app\api\model\{Goods as GoodsModel, Store as StoreModel};
use app\api\model\Region;
use app\api\service\{Goods as GoodsService, User as UserService};
use app\common\model\GoodsImage as GoodsImageModel;
use app\common\model\UploadFile as UploadFileModel;
@ -20,7 +21,7 @@ use app\common\service\qrcode\Goods as GoodsPoster;
use cores\exception\BaseException;
use think\db\exception\DbException;
use think\response\Json;
use app\api\model\Region;
/**
* 商品控制器
* Class Goods
@ -57,12 +58,13 @@ class Goods extends Controller
// wmc商品详情
$model = new GoodsModel;
$goodsInfo = $model->getDetails($goodsId, $verifyStatus);
if (!empty($goodsInfo['content'])) {
$goodsInfo['content'] = str_ireplace('onload="if(this.width>750){this.height=this.height*(750.0/this.width); this.width = 750;}', '', $goodsInfo['content']);
}
return $this->renderSuccess(['detail' => $goodsInfo]);
}
/**
* 获取商品详情(详细信息)
* @param int $goodsId 商品ID
@ -86,8 +88,8 @@ class Goods extends Controller
$goods = GoodsModel::where('goods_id', $value['goods_id'])->find();
switch ($goods->channel) {
case 'sn':
$city = Region::where('name',$params['city'])->where('level',2)->find();
$district = Region::where('name',$params['district'])->where('level',3)->find();
$city = Region::where('name', $params['city'])->where('level', 2)->find();
$district = Region::where('name', $params['district'])->where('level', 3)->find();
// var_dump($city);
// var_dump($district);
$suning = new \app\common\service\Suning();
@ -97,12 +99,12 @@ class Goods extends Controller
$data['goods_id'] = $goods['goods_id'];
break;
case 'jd':
$province = Region::where('name',$params['province'])->where('level',1)->find();
$city = Region::where('name',$params['city'])->where('level',2)->find();
$district = Region::where('name',$params['district'])->where('level',3)->find();
$province = Region::where('name', $params['province'])->where('level', 1)->find();
$city = Region::where('name', $params['city'])->where('level', 2)->find();
$district = Region::where('name', $params['district'])->where('level', 3)->find();
$jd = new \app\common\service\Jd();
$arr = [];
$ret = $jd->getGoodsStock($province->jd_code, $city->jd_code, $district->jd_code, $goods['goods_no'], $value['num'] ?? 1);
if ($ret) {
$res = $ret['stockResp']['desc'];
@ -113,9 +115,9 @@ class Goods extends Controller
}
}
$data = [
'state'=> $res,
'goods_name'=> $goods['goods_name'],
'goods_id'=> $goods['goods_id'],
'state' => $res,
'goods_name' => $goods['goods_name'],
'goods_id' => $goods['goods_id'],
];
break;
default:
@ -123,18 +125,19 @@ class Goods extends Controller
$res = "有货";
}
$data = [
'state'=> $res,
'goods_name'=> $goods['goods_name'],
'goods_id'=> $goods['goods_id'],
'state' => $res,
'goods_name' => $goods['goods_name'],
'goods_id' => $goods['goods_id'],
];
break;
}
$return[] = $data;
}
return $this->renderSuccess($return);
}
public function browseLog(): Json
{
$model = new GoodsModel;
@ -189,12 +192,11 @@ class Goods extends Controller
return $this->renderSuccess($list);
}
public function presaleGoodsList()
public function presaleGoodsList(): Json
{
$param = $this->request->param();
$model = new GoodsModel;
$list = $model->presaleGoodsList($param);
$list = $model->presaleGoodss($param);
return $this->renderSuccess(compact('list'));
}

@ -83,11 +83,11 @@ class Wxserver extends BaseController
} elseif ($data['MsgType'] == 'text' && !empty($data['Content'])) {
if ($data['Content'] == 'TESTCOMPONENT_MSG_TYPE_TEXT') {
$data['Content'] = 'TESTCOMPONENT_MSG_TYPE_TEXT_callback';
echo $this->responseText($data);
} elseif (strpos($data['Content'], 'QUERY_AUTH_CODE:') !== false) {
$query_auth_code = trim(str_replace("QUERY_AUTH_CODE:", "", $data['Content']));
$obj->apiText($query_auth_code, $data['FromUserName']);
}
echo $this->responseText($data);
}
}
}
@ -106,7 +106,7 @@ class Wxserver extends BaseController
</xml>";
$fromUser = $data['ToUserName'];
$toUser = $data['FromUserName'];
$content = $data['Content'];
$content = !empty($data['Content']) ? $data['Content'] : 'success';
$time = time();
$msgType = 'text';
return sprintf($template, $toUser, $fromUser, $time, $msgType, $content);

@ -24,7 +24,6 @@ use app\common\model\Goods as GoodsModel;
use app\common\model\GoodsCategoryRel as GoodsCategoryRelModel;
use app\common\model\GoodsImage as GoodsImageModel;
use app\common\model\UploadFile as UploadFileModel;
use app\store\model\goods\GoodsPrice as GoodsPriceModel;
use cores\exception\BaseException;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
@ -45,8 +44,6 @@ class Goods extends GoodsModel
'images',
'delivery',
'deduct_stock_type',
'sales_initial',
'sales_actual',
'sort',
'is_delete',
'store_id',
@ -232,6 +229,43 @@ class Goods extends GoodsModel
return $info;
}
public function presaleGoodss(array $param): array
{
$list = [];
$cate_goods_id = [];
if (!empty($param['category_id'])) {
$cate_model = new \app\store\model\GoodsCategoryRel();
$cate_goods_id = $cate_model
->where(['category_id' => $param['category_id']])
->column('goods_id');
}
$model = new PreSale();
$info = $model->where(['is_change' => 0, 'status' => 1])->field('goods_list,p_time')->find();
if (!$info->isEmpty()) {
$info = $info->toArray();
$goods_ids = explode(',', $info['goods_list']);
if ($cate_goods_id) {
$goods_ids = array_unique(array_values(array_intersect($cate_goods_id, $goods_ids)));
}
$result = $this->getListByIds($goods_ids);
if (!$result->isEmpty()) {
$result = $result->toArray();
foreach ($result as $v) {
$list[] = [
'goods_id' => $v['goods_id'],
'goods_name' => $v['goods_name'],
'goods_price_min' => $v['goods_price_min'],
'sales_initial' => $v['sales_initial'],
'sales_actual' => $v['sales_actual'],
'image' => $v['goods_image'],
'end_time' => strtotime($info['p_time']) - time()
];
}
}
}
return $list;
}
public function presaleGoodsList()
{
$info = PreSale::where([
@ -318,13 +352,15 @@ class Goods extends GoodsModel
return $info;
}
/**
* 商品主图、商品轮播图、商品详情处理
* [dealGoodsImage description]
* @param [type] &$goodsInfo [description]
* @return [type] [description]
*/
public function dealGoodsImage(&$goodsInfo){
public function dealGoodsImage(&$goodsInfo)
{
switch ($goodsInfo->channel) {
case 'jd':
$jd = new \app\common\service\Jd();
@ -342,9 +378,9 @@ class Goods extends GoodsModel
}
$goodsInfo->goods_images = $goods_images;
$goodsInfo->goods_image = $res['mainImageList'][0];
}
if ($res['infoImageList']) {
$content = "";
foreach ($res['infoImageList'] as $value) {
@ -352,7 +388,7 @@ class Goods extends GoodsModel
}
$goodsInfo->content = $content;
}
}
break;
case 'sn':
@ -362,8 +398,9 @@ class Goods extends GoodsModel
// code...
break;
}
}
/**
* 获取商品详情 (详细数据用于页面展示)
* @param int $goodsId 商品ID
@ -389,7 +426,7 @@ class Goods extends GoodsModel
$goodsInfo = $this->getGoodsMain($goodsId, $with, $verifyStatus);
$this->dealGoodsImage($goodsInfo);
// 商品规格列表
$goodsInfo['specList'] = GoodsSpecRelModel::getSpecList($goodsInfo['goods_id']);
$GoodsCategoryRelModel = new GoodsCategoryRelModel();
@ -453,7 +490,7 @@ class Goods extends GoodsModel
{
// 关联查询(商品图片)
$with = ['images.file'];
// 获取商品记录
return $this->getGoodsMain($goodsId, $with, $verifyStatus);
@ -491,15 +528,15 @@ class Goods extends GoodsModel
$goodsInfo = static::detail($goodsId, $with);
if ($goodsInfo->skuList) {
foreach ($goodsInfo->skuList as &$value) {
foreach ($goodsInfo->skuList as &$value) {
$goods_image = GoodsImage::where('goods_id', $value['goods_id'])->order("id asc")->find();
$file_path = UploadFile::where('file_id',$goods_image['image_id'] ?? 0)->find();
$file_path = UploadFile::where('file_id', $goods_image['image_id'] ?? 0)->find();
if ($file_path) {
$value['image_url'] = getUrl($file_path['file_path'], $file_path['domain']);
}
$goods = GoodsModel::where('goods_id',$value['goods_id'])->find();
$goods = GoodsModel::where('goods_id', $value['goods_id'])->find();
$value['stock_num'] = $goods['stock_total'] ?? 0;
}
}
// 判断商品是否存在
@ -597,14 +634,14 @@ class Goods extends GoodsModel
$goods['goods_price_min_plus'] = $priceArr['membershipPrice'];
$goods['goods_price_min_dealer'] = $priceArr['distributionPrice'];
$goods['goods_price_min'] = $goods['goods_price_min_plus'];//$goods['cost_price_min'];//店长售价,展示为成本价
} elseif (UserService::isPlusMember()) {
$membershipPrice = \app\common\model\PriceSet::membershipPrice($goods['goods_price_min'], $goods['cost_price_min'], $catIds);
$goods['discount'] = bcdiv((string)($membershipPrice*10), (string)$goods['goods_price_min'], 1);
$goods['discount'] = bcdiv((string)($membershipPrice * 10), (string)$goods['goods_price_min'], 1);
$goods['goods_price_min'] = $membershipPrice;
} elseif (UserService::isDealerMember()) {
$priceArr = \app\common\model\PriceSet::distributionPrice($goods['goods_price_min'], $goods['cost_price_min'], $catIds);
$goods['discount'] = bcdiv((string)($priceArr['distributionPrice']*10), (string)$goods['goods_price_min'], 1);
$goods['discount'] = bcdiv((string)($priceArr['distributionPrice'] * 10), (string)$goods['goods_price_min'], 1);
//$goods['goods_price_min'] = $membershipPrice;
$goods['goods_price_min'] = $priceArr['distributionPrice'];
}
@ -629,7 +666,7 @@ class Goods extends GoodsModel
}
}
//exit();
// var_dump(111);
// exit();
@ -709,7 +746,8 @@ class Goods extends GoodsModel
* @throws DbException
* @throws ModelNotFoundException
*/
public function editGoodsPrice($data) {
public function editGoodsPrice($data)
{
if (empty($data['goods_price']) || empty($data['cost_price']) || empty($data['id'])) {
$this->error = "请补全信息";
return false;
@ -737,17 +775,18 @@ class Goods extends GoodsModel
// $skuList = GoodsSkuModel::getSkuList((int)$data['id']);
// [$data['goods_price_min'], $data['goods_price_max']] = GoodsSkuModel::getGoodsPrices($skuList->toArray());
// } elseif ($detail['spec_type'] == GoodsSpecTypeEnum::SINGLE) {
//}
$data['goods_price_min'] = $data['goods_price_max'] = $data['line_price_min'] = $data['line_price_max'] = $data['goods_price'];
$data['cost_price_min'] = $data['cost_price'];
$detail->save($data);
//更新sku的价格
GoodsSkuModel::where('goods_id', $data['id'])->update(['cost_price'=>$data['cost_price'], 'goods_price' => $data['goods_price']]);
GoodsSkuModel::where('goods_id', $data['id'])->update(['cost_price' => $data['cost_price'], 'goods_price' => $data['goods_price']]);
return true;
}
public function editGoodsSeckillPrice($data) {
public function editGoodsSeckillPrice($data)
{
if (empty($data['seckill_price']) || empty($data['is_limit']) || empty($data['limit_times']) || empty($data['goods_id'])) {
$this->error = "请补全信息";
return false;
@ -758,7 +797,7 @@ class Goods extends GoodsModel
return false;
}
if(empty($data['sku_id'])) {
if (empty($data['sku_id'])) {
$this->error = "请输入sku_id";
return false;
}
@ -766,18 +805,18 @@ class Goods extends GoodsModel
// var_dump($data['sku_id']);
$sku_id = $data['sku_id'];
// foreach ($sku_ids as $sku_id) {
$skuData = GoodsSkuModel::get(['id' => $sku_id,'goods_id' => $data['goods_id']]);
if ($skuData) {
$up_data = [
'seckill_price' => $data['seckill_price'],
'is_limit' => $data['is_limit'],
'limit_times' => $data['limit_times'],
'sec_start_time' => $data['sec_start_time'],
// 'sec_end_time' => $data['sec_end_time'],
'sec_hour' => $data['sec_hour'],
];
$skuData->save($up_data);
}
$skuData = GoodsSkuModel::get(['id' => $sku_id, 'goods_id' => $data['goods_id']]);
if ($skuData) {
$up_data = [
'seckill_price' => $data['seckill_price'],
'is_limit' => $data['is_limit'],
'limit_times' => $data['limit_times'],
'sec_start_time' => $data['sec_start_time'],
// 'sec_end_time' => $data['sec_end_time'],
'sec_hour' => $data['sec_hour'],
];
$skuData->save($up_data);
}
// }
return true;
}

@ -486,7 +486,7 @@ class Server
* @notes:设置域名
* @param $appid
* @param $domain
* @return bool|void
* @return bool
* @author: wanghousheng
*/
public function setDomain($appid, $domain)
@ -503,8 +503,8 @@ class Server
if ($result && !empty($result['errmsg']) && $result['errmsg'] == 'ok') {
return true;
}
return false;
}
return false;
}
/**
@ -606,14 +606,48 @@ class Server
$insert_data['create_time'] = time();
$model->insertGetId($insert_data);
}
//设置域名信息
$this->setDomain($appid, $domain);
//设置隐私
$this->getPrivacySetting($appid);
$this->setOther($appid, $domain);
}
}
}
private function setOther($appid, $domain)
{
$up = [];
//设置域名信息
if ($this->setDomain($appid, $domain)) {
$up['domain_status'] = 1;
}
//设置隐私
if ($this->getPrivacySetting($appid)) {
$up['privacy_status'] = 1;
}
//设置业务域名
if ($this->modifyJumpDomain($appid)) {
$up['jump_domain_status'] = 1;
}
if ($up) {
$model = new WxserverAccount();
$model->update($up, ['appid' => $appid]);
}
}
private function modifyJumpDomain($appid, $domain): bool
{
$token = $this->authorizerAccessToken($appid);
if ($token) {
$url = "https://api.weixin.qq.com/wxa/setwebviewdomain?access_token=$token";
$data['action'] = 'set';
$data['webviewdomain'] = $domain;
$result = $this->curlPost($url, json_encode($data));
$result = json_decode($result, true);
if ($result && !empty($result['errmsg']) && $result['errmsg'] == 'ok') {
return true;
}
}
return false;
}
/**
* @notes:获取店铺ID
* @param $appid

Loading…
Cancel
Save