123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- <?php
- // +----------------------------------------------------------------------
- // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
- // +----------------------------------------------------------------------
- // | Author: 萤火科技 <admin@yiovo.com>
- // +----------------------------------------------------------------------
- declare (strict_types = 1);
- namespace app\common\service;
- use app\api\model\card\UserRiceCard as UserRiceCardModel;
- use app\common\model\user\CommissionsDetail;
- use app\common\enum\order\OrderStatus as OrderStatusEnum;
- use app\common\model\ConfigPercent as ConfigPercentModel;
- use app\common\model\OrderGoods as OrderGoodsModel;
- use app\store\model\User as UserModel;
- use app\store\model\UserCoupon as UserCouponModel;
- use app\common\model\Order as OrderModel;
- use app\common\service\goods\source\Factory as FactoryStock;
- use app\common\enum\order\OrderSource;
- /**
- * 订单服务类
- * Class Order
- * @package app\common\service
- */
- class Order extends BaseService
- {
- /**
- * 生成订单号
- * @return string
- */
- public static function createOrderNo($prefix='rw')
- {
- return $prefix.date('Ymd') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
- }
- /**
- * 生成核销码
- * 生成规则:1Q6A3nr96D0b4B0599
- * @return string
- */
- public static function createHxCode($prefix='')
- {
- // return $prefix.date('Ymd') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
- // $len = 8;
- // $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
- // $string=(string)time();
- // for(;$len>=1;$len--)
- // {
- // $position=rand()%strlen($chars);
- // $position2=rand()%strlen($string);
- // $string=substr_replace($string,substr($chars,$position,1),$position2,0);
- // }
- $string = uniqid($prefix);
- return $string;
- }
- /**
- * 生成订单号
- * @return string
- */
- public static function createOrderNoPrefix($prefix='rw')
- {
- // $env = env('APP_ENV','product')??'product';
- $env = '';
- return $env.$prefix.date('YmdHis') . substr(implode(NULL, array_map('ord', str_split(strrev(substr(uniqid(), 7, 13)), 1))), 0, 6);
- }
- /**
- * 事件:订单取消
- * @param OrderModel $order
- */
- public static function cancelEvent(OrderModel $order)
- {
- // 回退商品库存
- FactoryStock::getFactory($order['order_source'])->backGoodsStock($order, true);
- // 回退多个活动的活动库存
- if($order['order_source']==OrderSource::MASTER){
- FactoryStock::getFactory($order['order_source'])->backActivityStock($order, true);
- }
-
- // 回退用户优惠券
- $order['coupon_id'] > 0 && UserCouponModel::setIsUse($order['coupon_id'], false);
- //回退福利状态zq
- if ($order['coupon_id'] > 0)UserCouponModel::setWelfareStatus((int)$order['couponId'],0);
- // 回退用户积分
- if ($order['points_num'] > 0) {
- $describe = "订单取消:{$order['order_no']}";
- UserModel::setIncPoints($order['user_id'], $order['points_num'], $describe);
- }
- //回退冻结中的金米粒
- $order['gold_rice_amount'] > 0 && UserModel::setIncDecByField($order['user_id'],['gold_rice'=>(float)$order['gold_rice_amount']],['gold_rice_frozen'=>(float)$order['gold_rice_amount']]);
- // 回退冻结的现金卡
- $order['rice_card_id'] > 0 && UserRiceCardModel::setIncDecByField($order['rice_card_id'],['balance'=>(float)$order['rice_card_money']],['frozen_amount'=>(float)$order['rice_card_money']]);
- }
- /**
- * 计算平台让利的 分润金额
- * @param $orderGoods
- * @return float|int
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- * @author: zjwhust
- * @Time: 2021/10/12 11:22
- */
- public static function getPoolMoney($orderGoods){
- //获取平台让利比例
- $percents = (new ConfigPercentModel)->find(1);
- $ticketRate = $percents->ticket_rate;
- $platformRate = $percents->platform_rate;
- //每笔订单 分给推广者(门店 、 消费者)的总佣金 = (售价 - 结算价 - 发票税费金额 ) * 平台让利比例;
- $poolMoney = $orderGoods['total_pay_price'] - $orderGoods['clearing_price']*$orderGoods['total_num'] - $orderGoods['total_pay_price']*$ticketRate/100;
- if($orderGoods['platform_rate'] > 0){
- $platformRate = $orderGoods['platform_rate'];
- }
- return $poolMoney*$platformRate/100;
- }
- //关闭订单状态
- public function closeOrder($order_id){
- //判断订单下面的商品是否都已全额退款
- $count = OrderGoodsModel::where('order_id',$order_id)->where('has_refund_full',0)->where('goods_type','<>',20)->count();
- if(!$count){
- //订单修改成已关闭
- OrderModel::updateBase(['order_status' => OrderStatusEnum::CLOSE, 'finished_refund' => 1], ['order_id'=>$order_id]);
- //全部退款的订单分佣记录变更不结算v1.3.92
- CommissionsDetail::updateAllDetails($order_id);
- return true;
- }
- }
- }
|