IssueWorkLogic.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. namespace app\api\logic;
  3. use app\common\enum\worker\WorkerAccountLogEnum;
  4. use app\common\logic\WorkerAccountLogLogic;
  5. use app\common\model\dict\DictData;
  6. use app\common\model\master_worker\MasterWorkerAccountLog;
  7. use app\common\model\master_worker\MasterWorkerFreezeAmountLog;
  8. use app\common\model\recharge\RechargeOrder;
  9. use app\common\model\works\IssueWork;
  10. use app\common\logic\BaseLogic;
  11. use app\common\model\works\ReturnWork;
  12. use app\common\model\works\ServiceWork;
  13. use think\Exception;
  14. use think\facade\Db;
  15. /**
  16. * IssueWork逻辑
  17. * Class IssueWorkLogic
  18. * @package app\api\logic\works
  19. */
  20. class IssueWorkLogic extends BaseLogic
  21. {
  22. /**
  23. * @param $params
  24. * @return array
  25. * @throws \think\db\exception\DataNotFoundException
  26. * @throws \think\db\exception\DbException
  27. * @throws \think\db\exception\ModelNotFoundException
  28. */
  29. public static function lists($params)
  30. {
  31. return IssueWork::where('user_id',$params['user_id'])
  32. ->field(['id', 'sn','title', 'issue_approval','create_time','complaint_status','responsible'])
  33. ->append(['issue_approval_text'])
  34. ->order(['id' => 'desc'])
  35. ->select()
  36. ->toArray();
  37. }
  38. /**
  39. * 检查是否投诉
  40. * @param array $params
  41. * @return array|false|int|string
  42. */
  43. public static function checkComplaint($params)
  44. {
  45. try {
  46. $data['is_issue'] = 0;
  47. $data['is_return'] = 0;
  48. $issue = IssueWork::where(['user_id'=>$params['user_id'],'sn'=>$params['sn']])->findOrEmpty();
  49. if(!$issue->isEmpty()){
  50. $data['is_issue'] = 1;
  51. $data['issue_id'] = $issue['id'];
  52. $return = ReturnWork::where('service_work_id',$issue->service_work_id)->findOrEmpty();
  53. if(!$return->isEmpty()){
  54. $data['is_return'] = 1;
  55. $data['return_id'] = $return['id'];
  56. }
  57. }
  58. return $data;
  59. } catch (\Exception $e) {
  60. Db::rollback();
  61. self::setError($e->getMessage());
  62. return false;
  63. }
  64. }
  65. /**
  66. * 添加
  67. * @param array $params
  68. * @return false|int|string
  69. */
  70. public static function add(array $params)
  71. {
  72. Db::startTrans();
  73. try {
  74. $order = RechargeOrder::where(['sn'=>$params['sn'],'user_id'=>$params['user_id']])->findOrEmpty()->toArray();
  75. if(empty($order)){
  76. throw new Exception('订单错误');
  77. }
  78. $work = ServiceWork::findOrEmpty($order['work_id']);
  79. if($work['work_status']<7){
  80. throw new Exception('订单暂未结束,不允许投诉,请直接联系客服');
  81. }
  82. // 判断是否投诉时效过期
  83. if(strtotime($work['finished_time']) < (time()-86400*7)){
  84. throw new Exception('投诉时效已过');
  85. }
  86. $IssueWork = new IssueWork();
  87. $is_issue_work = $IssueWork->where(['user_id'=>$params['user_id'],'service_work_id'=>$work['id']])->findOrEmpty();
  88. if(!$is_issue_work->isEmpty()){
  89. throw new Exception('已提交投诉,不允许重复提交');
  90. }
  91. $id = $IssueWork->insertGetId([
  92. 'sn' => $params['sn'],
  93. 'work_sn' => $work['work_sn'],
  94. 'service_work_id' => $work['id'],
  95. 'title'=>$work['title'],
  96. 'master_worker_id' => $work['master_worker_id'],
  97. 'complaint_type' => !empty($params['complaint_type'])?json_encode($params['complaint_type']):'',
  98. 'complaint_details' => $params['complaint_details'],
  99. 'complaint_images' => !empty($params['complaint_images']) ? json_encode($params['complaint_images']):'',
  100. 'complaint_mobile'=>$params['complaint_mobile'],
  101. 'user_id'=>$params['user_id'],
  102. 'create_time' => time(),
  103. 'update_time' => time()
  104. ]);
  105. Db::commit();
  106. return $id;
  107. } catch (\Exception $e) {
  108. Db::rollback();
  109. self::setError($e->getMessage());
  110. return false;
  111. }
  112. }
  113. /**
  114. * @notes 获取详情
  115. * @param $params
  116. * @return array
  117. * @author likeadmin
  118. * @date 2024/07/10 15:06
  119. */
  120. public static function detail($params): array
  121. {
  122. $issue_work = IssueWork::where(['id'=>$params['id'],'user_id'=>$params['user_id']])
  123. ->field('sn,sn,title,issue_approval,complaint_type,complaint_details,complaint_images,complaint_mobile,approval_time,finished_time,create_time')
  124. ->append(['issue_approval_text'])
  125. ->findOrEmpty()->toArray();
  126. if(!empty($issue_work)){
  127. $issue_work['complaint_type'] = DictData::where(['type_value'=>'complaint_type','status'=>1])->whereIn('value',$issue_work['complaint_type'])->column('name');
  128. }
  129. return $issue_work;
  130. }
  131. /**
  132. * @notes 完结投诉
  133. * @param $params
  134. * @return array|false
  135. */
  136. public static function complaintComplete($params)
  137. {
  138. try {
  139. $issueWork = IssueWork::where(['user_id'=>$params['user_id'],'id'=>$params['id']])->findOrEmpty();
  140. if($issueWork->isEmpty()){
  141. throw new Exception('投诉不存在');
  142. }
  143. // 投诉完成-质保金可用金额 解冻
  144. if($issueWork->issue_approval != 4 && $issueWork->is_refunded_payment == 1){
  145. $serviceWork = ServiceWork::where('id',$issueWork->service_work_id)->findOrEmpty();
  146. if(!$serviceWork->isEmpty()){
  147. // 查询出该投诉的冻结金额 master_worker_freeze_amount_log issue_work_id master_worker_id
  148. $amount = MasterWorkerFreezeAmountLog::where([
  149. 'action'=>WorkerAccountLogEnum::INC,'source'=>1,
  150. 'issue_work_id'=>$issueWork->id,'master_worker_id'=>$issueWork->master_worker_id])->value('amount');
  151. // 是否存在返修工单?
  152. $work = ReturnWork::where('issue_work_id',$issueWork->id)->findOrEmpty();
  153. if(!$work->isEmpty()){
  154. $work->finished_time = time();
  155. $work->return_work_status = 4;
  156. $work->save();
  157. }
  158. // to_freeze source remark work_id amount worker_id issue_work_id
  159. // 对原工程师的 质保金解冻质保金 / 清零
  160. \app\common\logic\RetentionMoneyLogic::warrantyDepositRelease([
  161. 'to_freeze'=>2,
  162. 'source'=>1,
  163. 'remark'=>'对原工程师的质保金解冻质保金/清零',
  164. 'work_id'=>$issueWork->service_work_id??0,'worker_id'=>$issueWork->master_worker_id,
  165. 'issue_work_id'=>$issueWork->id,
  166. 'amount'=>$amount,
  167. ],false);
  168. }
  169. }
  170. $issueWork->issue_approval = 4;
  171. $issueWork->complaint_status = 2;
  172. $issueWork->responsible = 3;
  173. $issueWork->finished_time = time();
  174. $issueWork->save();
  175. return [];
  176. } catch (\Exception $e) {
  177. self::setError($e->getMessage());
  178. return false;
  179. }
  180. }
  181. }