RefundCompensate.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\store\controller;
  13. use app\store\model\RefundCompensate as RefundCompensateModel;
  14. use app\store\model\Order as OrderModel;
  15. use app\common\model\OrderGoods as OrderGoodsModel;
  16. use app\common\library\helper;
  17. use app\store\model\OrderRefund as OrderRefundModel;
  18. /**
  19. * 售后补偿单管理
  20. * Class Refund
  21. * @package app\store\controller\order
  22. */
  23. class RefundCompensate extends Controller
  24. {
  25. /**
  26. * 售后单补偿单列表
  27. * @return array
  28. */
  29. public function list()
  30. {
  31. $model = new RefundCompensateModel;
  32. $param = $this->request->param();
  33. $list = $model->getList($param);
  34. return $this->renderSuccess(compact('list'));
  35. }
  36. /**
  37. * 售后单补偿单列表
  38. * @return array
  39. */
  40. public function financelist()
  41. {
  42. $model = new RefundCompensateModel;
  43. $param = $this->request->param();
  44. $list = $model->getFinanceList($param);
  45. return $this->renderSuccess(compact('list'));
  46. }
  47. /**
  48. * 编辑
  49. * @return array
  50. * @throws \think\db\exception\DataNotFoundException
  51. * @throws \think\db\exception\DbException
  52. * @throws \think\db\exception\ModelNotFoundException
  53. */
  54. public function edit()
  55. {
  56. $model = new RefundCompensateModel;
  57. $data = $this->postForm();
  58. $id = $data['id'];
  59. $order_goods_id = $data['order_goods_id'];
  60. if(empty($order_goods_id)){
  61. return $this->renderError("请选择退款商品");
  62. }
  63. $order_good = OrderGoodsModel::find($order_goods_id);
  64. if(empty($order_good)){
  65. return $this->renderError("找不到订单商品");
  66. }
  67. //判断价格
  68. $refundMoney = helper::bcsub($order_good['total_pay_price'] + $order_good['rice_card_money'], 0, 2); // 退款金额 = 实付金额 + 现金卡抵扣金额
  69. if($data['refund_money']>$refundMoney||$data['refund_money']<0){ //比较价格
  70. return $this->renderError('请调整补偿金额后重新提交');
  71. }
  72. $pass_refund_time = false;
  73. $refund_time = $order_good['refund_time'];
  74. if($refund_time>0&&time()>$refund_time){
  75. $pass_refund_time = true;
  76. }
  77. if(!$pass_refund_time){
  78. return $this->renderError('此商品未过售后期');
  79. }
  80. $refund = OrderRefundModel::where(['order_goods_id'=>$data['order_goods_id']])->where('status','in',[0,20])->find();
  81. if($refund){
  82. return $this->renderError('已存在相同售后单');
  83. }
  84. $one = $model->where("order_goods_id",$data['order_goods_id'])->where("order_id",$data['order_id'])->where('status','<>',40)->where('id',"<>",$id)->find();
  85. if($one){
  86. return $this->renderError("同一订单同一商品仅允许完成一笔售后小额打款");
  87. }
  88. $model = $model->where('id',$id)->find();
  89. if($model['audit_status_zg']==10){
  90. return $this->renderError('主管同意不能修改了');
  91. }
  92. if($model['finance_refund']==10){
  93. return $this->renderError('财务已退款不能修改了');
  94. }
  95. $data['audit_status_zg'] =0;
  96. if ($model->edit($data)) {
  97. return $this->renderSuccess('售后单修改成功,等待主管审核');
  98. }
  99. return $this->renderError($model->getError() ?: '添加失败');
  100. }
  101. /**
  102. * 添加
  103. * @return array
  104. * @throws \think\db\exception\DataNotFoundException
  105. * @throws \think\db\exception\DbException
  106. * @throws \think\db\exception\ModelNotFoundException
  107. */
  108. public function add()
  109. {
  110. $model = new RefundCompensateModel;
  111. $data = $this->postForm();
  112. $order_goods_id = $data['order_goods_id'];
  113. if(empty($order_goods_id)){
  114. return $this->renderError("请选择退款商品");
  115. }
  116. $order_good = OrderGoodsModel::find($order_goods_id);
  117. if(empty($order_good)){
  118. return $this->renderError("找不到订单商品");
  119. }
  120. //判断价格
  121. $refundMoney = helper::bcsub($order_good['total_pay_price'] + $order_good['rice_card_money'], 0, 2); // 退款金额 = 实付金额 + 现金卡抵扣金额
  122. if($data['refund_money']>$refundMoney||$data['refund_money']<0){ //比较价格
  123. return $this->renderError('请调整补偿金额后重新提交');
  124. }
  125. $pass_refund_time = false;
  126. $refund_time = $order_good['refund_time'];
  127. if($refund_time>0&&time()>$refund_time){
  128. $pass_refund_time = true;
  129. }
  130. if(!$pass_refund_time){
  131. return $this->renderError('此商品未过售后期');
  132. }
  133. $refund = OrderRefundModel::where(['order_goods_id'=>$data['order_goods_id']])->where('status','in',[0,20])->find();
  134. if($refund){
  135. return $this->renderError('已存在相同售后单');
  136. }
  137. $one = $model->where("order_goods_id",$data['order_goods_id'])->where("order_id",$data['order_id'])->where('status','<>',40)->find();
  138. if($one){
  139. return $this->renderError("同一订单同一商品仅允许完成一笔售后小额打款");
  140. }
  141. if ($model->add($data)) {
  142. return $this->renderSuccess('售后单创建成功,等待主管审核');
  143. }
  144. return $this->renderError($model->getError() ?: '添加失败');
  145. }
  146. /**
  147. * 售后补偿单详情
  148. * @param int $orderRefundId
  149. * @return array
  150. */
  151. public function detail(int $id)
  152. {
  153. // 售后单详情
  154. $model = new RefundCompensateModel;
  155. if (!$detail = $model->getDetail($id,['orderData'=>['goods']])) {
  156. return $this->renderError('未找到该售后单记录');
  157. }
  158. $order_no = OrderModel::where('order_id',$detail['order_id'])->value("order_no")??'';
  159. if(empty($order_no)){
  160. return $this->renderError('未找到订单号');
  161. }
  162. $detail['order_no'] = $order_no;
  163. $newrow = [];
  164. foreach($detail['orderData']['goods'] as &$row){
  165. if($row['goods_type']==20){
  166. // continue;
  167. }
  168. $pass_refund_time = false;
  169. $refund_time = $row['refund_time'];
  170. if($refund_time>0&&time()>$refund_time){
  171. $pass_refund_time = true;
  172. }
  173. $row['pass_refund_time'] = $pass_refund_time;
  174. $refund = OrderRefundModel::where(['order_goods_id'=>$row['order_goods_id']])->find();
  175. $refund_state_text ='-';
  176. $is_refund = false;
  177. $is_refund_close = false;
  178. if($refund){
  179. $is_refund = true;
  180. $refund_state_text = $refund['state_text'];
  181. if($refund['status']==40||$refund['status']==30){
  182. $is_refund_close = true;
  183. }
  184. }
  185. $row['is_refund_close'] = $is_refund_close;
  186. $row['is_refund'] = $is_refund;
  187. $row['refund_state_text'] = $refund_state_text;
  188. // $newrow[] = $row;
  189. }
  190. // $detail['orderData']['goods'] = $newrow;
  191. return $this->renderSuccess(compact('detail'));
  192. }
  193. /**
  194. * 主管审核
  195. * @param int $orderRefundId
  196. * @return array|bool
  197. */
  198. public function auditzg(int $id)
  199. {
  200. // 售后补偿单详情
  201. $model = RefundCompensateModel::detail($id);
  202. if(empty($model)){
  203. return $this->renderError("找不到啊");
  204. }
  205. if($model['status'] == 20) {
  206. return $this->renderError("订单已完成,请不要操作");
  207. }
  208. if($model['finance_refund'] == 10) {
  209. return $this->renderError("售后订单已经退款了,请不要操作");
  210. }
  211. // 确认审核
  212. $postData = $this->postForm();
  213. unset($postData['id']);
  214. $audit_status = $postData['audit_status_zg'];
  215. if($audit_status == 10){
  216. $res = '已审核通过';
  217. }
  218. if($audit_status == 20){
  219. $res = '已拒绝';
  220. }
  221. if ($model->auditzg($postData)) {
  222. return $this->renderSuccess($postData,$res);
  223. }
  224. return $this->renderError($model->getError() ?: '操作失败');
  225. }
  226. //关闭售后补偿单
  227. public function close(int $id){
  228. // 售后单详情
  229. $model = RefundCompensateModel::detail($id);
  230. if(empty($model)){
  231. return $this->renderError('找不到售后补偿单');
  232. }
  233. $postData = $this->postForm('');
  234. unset($postData['id']);
  235. // 关闭售后单
  236. if ($model->close()) {
  237. return $this->renderSuccess(['status'=>40],'售后补偿单已关闭');
  238. }
  239. return $this->renderError($model->getError() ?: '操作失败');
  240. }
  241. /**
  242. * 财务退款
  243. * @param int $orderRefundId
  244. * @return array|bool
  245. */
  246. public function refund(int $id)
  247. {
  248. // 售后单详情
  249. $model = RefundCompensateModel::detail($id);
  250. if(empty($model)){
  251. return $this->renderError('找不到售后补偿单');
  252. }
  253. if($model['audit_status_zg'] != 10) {
  254. return $this->renderError("主管审核通过才能退款");
  255. }
  256. if ($model['finance_refund'] == 10 || $model['status'] == 20) {
  257. return $this->renderError("已完成退款,请勿重复操作");
  258. }
  259. $ret = $model->refund();
  260. // 退款
  261. if ($ret&&empty($model->getError())) {
  262. return $this->renderSuccess('操作成功');
  263. }else{
  264. return $this->renderError($model->getError() ?: '操作失败');
  265. }
  266. }
  267. }