Commodity.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App;
  3. use Illuminate\Database\Eloquent\Builder;
  4. use Illuminate\Database\Eloquent\Model;
  5. use App\Traits\ModelTimeFormat;
  6. class Commodity extends Model
  7. {
  8. use ModelTimeFormat;
  9. protected $fillable=['name','sku','owner_id','created_at'];
  10. protected $appends=['barcode','owner_name','owner_code'];
  11. public function barcodes()
  12. {
  13. return $this->hasMany('\App\CommodityBarcode');
  14. }
  15. public function owner(){
  16. return $this->belongsTo('App\Owner','owner_id','id');
  17. }
  18. public function getBarcodeAttribute(){
  19. return $this->barcodes()->first()['code'];
  20. }
  21. public function getOwnerNameAttribute(){
  22. return $this->owner()->first()['name'];
  23. }
  24. public function getOwnerCodeAttribute(){
  25. return $this['owner'] ? $this['owner']['code'] : null;
  26. }
  27. static function newCommodityBy_BarcodeOwnerIdNameSku($barcode,$ownerId,$name,$sku){
  28. $barcodes=rtrim($barcode,',');
  29. $barcodes=explode(',',$barcodes);
  30. foreach ($barcodes as $k=>$barcode){
  31. if(!trim($barcode)) unset($barcodes[$k]);
  32. }
  33. $commodities=[];
  34. foreach ($barcodes as $barcode){
  35. if(!trim($barcode))continue;
  36. $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
  37. $query->where('code',$barcode);
  38. })->where('name',$name)->where('owner_id',$ownerId)->first();
  39. if($commodity)$commodities[]=$commodity;
  40. }
  41. if(count($barcodes)==count($commodities)&&count($commodities)>0){//过滤掉仅有一个条码相等的。
  42. $commodity=$commodities[0];
  43. }else{
  44. $commodity=null;
  45. }
  46. if(!$commodity){
  47. $commodity=new Commodity(['name'=>$name,'sku'=>$sku,'owner_id'=>$ownerId]);
  48. $commodity->save();
  49. }else{
  50. if(!isset($commodity['name'])||(!isset($commodity['sku'])||$sku)){
  51. $commodity['name']=$name;
  52. $commodity['sku']=$sku;
  53. $commodity->save();
  54. }
  55. }
  56. foreach ($barcodes as $barcode){
  57. if(!trim($barcode))continue;
  58. // if(preg_match('/[\x{4e00}-\x{9fa5}]/u',$barcode))continue;
  59. $commodityBarcode=CommodityBarcode::where('code',$barcode)->where('commodity_id',$commodity['id'])->first();
  60. if(!$commodityBarcode){
  61. $commodityBarcode=new CommodityBarcode(['code'=>$barcode,'commodity_id'=>$commodity['id']]);
  62. $commodityBarcode->save();
  63. }
  64. }
  65. return $commodity;
  66. }
  67. public function newBarcode($barcode){
  68. return CommodityBarcode::query()->firstOrCreate(['commodity_id'=>$this['id'],'code'=>$barcode]);
  69. }
  70. }