// +---------------------------------------------------------------------- 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; } } }