| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- <?php
- namespace App;
- use App\Http\Controllers\Controller;
- use App\Http\Controllers\LogisticNumberFeatureController;
- use App\Jobs\SyncOrderRejectingStatusJob;
- use App\Jobs\SyncRejectedBillRejectingStatusJob;
- use Carbon\Carbon;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Eloquent\Relations\BelongsTo;
- use Illuminate\Database\Eloquent\SoftDeletes;
- use Illuminate\Support\Facades\Auth;
- use Overtrue\LaravelPinyin\Facades\Pinyin;
- /**
- * @method static find(array|string|null $param)
- */
- use App\Traits\ModelTimeFormat;
- use App\Traits\ModelLogChanging;
- class RejectedBill extends Model
- {
- use ModelLogChanging;
- use ModelTimeFormat;
- use SoftDeletes;
- protected $fillable = [
- 'id_owner',
- 'order_number',
- 'delivery_status',//收货状态
- 'sender',
- 'mobile_sender',
- 'logistic_number',
- 'logistic_number_return',
- 'id_logistic_return',
- 'is_loaded',
- 'fee_collected',
- 'remark',
- 'id_operator',
- 'is_checked',
- 'is_finished',
- 'checked_numbers',
- 'common_01',
- 'common_02'
- ];
- static public $enums = [
- 'delivery_status' => [
- '' => 0,
- '未收货' => 1,
- '已收货' => 2,
- ],
- ];
- function __construct(array $attributes = [])
- {
- foreach (self::$enums as &$enum) {
- $enum = $enum + array_flip($enum);
- }
- parent::__construct($attributes);
- }
- public function getDeliveryStatusAttribute($value)
- {
- switch ($value) {
- case 1:
- return '未收货';
- case 2:
- return '已收货';
- default:
- return '';
- }
- }
- public function setDeliveryStatusAttribute($value)
- {
- if (!$value) return 0;
- $this->attributes['delivery_status'] = self::$enums['delivery_status'][$value];
- }
- /*
- * id_owner 货主
- * order_number 订单号 OracleDOCOrderHeader->SOReference1
- * mobile_sender 电话 OracleDOCOrderHeader->[c_tell1,c_tell2]
- * logistic_number 原单单号
- * logistic_number_return 退回单号
- * id_logistic_return
- * is_loaded 是否入库
- * fee_collected 到付费用
- * remark 备注 OracleDOCOrderHeader->notes
- * id_operator
- * is_checked 是否审核
- * is_finished 是否完结
- * checked_numbers 审核编号
- */
- protected $appends = ['owner_name', 'logistic_name'
- , 'is_loaded_str', 'goods_amount', 'is_loaded_null', 'operator_name'];
- function owner()
- {
- return $this->hasOne('App\Owner', 'id', 'id_owner');
- }
- function logistic()
- {
- return $this->hasOne('App\Logistic', 'id', 'id_logistic_return');
- }
- function items()
- {
- return $this->hasMany('App\RejectedBillItem', 'id_rejected_bill', 'id');
- }
- function user()
- {
- return $this->hasOne('App\User', 'id', 'id_operator');
- }
- function rejectedBillItems()
- {
- return $this->items();
- }
- function wmsReflectReceive()
- {
- return $this->belongsTo('App\WMSReflectReceive', 'id', 'id_rejected_bill');
- }
- function orderIssue()
- {
- return $this->hasOneThrough(OrderIssue::class, OrderIssueRejectedBill::class, 'logistic_number_return', 'id', 'logistic_number_return', 'order_issue_id');
- }
- function orderIssueRejectedBill()
- {
- return $this->hasOne(OrderIssueRejectedBill::class, 'logistic_number_return', 'logistic_number_return')->whereNotNull('order_issue_id');
- }
- function record(): BelongsTo
- {
- return $this->belongsTo(ReceiveRecord::class, "logistic_number_return", "logistic_number");
- }
- function setIsLoaded_toWaitConfirm()
- {
- if (config('api.jianshang_rejecteds_log_switch')) Controller::logS(__METHOD__, __FUNCTION__, "将待推单修改为待确认! 退单号:" . $this['logistic_number_return'], Auth::user()['id']);
- $bill = RejectedBill::find($this['id']);
- $bill['is_loaded'] = 4;
- $bill->save();
- }
- function logisticName()
- {
- $logistic = $this->hasOne('App\Logistic', 'id', 'id_logistic_return')->first();
- return $logistic ? $logistic['name'] : '';
- }
- function makeCheckedNumbers()
- {
- $owner = $this->owner()->first();
- if (!$owner) return '';
- $pinyinOwnerName = Pinyin::convert($owner->name);
- $pinyinArr = array_map(function ($pinyin) {
- return $pinyin[0];
- }, $pinyinOwnerName);
- $initials = implode("", $pinyinArr);
- $this['checked_numbers'] = $initials . Carbon::now()->format('Ymd') . $owner->getIncreasedCheckingCount();
- return $this['checked_numbers'];
- }
- function update(array $attributes = [], array $options = [])
- {
- (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'], $this['id_logistic_return']);
- return parent::update($attributes, $options);
- }
- function save(array $options = [])
- {
- if ($this['logistic_number_return']) (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'], $this['id_logistic_return']);
- return parent::save($options);
- }
- public function getOwnerNameAttribute()
- {
- return $this->owner['name'] ?? '';
- }
- public function getLogisticNameAttribute()
- {
- return $this->logistic['name'] ?? '';
- }
- public function getIsLoadedStrAttribute()
- {
- $val = $this['is_loaded'] === null ? 'null' : $this['is_loaded'];
- $val = $val === 0 ? '0' : $val;
- switch ($val) {
- case 'null':
- return '无需入库';
- case '0':
- return '否';
- case 1:
- return '是';
- case 2:
- return '待推单';
- case 3:
- return '上传异常';
- }
- return '';
- }
- public function getGoodsAmountAttribute()
- {
- $amount = 0;
- $this->items->each(function (RejectedBillItem $item) use (&$amount) {
- $amount += $item['amount'];
- });
- return $amount;
- }
- public function getOperatorNameAttribute()
- {
- return $this['user'] ? $this['user']['name'] : null;
- }
- public function getIsLoadedNullAttribute()
- {
- if ($this['is_loaded'] === null) return 'null';
- return $this['is_loaded'];
- }
- public function changeIsLoaded_ifItemsAllLoaded()
- {
- $allItemsAreLoaded = true;
- $this->items->each(function (RejectedBillItem $item) use (&$allItemsAreLoaded) {
- if ($item['is_loaded'] == '未入库') {
- $allItemsAreLoaded = false;
- return false;
- }
- });
- if ($allItemsAreLoaded) {
- $this['is_loaded'] = 1;
- } else {
- $this['is_loaded'] = 0;
- }
- $this->update();
- return $this['is_loaded'];
- }
- public function delete()
- {
- /** @var OrderIssue $orderIssue */
- $order_issue_rejected_bill = OrderIssueRejectedBill::query()->select('logistic_number_return')
- ->where('logistic_number_return', $this->logistic_number_return)->first();
- if ($order_issue_rejected_bill) {
- OrderIssueRejectedBill::query()->where('logistic_number_return', $this->logistic_number_return)->delete();
- SyncOrderRejectingStatusJob::dispatch($this);
- }
- return parent::delete();
- }
- // public function joinOrderIssue()
- // {
- // if(isset($this->orderIssueRejectedBill)){
- // return;
- // }
- // /** @var OrderIssue $orderIssue */
- // $orderIssue = $this->orderIssueRejectedBill->orderIssue ?? null;
- // if($orderIssue){
- // $orderIssue->joinRejectedBill($this->logistic_number_return);
- // return;
- // }
- //
- // // 获取是否有快递单号对应问题件订单存在
- // $orderIssue = OrderIssue::query()->where('order_id',function ($query){
- // $query->from('order_packages')->selectRaw('order_id')->where('logistic_number',$this->logistic_number_return);
- // })->first();
- //
- // if(!$orderIssue){
- // $orderHeader = OracleDOCOrderHeader::query()->selectRaw('OrderNO')->where('SoReference1', function ($query) {
- // $query->select('AsnReference2')->from('DOC_ASN_HEADER')->where('AsnReference3', $this->logistic_number_return)->first();
- // })->first();
- // if(!$orderHeader)return;
- // $orderIssue = OrderIssue::query()->where('order_id',function($query)use($orderHeader){
- // $query->from('orders')->select('id')->where('code',$orderHeader->orderno);
- // })->first();
- // }
- // if(!$orderIssue)return;
- // $orderIssue->joinRejectedBill($this->logistic_number_return);
- // $orderIssue->syncRejectingStatus();
- // }
- // public function syncOrderIssue()
- // {
- // if(isset($this->orderIssueRejectedBill)){
- // if(isset($this->orderIssueRejectedBill->orderIssue)){
- // /** @var OrderIssue $orderIssue */
- // $orderIssue = $this->orderIssueRejectedBill->orderIssue;
- // $orderIssue->syncRejectingStatus();
- // }
- // }
- // }
- // public function updateIsNewRejecting()
- // {
- // $orderIssue = $this->orderIssueRejectedBill->orderIssue ?? null;
- // if($orderIssue) $orderIssue->update(['is_new_rejecting' => '有']);
- // }
- }
|