ObligationService.php 8.2 KB

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