RejectedBill.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. namespace App;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Controllers\LogisticNumberFeatureController;
  5. use App\Jobs\SyncOrderRejectingStatusJob;
  6. use App\Jobs\SyncRejectedBillRejectingStatusJob;
  7. use Carbon\Carbon;
  8. use Illuminate\Database\Eloquent\Model;
  9. use Illuminate\Database\Eloquent\SoftDeletes;
  10. use Illuminate\Support\Facades\Auth;
  11. use Overtrue\LaravelPinyin\Facades\Pinyin;
  12. /**
  13. * @method static find(array|string|null $param)
  14. */use App\Traits\ModelTimeFormat;
  15. use App\Traits\ModelLogChanging;
  16. class RejectedBill extends Model
  17. {
  18. use ModelLogChanging;
  19. use ModelTimeFormat;
  20. use SoftDeletes;
  21. protected $fillable=['id_owner','order_number','sender','mobile_sender',
  22. 'logistic_number','logistic_number_return','id_logistic_return',
  23. 'is_loaded','fee_collected','remark','id_operator','is_checked',
  24. 'is_finished','checked_numbers','common_01','common_02'];
  25. /*
  26. * id_owner 货主
  27. * order_number 订单号 OracleDOCOrderHeader->SOReference1
  28. * mobile_sender 电话 OracleDOCOrderHeader->[c_tell1,c_tell2]
  29. * logistic_number 原单单号
  30. * logistic_number_return 退回单号
  31. * id_logistic_return
  32. * is_loaded 是否入库
  33. * fee_collected 到付费用
  34. * remark 备注 OracleDOCOrderHeader->notes
  35. * id_operator
  36. * is_checked 是否审核
  37. * is_finished 是否完结
  38. * checked_numbers 审核编号
  39. */
  40. protected $appends = ['owner_name','logistic_name'
  41. ,'is_loaded_str','goods_amount','is_loaded_null','operator_name'];
  42. function owner(){
  43. return $this->hasOne('App\Owner','id','id_owner');
  44. }
  45. function logistic(){
  46. return $this->hasOne('App\Logistic','id','id_logistic_return');
  47. }
  48. function items(){
  49. return $this->hasMany('App\RejectedBillItem','id_rejected_bill','id');
  50. }
  51. function user(){
  52. return $this->hasOne('App\User','id','id_operator');
  53. }
  54. function rejectedBillItems(){
  55. return $this->items();
  56. }
  57. function wmsReflectReceive(){
  58. return $this->belongsTo('App\WMSReflectReceive','id','id_rejected_bill');
  59. }
  60. function orderIssue()
  61. {
  62. return $this->hasOneThrough(OrderIssue::class,OrderIssueRejectedBill::class,'logistic_number_return','id','logistic_number_return','order_issue_id');
  63. }
  64. function orderIssueRejectedBill(){
  65. return $this->hasOne(OrderIssueRejectedBill::class,'logistic_number_return','logistic_number_return');
  66. }
  67. function setIsLoaded_toWaitConfirm(){
  68. if(config('api.jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"将待推单修改为待确认! 退单号:".$this['logistic_number_return'],Auth::user()['id']);
  69. $bill=RejectedBill::find($this['id']);
  70. $bill['is_loaded']=4;
  71. $bill->save();
  72. }
  73. function logisticName(){
  74. $logistic=$this->hasOne('App\Logistic','id','id_logistic_return')->first();
  75. return $logistic?$logistic['name']:'';
  76. }
  77. function makeCheckedNumbers(){
  78. $owner = $this->owner()->first();
  79. if(!$owner)return '';
  80. $pinyinOwnerName=Pinyin::convert($owner->name);
  81. $pinyinArr=array_map(function($pinyin){
  82. return $pinyin[0];
  83. },$pinyinOwnerName);
  84. $initials=implode("", $pinyinArr);
  85. $this['checked_numbers']=$initials.Carbon::now()->format('Ymd').$owner->getIncreasedCheckingCount();
  86. return $this['checked_numbers'];
  87. }
  88. function update(array $attributes = [], array $options = [])
  89. {
  90. (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
  91. return parent::update($attributes, $options);
  92. }
  93. function save(array $options = [])
  94. {
  95. if($this['logistic_number_return'])(new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
  96. return parent::save($options);
  97. }
  98. public function getOwnerNameAttribute(){
  99. return $this->owner['name']??'';
  100. }
  101. public function getLogisticNameAttribute(){
  102. return $this->logistic['name']??'';
  103. }
  104. public function getIsLoadedStrAttribute(){
  105. $val=$this['is_loaded']===null?'null':$this['is_loaded'];
  106. $val=$val===0?'0':$val;
  107. switch ($val){
  108. case 'null':return '无需入库';
  109. case '0':return '否';
  110. case 1:return '是';
  111. case 2:return '待推单';
  112. case 3:return '上传异常';
  113. }
  114. return '';
  115. }
  116. public function getGoodsAmountAttribute(){
  117. $amount=0;
  118. $this->items->each(function (RejectedBillItem $item)use(&$amount){
  119. $amount+=$item['amount'];
  120. });
  121. return $amount;
  122. }
  123. public function getOperatorNameAttribute(){
  124. return $this['user'] ? $this['user']['name'] : null;
  125. }
  126. public function getIsLoadedNullAttribute(){
  127. if($this['is_loaded']===null) return 'null';
  128. return $this['is_loaded'];
  129. }
  130. public function changeIsLoaded_ifItemsAllLoaded(){
  131. $allItemsAreLoaded=true;
  132. $this->items->each(function (RejectedBillItem $item)use(&$allItemsAreLoaded){
  133. if($item['is_loaded']=='未入库'){
  134. $allItemsAreLoaded=false;
  135. return false;
  136. }
  137. });
  138. if($allItemsAreLoaded){
  139. $this['is_loaded']=1;
  140. }else{
  141. $this['is_loaded']=0;
  142. }
  143. $this->update();
  144. return $this['is_loaded'];
  145. }
  146. public function delete()
  147. {
  148. /** @var OrderIssue $orderIssue */
  149. $order_issue_rejected_bill = OrderIssueRejectedBill::query()->select('logistic_number_return')
  150. ->where('logistic_number_return',$this->logistic_number_return)->first();
  151. if ($order_issue_rejected_bill){
  152. $order_issue_rejected_bill->delete();
  153. SyncOrderRejectingStatusJob::dispatch($this);
  154. }
  155. return parent::delete();
  156. }
  157. // public function joinOrderIssue()
  158. // {
  159. // if(isset($this->orderIssueRejectedBill)){
  160. // return;
  161. // }
  162. // /** @var OrderIssue $orderIssue */
  163. // $orderIssue = $this->orderIssueRejectedBill->orderIssue ?? null;
  164. // if($orderIssue){
  165. // $orderIssue->joinRejectedBill($this->logistic_number_return);
  166. // return;
  167. // }
  168. //
  169. // // 获取是否有快递单号对应问题件订单存在
  170. // $orderIssue = OrderIssue::query()->where('order_id',function ($query){
  171. // $query->from('order_packages')->selectRaw('order_id')->where('logistic_number',$this->logistic_number_return);
  172. // })->first();
  173. //
  174. // if(!$orderIssue){
  175. // $orderHeader = OracleDOCOrderHeader::query()->selectRaw('OrderNO')->where('SoReference1', function ($query) {
  176. // $query->select('AsnReference2')->from('DOC_ASN_HEADER')->where('AsnReference3', $this->logistic_number_return)->first();
  177. // })->first();
  178. // if(!$orderHeader)return;
  179. // $orderIssue = OrderIssue::query()->where('order_id',function($query)use($orderHeader){
  180. // $query->from('orders')->select('id')->where('code',$orderHeader->orderno);
  181. // })->first();
  182. // }
  183. // if(!$orderIssue)return;
  184. // $orderIssue->joinRejectedBill($this->logistic_number_return);
  185. // $orderIssue->syncRejectingStatus();
  186. // }
  187. // public function syncOrderIssue()
  188. // {
  189. // if(isset($this->orderIssueRejectedBill)){
  190. // if(isset($this->orderIssueRejectedBill->orderIssue)){
  191. // /** @var OrderIssue $orderIssue */
  192. // $orderIssue = $this->orderIssueRejectedBill->orderIssue;
  193. // $orderIssue->syncRejectingStatus();
  194. // }
  195. // }
  196. // }
  197. // public function updateIsNewRejecting()
  198. // {
  199. // $orderIssue = $this->orderIssueRejectedBill->orderIssue ?? null;
  200. // if($orderIssue) $orderIssue->update(['is_new_rejecting' => '有']);
  201. // }
  202. }