| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- <?php
- namespace App\Services;
- use App\Logistic;
- use App\OracleActAllocationDetails;
- use App\OracleDOCASNHeader;
- use App\OracleDOCOrderHeader;
- use App\Order;
- use App\OrderItems;
- use App\Owner;
- use App\RejectedBill;
- use App\Shop;
- class OrderService
- {
- public function __construct()
- {
- app()->bind("orderPackageService", OrderPackageService::class);
- }
- public function findOrCreateByClientCode($clientCode)
- {
- $order = Order::query()->where('client_code', $clientCode)->first();
- $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
- if ($orderHeader == null) {
- return null;
- }
- $orderHeadAttr = $orderHeader->toArray();
- if ($order == null) {
- $customer_name = $orderHeadAttr['oracleBASCustomer_descr_c'];
- $owner = Owner::query()->where('code', $orderHeadAttr['customerid'])->first();
- if (!$owner) {
- $owner = Owner::query()->create(['code' => $orderHeadAttr['customerid'], 'name' => $customer_name]);
- }
- $owner_id = $owner['id'];
- $shop_name = $orderHeadAttr['issuepartyname'];
- $shop_Id = null;
- if ($shop_name) {
- $shop = Shop::query()->firstOrCreate(['name' => $shop_name, 'owner_id' => $owner_id]);
- $shop_Id = $shop['id'];
- }
- $logistics = Logistic::query()->where(['code' => $orderHeadAttr['carrierid']])->first();
- $logistics_id = null;
- if ($logistics) {
- $logistics_id = $logistics['id'];
- } else {
- $logistics = Logistic::query()->create(['name'=>$orderHeadAttr['carriername'],'code'=>$orderHeadAttr['carrierid']]);
- $logistics_id = $logistics['id'];
- }
- $arr = [
- 'code' => $orderHeadAttr['orderno'],
- 'owner_id' => $owner_id,
- 'wms_status' => $orderHeadAttr['oracleBASCode_codename_c'],
- 'created_at' => $orderHeadAttr['addtime'],
- 'logistic_id' => $logistics_id,
- 'shop_id' => $shop_Id,
- 'consignee_name' => $orderHeadAttr['c_contact'],
- 'consignee_phone' => $orderHeadAttr['c_tel2'],
- 'province' => $orderHeadAttr['c_province'],
- 'city' => $orderHeadAttr['c_city'],
- 'district' => $orderHeadAttr['c_district'],
- 'address' => $orderHeadAttr['c_address1'],
- 'client_code' => $orderHeadAttr['soreference1'],
- ];
- $order = Order::query()->create($arr);
- $orderPackageService = app('orderPackageService');
- $orderPackageService->createdByOrder($order);
- }
- return $this->getOrderInfo($order['id']);
- }
- public function getOrderInfo($orderId)
- {
- return Order::with('packages.commodities.commodity')->where('id', $orderId)->first();
- }
- public function getRejectedBillOfClientCode($clientCode)
- {
- $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
- if (!$orderHeader) {
- return null;
- }
- $ASNHeader = OracleDOCASNHeader::query()->where('ASNReference2', $orderHeader->soreference2)->first();
- if (!$ASNHeader) {
- return null;
- }
- return RejectedBill::query()->with(['owner', 'logistic', 'items'])->where('logistic_number_return', $ASNHeader->asnreference2)->first();
- }
- public function findOrCreteByLogisticNumberReturn($logisticNumberReturn)
- {
- $ASNHeader = OracleDOCASNHeader::query()->where('ASNReference3', $logisticNumberReturn)->first();
- if (!$ASNHeader) {
- return null;
- }
- $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $ASNHeader->ASNReference2);
- if (!$orderHeader) {
- return null;
- }
- return $this->findOrCreateByClientCode($orderHeader['soreference1']);
- }
- public function first(array $params){
- $order = Order::query();
- foreach ($params as $column => $value){
- $order->where($column, $value);
- }
- return $order->first();
- }
- public function logisticNumberCreateOrder($logistic_number)
- {
- /**
- * @var OracleActAllocationDetailService
- * @var OracleActAllocationDetails $actAllocationDetail
- */
- $actAllocationDetail = app('oracleActAllocationDetailService')->first(['picktotraceid' => $logistic_number]);
- $order = $this->first(['code' => $actAllocationDetail->orderno]);
- if ($order) return $order;
- $actAllocationDetail->load(['oracleDocOrderHeader' => function ($query) {
- $query->with('oracleBASCode');
- }]);
- $orderHeader = $actAllocationDetail->oracleDocOrderHeader ?? null;
- if ($orderHeader == null) return null;
- $owner = app('ownerService')->first(['code' => $orderHeader->customerid]);
- if (!$owner) {
- $orderHeader->load('oracleBASCustomer');
- $customer_name = $orderHeader->oracleBASCustomer ? $orderHeader->oracleBASCustomer->descr_c : null;
- /** @var OwnerService */
- if ($customer_name) $owner = app('ownerService')->create(['code' => $orderHeader->customerid, 'name' => $customer_name]);
- }
- $shop = null;
- $shop_name = $orderHeader->issuepartyname;
- if ($shop_name && $owner) {
- $shop = app('shopService')->firstOrCreate(['name' => $shop_name, 'owner_id' => $owner->id]);
- }
- $logistics = app('logisticService')->firstOrCreate(['code' => $orderHeader->carrierid],
- ['code' => $orderHeader->carrierid, 'name' => $orderHeader->carriername]);
- return Order::query()->create([
- 'code' => $orderHeader->orderno,
- 'owner_id' => $owner ? $owner->id : null,
- 'wms_status' => $orderHeader->oracleBASCode ? $orderHeader->oracleBASCode->codename_c : null,
- 'created_at' => $orderHeader->addtime,
- 'logistic_id' => $logistics ? $logistics->id : null,
- 'shop_id' => $shop ? $shop->id : null,
- 'consignee_name' => $orderHeader->c_contact,
- 'consignee_phone' => $orderHeader->c_tel2,
- 'province' => $orderHeader->c_province,
- 'city' => $orderHeader->c_city,
- 'district' => $orderHeader->c_district,
- 'address' => $orderHeader->c_address1,
- 'client_code' => $orderHeader->soreference1,
- ]);
- }
- }
|