OrderLogic.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeshop100%开源免费商用商城系统
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | 开源版本可自由商用,可去除界面版权logo
  7. // | 商业版本务必购买商业授权,以免引起法律纠纷
  8. // | 禁止对系统程序代码以任何目的,任何形式的再发布
  9. // | gitee下载:https://gitee.com/likeshop_gitee
  10. // | github下载:https://github.com/likeshop-github
  11. // | 访问官网:https://www.likeshop.cn
  12. // | 访问社区:https://home.likeshop.cn
  13. // | 访问手册:http://doc.likeshop.cn
  14. // | 微信公众号:likeshop技术社区
  15. // | likeshop团队 版权所有 拥有最终解释权
  16. // +----------------------------------------------------------------------
  17. // | author: likeshopTeam
  18. // +----------------------------------------------------------------------
  19. namespace app\openapi\logic\order;
  20. use app\adminapi\logic\distribution\DistributionLogic;
  21. use app\common\{logic\BaseLogic,
  22. model\AfterSale,
  23. model\OrderGoods,
  24. model\User,
  25. model\Order,
  26. enum\PayEnum,
  27. model\UserLevel,
  28. model\UserLabel,
  29. enum\CouponEnum,
  30. model\CouponList,
  31. enum\AccountLogEnum,
  32. model\UserLabelIndex,
  33. logic\AccountLogLogic,
  34. enum\UserTerminalEnum,
  35. service\ConfigService};
  36. use think\facade\Config;
  37. use think\facade\Db;
  38. use think\Model;
  39. /**
  40. * 订单逻辑层
  41. * Class UserLogic
  42. * @package app\adminapi\logic\user
  43. */
  44. class OrderLogic extends BaseLogic
  45. {
  46. /**
  47. * @notes 用户详情
  48. * @param $params array
  49. * @return list array
  50. * @throws \think\db\exception\DataNotFoundException
  51. * @throws \think\db\exception\DbException
  52. * @throws \think\db\exception\ModelNotFoundException
  53. * @author cjhao
  54. * @date 2021/8/18 15:52
  55. */
  56. public function getUserOrderList($params)
  57. {
  58. $where=[];
  59. $order_source = 0;
  60. if(isset($params['type'])) {
  61. if (($params['type']) == 1) {
  62. $order_source =1;
  63. $where['order_source'] = 1; //平台
  64. } else if (($params['type']) == 2) {
  65. $order_source=2;
  66. $where['order_source'] = 2; //线下
  67. }
  68. }
  69. $user_info = User::where(['mobile'=>$params['mobile']])->findOrEmpty();
  70. if($user_info->isEmpty()){
  71. return [];
  72. }
  73. $user_id = $user_info['id'];
  74. $where['user_id'] = $user_id;
  75. $pageNo = 1;
  76. if(isset($params['pageNo']) && !empty($params['pageNo'])){
  77. $pageNo = $params['pageNo']??1; //页码
  78. }
  79. if(isset($params['orderSn']) && !empty($params['orderSn'])){
  80. if($order_source == 1){
  81. $where['sn']=$params['orderSn'];
  82. }else if($order_source == 2){
  83. $where['transaction_id'] = $params['orderSn'];
  84. }else{
  85. $where['sn|transaction_id'] = $params['orderSn'];
  86. }
  87. }
  88. $pageSize = 10; //每页数量
  89. $index = (int)($pageNo-1)*$pageSize;
  90. $order_list = Order::field('id,sn,user_id,order_type,order_status,pay_status,pay_way,pay_time,address,delivery_type,
  91. goods_price,order_amount,discount_amount,member_amount,integral_amount,total_amount,total_num,express_status,confirm_take_time,
  92. create_time,order_source,order_goods')
  93. ->with('user')
  94. ->where($where)->order('id desc')->limit($index,$pageSize)->select()->toArray();
  95. foreach($order_list as &$v){
  96. if($v['order_source'] == 1){
  97. $gwhere['order_id'] = $v['id'];
  98. $order_goods = OrderGoods::field('id,goods_name,goods_snap,goods_num,goods_price,total_price,total_pay_price')->where($gwhere)->select()->toArray();
  99. $order_goods_list =$order_goods;
  100. $v['order_goods'] = $order_goods_list;
  101. }
  102. }
  103. $data['order_count'] = Order::where($where)->count();
  104. $data['order_list'] = $order_list;
  105. $data['page_index'] = $pageNo;
  106. $data['page_num'] = $pageSize;
  107. return $data;
  108. }
  109. /*
  110. *
  111. * 线下订单推送
  112. * */
  113. public function orderPush($params){
  114. outFileLog($params,'orderPush','$params');
  115. $userInfo = User::where(['mobile'=>$params['mobile']])->findOrEmpty();
  116. if($userInfo->isEmpty()){
  117. outFileLog($params,'orderPush','$params');
  118. self::setError('会员数据查询为空');
  119. return false;
  120. }
  121. $order_info = Order::where(['sn'=> $params['orderSn']])->findOrEmpty();
  122. if(!$order_info->isEmpty()){
  123. outFileLog($params,'orderPush','$params');
  124. self::setError('该订单号已存在');
  125. return false;
  126. }
  127. // if($params['pay_way'] == 1) {
  128. // if ($params['order_amount'] > $userInfo['user_money']) {
  129. // outFileLog($params, 'orderPush', '金额不足');
  130. // self::setError('线上会员金额不足以抵扣');
  131. // return false;
  132. // }
  133. // }
  134. $goods_price = 0;
  135. if(isset($params['goods_price']) && !empty($params['goods_price'])){
  136. $goods_price = $params['goods_price'];
  137. }
  138. $order_amount = 0;
  139. if(isset($params['order_amount']) && !empty($params['order_amount'])){
  140. $order_amount = $params['order_amount'];
  141. }
  142. $discount_amount = 0;
  143. // if(isset($params['discount_amount']) && !empty($params['discount_amount'])){
  144. // $discount_amount = $params['discount_amount'];
  145. // }
  146. $member_amount = 0;
  147. if(isset($params['member_amount']) && !empty($params['member_amount'])){
  148. $member_amount = $params['member_amount'];
  149. }
  150. $integral_amount = 0;
  151. // if(isset($params['integral_amount']) && !empty($params['integral_amount'])){
  152. // $integral_amount = $params['integral_amount'];
  153. // }
  154. $total_amount = 0;
  155. if(isset($params['total_amount']) && !empty($params['total_amount'])){
  156. $total_amount = $params['total_amount'];
  157. }
  158. $total_num = 0;
  159. if(isset($params['total_num']) && !empty($params['total_num'])){
  160. $total_num = $params['total_num'];
  161. }
  162. $create_time = time();
  163. if(isset($params['create_time']) && !empty($params['create_time'])){
  164. $create_time = $params['create_time'];
  165. }
  166. $user_id = $userInfo['id'];
  167. $saveData['sn'] = $params['orderSn'];
  168. $saveData['transaction_id'] = $params['orderSn'];
  169. $saveData['user_id'] = $user_id;
  170. $saveData['order_type'] = 1;
  171. // $saveData['pay_way'] =$params['pay_way'];
  172. $saveData['order_terminal'] = 7;
  173. $saveData['order_status'] = 0;
  174. $saveData['pay_status'] = 0;
  175. // $saveData['pay_time'] = $params['create_time'];
  176. $saveData['delivery_type'] = 2;
  177. $saveData['goods_price'] = $goods_price;
  178. $saveData['order_amount'] = $order_amount;
  179. $saveData['discount_amount'] = $discount_amount;
  180. $saveData['member_amount'] = $member_amount;
  181. $saveData['integral_amount'] = $integral_amount;
  182. $saveData['total_amount'] = $total_amount;
  183. $saveData['total_num'] = $total_num;
  184. $saveData['express_status'] = 1;
  185. // $saveData['express_time'] =$params['create_time'];
  186. // $saveData['confirm_take_time'] = $params['create_time'];
  187. $saveData['create_time'] = $create_time;
  188. $saveData['order_source'] = 2;
  189. $saveData['order_goods'] = $params['order_goods'];
  190. $ret = Order::create($saveData);
  191. if($ret) {
  192. // if ($params['pay_way'] == 1) {
  193. // //减少金额
  194. // $userInfo->user_money = $userInfo->user_money - $order_amount;
  195. // $userInfo->save();
  196. //
  197. // //记录用户金额变动记录
  198. // //记录日志
  199. // AccountLogLogic::add($userInfo->id, AccountLogEnum::BNW_DEC_ORDER, AccountLogEnum::DEC, $order_amount, $params['orderSn'], '线下收银台销售扣减用户金额');
  200. // }
  201. }
  202. return true;
  203. }
  204. /*
  205. *
  206. * 订单结算
  207. * */
  208. public function orderPay($params)
  209. {
  210. outFileLog($params, 'orderPay', '$params');
  211. $userInfo = User::where(['mobile' => $params['mobile']])->findOrEmpty();
  212. if ($userInfo->isEmpty()) {
  213. outFileLog($params, 'orderPay', '$params');
  214. self::setError('会员数据查询为空');
  215. return false;
  216. }
  217. $order_info = Order::where(['sn' => $params['orderSn']])->findOrEmpty();
  218. if ($order_info->isEmpty()) {
  219. outFileLog($params, 'orderPay', '订单号查询失败:');
  220. self::setError('订单号查询订单信息失败');
  221. return false;
  222. }
  223. if($order_info['order_status'] == 3){
  224. outFileLog($params, 'orderPay', '订单已支付完成');
  225. self::setError('订单已支付完成');
  226. return false;
  227. }
  228. if ($params['pay_way'] == 1) {
  229. if ($params['pay_money'] > $userInfo['user_money']) {
  230. outFileLog($params, 'orderPay', '会员卡金额不足');
  231. self::setError('线上会员金额不足以支付');
  232. return false;
  233. }
  234. }
  235. $pay_money = round($order_info['offline_pay_money'] + $order_info['offline_pay_user_money'] + $params['pay_money'],2) ;
  236. if($pay_money>$order_info['order_amount']){
  237. outFileLog($params, 'orderPay', '金额超了应付金额');
  238. outFileLog($pay_money, 'orderPay', '金额超了应付金额-$pay_money');
  239. outFileLog($order_info['order_amount'], 'orderPay', '金额超了应付金额-order_amount');
  240. self::setError('订单支付金额错误,总支付金额大于应付金额');
  241. return false;
  242. }
  243. $create_time = time();
  244. if(isset($params['create_time']) && !empty($params['create_time'])){
  245. $create_time = $params['create_time'];
  246. }
  247. if ($params['pay_way'] == 1) {
  248. $order_info->offline_pay_user_money = $params['pay_money'];
  249. $order_info->pay_way = 1;
  250. $order_info->pay_time = $create_time;
  251. $order_info->save();
  252. //减少金额
  253. $userInfo->user_money = $userInfo->user_money - $params['pay_money'];
  254. $userInfo->save();
  255. //记录用户金额变动记录
  256. //记录日志
  257. AccountLogLogic::add($userInfo->id, AccountLogEnum::BNW_DEC_ORDER, AccountLogEnum::DEC, $params['pay_money'], $params['orderSn'], '线下收银台销售扣减用户金额');
  258. }else{
  259. if(empty($order_info['pay_way'])){
  260. $order_info->pay_way = 5;
  261. $order_info->pay_time = $create_time;
  262. }
  263. $order_info->offline_pay_money = $order_info->offline_pay_money + $params['pay_money'];
  264. $order_info->save();
  265. }
  266. if($params['is_pay_end'] == 1){
  267. $order_info->order_status = 3;
  268. $order_info->save();
  269. }
  270. return true;
  271. }
  272. /*
  273. * 新增会员信息
  274. * */
  275. public function orderRefundMoney(array $params):bool{
  276. try {
  277. $mobile = $params['mobile'];
  278. $where['mobile'] = $mobile;
  279. $user_info = User::where($where)->findOrEmpty();
  280. if($user_info->isEmpty()){
  281. outFileLog($params,'orderRefundMoney','会员信息有无');
  282. self::setError('传入的会员信息有误,不存在,请同步');
  283. return false;
  284. }
  285. $refund_money = $params['refund_money'];
  286. if(isset($params['orderSn']) && !empty($params['orderSn'])) {
  287. $order_info = Order::where(['sn' => $params['orderSn']])->findOrEmpty();
  288. if ($order_info->isEmpty()) {
  289. outFileLog($params, 'orderRefundMoney', '传入订单信息有误');
  290. self::setError('传入订单信息有误');
  291. return false;
  292. }
  293. if($order_info['order_amount']<$refund_money){
  294. outFileLog($params, 'orderRefundMoney', '传入退款金额有误');
  295. self::setError('传入退款金额有误');
  296. return false;
  297. }
  298. $afersaleInfo = AfterSale::where(['order_id'=>$order_info['id']])->findOrEmpty();
  299. if(!$afersaleInfo->isEmpty()){
  300. outFileLog($params, 'orderRefundMoney', '已申请售后');
  301. self::setError('该订单号已经售后');
  302. return false;
  303. }
  304. //插入售后表
  305. $afterSale = AfterSale::create([
  306. 'sn' => generate_sn((new AfterSale()), 'sn'),
  307. 'user_id' => $order_info['user_id'],
  308. 'order_id' => $order_info['id'],
  309. 'order_goods_id' => 0,
  310. 'refund_reason' => '线下收银退款-'.$params['remark'],
  311. 'refund_remark' => '收银台系统发起退款',
  312. 'refund_type' => 2,
  313. 'refund_method' => 1,
  314. 'refund_total_amount' =>$refund_money,
  315. 'refund_way' => 1,
  316. 'refund_status' => 3,
  317. 'status' => 2,
  318. 'sub_status' => 21,
  319. ]);
  320. if ($order_info['pay_way'] == 5) {
  321. return true;
  322. } else {
  323. $user_info->user_money = $user_info->user_money + $refund_money;
  324. $user_info->save();
  325. //记录用户金额变动记录
  326. //记录日志
  327. AccountLogLogic::add($user_info->id, AccountLogEnum::BNW_INC_CANCEL_ORDER, AccountLogEnum::INC, $refund_money, $params['orderSn'], '线下收银台退款增加用户金额');
  328. return true;
  329. }
  330. }
  331. outFileLog($params,'orderRefundMoney','传入的订单编号有误');
  332. self::setError('传入的订单编号有误');
  333. return false;
  334. }catch(\Exception $e) {
  335. Db::rollback();
  336. self::setError($e->getMessage());
  337. return false;
  338. }
  339. }
  340. }