You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
845 lines
33 KiB
845 lines
33 KiB
<?php
|
|
|
|
namespace app\service\Goods;
|
|
|
|
use app\model\AccountRatioDetail;
|
|
use app\model\AccountRatioSetting;
|
|
use app\model\Cert;
|
|
use app\model\Goods;
|
|
use app\model\GoodsDetail;
|
|
use app\model\GoodsSource;
|
|
use app\model\OperationLog;
|
|
use app\model\Order;
|
|
use app\model\OrderGoodsDetail;
|
|
use app\model\OrderGoodsSource;
|
|
use app\model\User;
|
|
use app\service\BaseService;
|
|
use app\service\user\UserService;
|
|
use fast\Http;
|
|
use Firebase\JWT\JWT;
|
|
use Firebase\JWT\Key;
|
|
use think\cache\driver\Redis;
|
|
use think\facade\Cookie;
|
|
use think\facade\Log;
|
|
|
|
class GoodsService extends BaseService
|
|
{
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->redis = new \Redis();
|
|
$this->redis->connect('127.0.0.1', 6379);
|
|
}
|
|
|
|
|
|
public function addShoppingCar($user_isli, $goods_isli, $use_years){
|
|
|
|
$user = User::where('user_isli', $user_isli)->find();
|
|
if(!$user){
|
|
// throw new \think\Exception('没有该用户', 400);
|
|
}
|
|
$goods = Goods::where('goods_islicode', $goods_isli)->where('is_deleted', 0)->find();
|
|
if(!$goods){
|
|
throw new \think\Exception('没有该标的', 400);
|
|
}
|
|
if($goods->goods_status != 1){
|
|
throw new \think\Exception('该标的现不在上架中', 400);
|
|
}
|
|
if($goods->contract_status != 1){
|
|
throw new \think\Exception('标的未申请合约关联,不可购买', 400);
|
|
}
|
|
if($goods->user_islicode == $user_isli){
|
|
throw new \think\Exception('您是标的的授权方,不可添加', 400);
|
|
}
|
|
|
|
$order_exists = Order::alias('order')
|
|
->join('order_goods_detail detail', 'order.batchcode = detail.batchcode')
|
|
->where('order.buy_islicode', $user_isli)
|
|
->where('detail.goods_islicode', $goods_isli)
|
|
->where('detail.is_deleted', 0)
|
|
->where('order.status', '<>', 5)
|
|
->value('order.id');
|
|
if($order_exists){
|
|
throw new \think\Exception('该标的已有订单,添加购物车失败', 400);
|
|
}
|
|
|
|
$goods_detail = GoodsDetail::where('id', $goods->goods_detail_id)->find();
|
|
if($goods_detail->stock <= 0 && $goods_detail->goods_entrust == 1){
|
|
throw new \think\Exception('标的库存为0,不可添加', 400);
|
|
}
|
|
if($goods_detail->contractual_period == 3){
|
|
if(strtotime($goods->contractual_start_time) > time() || strtotime($goods->contractualtime_end_time) < time()){
|
|
throw new \think\Exception('标的委托已结束', 400);
|
|
}
|
|
}
|
|
|
|
// 获取购物车
|
|
$car = $this->redis->get('car_'.$user_isli);
|
|
if(!empty($car)){
|
|
$car = unserialize(stripslashes($car));
|
|
|
|
$goods_islis = array_column($car, 'goods_isli');
|
|
if(in_array($goods_isli, $goods_islis)){
|
|
throw new \think\Exception('该标的已添加到购物车', 400);
|
|
}
|
|
$car[] = [
|
|
'goods_isli' => $goods_isli,
|
|
'use_years' => $use_years,
|
|
];
|
|
$this->redis->set('car_'.$user_isli, serialize($car));
|
|
|
|
}else{
|
|
|
|
$goods = [[
|
|
'goods_isli' => $goods_isli,
|
|
'use_years' => $use_years,
|
|
]];
|
|
$this->redis->set('car_'.$user_isli, serialize($goods));
|
|
|
|
}
|
|
}
|
|
|
|
public function delShoppingCar($user_isli, $goods_isli){
|
|
|
|
// 获取购物车
|
|
$car = $this->redis->get('car_'.$user_isli);
|
|
|
|
if(!empty($car)){
|
|
$car = unserialize(stripslashes($car));
|
|
|
|
$callback = function($car)use($goods_isli){
|
|
if($car['goods_isli'] == $goods_isli){
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
$car = array_values(array_filter($car, $callback));
|
|
if(count($car) >= 1){
|
|
$this->redis->set('car_'.$user_isli, serialize($car));
|
|
}else{
|
|
$this->redis->del('car_'.$user_isli);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public function addCarGoodsCount($user_isli, $goods_isli){
|
|
|
|
$goods = Goods::where('goods_islicode', $goods_isli)->where('is_deleted', 0)->find();
|
|
if(!$goods){
|
|
throw new \think\Exception('没有该标的', 400);
|
|
}
|
|
if($goods->goods_status != 1){
|
|
throw new \think\Exception('该标的现不能购买', 400);
|
|
}
|
|
|
|
$goods_detail = GoodsDetail::where('id', $goods->goods_detail_id)->find();
|
|
|
|
// 获取购物车
|
|
$redis = new Redis();
|
|
$car = $redis->get('car_'.$user_isli);
|
|
if(!empty($car)){
|
|
$car = unserialize(stripslashes($car));
|
|
|
|
$goods_islis = array_column($car, 'goods_isli');
|
|
if(!in_array($goods_isli, $goods_islis)){
|
|
throw new \think\Exception('该标的未添加到购物车', 400);
|
|
}
|
|
|
|
foreach($car as $key => &$value){
|
|
if($value['goods_isli'] != $goods_isli){
|
|
continue;
|
|
}
|
|
$value['goods_num'] += 1;
|
|
if($value['goods_num'] > $goods_detail->surplus_inventory){
|
|
throw new \think\Exception('超出标的库存上限', 400);
|
|
}
|
|
|
|
}
|
|
$redis->set('car_'.$user_isli, serialize($car));
|
|
}
|
|
|
|
}
|
|
|
|
public function decCarGoodsCount($user_isli, $goods_isli){
|
|
|
|
$goods = Goods::where('goods_islicode', $goods_isli)->where('is_deleted', 0)->find();
|
|
if(!$goods){
|
|
throw new \think\Exception('没有该标的', 400);
|
|
}
|
|
if($goods->goods_status != 1){
|
|
throw new \think\Exception('该标的现不能购买', 400);
|
|
}
|
|
|
|
$goods_detail = GoodsDetail::where('id', $goods->goods_detail_id)->find();
|
|
|
|
// 获取购物车
|
|
$redis = new Redis();
|
|
$car = $redis->get('car_'.$user_isli);
|
|
if(!empty($car)){
|
|
$car = unserialize(stripslashes($car));
|
|
|
|
$goods_islis = array_column($car, 'goods_isli');
|
|
if(!in_array($goods_isli, $goods_islis)){
|
|
throw new \think\Exception('该标的未添加到购物车', 400);
|
|
}
|
|
|
|
foreach($car as $key => &$value){
|
|
if($value['goods_isli'] != $goods_isli){
|
|
continue;
|
|
}
|
|
$value['goods_num'] -= 1;
|
|
}
|
|
$redis->set('car_'.$user_isli, serialize($car));
|
|
}
|
|
}
|
|
|
|
public function getShoppingCar($user_isli){
|
|
// 获取购物车
|
|
$car = $this->redis->get('car_'.$user_isli);
|
|
if(empty($car)){
|
|
return [];
|
|
}
|
|
$car = unserialize(stripslashes($car));
|
|
$car = array_values($car);
|
|
$result = [];
|
|
|
|
$ratio_setting = AccountRatioSetting::where('is_deleted', 0)->where('status', 1)->find();
|
|
$ratio_detail = AccountRatioDetail::where('setting_id', $ratio_setting->id)->where('role_type', 2)->find();
|
|
for($i=count($car)-1; $i >= 0; $i--){
|
|
// 商品
|
|
$goods = Goods::where('goods_islicode', $car[$i]['goods_isli'])->find();
|
|
if(empty($goods) || $goods['goods_status'] != 1){
|
|
$goods_isli = $car[$i]['goods_isli'];
|
|
$callback = function($car)use($goods_isli){
|
|
if($car['goods_isli'] == $goods_isli){
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
$car = array_filter($car, $callback);
|
|
if(count($car) >= 1){
|
|
$this->redis->set('car_'.$user_isli, serialize($car));
|
|
}else{
|
|
$this->redis->del('car_'.$user_isli);
|
|
}
|
|
continue;
|
|
}
|
|
// 商品明细
|
|
$goods_detail = GoodsDetail::where('id', $goods->goods_detail_id)->find();
|
|
$goods_detail->entrust_month = $goods_detail->contractual_period;
|
|
$goods_detail->hidden(['id', 'total_inventory', 'surplus_inventory', 'goods_islicode', 'data_json', 'source_json', 'is_deleted']);
|
|
$goods['detail'] = $goods_detail->toArray();
|
|
|
|
$count = $car[$i]['use_years'];
|
|
if($goods_detail->goods_entrust == 1){
|
|
$count = 1;
|
|
}
|
|
if($goods_detail->charges_type == 2){
|
|
// 付费
|
|
if($ratio_detail->calculate == 1){
|
|
// 比例
|
|
$service_charge = $count * $goods_detail->price * ($ratio_detail->ratio / 100);
|
|
}else{
|
|
// 固定
|
|
$service_charge = $count * $goods_detail->price + $ratio_detail->amount;
|
|
}
|
|
$total_money = ($count * $goods_detail->price) + $service_charge + $goods_detail->earnest_money;
|
|
}else{
|
|
// 免费
|
|
$service_charge = 0;
|
|
$total_money = 0;
|
|
}
|
|
$goods['service_charge'] = round($service_charge, 2);
|
|
$goods['total_money'] = round($total_money, 2);
|
|
$goods['goods_price'] = round($count * $goods_detail->price, 2);
|
|
if($goods_detail->goods_entrust == 1 || ($goods_detail->charges_type == 1 && $goods_detail->goods_entrust == 2)){
|
|
$goods['transaction_count'] = "-";
|
|
}else{
|
|
$goods['transaction_count'] = $count;
|
|
}
|
|
|
|
// 商品资源
|
|
$goods_source = GoodsSource::where('goods_isli_code', $goods->goods_islicode)->where('is_deleted', 0)->select();
|
|
$goods_source->hidden(['id', 'goods_isli_code', 'is_deleted']);
|
|
$goods['source'] = $goods_source->toArray();
|
|
$goods['user'] = (new UserService())->getApiUser($user_isli);
|
|
$goods->hidden(['is_deleted', 'updatetime', 'goodsDetail', 'goods_detail_id', 'id', 'user_id']);
|
|
$goods = $goods->toArray();
|
|
|
|
|
|
$result[] = array_merge($car[$i], $goods);
|
|
}
|
|
return $result;
|
|
|
|
}
|
|
|
|
public function getTypeGoods($type, $createtime, $goods_type = ""){
|
|
|
|
$where = [];
|
|
// type 类型;1:点击;2:销售;3:推荐
|
|
if($type == 1){
|
|
$limit = 10;
|
|
$where['order'] = "goods.click_count desc";
|
|
}elseif($type == 2){
|
|
$limit = 10;
|
|
$where['order'] = "goods.sale_count desc";
|
|
}else{
|
|
$limit = 8;
|
|
$where['order'] = "goods.recommend_sort desc";
|
|
$where['is_recommend'] = 1;
|
|
$where['goods.goods_status'] = 1;
|
|
}
|
|
if(!empty($createtime)){
|
|
$where['createtime'] = $createtime;
|
|
}
|
|
|
|
if(!empty($goods_type)){
|
|
$where['goodsDetail.goods_type'] = $goods_type;
|
|
}
|
|
// $where['is_deleted'] = 0;
|
|
|
|
$goods = new Goods();
|
|
$search = $this->buildSearch(['order', 'createtime'], $where);
|
|
$res = $goods->list($search, $where, "select", ['goodsDetail', 'withJoin' => true], $limit);
|
|
|
|
$res = $res->each(function ($item){
|
|
$item['user'] = (new UserService())->getApiUser($item['user_islicode']);
|
|
$item['entrust_month'] = $item['contractual_period'];
|
|
$goods_source = GoodsSource::where('goods_isli_code', $item['goods_islicode'])->where('is_deleted', 0)->select();
|
|
$goods_source->hidden(['id', 'goods_isli_code', 'is_deleted']);
|
|
// $item['source'] = $goods_source->toArray();
|
|
return $item;
|
|
});
|
|
$res->hidden(['goodsDetail', 'id', 'user_id', 'updatetime', 'is_deleted', 'user_isli']);
|
|
$res->toArray();
|
|
return $res;
|
|
}
|
|
|
|
|
|
public function searchGoods($data){
|
|
$where = [];
|
|
$where['goods.is_deleted'] = 0;
|
|
$goods_islicode = "";
|
|
if(!empty($data['entrust_time'])){
|
|
$where['createtime'] = $data['entrust_time'];
|
|
}
|
|
if(!empty($data['record_type'])){
|
|
$where['goodsDetail.goods_type'] = $data['record_type'];
|
|
}
|
|
if(!empty($data['entrust_user_name'])){
|
|
$where['username'] = $data['entrust_user_name'];
|
|
}
|
|
if(!empty($data['authorization'])){
|
|
$where['goodsDetail.goods_entrust'] = $data['authorization'];
|
|
}
|
|
if(!empty($data['pay_type'])){
|
|
$where['goodsDetail.charges_type'] = $data['pay_type'];
|
|
}
|
|
if(!empty($data['entrust_name'])){
|
|
$where['goods_field'] = $data['entrust_name'];
|
|
}
|
|
if(!empty($data['goods_islicode'])){
|
|
$goods_islicode = $data['goods_islicode'];
|
|
$where['goods_islicode'] = $data['goods_islicode'];
|
|
}
|
|
if(!empty($data['entrust_islicode'])){
|
|
$where['goods.user_islicode'] = $data['entrust_islicode'];
|
|
}
|
|
if(!empty($data['goods_status'])){
|
|
$where['goods_status'] = $data['goods_status'];
|
|
}
|
|
if(!empty($data['source_type'])){
|
|
// 后续改with
|
|
$source_arr = GoodsSource::whereLike('source_type', "%".$data['source_type']."%")->where('is_deleted', 0)->field('goods_isli_code')->select()->toArray();
|
|
$source_ids = implode(',', array_column($source_arr, 'goods_isli_code'));
|
|
if(empty($source_ids)){
|
|
$source_ids = '-1';
|
|
}
|
|
if(isset($where['goods_islicode'])){
|
|
$where['goods_islicode'] .= ',' . $source_ids;
|
|
}else{
|
|
$where['goods_islicode'] = $source_ids;
|
|
}
|
|
}
|
|
|
|
switch ($data['order_type'] ?? null){
|
|
case 'createtime':
|
|
$where['order'] = ' goods.createtime ' . $data['order'] ?? 'desc';
|
|
break;
|
|
case 'price':
|
|
$where['order'] = ' goodsDetail.price ' . $data['order'] ?? 'desc';
|
|
break;
|
|
default:
|
|
$where['order'] = ' goods.id desc';
|
|
break;
|
|
}
|
|
$limit = 20;
|
|
if(!empty($data['limit'])){
|
|
$limit = $data['limit'];
|
|
}
|
|
|
|
$goods = new Goods();
|
|
$search = $this->buildSearch(['username', 'goods_field', 'order', 'goods_islicode', 'createtime', 'goods_status'], $where);
|
|
$list = $goods->list($search, $where, $limit, ['goodsDetail', 'withJoin' => true]);
|
|
$list = $list->each(function ($item){
|
|
$item['user'] = (new UserService())->getApiUser($item['user_islicode']);
|
|
$item['entrust_month'] = $item['contractual_period'];
|
|
$goods_source = GoodsSource::where('goods_isli_code', $item['goods_islicode'])->where('is_deleted', 0)->select();
|
|
$goods_source->hidden(['id', 'goods_isli_code', 'is_deleted']);
|
|
$item['source'] = $goods_source->toArray();
|
|
return $item;
|
|
});
|
|
$list->hidden(['goodsDetail', 'is_deleted', 'id', 'user_id', 'goods_detail_id']);
|
|
if(!empty($goods_islicode)){
|
|
Goods::whereIn('goods_islicode', $goods_islicode)->inc('click_count', 1)->update();
|
|
}
|
|
return $list->toArray();
|
|
|
|
}
|
|
|
|
public function list($goods, $islicode, $entrust_name, $goods_entrust, $goods_type, $data_type, $createtime, $transaction, $show, $order_status, $entrust_status, $page = 1, $limit = 20){
|
|
|
|
$where = [];
|
|
if(!empty($islicode)){
|
|
$where['goods.islicode'] = $islicode;
|
|
}
|
|
if(!empty($goods)){
|
|
$where['goods'] = $goods;
|
|
}
|
|
if(!empty($entrust_name)){
|
|
$where['search_user'] = $entrust_name;
|
|
}
|
|
if(!empty($goods_entrust)){
|
|
$where['goodsDetail.goods_entrust'] = $goods_entrust;
|
|
}
|
|
if(!empty($goods_type)){
|
|
$where['goodsDetail.goods_type'] = $goods_type;
|
|
}
|
|
if(!empty($data_type)){
|
|
$where['goods.goods_status'] = $data_type;
|
|
}
|
|
if(!empty($createtime)){
|
|
$where['createtime'] = $createtime;
|
|
}
|
|
if(!empty($transaction)){
|
|
//交易方式
|
|
// $where['goodsDetail.'] = $createtime;
|
|
$where['goodsDetail.goods_entrust'] = $transaction;
|
|
}
|
|
if(!empty($show)){
|
|
if($show > 1){
|
|
$where['goods.is_recommend'] = 0;
|
|
}else{
|
|
$where['goods.is_recommend'] = $show;
|
|
}
|
|
}
|
|
if(!empty($order_status)){
|
|
switch ($order_status){
|
|
case 1:
|
|
$where['order'] = "goods.sale_count desc";
|
|
break;
|
|
case 2:
|
|
$where['order'] = "goodsDetail.price desc";
|
|
break;
|
|
case 3:
|
|
$where['order'] = "goods.click_count desc";
|
|
break;
|
|
}
|
|
}
|
|
if(!empty($entrust_status)){
|
|
$where['goods.entrust_status'] = $entrust_status;
|
|
}
|
|
|
|
$search = $this->buildSearch(['goods', 'search_user', 'createtime', 'order'], $where);
|
|
$list = (new Goods())->list($search, $where, $limit, ['goodsDetail', 'withJoin' => true]);
|
|
$list->each(function ($item){
|
|
$item['key'] = $item['goods_islicode'];
|
|
return $item;
|
|
});
|
|
$list->visible(['id', 'createtime', 'goods_islicode', 'key', 'goods_name', 'username', 'user_islicode', 'goods_type', 'goods_status', 'goods_detail_id', 'is_recommend', 'entrust_status']);
|
|
$list->hidden(['user', 'goodsDetail']);
|
|
$list = $list->toArray();
|
|
$start = ($page - 1) * $limit + 1;
|
|
$end = $page * $limit;
|
|
if($list['total'] < $end){
|
|
$end = $list['total'];
|
|
}
|
|
if($list['total'] < $start){
|
|
$start = $end = $list['total'];
|
|
}
|
|
$list['start'] = $start;
|
|
$list['end'] = $end;
|
|
return $list;
|
|
}
|
|
|
|
public function goodsDetail($goods_isli){
|
|
|
|
$goods = Goods::alias('goods')->join('goods_detail detail', 'goods.goods_detail_id = detail.id')
|
|
->where('goods.is_deleted', 0)
|
|
->where('goods.goods_islicode', $goods_isli)
|
|
->field('detail.goods_image,detail.goods_name,goods.goods_islicode,detail.goods_type,detail.goods_entrust,detail.goods_ownership_str,
|
|
detail.contractual_period,detail.charges_type,detail.earnest_money,detail.price,goods.contractual_start_time,
|
|
goods.contractualtime_end_time,goods.user_islicode,goods.islicode,detail.id as goods_detail_id')
|
|
->find();
|
|
if(!$goods){
|
|
throw new \think\Exception('未查询到该标的', 400);
|
|
}
|
|
$result = [];
|
|
$user_isli = $goods->user_islicode;
|
|
$result['userinfo'] = (new UserService())->getApiUser($user_isli);
|
|
|
|
if(!empty($goods_image)){
|
|
$goods->goods_image = $this->getGoodsImageStatus($goods->goods_image, $goods->goods_detail_id);
|
|
}
|
|
$result['entrust_goods'] = $goods;
|
|
|
|
$source_gather = GoodsSource::where('goods_isli_code', $goods->goods_islicode)->where('is_deleted', 0)->select()->toArray();
|
|
$gather_arr = [];
|
|
$oneSource = [];
|
|
foreach($source_gather as $val){
|
|
$source_data = json_decode($val['source_data'], true);
|
|
if($val['datatype'] && !isset($gather_arr[ explode(' ', $val['sourceIdentify'])[1] ])){
|
|
$info = [
|
|
"name" => $val['source_name'],
|
|
"class" => $val['source_type'],
|
|
"registerDate" => $source_data['registerDate'],
|
|
"identifier" => $source_data['identifier'],
|
|
"count" => GoodsSource::where('goods_isli_code', $goods->goods_islicode)->where('datatype', 1)->where('is_deleted', 0)->whereLike('sourceIdentify', "%{$val['sourceIdentify']}%")->count(),
|
|
];
|
|
$gather_arr[explode(' ', $val['sourceIdentify'])[1]] = $info;
|
|
}elseif(!$val['datatype']){
|
|
$filesize = getSourceFileSize($source_data['metadataFileSize']);
|
|
$info = [
|
|
"name" => $val['source_name'],
|
|
"class" => $val['source_type'],
|
|
"registerDate" => $source_data['registerDate'],
|
|
"identifier" => $source_data['identifier'],
|
|
"filesize" => $filesize,
|
|
"metadataFileFormat" => $source_data['metadataFileFormat']
|
|
];
|
|
$oneSource[] = $info;
|
|
}
|
|
}
|
|
$result['gather_arr'] = array_values($gather_arr);
|
|
$result['oneSource'] = $oneSource;
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function sourceDetail($identifier, $batchcode = '', $islicode = ''){
|
|
|
|
if(empty($batchcode)){
|
|
$goods_source = GoodsSource::whereLike('sourceIdentify', "%{$identifier}%")->where('goods_isli_code', $islicode)->where('datatype', 1)->select()->toArray();
|
|
if(!$goods_source){
|
|
throw new \think\Exception('未查询到该标的资源', 400);
|
|
}
|
|
}else{
|
|
$goods_source = OrderGoodsSource::whereLike('sourceIdentify', "%{$identifier}%")->where('batchcode', $batchcode)->where('datatype', 1)->select()->toArray();
|
|
if(!$goods_source){
|
|
throw new \think\Exception('未查询到该标的资源', 400);
|
|
}
|
|
}
|
|
$result = [];
|
|
$gather_arr = [];
|
|
$ind = 0;
|
|
$repetition = [];
|
|
foreach($goods_source as $val){
|
|
$source_data = json_decode($val['source_data'], true);
|
|
$target_data = json_decode($val['target_data'], true);
|
|
if($ind < 1){
|
|
$info = [
|
|
"source_name" => $val['source_name'],
|
|
"otherIdentifiers" => !empty($source_data['otherIdentifiers']) ? $source_data['otherIdentifiers'] : "-",
|
|
"identifier" => $source_data['identifier'],
|
|
"collectionType" => $source_data['collectionType'],
|
|
"serviceType" => $source_data['serviceType'],
|
|
"classification" => $source_data['classification'],
|
|
"contributors" => $source_data['contributors'],
|
|
"copyrightOwner" => $source_data['copyrightOwner'],
|
|
"carrier" => $source_data['carrier'],
|
|
"registrant" => $source_data['registrant'],
|
|
"registerDate" => $source_data['registerDate'],
|
|
"repositoryName" => $source_data['repositoryName'],
|
|
"dimensions" => !empty($source_data['dimensions']) ? $source_data['dimensions'] : "-",
|
|
"quantity" => $source_data['quantity'],
|
|
"label" => $source_data['label'],
|
|
"description" => $source_data['description'],
|
|
"md5Val" => $source_data['md5Val'],
|
|
"databaseId" => $source_data['databaseId'],
|
|
"edition" => $source_data['edition'],
|
|
"collectionCondition" => $source_data['collectionCondition'],
|
|
"cover" => $source_data['cover'],
|
|
];
|
|
$ind++;
|
|
}
|
|
if(!in_array($target_data['identifier'], $repetition)){
|
|
$filesize = getSourceFileSize($target_data['metadataFileSize']);
|
|
$gather = [
|
|
"target_name" => $val['target_name'],
|
|
"identifier" => $target_data['identifier'],
|
|
"linkCode" => $val['linkcode'],
|
|
"filesize" => $filesize,
|
|
"metadataFileFormat" => $target_data['metadataFileFormat'],
|
|
"registerDate" => $target_data['registerDate'],
|
|
];
|
|
if(!empty($batchcode) && !empty($islicode)){
|
|
$source_download = OrderGoodsDetail::where('batchcode', $batchcode)->where('goods_islicode', $islicode)->where('is_deleted', 0)->value('source_download');
|
|
$source_download = json_decode($source_download, true);
|
|
foreach($source_download as $item){
|
|
if($item['islicode'] == $val['linkcode']){
|
|
$gather['download_status'] = $item['status'];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
$gather_arr[ $target_data['serviceType'] ]['source'][] = $gather;
|
|
$gather_arr[ $target_data['serviceType'] ]['serviceType'] = $target_data['serviceType'];
|
|
$repetition[] = $target_data['identifier'];
|
|
}
|
|
|
|
}
|
|
$result['info'] = $info;
|
|
$result['gather_arr'] = array_values($gather_arr);
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function exhibition($type, $limit = 20){
|
|
|
|
$where = [];
|
|
if($type == 1){
|
|
$where['goods.platform_products'] = 2;
|
|
$order = "goods.platform desc";
|
|
}elseif($type == 2){
|
|
$where['goods.hot_products'] = 2;
|
|
$order = "goods.hot desc";
|
|
}else{
|
|
$where['goods.hotsale_products'] = 2;
|
|
$order = "goods.hotsale desc";
|
|
}
|
|
$list = (new Goods())->list([], $where, $limit, ['goodsDetail', 'withJoin' => true]);
|
|
$list->order($order);
|
|
$list->hidden(['goodsDetail']);
|
|
return $list->toArray();
|
|
|
|
}
|
|
|
|
|
|
public function rankingList($type){
|
|
|
|
$where = [];
|
|
$where['goods.is_deleted'] = 0;
|
|
if($type == 1){
|
|
$limit = 10;
|
|
$where['order'] = "goods.click_count desc";
|
|
}elseif($type == 2){
|
|
$limit = 10;
|
|
$where['order'] = "goods.sale_count desc";
|
|
}else{
|
|
$limit = 8;
|
|
$where['order'] = "goods.recommend_sort desc";
|
|
$where['goods.goods_status'] = 1;
|
|
$where['goods.is_recommend'] = 1;
|
|
}
|
|
$search = $this->buildSearch(['order'], $where);
|
|
$list = (new Goods())->list($search, $where, "select", ["goodsDetail", 'withJoin' => true], $limit);
|
|
$index = 1;
|
|
$list->each(function ($item) use(&$index){
|
|
// $item['username'] = User::where('user_isli', $item['user_islicode'])->value('username');
|
|
$item['key'] = $item['goods_islicode'];
|
|
$item['id'] = $index;
|
|
$index++;
|
|
return $item;
|
|
});
|
|
$list->visible(['id', 'createtime', 'goods_islicode', 'key', 'goods_name', 'goods_type', 'username', 'goods_status', 'recommend_sort']);
|
|
$list->hidden(['goodsDetail']);
|
|
$list = $list->toArray();
|
|
return $list;
|
|
}
|
|
|
|
|
|
public function addRanking(array $goods_isli = []){
|
|
|
|
$count = Goods::where('is_deleted', 0)->where('goods_status', 1)->where('is_recommend', 1)->count();
|
|
if($count >= 8){
|
|
throw new \think\Exception('推荐数量已8个,无法继续添加', 400);
|
|
}
|
|
|
|
foreach($goods_isli as $val){
|
|
if($count >= 8){
|
|
throw new \think\Exception('推荐数量已8个,无法继续添加', 400);
|
|
}
|
|
$goods = Goods::where('goods_islicode', $val)->where('goods_status', 1)->where('is_deleted', 0)->find();
|
|
if(!$goods){
|
|
continue;
|
|
}
|
|
if($goods->is_recommend == 1){
|
|
continue;
|
|
}
|
|
$goods->is_recommend = 1;
|
|
$goods->save();
|
|
$count++;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public function delRanking(array $goods_isli = []){
|
|
foreach($goods_isli as $val){
|
|
$goods = Goods::where('goods_islicode', $val)->where('is_deleted', 0)->find();
|
|
if(!$goods){
|
|
continue;
|
|
}
|
|
if($goods->is_recommend == 0){
|
|
continue;
|
|
}
|
|
$goods->is_recommend = 0;
|
|
$goods->save();
|
|
}
|
|
}
|
|
|
|
|
|
public function rankingSort($goods_isli, $type){
|
|
$list = $this->rankingList(3);
|
|
for($i = 0; $i <= count($list) -1; $i++){
|
|
if($list[$i]['goods_islicode'] == $goods_isli){
|
|
if($type == 1){// 上移
|
|
if($i == 0){
|
|
break;
|
|
}else{
|
|
$front_sort = $list[$i-1]['recommend_sort'];
|
|
$sort = $list[$i]['recommend_sort'];
|
|
Goods::where('goods_islicode', $list[$i]['goods_islicode'])->update(['recommend_sort' => $front_sort]);
|
|
Goods::where('goods_islicode', $list[$i-1]['goods_islicode'])->update(['recommend_sort' => $sort]);
|
|
}
|
|
|
|
}else{
|
|
|
|
if($i == count($list) - 1){
|
|
break;
|
|
}else{
|
|
$behind_sort = $list[$i+1]['recommend_sort'];
|
|
$sort = $list[$i]['recommend_sort'];
|
|
Goods::where('goods_islicode', $list[$i]['goods_islicode'])->update(['recommend_sort' => $behind_sort]);
|
|
Goods::where('goods_islicode', $list[$i+1]['goods_islicode'])->update(['recommend_sort' => $sort]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public function manualGetGoods(){
|
|
$goodsService = new \app\service\task\GoodsService();
|
|
$count = $goodsService->getApiGoods();
|
|
return ['count' => $count];
|
|
}
|
|
|
|
|
|
public function getGoodsImageStatus($image, $id){
|
|
// todo 被请求委托查询 接口
|
|
$image_headers = get_headers($image);
|
|
if(!strpos($image_headers[0], "200")){
|
|
$path = env("app.real_url") . "/dist/api/v2/preview?url={$image}";
|
|
$sign = parent::createSign("distribute");
|
|
$headers = array(
|
|
CURLOPT_HTTPHEADER => array(
|
|
"dist_token:{$sign}",
|
|
"Content-Type: application/json"
|
|
)
|
|
);
|
|
$res = Http::get($path, [], $headers);
|
|
if($res['code'] != 200){
|
|
throw new \think\Exception($res['msg'], 400);
|
|
}
|
|
$res = json_decode($res['data'], true);
|
|
if($res['resultCode'] != "00000000"){
|
|
throw new \think\Exception($res['resultMsg'], 400);
|
|
}
|
|
GoodsDetail::where('id', $id)->update(['goods_image' => $res['data']]);
|
|
return $res['data'];
|
|
}
|
|
return $image;
|
|
|
|
}
|
|
|
|
public function offGoods($goods_isli, $reason){
|
|
|
|
$goods = Goods::where('goods_islicode', $goods_isli)->find();
|
|
if(!$goods){
|
|
throw new \think\Exception("没有该条委托数据", 400);
|
|
}
|
|
if($goods->goods_status != 1 && $goods->goods_status != 5){
|
|
throw new \think\Exception("暂时只支持对已发布/暂停中文化数据进行撤销!", 400);
|
|
}
|
|
if($goods->apply_out == 1){
|
|
throw new \think\Exception("请勿重复提交撤销委托申请!", 400);
|
|
}
|
|
if($goods->goods_status == 5){
|
|
// throw new \think\Exception("该标的有未完成订单,请完成订单或终止订单后再申请!", 400);
|
|
}
|
|
|
|
|
|
$url = env("app.entrust_url") . "/consign/exchange/v1/exchangeRevokeEntrust";
|
|
$sign = parent::createSign("entrust");
|
|
$headers = array(
|
|
CURLOPT_HTTPHEADER => array(
|
|
"entrust_token:{$sign}"
|
|
)
|
|
);
|
|
$post = [
|
|
"revokeReason" => $reason,
|
|
"isliCode" => $goods->islicode,
|
|
"status" => 3,
|
|
];
|
|
//todo 请求交易所撤销委托接口 接口1.4
|
|
$res = Http::get($url, $post, $headers);
|
|
if($res['code'] != 200){
|
|
throw new \think\Exception($res['msg'], 400);
|
|
}
|
|
$res = json_decode($res['data'], true);
|
|
if($res['resultCode'] != "00000000"){
|
|
throw new \think\Exception($res['resultMsg'], 400);
|
|
}
|
|
Goods::where('id', $goods->id)->update(['apply_out' => 1]);
|
|
$operation_log = [
|
|
"type" => "goods",
|
|
"log_id" => $goods->id,
|
|
"message" => date('Y-m-d H:i:s') . " 由{$this->account_name}申请撤销委托,撤销原因:{$reason}"
|
|
];
|
|
(new OperationLog())->insert($operation_log);
|
|
|
|
}
|
|
|
|
|
|
public function whetherOff($goods_isli){
|
|
$goods = Goods::where('goods_islicode', $goods_isli)->find();
|
|
if(!$goods){
|
|
throw new \think\Exception("没有该条委托数据", 400);
|
|
}
|
|
if($goods->goods_status != 1 && $goods->goods_status != 5){
|
|
throw new \think\Exception("暂时只支持对已发布/暂停中文化数据进行撤销!", 400);
|
|
}
|
|
if($goods->apply_out == 1){
|
|
throw new \think\Exception("请勿重复提交撤销委托申请!", 400);
|
|
}
|
|
}
|
|
|
|
|
|
public function test(){
|
|
|
|
$detail = OrderGoodsDetail::field('goods_islicode,data_json')->select()->toArray();
|
|
foreach($detail as $val){
|
|
$json = $val['data_json'];
|
|
$json = json_decode($json, true);
|
|
$islicode = $json['isliCode'];
|
|
|
|
OrderGoodsDetail::where('goods_islicode', $val['goods_islicode'])->update(['islicode' => $islicode]);
|
|
}
|
|
|
|
}
|
|
|
|
}
|