订单添加

parent a8d580e7
<?php
namespace App\Http\Controllers\Api;
use App\Http\Requests\UserRegister;
use App\Http\Services\CartService;
use App\Http\Services\InquiryService;
use App\Http\Services\OrderService;
use App\Models\User;
use Facade\Ignition\Support\Packagist\Package;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\Validator;
//订单控制器
class OrderApiController extends Controller
{
//添加购物车, items: {"goods_id":1166788996788323407,"goods_number":2}
public function addOrder(Request $request)
{
$validator = Validator::make($request->all(), [
'address_id' => 'required|string',
'items' => 'required|string',
], [
'items.min' => 'items must be at least 1 characters long.'
]);
if ($validator->fails()) {
return $this->setError($validator->errors()->first());
}
$data = $request->only([
'items',
'address_id',
]);
$result = OrderService::addOrder($data, $request->user->id);
return !$result ? $this->setError('Add cart failed , please contact administrator'):$this->setSuccess('Add inquiry success');
}
//购物车列表
public function orderLists(Request $request){
$result = CartService::cartLists($request->user->id);
return $this->setSuccessData($result);
}
}
......@@ -3,11 +3,11 @@
namespace App\Http\Services;
use App\Exceptions\InvalidRequestException;
use App\Http\Models\Order\OrderModel;
use App\Models\Inquiry;
use App\Models\InquiryItems;
use App\Models\InquiryItemsModel;
use App\Models\InquiryModel;
use App\Models\OrderAddressModel;
use App\Models\OrderItemsModel;
use App\Models\OrderModel;
use App\Models\OrderPriceModel;
use App\Models\UserAddressModel;
use App\Models\UserModel;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
......@@ -16,12 +16,23 @@ use App\Models\CartModel;
//订单服务层
class OrderService
{
//新增订单
/*
* 新增订单
address_id:0
items: [{
"goods_id": 1166788996788323300, //sku_id
"buy_number": 2, //购买数量
"buy_price":1.1 //购买单价
"remark":"",//备注
}]
*/
public static function addOrder($data, $user_id)
{
$vs = json_decode(\Arr::get($data, 'items', []),true);
$address_id = $data["address_id"];
$items = json_decode(\Arr::get($data, 'items', []),true);
//查询用户详情
$userInfo = UserModel::getUserInfo($user_id);
$order_sn = self::createOrderSn();
try{
$con = DB::connection();
......@@ -31,83 +42,142 @@ class OrderService
#订单主表
$mainData =[
"order_sn"=>11,
"sem_order"=>self::createOrderSn(),
"order_sn"=>$order_sn,
"user_id"=>$user_id,
"company_name"=>$userInfo["company_name"],
"exchange_rate"=>getRate(),
"currency"=>2,
"order_remark"=>data_get($data,"order_remark"),
"create_time"=>time(),
"update_time"=>time(),
];
$order_id = OrderModel::insertGetId($mainData);
if (!$order_id){
return false;
throw new InvalidRequestException("error:order main");
}
#订单明细
$goodsInfoArr = ThirdService::getGoodsInfo(array_column($vs,"goods_id"));
#订单地址
$userAddress = UserAddressModel::where("address_id",$address_id)->first();
$addressData =[
"address_id"=>$address_id,
"user_id"=>$user_id,
"order_id"=>$order_id,
"address_type"=>\Arr::get($userAddress,"address_type",0),
"order_address_type"=>\Arr::get($userAddress,"order_address_type",1),
"consignee"=>\Arr::get($userAddress,"consignee",""),
"company_name"=>\Arr::get($userAddress,"company_name",""),
"email"=>\Arr::get($userAddress,"email",""),
"post_code"=>\Arr::get($userAddress,"post_code",""),
"phone"=>\Arr::get($userAddress,"phone",""),
"country_name"=>\Arr::get($userAddress,"country_name","") ,
"country"=>\Arr::get($userAddress,"country",""),
"province"=>\Arr::get($userAddress,"province",""),
"city"=>\Arr::get($userAddress,"city",""),
"detail_address"=>\Arr::get($userAddress,"detail_address",""),
"create_time"=>time(),
"update_time"=>time(),
];
foreach ($vs as $v) {
$order_address_id = OrderAddressModel::insertGetId($addressData);
if (!$order_address_id){
throw new InvalidRequestException("error:order address");
}
#订单明细
$goodsInfoArr = ThirdService::getGoodsInfo(array_column($items,"goods_id")); //商品详情
$orderItems = []; //订单商品明细
$orderAmount = 0;
foreach ($items as $v) {
$goods_id = $v['goods_id'];
$temp = [
'user_id' => $user_id,
'goods_id' => $v['goods_id'],
$skuInfo = $goodsInfoArr[$goods_id]; //sku详情
$cartInfo = CartModel::where(["user_id"=>$user_id,"goods_id"=>(string)$goods_id,"status"=>1])->first();
$buy_number = $v["buy_number"];
$buy_price = $v["buy_price"];
$orderAmount += round($buy_number*$buy_price,2);
$standard_brand = data_get($skuInfo,"standard_brand");
//订单明细
$orderItems[] = [
"order_id"=>$order_id, //订单ID
"user_id"=>$user_id, //用户ID
"goods_id"=>$goods_id, //商品ID
"supplier_id"=>\Arr::get($skuInfo,"supplier_id",0), //供应商ID(=company_id)
"brand_id"=>$skuInfo["brand_id"], //品牌ID
"standard_brand_id"=>\Arr::get($standard_brand,"standard_brand_id",0), //标准品牌ID
"goods_name"=>\Arr::get($skuInfo,"goods_name",0), //型号
"class_id2"=>\Arr::get($skuInfo,"class_id2",0), //商品二级分类id
"batch"=>\Arr::get($skuInfo,"batch_sn",0), //批次
"class_id2_name"=>"", //商品二级分类名称
"supplier_name"=>\Arr::get($skuInfo,"supplier_name",0), //供应商名(=company_name)
"brand_name"=>\Arr::get($skuInfo,"brand_name",0), //品牌名
"standard_brand_name"=>\Arr::get($standard_brand,"brand_name",""), //标准品牌
"goods_type"=>2, //商品类型 联营:1专卖 2联营 自营 :3自营 4寄售 5第三方仓库
"goods_number"=>$buy_number, //购买数量
"goods_price"=>\Arr::get($skuInfo,"buy_price",0), //商品单价
"goods_unit"=>"pcs", //商品单位
"delivery_time"=>\Arr::get($skuInfo,"hk_delivery_time",""), //交货时间
"canal"=>\Arr::get($skuInfo,"canal",""), //渠道标签
"initial_price"=>\Arr::get($v,"buy_price",0), //原始销售价格
"purchase_uid"=>0, //采购员id(内部账户系统id)
"purchase_name"=>"", //采购员
"contract_remark"=>"", //合同备注 6个汉子
"tax_rate"=>0, //税率
"raw_goods_sn"=>\Arr::get($cartInfo,"raw_goods_sn",0), //DGK原始编码
"raw_goods_packing"=>\Arr::get($cartInfo,"raw_goods_packing",0), //DGK原始包装
"raw_brand_name"=>\Arr::get($cartInfo,"raw_brand_name",0), //DGK原始品牌名称
"discount_amount"=>0, //折扣金额
"other_amount"=>0, //其它费用金额
"remarks"=>$v["remark"], //客户备注
];
$skuInfo = $goodsInfoArr[$goods_id]; //sku库存
$digikeyInfo = $redis->hget("sku_raw_map",$goods_id); //digikey 编码
if ($digikeyInfo){
$digikeyArr = json_decode($digikeyInfo,true);
$temp["raw_goods_sn"]= $digikeyArr["raw_goods_id"];
$temp["raw_goods_packing"]= $digikeyArr["pack"];
$temp["raw_brand_name"]= $digikeyArr["raw_brand_name"];
}
//购买时价格
$buy_price = 0;
$ladder_price = data_get($skuInfo,"ladder_price");
if ($ladder_price){ //购买价格
foreach ($ladder_price as $a=>$b){
if ($v["buy_number"] >= $b["purchases"]){
$buy_price = $b["price_us"];
}else{
break;
}
}
}
$temp["buy_price"] = $buy_price;
$checkHas = CartModel::where(["user_id"=>$user_id,"goods_id"=>$goods_id,"status"=>1])->first();
$temp["buy_number"] = $skuInfo["stock"] > $v['buy_number'] ? $v['buy_number'] : $skuInfo["stock"];
#扣减购物车库存
$temp["status"] = $v["buy_number"] > 0 ? CartModel::status_yes:CartModel::status_no;
$temp["create_time"] = time();
$temp["update_time"] = time();
$flag = CartModel::insertGetId($temp);
if (!$flag){
return false;
$cartUpdate = CartModel::where("cart_id",$cartInfo["cart_id"])->update($temp);
if (!$cartUpdate){
throw new InvalidRequestException("error:update cart");
}
}
#收款信息 1货款
$order_address_id = OrderItemsModel::insert($orderItems);
if (!$order_address_id){
throw new InvalidRequestException("error:order address");
}
#插入收款信息
$priceData = [
"order_id"=>$order_id, //用户ID
"order_sn"=>$order_sn, //
"price"=>$orderAmount, //
"price_type"=>1, //金额类型(正数ID大于0,负数ID小于0)-8活动优惠 -7支付优惠 -6运费优惠 -5尾款减款 -4优惠券优惠金额 -3尾款 -2预付款 -1付款,1货款 2附加费 3运费 4退款 5支付手续费
"create_time"=>time(), //添加时间
];
$priceFlag = OrderPriceModel::insert($priceData);
if (!$priceFlag){
throw new InvalidRequestException("error:order price");
}
#更新订单总额
$orderFlag = OrderModel::where("order_id",$order_id)->update(["order_amount"=>$orderAmount,"update_time"=>time()]);
if (!$orderFlag){
throw new InvalidRequestException("error:order update");
}
$con->commit();
return true;
}catch (\Exception $e){
$con->rollback();
throw new InvalidRequestException($e->getMessage().$e->getLine());
throw new InvalidRequestException($e->getMessage().$e->getFile().$e->getLine());
}
}
//生成订单单号
public static function createOrderSn($pre = "SE"){
$order_sn = $pre.date("Y-m-d").rand(1000,9999);
$order_sn = $pre.date("Ymd").rand(1000,9999);
$check = OrderModel::getOrderInfo(["order_sn"=>$order_sn]);
if ($check){
self::createOrderSn();
......@@ -208,85 +278,6 @@ class OrderService
}
}
/**
*格式化商品服务数据
*/
public static function dullDataInfo($info,$keyword = ""){
$redis = Redis::connection();
$info['pdf'] = empty($info['pdf']) ? '':$info['pdf'];
$info['encap'] = empty($info['encap']) ? '':$info['encap'];
$info['spu_brief'] = empty($info['spu_brief']) ? '':$info['spu_brief'];
$info['mpq'] = $info['mpq']>0? $info['mpq'] : 1;
$info['goods_name'] = empty($info['goods_name'])? $info['spu_name']:$info['goods_name'];
if(!empty ($keyword)){
$info['goods_name_temp'] = str_ireplace($keyword, "<b class='f-red'>".strtoupper($keyword)."</b>",$info['goods_name']);
}else{
$info['goods_name_temp'] = $info['goods_name'];
}
$info['multiple'] = $info['mpq']>$info['moq'] ? $info['moq'] : $info['mpq'];//那个小用那个
//todo 2022.9.27 计算最大购买数量
$info["max_buy_stock"] = getMaxBuyStock($info["stock"],$info["multiple"],$info["ladder_price"]);
$info['page_flag'] = 2;
//猎芯联营采购员 ,添加供应商采购员渠道不得为空
$info['purchase_name'] = '';
if ($info['canal'] != ""){
$pur_name = $redis->hget('search_supplier_canaltopurchase',$info['canal']);
$info['purchase_name'] = $pur_name;
}
//货区去掉工作日
$info['hk_delivery_time_origin'] = $info['hk_delivery_time'];
$info['cn_delivery_time'] = str_replace("工作日","",$info['cn_delivery_time']);
$info['cn_delivery_time'] = str_replace("个","",$info['cn_delivery_time']);
$info['hk_delivery_time'] = str_replace("工作日","",$info['hk_delivery_time']);
$info['hk_delivery_time'] = str_replace("个","",$info['hk_delivery_time']);
#查询英文品牌缩写
$standard_brand_id = $info["standard_brand"]["standard_brand_id"];
$standardBrandInfo = $redis->hget("standard_brand",$standard_brand_id);
if ($standardBrandInfo){
$standardBrandInfoArr = json_decode($standardBrandInfo,true);
#深贸商城的品牌字段需展示该SKU对应基石标准品牌列表的英文简称,无则取英文名称、都无则取品牌名称
$brandName = $info["brand_name"];
if ($standardBrandInfoArr["brand_short_name_en"]){
$brandName = $standardBrandInfoArr["brand_short_name_en"];
}else if ($standardBrandInfoArr["brand_name_en"]){
$brandName = $standardBrandInfoArr["brand_name_en"];
}
$info["brand_name"] = $brandName;
}
$original_price = $info["original_price"];
#梯度价转换
foreach ($original_price as $e=>&$f){
$f["purchases_format"] = numberToHtml($f["purchases"]);
}
usort($original_price, function ($current, $next) { //原始价格倒叙
return $current['purchases'] < $next['purchases'];
});
$info["ladder_price"] = $original_price;
#工作日转换
foreach (self::$day_filter as $d){
if (strpos($info["hk_delivery_time_origin"],$d) !== false){
$info["hk_delivery_time"] = $info["hk_delivery_time"]." workdays";
break;
}
}
#周转换
foreach (self::$week_filter as $d){
if (strpos($info["hk_delivery_time_origin"],$d) !== false){
$info["hk_delivery_time"] = $info["hk_delivery_time"]." weeks";
break;
}
}
return $info;
}
......
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class OrderAddressModel extends Model
{
protected $table = 'order_address';
protected $primaryKey = 'order_address_id';
public $timestamps = false;
//获取订单地址详情
public static function getOrderAddressInfo($where)
{
$res = self::where($where)->first();
return ($res) ? $res->toArray() : [];
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class OrderItemsModel extends Model
{
protected $table = 'order_items';
protected $primaryKey = 'rec_id';
public $timestamps = false;
//获取订单详情
public static function getOrderItemsInfo($where)
{
$res = self::where($where)->first();
return ($res) ? $res->toArray() : [];
}
}
<?php
namespace App\Http\Models\Order;
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
......
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class OrderPriceModel extends Model
{
protected $table = 'order_price';
protected $primaryKey = 'rec_id';
public $timestamps = false;
//获取订单详情
public static function getOrderPriceInfo($where)
{
$res = self::where($where)->first();
return ($res) ? $res->toArray() : [];
}
}
......@@ -49,5 +49,9 @@ Route::middleware(['api', 'api.check'])->namespace('Api')->group(function () {
Route::POST('cart/cartLists', 'CartApiController@cartLists'); //购物车列表
Route::POST('cart/cartMyCount', 'CartApiController@cartMyCount'); //购物车总数
Route::POST('order/addOrder', 'OrderApiController@addOrder'); //添加订单
Route::POST('order/orderList', 'OrderApiController@orderList'); //订单列表
Route::POST('order/updateOrder', 'OrderApiController@updateOrder'); //更新订单状态
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment