123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- namespace app\api\model\order;
- use app\api\model\member\GoldRice as GoldRiceModel;
- use app\common\service\Order;
- use app\common\enum\OrderType as OrderTypeEnum;
- use app\api\model\User as UserModel;
- use app\api\model\Order as OrderModel;
- use app\common\model\OrderGoods as OrderGoodsModel;
- use app\common\enum\order\OrderSource as OrderSourceEnum;
- use app\common\enum\order\PayStatus as PayStatusEnum;
- use app\common\enum\order\OrderStatus as OrderStatusEnum;
- use app\common\enum\order\DeliveryType as DeliveryTypeEnum;
- use app\api\model\Goods as GoodsModel;
- use app\api\model\GoodsSku as GoodsSkuModel;
- use app\common\enum\order\PayType as OrderPayTypeEnum;
- use app\common\library\helper;
- use app\common\model\OrderAddress as OrderAddressModel;
- use app\common\service\goods\source\Factory as StockFactory;
- use think\facade\Db;
- use app\api\model\card\UserRiceCard as UserRiceCardModel;
- use app\api\model\card\UserRiceCardConsume as UserRiceCardConsumeModel;
- use app\api\model\subscribe\WechatSub;
- use app\common\service\commission\RecordWaitCommission;
- use app\api\model\za\ZaActivityRelation;
- class ZaPay implements IOrder {
- private $error = '';
- public function getError(){
- return $this->error;
- }
- public function prePay($args){
- }
- //重新支付
- public function repay($args){
- }
- //回调逻辑处理
- public function notifyPay($pay_data){
- $order_no = $pay_data['out_trade_no'];
- $model = OrderModel::getPayDetail($order_no);
- if(empty($model)){
- return false;
- }
- //已支付
- if($model['pay_status']==20){
- return false;
- }
-
- $user = UserModel::detail($model['user_id']);
- // Db::startTrans();
- $res = $model->transaction(function () use ($model,$pay_data,$user) {
- $model->save([
- 'pay_status'=> 20,
- 'pay_time' => time(),
- 'transaction_id'=>$pay_data['transaction_id']??''
- ]
- );
- //写入金米粒记录
- $this->writeUserGoldRice($model);
- $this->writeUserRiceCard($model);//写入金米粒逻辑
-
- $order_id = $model['order_id'];
- ZaActivityRelation::where("order_id",$order_id)->update(['is_pay'=>1]);
- return true;
- });
- return $res;
- }
- /**
- * 写入金米粒记录
- * @param int $payType
- * @return false|int
- * @throws \Exception
- */
- private function writeUserGoldRice($model)
- {
- if($model['gold_rice_amount']>0){
- //写金米粒出账记录
- GoldRiceModel::add($model['user_id'],$model['order_no'],'下单抵扣',$model['gold_rice_amount'],0);
- //扣除冻结中的金米粒
- UserModel::setDecByField($model['user_id'],'gold_rice_frozen',(float)$model['gold_rice_amount']);
- }
- }
- /**
- * 写入米卡记录
- * @param int $payType
- * @return false|int
- * @throws \Exception
- */
- private function writeUserRiceCard($help){
- if($help['rice_card_id']>0){
- //写现金卡出账记录
- $userRiceCard = UserRiceCardModel::find($help['rice_card_id']);
- UserRiceCardConsumeModel::add($userRiceCard,$help['order_no'],$help['pay_money'],$help['rice_card_money']);
- //如果可用余额为0并且冻结余额等于要抵扣的金额
- if($userRiceCard['balance']==0 && $help['rice_card_money']==$userRiceCard['frozen_amount']){
- //现金卡直接减冻结余额,并且状态改为已失效
- UserRiceCardModel::setIncDecByField($help['rice_card_id'],[],['frozen_amount'=>(float)$help['rice_card_money']],['effect_state'=>2]);
- }else{
- //现金卡直接减冻结余额
- UserRiceCardModel::setDecByField($help['rice_card_id'],'frozen_amount',(float)$help['rice_card_money']);
- }
- }
- }
- }
|