RejectedBill.php 9.2 KB

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