| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- <?php
- namespace App\Services;
- use App\Commodity;
- use App\OracleActAllocationDetails;
- use App\OracleBasSKU;
- use App\OracleDOCOrderDetail;
- use App\OracleDOCOrderHeader;
- use App\Order;
- use App\OrderPackage;
- use App\OrderPackageCommodities;
- use App\Owner;
- use Illuminate\Support\Arr;
- class OrderPackageCommoditiesService
- {
- public function basedOnOracleDetailsStore($orderNo, $orderPackage)
- {
- $details = OracleDOCOrderDetail::query()->where('orderNo', $orderNo)->get();
- $orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
- $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qtyordered');
- }
- public function basedOnActAllocationDetailsStoreByOrderNo($orderNo,$orderPackage){
- $details = OracleActAllocationDetails::query()->where('orderno', $orderNo)->get();
- $orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
- $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
- }
- public function 根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,$key){
- $newItems = [];
- foreach ($details as $detail) {
- $owner = Owner::query()->where(['code' => $detail['customerid']])->first(); // 货主
- $sku = $detail->sku; // sku
- $owner_id = $owner->id; // 货主id
- $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
- if ($commodity == null) {
- $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first(); // 没有找到对应的商品信息
- $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
- }
- $data = ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail[$key]];
- array_push($newItems,$data);
- }
- $diffarr = [];
- foreach ($newItems as $newItem) {
- $packageCommodity = $orderPackageCommodities->where('order_package_id',$newItem['order_package_id'])->where('commodity_id',$newItem['commodity_id'])->first();
- if($packageCommodity!=null){
- if($packageCommodity['amount'] != $newItem['amount']){
- $packageCommodity->update(['amount'=>intval($newItem['amount'])]);
- }
- $orderPackageCommodities = $orderPackageCommodities->filter(function ($item) use ($packageCommodity){
- if($item['id'] == $packageCommodity['id']){
- return false;
- }
- return true;
- });
- array_push($diffarr,$newItem);
- }
- }
- if($orderPackageCommodities->count() > 0){
- foreach ($orderPackageCommodities as $orderPackageCommodity) {
- $id = $orderPackageCommodity['id'];
- OrderPackageCommodities::destroy($id);
- }
- }
- $newItems = array_filter($newItems,function($newItem) use ($diffarr){
- foreach ($diffarr as $item) {
- if($item['order_package_id'] == $newItem['order_package_id'] && $item['commodity_id'] == $newItem['commodity_id'] && $item['amount'] == $newItem['amount']){
- return false;
- }
- }
- return true;
- });
- try {
- if(count($newItems) > 0 ){
- OrderPackageCommodities::query()->insert($newItems);
- LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息'.json_encode($newItems));
- }
- } catch (\Exception $e) {
- LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息异常'.json_encode($newItems).$e->getMessage(),$e->getTraceAsString());
- }
- }
- // public function 根据订单详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details){
- // $newItems = [];
- //// ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]
- // foreach ($details as $detail) {
- // $owner = Owner::query()->where(['code' => $detail['customerid']])->first(); // 货主
- // $sku = $detail->sku; // sku
- // $owner_id = $owner->id; // 货主id
- // $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
- // if ($commodity == null) {
- // $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first(); // 没有找到对应的商品信息
- // $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
- // }
- // $data = ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']];
- // array_push($newItems,$data);
- // }
- // $diffarr = [];
- // foreach ($newItems as $newItem) {
- // $packageCommodity = $orderPackageCommodities->where('sku',$newItem['sku'])->where('customerid',$newItem['customerid'])->first();
- // if($packageCommodity!=null){
- // if($packageCommodity['amount'] != $newItem['amount']){
- // $packageCommodity->update($packageCommodity,$newItem['amount']);
- // }
- // array_push($diffarr,$newItem);
- // }
- // }
- //
- // $newItems = array_diff($newItems,$diffarr);
- //
- // try {
- // if(count($newItems) > 0 ){
- // OrderPackageCommodities::query()->create($newItems);
- // LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息'.json_encode($newItems));
- // }
- // } catch (\Exception $e) {
- // LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息异常'.json_encode($newItems).$e->getMessage(),$e->getTraceAsString());
- // }
- //
- // }
- //
- // public function 根据分配详情更新更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details){
- //// ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]
- // $newItems = [];
- // foreach ($details as $detail) {
- // $owner = Owner::query()->where(['code' => $detail['customerid']])->first(); // 货主
- // $sku = $detail->sku; // sku
- // $owner_id = $owner->id; // 货主id
- // $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
- // if ($commodity == null) {
- // $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first(); // 没有找到对应的商品信息
- // $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
- // }
- // $data = ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']];
- // array_push($newItems,$data);
- // }
- // $diffarr = [];
- // foreach ($newItems as $newItem) {
- // $packageCommodity = $orderPackageCommodities->where('sku',$newItem['sku'])->where('customerid',$newItem['customerid'])->first();
- // if($packageCommodity!=null){
- // if($packageCommodity['amount'] != $newItem['amount']){
- // $packageCommodity->update($packageCommodity,$newItem['amount']);
- // }
- // array_push($diffarr,$newItem);
- // }
- // }
- // $newItems = array_diff($newItems,$diffarr);
- // try {
- // if(count($newItems) > 0 ){
- // OrderPackageCommodities::query()->create($newItems);
- // LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息'.json_encode($newItems));
- // }
- // } catch (\Exception $e) {
- // LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息异常'.json_encode($newItems).$e->getMessage(),$e->getTraceAsString());
- // }
- //
- // }
- public function basedOnActAllocationDetailsStore($orderPackage)
- {
- $details = OracleActAllocationDetails::query()->where('picktotraceid', $orderPackage->logistic_number)->get();
- $orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
- $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
- }
- public function basedOnActAllocationDetail(Order $order,OracleDOCOrderHeader $header,array $details){
- foreach ($details as $detail){
- $logistic_number = $details['picktotraceid'];
- if($logistic_number == '*' || $logistic_number== null || $logistic_number== ''){
- $logistic_number = $header['soreference5'];
- if($logistic_number == '*' || $logistic_number== null || $logistic_number== ''){
- continue;
- }
- }
- $orderPackage = OrderPackage::query()->firstOrCreate(['order_id'=>$order['id'],'logistic_number',$details]);
- $this->createByActAllocationDetail($detail, $orderPackage);
- }
- }
- private function createByActAllocationDetail($detail,$orderPackage)
- {
- $owner = Owner::query()->where(['code' => $detail->customerid])->first(); // 货主
- $sku = $detail->sku;
- $owner_id = $owner['id'];
- $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first();
- if ($commodity == null) {
- $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first();
- $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
- }
- try {
- $count = OrderPackageCommodities::query()->where(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']])->count();
- if($count == 0){
- $orderPackageCommodities = OrderPackageCommodities::query()->firstOrCreate(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]);
- LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹详情'.json_encode($orderPackageCommodities));
- }
- } catch (\Exception $e) {
- LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹失败'.$e->getMessage().$e->getTraceAsString());
- } finally {
- return $orderPackageCommodities ?? null;
- }
- }
- public function getOrderPackageCommoditiesByOrderId($orderId)
- {
- $order = Order::query()->where('id', $orderId)->first();
- if (!$order) {
- return null;
- }
- $orderPackageIds = OrderPackage::query()->select('id')->where('order_id', $order['id'])->get();
- if (!$orderPackageIds) {
- return null;
- }
- return OrderPackageCommodities::query()->with('commodity')->whereIn('order_package_id', $orderPackageIds)->get();
- }
- public function createByOrderDetail(OracleDOCOrderDetail $detail, OrderPackage $orderPackage)
- {
- $owner = Owner::query()->where(['code' => $detail['customerid']])->first(); // 货主
- $sku = $detail->sku; // sku
- $owner_id = $owner->id; // 货主id
- $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
- if ($commodity == null) {
- $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first(); // 没有找到对应的商品信息
- $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
- }
- try {
- $count = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->where('commodity_id',$commodity['id'])->where('amount' , $detail['qtyordered'])->count();
- if($count == 0){
- $orderPackageCommodities = OrderPackageCommodities::query()->first(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]);
- LogService::log(__METHOD__,__FUNCTION__,'创建顶订单包裹详情'.json_encode($orderPackageCommodities));
- }
- } catch (\Exception $e) {
- LogService::log(__METHOD__,__FUNCTION__,'创建顶订单包裹详情'.$e->getMessage().$e->getTraceAsString());
- } finally {
- return $orderPackageCommodities ?? null;
- }
- }
- }
|