NameRuleImport.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace App\Imports;
  3. use App\Http\Requests\API\CustomField\CreateOrUpdateRequest;
  4. use App\Models\CustomField;
  5. use App\Models\CustomOptions;
  6. use Illuminate\Support\Collection;
  7. use Maatwebsite\Excel\Concerns\ToCollection;
  8. use Maatwebsite\Excel\Concerns\WithHeadingRow;
  9. class NameRuleImport implements ToCollection, WithHeadingRow
  10. {
  11. use ImportValidatorHelper;
  12. public function collection(Collection $collection)
  13. {
  14. $requestRule = new CreateOrUpdateRequest();
  15. $this->validatorByCollection($collection,$requestRule->importRules());
  16. $options=[];
  17. $inputs=[];
  18. $keys=[];
  19. //拿到每个key和对应的type去重key
  20. foreach ($collection as $item){
  21. $key = $item->get('key');
  22. $type = $item->get('type');
  23. $group = $item->get('naming_rule_id');
  24. if (!isset($seenKeys[$key])) {
  25. $keys[$key] = $type;
  26. $seenKeys[$key] = true;
  27. }
  28. }
  29. foreach ($keys as $key=>$value){
  30. //封装下拉列表或者文本
  31. foreach ($collection as $item){
  32. if($key == $item->get('key')){
  33. $type=$item->get('type');
  34. $langData=[
  35. 'en'=>$item->get('custom_key'),
  36. 'zh'=>null,
  37. ];
  38. $valueData = $item->get('custom_value');
  39. $remarkData = $item->get('remark');
  40. if($type==1){
  41. $inputs[] =new CustomOptions($langData,$valueData,$remarkData);
  42. }else{
  43. $options[] =new CustomOptions($langData,$valueData,$remarkData);
  44. }
  45. }
  46. }
  47. $formData=[
  48. 'global'=>0,
  49. 'group'=>$group,
  50. 'key'=>$key,
  51. 'type'=>$value,
  52. 'options'=>empty($options)?null:$options,
  53. 'required'=>0,
  54. 'inputs'=>empty($inputs)?null:$inputs,
  55. ];
  56. CustomField::query()->updateOrCreate([
  57. 'group' => $group,
  58. 'key' => $key,
  59. ], $formData);
  60. $options=[];
  61. $inputs=[];
  62. }
  63. }
  64. }