ObligationService.php 9.0 KB

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