DischargeTaskService.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. namespace App\Services;
  3. use App\Role;
  4. use App\Traits\ServiceAppAop;
  5. use App\DischargeTask;
  6. use Carbon\Carbon;
  7. use Illuminate\Database\Eloquent\Collection;
  8. use Illuminate\Support\Facades\Auth;
  9. class DischargeTaskService
  10. {
  11. use ServiceAppAop;
  12. protected $modelClass = DischargeTask::class;
  13. // 编辑卸货任务
  14. public function updateDischargeTask(DischargeTask $dischargeTask, array $param): array
  15. {
  16. if ($dischargeTask->status == 3) return ['success' => false, 'message' => '已完成的卸货任务不可进行编辑'];
  17. if(!empty($param['status'])){
  18. if( $param['status'] > 0 && $dischargeTask->facilitator_id == 0){
  19. return ['success' => false, 'message' => '未指定服务商的卸货任务,不可进行当前编辑'];
  20. }
  21. if($param['status'] ==3 && $dischargeTask->status == 0){
  22. return ['success' => false, 'message' => '未指定服务商的卸货任务,不可进行当前编辑'];
  23. }
  24. }
  25. $bool = $dischargeTask->update($param);
  26. if ($bool){
  27. $dischargeTask->refresh();
  28. $dischargeTask->loadMissing('owner','facilitator');
  29. return ['success' => true, 'data' => $dischargeTask];
  30. }
  31. else return ['success' => false];
  32. }
  33. // 删除卸货任务
  34. public function deleteDischargeTask(DischargeTask $dischargeTask): array
  35. {
  36. if ($dischargeTask->status == 3) return ['success' => false, 'message' => '已完成的卸货任务不可进行删除'];
  37. try {
  38. $dischargeTask->delete();
  39. return ['success' => true];
  40. } catch (\Exception $e) {
  41. return ['success' => false, 'message' => $e->getMessage()];
  42. }
  43. }
  44. // 指定服务商
  45. public function updateTaskFacilitator(DischargeTask $dischargeTask, array $param): array
  46. {
  47. unset($param['owner'],$param['income_at']);
  48. if ($param['id']) unset($param['id']);
  49. $roles = Role::query()->where('name','like','人事%')->get();
  50. $personnel = app(UserService::class)->hasRoles(Auth::user(),$roles);
  51. if(array_search(Auth::user()["name"],config("users.superAdmin"))!==false){
  52. $personnel = true;
  53. }
  54. if ($dischargeTask->status >= 1 && $personnel == false) return ['success' => false, 'message' => '当前任务状态不可修改'];
  55. if (empty($param['expenditure_at'])) $param['expenditure_at'] = now();
  56. if (empty($param['status'])) $param['status'] = 1;
  57. $param['expenditure_total_cost'] = $param['expenditure_unit_price'] * $param['expenditure_amount'];
  58. // Authority
  59. $bool = $dischargeTask->update($param);
  60. if ($bool == 1) {
  61. $dischargeTask->loadMissing('owner','facilitator');
  62. return ['success' => true, 'data' => $dischargeTask];
  63. } else return ['success' => false];
  64. }
  65. // 创建卸货任务
  66. public function createTask(array $param,bool $loadMissing = true): array
  67. {
  68. if (isset($param['id'])) unset($param['id']);
  69. if (empty($param['income_total_cost'])) $param['income_total_cost'] = $param['income_unit_price'] * $param['income_amount'];
  70. if (empty($param['income_at'])) $param['income_at'] = now();
  71. if (empty($param['status'])) $param['status'] = 0;
  72. $dischargeTask = DischargeTask::query()->create($param);
  73. if($loadMissing)$dischargeTask->loadMissing('facilitator', 'owner','warehouse');
  74. return ['success' => true, 'data' => $dischargeTask];
  75. }
  76. // 卸货任务
  77. public function getJson(Collection $dischargeTasks): array
  78. {
  79. $json = [];
  80. foreach ($dischargeTasks as $dischargeTask) {
  81. /** @var DischargeTask $dischargeTask */
  82. /** @var Carbon $date */
  83. $date = $dischargeTask['created_at'];
  84. $json[] = [
  85. $date->toDateTimeString(),
  86. $dischargeTask->owner->name ?? '',
  87. DischargeTask::types[$dischargeTask['type']] ?? '',
  88. $dischargeTask->numbers ?? '',
  89. ($dischargeTask['income_amount']).'',
  90. DischargeTask::units[$dischargeTask['income_unit']] ?? '',
  91. $dischargeTask->income_unit_price ?? '',
  92. $dischargeTask->income_total_cost ?? '',
  93. DischargeTask::status[$dischargeTask['status']] ?? '',
  94. $dischargeTask->income_remark ?? ' ',
  95. ];
  96. }
  97. return $json;
  98. }
  99. // 结算报表
  100. public function getStatementsJson(Collection $dischargeTasks): array
  101. {
  102. $json = [];
  103. foreach ($dischargeTasks as $dischargeTask) {
  104. /** @var DischargeTask $dischargeTask */
  105. /** @var Carbon $date */
  106. $date = $dischargeTask['created_at'];
  107. $json[] = [
  108. $date->toDateTimeString() , // 日期
  109. $dischargeTask->owner->name ?? '', // 客户名称
  110. $dischargeTask->warehouse->name ?? '', // 仓库
  111. DischargeTask::types[$dischargeTask['type']] ?? '', // 作业名称
  112. $dischargeTask['numbers'], // 入库单号
  113. // --- 收入信息
  114. ($dischargeTask['income_amount']).'', // 数量
  115. DischargeTask::units[$dischargeTask['income_unit']] ?? '', // 单位
  116. $dischargeTask['income_unit_price'], // 收入单价
  117. $dischargeTask['income_total_cost'], // 收入合计
  118. // --- 支出信息
  119. $dischargeTask->facilitator->name ?? '', // 服务商
  120. ($dischargeTask['expenditure_amount']).'', // 数量
  121. DischargeTask::units[$dischargeTask['expenditure_unit']] ?? '', // 单位
  122. $dischargeTask['expenditure_unit_price'], // 支出单价
  123. $dischargeTask['expenditure_total_cost'], // 支出合计
  124. // --- 其他信息
  125. DischargeTask::status[$dischargeTask['status']] ?? '', // 状态
  126. $dischargeTask->income_remark ?? '', // 收入备注
  127. $dischargeTask->expenditure_remark ?? '', // 支出备注
  128. ];
  129. }
  130. return $json;
  131. }
  132. // 服务商对账单
  133. public function getFacilitatorStatementsJson(Collection $dischargeTasks): array
  134. {
  135. $json = [];
  136. foreach ($dischargeTasks as $dischargeTask) {
  137. /** @var Carbon $date */
  138. $date = $dischargeTask->created_at;
  139. $json[] = [
  140. $date->toDateTimeString(), // 日期
  141. $dischargeTask->facilitator->name ?? '', // 服务商
  142. $dischargeTask['expenditure_amount'].'', // 数量
  143. DischargeTask::units[$dischargeTask['expenditure_unit']] ?? '', // 单位
  144. $dischargeTask['expenditure_unit_price'].'', // 支出单价
  145. $dischargeTask['expenditure_total_cost'].'', // 支出合计
  146. ];
  147. }
  148. return $json;
  149. }
  150. }