ObligationService.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace App\Services;
  3. use App\DepartmentObligationOwner;
  4. use App\Owner;
  5. use App\Traits\ServiceAppAop;
  6. use App\Obligation;
  7. use Carbon\Carbon;
  8. class ObligationService
  9. {
  10. use ServiceAppAop;
  11. protected $modelClass=Obligation::class;
  12. public function getSelection($column = ['id','code'])
  13. {
  14. return Obligation::query()->select($column)->get();
  15. }
  16. public function recombineCodeIdArr(){
  17. $obligations=$this->getSelection()->toArray();
  18. return array_combine(array_column($obligations, 'code'), array_column($obligations, 'id'));
  19. }
  20. public function createOrUpdate(array $param){
  21. $obligation=$this->recombineCodeIdArr();
  22. $owner=Owner::query()->with('departmentObligationOwner')->find($param['id']);
  23. $departmentObligationOwner=$owner->departmentObligationOwner->toArray()??[];
  24. $time=Carbon::now()->subMonths(-1)->startOfMonth()->startOfDay()->toDateTimeString();
  25. if (empty($departmentObligationOwner)){//第一次新增 部门和职能及货主关联
  26. $insert_param=[];
  27. $insert_param[]=['department_id'=>$param['kc'],'obligation_id'=>$obligation['kc'],'obligation_code'=>'kc','owner_id'=>$param['id'],'valid_time'=>$time];
  28. $insert_param[]=['department_id'=>$param['jg'],'obligation_id'=>$obligation['jg'],'obligation_code'=>'jg','owner_id'=>$param['id'],'valid_time'=>$time];
  29. $insert_param[]=['department_id'=>$param['th'],'obligation_id'=>$obligation['th'],'obligation_code'=>'th','owner_id'=>$param['id'],'valid_time'=>$time];
  30. $insert_param[]=['department_id'=>$param['sh'],'obligation_id'=>$obligation['sh'],'obligation_code'=>'sh','owner_id'=>$param['id'],'valid_time'=>$time];
  31. $insert_param[]=['department_id'=>$param['fh'],'obligation_id'=>$obligation['fh'],'obligation_code'=>'fh','owner_id'=>$param['id'],'valid_time'=>$time];
  32. DepartmentObligationOwner::query()->insert($insert_param);
  33. }else{//修改货主中的 仓库组, 加工组, 发货组, 收货组, 退货组信息
  34. $kc=DepartmentObligationOwner::query()
  35. ->where('obligation_id',$obligation['kc'])
  36. ->where('owner_id',$param['id'])
  37. ->where('valid_time',$time)->first();
  38. if ($kc){
  39. $kc->update(['department_id'=>$param['kc']]);
  40. }else{
  41. $kcHis=DepartmentObligationOwner::query()
  42. ->where('obligation_id',$obligation['kc'])
  43. ->where('owner_id',$param['id'])
  44. ->where('department_id',$param['kc'])
  45. ->whereNull('failure_time')
  46. ->first();
  47. if (!$kcHis){
  48. DepartmentObligationOwner::query()
  49. ->orderByDesc('id')
  50. ->where('obligation_id',$obligation['kc'])
  51. ->where('owner_id',$param['id'])
  52. ->update(['failure_time'=>$time]);
  53. DepartmentObligationOwner::query()->insert(['department_id'=>$param['kc'],'obligation_id'=>$obligation['kc'],'obligation_code'=>'kc','owner_id'=>$param['id'],'valid_time'=>$time]);
  54. }
  55. }
  56. $jg=DepartmentObligationOwner::query()
  57. ->where('obligation_id',$obligation['jg'])
  58. ->where('owner_id',$param['id'])
  59. ->where('valid_time',$time)->first();
  60. if ($jg){
  61. $jg->update(['department_id'=>$param['jg']]);
  62. }else{
  63. $jgHis=DepartmentObligationOwner::query()
  64. ->where('obligation_id',$obligation['jg'])
  65. ->where('owner_id',$param['id'])
  66. ->where('department_id',$param['jg'])
  67. ->whereNull('failure_time')
  68. ->first();
  69. if (!$jgHis){
  70. DepartmentObligationOwner::query()
  71. ->orderByDesc('id')
  72. ->where('obligation_id',$obligation['jg'])
  73. ->where('owner_id',$param['id'])
  74. ->update(['failure_time'=>$time]);
  75. DepartmentObligationOwner::query()->insert(['department_id'=>$param['jg'],'obligation_id'=>$obligation['jg'],'obligation_code'=>'jg','owner_id'=>$param['id'],'valid_time'=>$time]);
  76. }
  77. }
  78. $th=DepartmentObligationOwner::query()
  79. ->where('obligation_id',$obligation['th'])
  80. ->where('owner_id',$param['id'])
  81. ->where('valid_time',$time)->first();
  82. if ($th){
  83. $th->update(['department_id'=>$param['th']]);
  84. }else{
  85. $thHis=DepartmentObligationOwner::query()
  86. ->where('obligation_id',$obligation['th'])
  87. ->where('owner_id',$param['id'])
  88. ->where('department_id',$param['th'])
  89. ->whereNull('failure_time')
  90. ->first();
  91. if (!$thHis){
  92. DepartmentObligationOwner::query()
  93. ->orderByDesc('id')
  94. ->where('obligation_id',$obligation['th'])
  95. ->where('owner_id',$param['id'])
  96. ->update(['failure_time'=>$time]);
  97. DepartmentObligationOwner::query()->insert(['department_id'=>$param['th'],'obligation_id'=>$obligation['th'],'obligation_code'=>'th','owner_id'=>$param['id'],'valid_time'=>$time]);
  98. }
  99. }
  100. $sh=DepartmentObligationOwner::query()
  101. ->where('obligation_id',$obligation['sh'])
  102. ->where('owner_id',$param['id'])
  103. ->where('valid_time',$time)->first();
  104. if ($sh){
  105. $sh->update(['department_id'=>$param['sh']]);
  106. }else{
  107. $shHis=DepartmentObligationOwner::query()
  108. ->where('obligation_id',$obligation['sh'])
  109. ->where('owner_id',$param['id'])
  110. ->where('department_id',$param['sh'])
  111. ->whereNull('failure_time')
  112. ->first();
  113. if (!$shHis){
  114. DepartmentObligationOwner::query()
  115. ->orderByDesc('id')
  116. ->where('obligation_id',$obligation['sh'])
  117. ->where('owner_id',$param['id'])
  118. ->update(['failure_time'=>$time]);
  119. DepartmentObligationOwner::query()->insert(['department_id'=>$param['sh'],'obligation_id'=>$obligation['sh'],'obligation_code'=>'sh','owner_id'=>$param['id'],'valid_time'=>$time]);
  120. }
  121. }
  122. $fh=DepartmentObligationOwner::query()
  123. ->where('obligation_id',$obligation['fh'])
  124. ->where('owner_id',$param['id'])
  125. ->where('valid_time',$time)->first();
  126. if ($fh){
  127. $fh->update(['department_id'=>$param['fh']]);
  128. }else{
  129. $fhHis=DepartmentObligationOwner::query()
  130. ->where('obligation_id',$obligation['fh'])
  131. ->where('owner_id',$param['id'])
  132. ->where('department_id',$param['fh'])
  133. ->whereNull('failure_time')
  134. ->first();
  135. if (!$fhHis){
  136. DepartmentObligationOwner::query()
  137. ->orderByDesc('id')
  138. ->where('obligation_id',$obligation['fh'])
  139. ->where('owner_id',$param['id'])
  140. ->update(['failure_time'=>$time]);
  141. DepartmentObligationOwner::query()->insert(['department_id'=>$param['fh'],'obligation_id'=>$obligation['fh'],'obligation_code'=>'fh','owner_id'=>$param['id'],'valid_time'=>$time]);
  142. }
  143. }
  144. }
  145. return Owner::query()->with('departmentObligationOwner')->find($param['id']);
  146. }
  147. }