diff --git a/app/common/model/StockOrderAccounts.php b/app/common/model/StockOrderAccounts.php index dabc02e..53c2beb 100644 --- a/app/common/model/StockOrderAccounts.php +++ b/app/common/model/StockOrderAccounts.php @@ -46,4 +46,13 @@ class StockOrderAccounts extends Model * 不允许自动填充模型字段 */ protected $guarded = []; + + + /** + * 关联主订单 + */ + public function order() + { + return $this->belongsTo(StockOrders::class, 'order_id', 'id'); + } } \ No newline at end of file diff --git a/app/common/model/StockOrderItemOptions.php b/app/common/model/StockOrderItemOptions.php index 417a927..e6f8122 100644 --- a/app/common/model/StockOrderItemOptions.php +++ b/app/common/model/StockOrderItemOptions.php @@ -46,4 +46,13 @@ class StockOrderItemOptions extends Model * 不允许自动填充模型字段 */ protected $guarded = []; + + + /** + * 关联订单项 + */ + public function item() + { + return $this->belongsTo(StockOrderItems::class, 'order_item_id', 'id'); + } } \ No newline at end of file diff --git a/app/common/model/StockOrderItems.php b/app/common/model/StockOrderItems.php index 847fec7..610f694 100644 --- a/app/common/model/StockOrderItems.php +++ b/app/common/model/StockOrderItems.php @@ -81,4 +81,31 @@ class StockOrderItems extends Model public function getPortMiscFeeAmountAttribute() { return $this->moneyLatest('port_misc_fee')?->amount; } public function getRetrofitFeeAmountAttribute() { return $this->moneyLatest('retrofit_fee')?->amount; } public function getTotalPriceAmountAttribute() { return $this->moneyLatest('total_price')?->amount; } + + + /** + * 关联主订单 + */ + public function order() + { + return $this->belongsTo(StockOrders::class, 'order_id', 'id'); + } + + /** + * 关联订单项选项 + */ + public function options() + { + return $this->hasMany(StockOrderItemOptions::class, 'order_item_id', 'id'); + } + + + /** + * 关联货币价值信息(一个订单项可以有多个货币价值记录) + */ + public function moneyValues() + { + return $this->hasMany(VehMoneyValue::class, 'object_id', 'id') + ->where('object_scene', 'stock_order_items'); // 场景标识区分不同对象类型 + } } \ No newline at end of file diff --git a/app/common/model/StockOrders.php b/app/common/model/StockOrders.php index 2814f39..123eb66 100644 --- a/app/common/model/StockOrders.php +++ b/app/common/model/StockOrders.php @@ -56,4 +56,29 @@ class StockOrders extends Model * 不允许自动填充模型字段 */ protected $guarded = []; + + + /** + * 关联订单项 + */ + public function items() + { + return $this->hasMany(StockOrderItems::class, 'order_id', 'id'); + } + + /** + * 关联订单账户信息 + */ + public function accounts() + { + return $this->hasMany(StockOrderAccounts::class, 'order_id', 'id'); + } + + /** + * 关联货币价值信息(一个订单可以有多个货币价值记录) + */ + public function moneyValues() + { + return $this->hasMany(VehMoneyValue::class, 'object_id', 'id')->where('object_scene', 'stock_orders'); + } } \ No newline at end of file diff --git a/app/common/model/VehMoneyValue.php b/app/common/model/VehMoneyValue.php index e4c9d58..38c1458 100644 --- a/app/common/model/VehMoneyValue.php +++ b/app/common/model/VehMoneyValue.php @@ -59,4 +59,29 @@ class VehMoneyValue extends Model if ($this->exchange_rate === null) return null; return (string) bcmul((string)$this->amount, (string)$this->exchange_rate, $scale); } + + + /** + * 关联订单 + */ + public function order() + { + return $this->belongsTo(StockOrders::class, 'object_id', 'id'); + } + + /** + * 关联订单项(一个货币价值记录可能关联到订单项) + */ + public function orderItem() + { + return $this->belongsTo(StockOrderItems::class, 'object_id', 'id'); + } + + /** + * 限定查询特定对象类型的货币价值记录 + */ + public function scopeOfScene($query, $scene) + { + return $query->where('object_scene', $scene); + } } \ No newline at end of file diff --git a/app/common/service/StockOrdersService.php b/app/common/service/StockOrdersService.php index 55e8dd3..c694177 100644 --- a/app/common/service/StockOrdersService.php +++ b/app/common/service/StockOrdersService.php @@ -11,6 +11,7 @@ use app\common\model\StockOrders; use support\Request; use app\common\model\User; use support\exception\BusinessException; +use support\Db; class StockOrdersService { @@ -48,6 +49,12 @@ class StockOrdersService break; case 'show': $config['where']['id'] = $p['id']; + + $config['with'][] = 'items'; + $config['with'][] = 'items.options'; + $config['with'][] = 'items.moneyValues'; + $config['with'][] = 'accounts'; + $config['with'][] = 'moneyValues'; break; case 'store': break; @@ -65,38 +72,47 @@ class StockOrdersService public function serviceStore(Request $request, array $data = []) { - $data = $this->preProcess('Store', $data, $request); - $dl = $this->getDataLimitFromRequest($request); - $created = $this->logicCreate($data, $dl); // 表1 + // 关联表较多,增加事务处理 + return Db::transaction(function () use ($request, $data) { + $data = $this->preProcess('Store', $data, $request); + $dl = $this->getDataLimitFromRequest($request); + $created = $this->logicCreate($data, $dl); // 表1 - // 车辆 - foreach ($data['veh_list'] as $veh) { - $veh['order_id'] = $created->id; - $item = StockOrderItems::create($veh); // 表2 + // 车辆 + foreach ($data['veh_list'] as $veh) { + $veh['order_id'] = $created->id; + $item = StockOrderItems::create($veh); // 表2 - // 金额 // 表3 - $item->addMoney('official_price', $veh['currency'], $veh['amount'], $veh['rate'], '官方指导价'); - $item->addMoney('discount_price', $veh['currency'], $veh['amount'], $veh['rate'], '优惠价'); - $item->addMoney('unit_price', $veh['currency'], $veh['amount'], $veh['rate'], '单价'); - $item->addMoney('total_price', $veh['currency'], $veh['amount'], $veh['rate'], '总价'); - $item->addMoney('handling_fee', $veh['currency'], $veh['amount'], $veh['rate'], '手续费'); - $item->addMoney('fob_transport_fee', $veh['currency'], $veh['amount'], $veh['rate'], 'FOB运输费'); - $item->addMoney('port_misc_fee', $veh['currency'], $veh['amount'], $veh['rate'], '港杂'); - $item->addMoney('retrofit_fee', $veh['currency'], $veh['amount'], $veh['rate'], '改装费'); + // 金额 // 表3 + $item->addMoney('official_price', $veh['official_price']['currency'], $veh['official_price']['amount'], $veh['official_price']['rate'], '官方指导价'); + $item->addMoney('discount_price', $veh['discount_price']['currency'], $veh['discount_price']['amount'], $veh['discount_price']['rate'], '优惠价'); + $item->addMoney('unit_price', $veh['unit_price']['currency'], $veh['unit_price']['amount'], $veh['unit_price']['rate'], '单价'); + $item->addMoney('total_price', $veh['total_price']['currency'], $veh['total_price']['amount'], $veh['total_price']['rate'], '总价'); + $item->addMoney('handling_fee', $veh['handling_fee']['currency'], $veh['handling_fee']['amount'], $veh['handling_fee']['rate'], '手续费'); + $item->addMoney('fob_transport_fee', $veh['fob_transport_fee']['currency'], $veh['fob_transport_fee']['amount'], $veh['fob_transport_fee']['rate'], 'FOB运输费'); + $item->addMoney('port_misc_fee', $veh['port_misc_fee']['currency'], $veh['port_misc_fee']['amount'], $veh['port_misc_fee']['rate'], '港杂'); + $item->addMoney('retrofit_fee', $veh['retrofit_fee']['currency'], $veh['retrofit_fee']['amount'], $veh['retrofit_fee']['rate'], '改装费'); - // 改装 - foreach ($data['veh_list']['modify_list'] as $modify) { - $modify['order_item_id'] = $item->id; - StockOrderItemOptions::create($modify); // 表4 + // 改装 + if (count($veh['modify_list']) > 0) { + foreach ($veh['modify_list'] as $modify) { + $modify['order_item_id'] = $item->id; + StockOrderItemOptions::create($modify); // 表4 + } + } } - } - // 账户 - foreach ($data['account_list'] as $account) { - $account['order_id'] = $created->id; - StockOrderAccounts::create($account); // 表5 - } - return $this->postProcess('Store', $created); + // 账户 + if (count($data['account_list']) > 0) { + foreach ($data['account_list'] as $account) { + $account['order_id'] = $created->id; + $account['remit_date'] = strtotime($account['remit_date']); + StockOrderAccounts::create($account); // 表5 + } + } + + return $this->postProcess('Store', $created); + }); } public function beforeServiceStore($data, Request $request) @@ -110,10 +126,6 @@ class StockOrdersService $data['salesperson_id'] = $userId; $data['salesperson_snapshot'] = User::where('id', $userId)->value('name') ?? ''; - var_dump($data); - - throw new BusinessException('测试异常'); - return $data; } diff --git a/app/common/service/VehVehicleSkuService.php b/app/common/service/VehVehicleSkuService.php index d2679ab..0fa8649 100644 --- a/app/common/service/VehVehicleSkuService.php +++ b/app/common/service/VehVehicleSkuService.php @@ -140,6 +140,8 @@ class VehVehicleSkuService public function beforeServiceUpdate($data, Request $request) { + unset($data['created_at']); + unset($data['updated_at']); // $data = $this->backfill($data); if (empty($data['model_code'])) { $data['model_code'] = ModelNaming::buildModelCode($data);