Merge branch 'dev' of https://gitea.lihaink.cn/mkm/shop-new into dev
This commit is contained in:
commit
11e2699bfa
@ -14,6 +14,7 @@ namespace app\common\repositories\store\product;
|
||||
|
||||
use app\common\model\store\order\StoreOrder;
|
||||
use app\common\model\store\product\ProductLabel;
|
||||
use app\common\model\system\merchant\Merchant;
|
||||
use app\common\model\user\User;
|
||||
use app\common\repositories\community\CommunityRepository;
|
||||
use app\common\repositories\store\coupon\StoreCouponRepository;
|
||||
@ -356,7 +357,7 @@ class ProductRepository extends BaseRepository
|
||||
}
|
||||
$res = $this->dao->get($id);
|
||||
$data['svip_price_type'] = $res['svip_price_type'];
|
||||
$settleParams = $this->setAttrValue($data, $id, 0, 1);
|
||||
$settleParams = $this->setAttrValue($data, $id, 0, 1,$merId);
|
||||
$settleParams['cate'] = $this->setMerCate($data['mer_cate_id'], $id, $merId);
|
||||
$settleParams['attr'] = $this->setAttr($data['attr'], $id);
|
||||
$data['price'] = $settleParams['data']['price'];
|
||||
@ -518,10 +519,18 @@ class ProductRepository extends BaseRepository
|
||||
if ($data['integral_rate'] > 100) $integral_rate = 100;
|
||||
|
||||
}
|
||||
//判断商户的权限
|
||||
$check = Merchant::getDB()->where('mer_id',$data['mer_id'])->value('wholesale');
|
||||
|
||||
$wholesalePrices = array_column($data['attrValue'], 'wholesale_price');
|
||||
$minPriceOtPrice = min($wholesalePrices);
|
||||
|
||||
if($check){ //权限为1或者2
|
||||
$wholesalePrices = array_column($data['attrValue'], 'wholesale_price');
|
||||
if(empty($wholesalePrices)){
|
||||
return app('json')->fail('商户为批发或者零售+批发缺失批发价');
|
||||
}
|
||||
$minPriceOtPrice = min($wholesalePrices);
|
||||
}else{
|
||||
$minPriceOtPrice = 0;
|
||||
}
|
||||
$result = [
|
||||
'store_name' => $data['store_name'],
|
||||
'image' => $data['image'],
|
||||
@ -680,10 +689,18 @@ class ProductRepository extends BaseRepository
|
||||
}
|
||||
$new_price = $value['price'] ? (($value['price'] < 0) ? 0 : $value['price']) : 0;
|
||||
$otPrice = $value['ot_price'] ? (($value['ot_price'] < 0) ? 0 : $value['ot_price']) : 0;
|
||||
|
||||
if(isset($value['wholesale_price'])){
|
||||
$wholesale_price = $value['wholesale_price'] ? (($value['wholesale_price'] < 0) ? 0 : $value['wholesale_price']) : 0;
|
||||
}else{
|
||||
$wholesale_price = min($new_price,$otPrice);
|
||||
$check = Merchant::getDB()->where('mer_id',$data['mer_id'])->value('wholesale');
|
||||
|
||||
if($check){
|
||||
$wholesale_price = min($new_price,$otPrice);
|
||||
}else{
|
||||
$wholesale_price = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$new_stock = $value['stock'] ? (($value['stock'] < 0) ? 0 : $value['stock']) : 0;
|
||||
|
183
app/controller/admin/ProductLibrary.php
Normal file
183
app/controller/admin/ProductLibrary.php
Normal file
@ -0,0 +1,183 @@
|
||||
<?php
|
||||
|
||||
namespace app\controller\admin;
|
||||
|
||||
use crmeb\basic\BaseController;
|
||||
use http\Client;
|
||||
use think\facade\Db;
|
||||
use think\facade\Log;
|
||||
use crmeb\services\UploadService;
|
||||
|
||||
use GuzzleHttp\Client as http_client;
|
||||
|
||||
class ProductLibrary extends BaseController
|
||||
{
|
||||
|
||||
public function lst()
|
||||
{
|
||||
[$page, $limit] = $this->getPage();
|
||||
$param = $this->request->param();
|
||||
$where = ['is_del' => 0];
|
||||
$list = Db::name('product_library')->where($where)->page($page)->limit($limit)->order('id desc')->select();
|
||||
$count = Db::name('product_library')->count();
|
||||
return app('json')->success(['list' => $list, 'count' => $count]);
|
||||
}
|
||||
|
||||
public function add()
|
||||
{
|
||||
$param = $this->request->param();
|
||||
$data['store_name'] = $param['store_name'];
|
||||
$data['store_info'] = $param['store_info'];
|
||||
$data['keyword'] = $param['keyword'];
|
||||
$data['bar_code'] = $param['bar_code'];
|
||||
$data['is_used'] = 1;
|
||||
$data['status'] = 1;
|
||||
$data['cate_id'] = $param['cate_id'];
|
||||
$data['unit_name'] = $param['unit_name'];
|
||||
$data['price'] = $param['price'];
|
||||
$data['cost'] = $param['cost'];
|
||||
$data['ot_price'] = $param['ot_price'];
|
||||
$data['stock'] = $param['stock'];
|
||||
$data['create_time'] = date('Y-m-d H:i:s');
|
||||
$data['image'] = $param['image'];
|
||||
$data['slider_image'] = $param['slider_image'];
|
||||
$data['images'] = $param['images'];
|
||||
$res = Db::name('product_library')->insert($data);
|
||||
if ($res) {
|
||||
return app('json')->success('添加成功');
|
||||
} else {
|
||||
return app('json')->fail('添加失败');
|
||||
}
|
||||
}
|
||||
|
||||
public function edit()
|
||||
{
|
||||
$param = $this->request->param();
|
||||
$data['store_name'] = $param['store_name'];
|
||||
$data['store_info'] = $param['store_info'];
|
||||
$data['keyword'] = $param['keyword'];
|
||||
$data['bar_code'] = $param['bar_code'];
|
||||
$data['is_used'] = 1;
|
||||
$data['status'] = 1;
|
||||
$data['cate_id'] = $param['cate_id'];
|
||||
$data['unit_name'] = $param['unit_name'];
|
||||
$data['price'] = $param['price'];
|
||||
$data['cost'] = $param['cost'];
|
||||
$data['ot_price'] = $param['ot_price'];
|
||||
$data['stock'] = $param['stock'];
|
||||
$data['create_time'] = date('Y-m-d H:i:s');
|
||||
$data['image'] = $param['image'];
|
||||
$data['slider_image'] = $param['slider_image'];
|
||||
$data['images'] = $param['images'];
|
||||
$res = Db::name('product_library')->where('id', $param['id'])->update($data);
|
||||
if ($res) {
|
||||
return app('json')->success('修改成功');
|
||||
} else {
|
||||
return app('json')->fail('修改失败');
|
||||
}
|
||||
}
|
||||
|
||||
public function del()
|
||||
{
|
||||
$param = $this->request->param();
|
||||
$res = Db::name('product_library')->where('id', $param['id'])->update(['is_del' => 1]);
|
||||
if ($res) {
|
||||
return app('json')->success('删除成功');
|
||||
} else {
|
||||
return app('json')->fail('删除失败');
|
||||
}
|
||||
}
|
||||
|
||||
public function caiji($code = '')
|
||||
{
|
||||
if ($code == '') {
|
||||
return app('json')->fail('编码不能为空');
|
||||
}
|
||||
$first_char = substr($code, 0, 1);
|
||||
if($first_char!=0){
|
||||
$codes='0'.$code;
|
||||
}else{
|
||||
$codes=$code;
|
||||
}
|
||||
$client = new Client("b1eb52b9-0379-4c56-b795-47d90a73ca6a");
|
||||
|
||||
$result = $client->barcodeQuery()
|
||||
->withCode($codes)
|
||||
->request();
|
||||
try {
|
||||
if ($result['code'] == 0) {
|
||||
$upload = UploadService::create();
|
||||
$dir = 'def/' . date('Y-m-d');
|
||||
|
||||
$param = $result['data'];
|
||||
$data['store_name'] = $param['goodsName'];
|
||||
$data['store_info'] = '';
|
||||
$data['keyword'] = '';
|
||||
$data['bar_code'] = $code;
|
||||
$data['is_used'] = 1;
|
||||
$data['status'] = 1;
|
||||
$data['cate_id'] = 0;
|
||||
$data['unit_name'] = '';
|
||||
$data['spec'] =$param['spec'];
|
||||
$data['trademark'] =$param['trademark'];
|
||||
$data['goods_type'] =$param['goodsType'];
|
||||
$data['ycg'] =$param['ycg'];
|
||||
$data['note'] =$param['note'];
|
||||
$data['manu_address'] =$param['manuAddress'];
|
||||
$data['price'] = $param['price']??0;
|
||||
$data['cost'] = 0;
|
||||
$data['ot_price'] = 0;
|
||||
$data['stock'] = 9999999;
|
||||
$data['create_time'] = date('Y-m-d H:i:s');
|
||||
$data['images'] = '';
|
||||
$arr=[];
|
||||
if ($param['img'] != '') {
|
||||
$oss = $upload->to($dir)->stream($this->getPic($param['img']));
|
||||
$data['image'] = $oss->filePath;
|
||||
$arr[]=$oss->filePath;
|
||||
} else {
|
||||
$data['image'] = 'https://lihai001.oss-cn-chengdu.aliyuncs.com/uploads/20230130/00ebcfdf75684f5494c0193075055d1.png';
|
||||
$data['slider_image'] = 'https://lihai001.oss-cn-chengdu.aliyuncs.com/uploads/20230130/00ebcfdf75684f5494c0193075055d1.png';
|
||||
}
|
||||
foreach($param['imgList'] as $k=>$v){
|
||||
$oss=$upload->to($dir)->stream($this->getPic($v));
|
||||
$arr[] = $oss->filePath;
|
||||
}
|
||||
if(count($arr)>0){
|
||||
$data['slider_image'] =implode(',',$arr);
|
||||
}else{
|
||||
$data['slider_image']=$data['image'];
|
||||
}
|
||||
$data['images'] = '';
|
||||
$res = Db::name('product_library')->insert($data);
|
||||
|
||||
if ($res) {
|
||||
$group_id=Db::name('system_group')->where('group_key','product_caiji_count')->value('group_id');
|
||||
if($group_id){
|
||||
$find=Db::name('system_group_data')->where('group_id',$group_id)->whereDay('create_time')->find();
|
||||
if($find){
|
||||
$count=json_decode($find['value'],true)['count']+1;
|
||||
Db::name('system_group_data')->where('group_data_id',$find['group_data_id'])->update(['value'=>json_encode(['count'=>$count])]);
|
||||
}else{
|
||||
Db::name('system_group_data')->insert(['group_id'=>$group_id,'value'=>'{"count":1}','create_time'=>date('Y-m-d H:i:s')]);
|
||||
}
|
||||
}
|
||||
return app('json')->success('添加成功');
|
||||
} else {
|
||||
throw new \think\exception\ValidateException('添加失败');
|
||||
}
|
||||
} else {
|
||||
Log::error('一维码商品采集错误:' . $result['data']['remark']);
|
||||
throw new \think\exception\ValidateException('一维码商品采集错误:'. $result['data']['remark']);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
throw new \think\exception\ValidateException('一维码商品采集错误:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function getPic($url){
|
||||
$client = new http_client();
|
||||
$a=$client->get($url);
|
||||
return $a->getBody()->getContents();
|
||||
}
|
||||
}
|
198
app/controller/api/store/product/StoreMicro.php
Normal file
198
app/controller/api/store/product/StoreMicro.php
Normal file
@ -0,0 +1,198 @@
|
||||
<?php
|
||||
namespace app\controller\api\store\product;
|
||||
use app\common\dao\system\merchant\MerchantDao;
|
||||
use app\common\model\system\merchant\Merchant;
|
||||
use app\common\repositories\store\product\ProductRepository;
|
||||
use app\controller\admin\ProductLibrary;
|
||||
use think\facade\Db;
|
||||
use crmeb\basic\BaseController;
|
||||
use Exception;
|
||||
|
||||
class StoreMicro extends BaseController
|
||||
{
|
||||
function seach_bar_code($code='',$name=''){
|
||||
$where = ['is_used' => 1, 'status' => 1, 'is_del' => 0];
|
||||
$field = 'id,store_name,bar_code,manu_address,price,stock,image,slider_image,spec,trademark,manu_name,manu_address,note';
|
||||
if($code!=''){
|
||||
$res=Db::name('product_library')->where('bar_code',$code)->where($where)->field($field)
|
||||
->withAttr('slider_image',function($value,$data){
|
||||
return $value?explode(',',$value):[];
|
||||
})
|
||||
->find();
|
||||
if($res==null){
|
||||
$ProductLibrary = app()->make(ProductLibrary::class);
|
||||
try{
|
||||
$ProductLibrary->caiji($code);
|
||||
$res=Db::name('product_library')->where('bar_code',$code)->where($where)->field($field)
|
||||
->withAttr('slider_image',function($value,$data){
|
||||
return $value?explode(',',$value):[];
|
||||
})
|
||||
->find();
|
||||
}catch(Exception $e){
|
||||
return app('json')->fail('编码:'.$code.'。'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
$find[]=$res;
|
||||
}else{
|
||||
if($name==''){
|
||||
return app('json')->fail('参数不能为空');
|
||||
}
|
||||
$find=Db::name('product_library')->where('store_name','like','%'.$name.'%')->where($where)->field($field)
|
||||
->withAttr('slider_image',function($value,$data){
|
||||
return $value?explode(',',$value):[];
|
||||
})
|
||||
->select();
|
||||
}
|
||||
if (count($find)==0){
|
||||
if($code!=''){
|
||||
$store_product['key']['bar_code']=$code;
|
||||
}else{
|
||||
$store_product['key']['store_name']=$name;
|
||||
}
|
||||
$store_product['key']['is_mer_show']=0;
|
||||
}else{
|
||||
$store_product['key']['is_mer_show']=1;
|
||||
}
|
||||
$store_product['list']=$find;
|
||||
return app('json')->success($store_product);
|
||||
}
|
||||
|
||||
//商品详情
|
||||
public function ProductDetails($id){
|
||||
$find=Db::name('store_product')->where('product_id',$id)
|
||||
->withAttr('attr_value',function ($value,$data){
|
||||
return Db::name('store_product_attr_value')->where('product_id',$data['product_id'])->select();
|
||||
})
|
||||
->find();
|
||||
return app('json')->success(['list'=>$find]);
|
||||
}
|
||||
|
||||
//提交导入商品id
|
||||
public function ProductImport(){
|
||||
return app('json')->fail('该接口已废弃');
|
||||
$id = $this->request->param('id', 0);
|
||||
$price = $this->request->param('price', 0);
|
||||
$stock = $this->request->param('stock', 0);
|
||||
$store_name = $this->request->param('store_name', '');
|
||||
$user = $this->request->userInfo();
|
||||
$where = ['is_used' => 1, 'status' => 1, 'is_del' => 0];
|
||||
try {
|
||||
$mer_id = Db::name('store_service')->where('uid', $user['uid'])->where('status', 1)->value('mer_id');
|
||||
if ($mer_id == 0) {
|
||||
return app('json')->fail('商户不存在');
|
||||
}
|
||||
$mer= Db::name('merchant')->where('mer_id', $mer_id)->find();
|
||||
$category_name= Db::name('merchant_category')->where('merchant_category_id', $mer['category_id'])->value('category_name');
|
||||
$store_category_id= Db::name('store_category')->where(['cate_name'=>$category_name,'level'=>2,'mer_id'=>0])->value('store_category_id');
|
||||
if(!$store_category_id){
|
||||
return app('json')->fail('没有对应的分类,请联系工作人员添加');
|
||||
}
|
||||
$find=Db::name('product_library')->where('id',$id)->where($where)->find();
|
||||
if ($find) {
|
||||
|
||||
$exist = Db::name('store_product')->where('source_library_id', $id)->where('mer_id', $mer_id)->find();
|
||||
if ($exist) {
|
||||
// return app('json')->fail('已经导入过该商品了');
|
||||
}
|
||||
$find['attrValue']=[
|
||||
['image'=>$find['image'],'price'=>$price,'cost'=>$find['cost'],'ot_price'=>$find['ot_price'],
|
||||
'svip_price'=>0,'stock'=>$stock,'bar_code'=>$find['bar_code'],'weight'=>0,'volume'=>0,'detail'=>''
|
||||
]];
|
||||
if($mer['type_id']==12){
|
||||
$product_type=98;
|
||||
}else{
|
||||
$product_type=0;
|
||||
}
|
||||
$find['store_name'] =$store_name??$find['store_name'];
|
||||
$find['content'] =['image'=>explode(',',$find['images'])];
|
||||
$find['slider_image'] =explode(',',$find['slider_image']);
|
||||
$find['is_show'] = 1;
|
||||
$find['mer_id'] = $mer_id;
|
||||
$find['temp_id'] = "";
|
||||
$find['give_coupon_ids'] = [];
|
||||
$find['params'] = [];
|
||||
$find['extend'] = [];
|
||||
$find['param_temp_id'] = [];
|
||||
$find['mer_labels'] = [];
|
||||
$find['delivery_way'] = [0 => "2",1=>'1'];
|
||||
$find["guarantee_template_id"] = "";
|
||||
$find['product_type'] = $product_type;
|
||||
$find['mer_cate_id'] = [0 => 0];
|
||||
$find['is_used'] = 1;
|
||||
$find['status'] = 1;
|
||||
$find['mer_status'] = 1;
|
||||
$find['source_product_id'] = 0;
|
||||
$find['source_library_id'] = $find['id'];
|
||||
$find['spec_type'] = 0;
|
||||
$find['delivery_free'] = 0;
|
||||
$find['cate_id'] = $store_category_id;
|
||||
$find['svip_price_type'] = 0;
|
||||
$find['svip_price'] =0;
|
||||
unset($find['create_time'], $find['id']);
|
||||
}
|
||||
$a= app()->make( ProductRepository::class)->create($find,$product_type,1);
|
||||
if($a){
|
||||
return app('json')->success(['data'=>['product_id'=>$a],'msg'=>'导入成功']);
|
||||
}else{
|
||||
return app('json')->fail('导入失败');
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
return app('json')->fail($e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function eadtProduct(){
|
||||
$id = $this->request->param('id', 0);
|
||||
$image = $this->request->param('image', '');
|
||||
$slider_image = $this->request->param('slider_image', '');
|
||||
|
||||
if ($slider_image=='') return app('json')->fail('轮播图不能为空');
|
||||
if ($image=='') return app('json')->fail('首屏图不能为空');
|
||||
|
||||
try {
|
||||
$res=Db::name('product_library')->where('id',$id)->update(['image'=>$image,'slider_image'=>$slider_image]);
|
||||
if($res){
|
||||
return app('json')->success('更新成功');
|
||||
}else{
|
||||
return app('json')->fail('更新失败');
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
// 回滚事务
|
||||
return app('json')->fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 待审核添加
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$param = $this->request->param();
|
||||
$uid=$this->request->userInfo()['uid'];
|
||||
$mer_id=Db::name('store_service')->where(['uid'=>$uid,'status'=>1,'is_del'=>0,'is_goods'=>1])->value('mer_id');
|
||||
$data['store_name'] = $param['store_name'];
|
||||
$data['bar_code'] = $param['bar_code'];
|
||||
$data['store_info'] = '';
|
||||
$data['keyword'] = '';
|
||||
$data['cate_id'] = 0;
|
||||
$data['unit_name'] = '';
|
||||
$data['is_used'] = 1;
|
||||
$data['status'] = 1;
|
||||
$data['price'] = $param['price'];
|
||||
$data['stock'] = $param['stock'];
|
||||
$data['create_time'] = date('Y-m-d H:i:s');
|
||||
$data['image'] = $param['image'];
|
||||
$data['slider_image'] = $param['slider_image'];
|
||||
$data['images'] = $param['images'];
|
||||
$data['mer_id'] = $mer_id;
|
||||
$data['product_library_id'] = $param['product_library_id'];
|
||||
$res = Db::name('product_library_examine')->insert($data);
|
||||
if ($res) {
|
||||
return app('json')->success('添加成功,等待审核');
|
||||
} else {
|
||||
return app('json')->fail('添加失败');
|
||||
}
|
||||
}
|
||||
}
|
@ -25,6 +25,7 @@ use think\App;
|
||||
use crmeb\basic\BaseController;
|
||||
use app\common\repositories\store\product\ProductRepository as repository;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Db;
|
||||
|
||||
class StoreProduct extends BaseController
|
||||
{
|
||||
@ -284,4 +285,47 @@ class StoreProduct extends BaseController
|
||||
$uid = $this->request->isLogin() ? $this->request->uid() : 0;
|
||||
return app('json')->success($this->repository->getGoodList($id, $uid));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 免审编辑
|
||||
*/
|
||||
public function UserFreeTrial($id)
|
||||
{
|
||||
$params = [
|
||||
"mer_cate_id",
|
||||
"sort" ,
|
||||
"is_show",
|
||||
"is_good",
|
||||
"attr",
|
||||
"attrValue",
|
||||
'spec_type',
|
||||
'is_stock',
|
||||
'mer_labels'
|
||||
];
|
||||
$data = $this->request->params($params);
|
||||
// $count = app()->make(StoreCategoryRepository::class)->getWhereCount(['store_category_id' => $data['mer_cate_id'],'is_show' => 1,'mer_id' => $this->request->merId()]);
|
||||
// if (!$count) throw new ValidateException('商户分类不存在或不可用');
|
||||
$data['status'] = 1;
|
||||
$uid=$this->request->userInfo()['uid'];
|
||||
$mer_id=Db::name('store_service')->where(['uid'=>$uid,'status'=>1,'is_del'=>0,'is_goods'=>1])->value('mer_id');
|
||||
if(!$mer_id){
|
||||
return app('json')->fail('编辑免申商品参数错误');
|
||||
}
|
||||
$res=$this->repository->freeTrial($id, $data,$mer_id,[]);
|
||||
if($res && $data['is_stock']==1){
|
||||
$arr=[
|
||||
'mer_id'=>$mer_id,
|
||||
'uid'=>$uid,
|
||||
'product_id'=>$data['attrValue'][0]['product_id'],
|
||||
'create_time'=>date('Y-m-d H:i:s')
|
||||
];
|
||||
Db::name('store_product_stock')->insert($arr);
|
||||
}
|
||||
return app('json')->success('编辑成功');
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -58,6 +58,9 @@ Route::group('api/', function () {
|
||||
Route::post('user/spread', 'api.Auth/spread');
|
||||
Route::post('merchant_license_identify', 'api.Common/merchant_license_identify');//营业执照识别
|
||||
|
||||
Route::post('user_free_trial/:id', 'api.store.product.StoreProduct/UserFreeTrial')->option([
|
||||
'_alias' => '免审编辑',
|
||||
]);
|
||||
//优惠券
|
||||
Route::group('coupon', function () {
|
||||
Route::post('receive/:id', 'api.store.product.StoreCoupon/receiveCoupon');
|
||||
@ -731,6 +734,16 @@ Route::group('api/', function () {
|
||||
|
||||
Route::get('navigation', 'api.Common/getNavigation');
|
||||
Route::get('micro', 'api.Common/micro');
|
||||
|
||||
|
||||
Route::group('micro', function () {
|
||||
Route::get('seach_bar_code', '/seach_bar_code');
|
||||
Route::get('product_details', '/ProductDetails');
|
||||
Route::post('eadt_product', '/eadtProduct');
|
||||
Route::post('product_import', '/ProductImport');
|
||||
Route::post('product_add', '/add');
|
||||
})->prefix('api.store.product.StoreMicro');
|
||||
|
||||
Route::get('version', 'admin.Common/version');
|
||||
Route::get('diy', 'api.Common/diy');
|
||||
//滑块验证码
|
||||
|
Loading…
x
Reference in New Issue
Block a user