RejectedBill.php 9.9 KB

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