request->get('id', ''); $info = ClearClass::getById($id, true); if ($info->ghsShopId != $this->shopId) { util::fail('不是你的结账单'); } if ($info->status != 3) { util::fail('结账单没有取消,不能退钱'); } $addTime = $info->addTime; $addTime = strtotime($addTime); $earTime = strtotime('2025-05-01 00:00:00'); if ($addTime < $earTime) { util::fail('2025.5.1号前的订单,不能退款'); } $shop = $this->shop; $respond = ClearClass::refundMoney($shop, $info); $status = $respond['status']; $msg = $respond['msg']; util::success(['status' => $status], $msg); } //获取客户待结订单明细 ssh 20220926 public function actionGetUnClear() { $get = Yii::$app->request->get(); $customId = $get['customId'] ?? 0; $custom = CustomClass::getById($customId, true); CustomClass::valid($custom, $this->shopId); $info = ClearClass::getByCondition(['customId' => $customId, 'status' => 1], true); if (isset($info->deadline) && $info->deadline < date("Y-m-d H:i:s")) { $n = date("Y-m-d H:i:s"); $info->status = 3; $info->remark = "账单过期,已自动取消,参数:{$info->deadline} {$n}"; $info->save(); util::success(['info' => []]); } util::success(['info' => $info]); } public function actionCancel() { $id = Yii::$app->request->get('id'); $clear = ClearClass::getLockById($id); if (empty($clear)) { util::fail('没有结账信息呢'); } $ghsId = $clear->ghsId ?? 0; $orderSn = $clear->orderSn ?? ''; $ghs = GhsClass::getById($ghsId, true); if (empty($ghs)) { util::fail('没有找到供货商关系'); } if ($ghs->shopId != $this->shopId) { util::fail('不是你的账单哦'); } $staff = $this->shopAdmin; $staffName = $staff->name ?? ''; if ($clear->status == ClearClass::STATUS_HAS_PAY) { util::fail('账单已完成'); } if ($clear->status == ClearClass::STATUS_EXPIRE) { util::fail('账单已取消'); } $ghsShop = $this->shop; $merchantPrivateKeyPath = Yii::getAlias("@vendor/lakala") . '/production/api_private_key.pem'; $lklCertificatePath = Yii::getAlias("@vendor/lakala") . '/production/lkl-apigw-v1.cer'; $params = [ 'appid' => 'OP00002119', 'serial_no' => '018b08cfddbd', 'merchant_no' => $ghsShop->lklSjNo, 'term_no' => $ghsShop->lklScanTermNo, 'merchantPrivateKeyPath' => $merchantPrivateKeyPath, 'lklCertificatePath' => $lklCertificatePath, ]; $laResource = new Lakala($params); // 1. 先查询拉卡拉订单状态,确保未付款成功,防止时序竞争问题 $queryResponse = $laResource->query(['orderSn' => $orderSn]); if (isset($queryResponse['code']) && $queryResponse['code'] == 'BBS00000') { $tradeState = $queryResponse['resp_data']['trade_state'] ?? ''; if ($tradeState == 'SUCCESS') { util::fail('账单已付款成功,不可取消!'); } } // 2. 调用拉卡拉关单,防止后续再次支付成功 $closeParams = [ 'orderSn' => $orderSn, ]; $response = $laResource->close($closeParams); if (isset($response['code']) == false || $response['code'] != 'BBS00000') { $msg = $response['msg'] ?? ''; $code = $response['code'] ?? 0; // 如果拉卡拉明确返回已经支付,则阻断本地状态更新为取消 if (in_array($code, ['BBS11112', 'BBS11113'])) { util::fail('账单在第三方支付渠道已被支付或处理中,无法取消!'); } if (!in_array($code, ['BBS11114'])) { noticeUtil::push("\n花店结账单:" . $orderSn . "\n关单失败了\n{$msg} {$code}", '15280215347'); } } // 收银台关单 $closeParams = ['orderSn' => $orderSn]; $response = $laResource->cashClose($closeParams); if (isset($response['code']) == false || $response['code'] != '000000') { //$msg = $response['msg'] ?? ''; //noticeUtil::push('单号:' . $orderSn . ',关单没有成功(收银台-支付宝),' . $msg, '15280215347'); } // 3. 第三方关单/状态校验通过后,最后才修改并保存本地数据库状态为 STATUS_EXPIRE $clear->status = ClearClass::STATUS_EXPIRE; $clear->remark = "商家取消 " . date("m-d H:i") . ' 操作人 ' . $staffName; $clear->save(); util::complete(); } //城市供货商向基地批发商的结账单 ssh 20220523 public function actionList() { $get = Yii::$app->request->get(); $where = []; if (isset($get['status']) && is_numeric($get['status'])) { $where['status'] = $get['status']; } $ghsId = $get['ghsId'] ?? 0; if (!empty($ghsId)) { $ghs = GhsClass::getById($ghsId, true); GhsClass::valid($ghs, $this->shopId); $where['ghsId'] = $ghsId; } $where['customShopId'] = $this->shopId ?? 0; $list = ClearService::getClearList($where); util::success($list); } //获取基本信息 ssh 20210625 public function actionGetFullInfo() { $id = Yii::$app->request->get('id', ''); $info = clearClass::getById($id); if (isset($info['customShopId']) == false || $info['customShopId'] != $this->shopId) { util::fail('没有权限'); } $respond = ClearClass::getGhsCgInfo($info); util::success($respond); } //客户的结帐单 ssh 20210625 public function actionCustomList() { $get = Yii::$app->request->get(); $where = []; if (isset($get['status']) && is_numeric($get['status'])) { $where['status'] = $get['status']; } $customId = $get['customId'] ?? 0; if (!empty($customId)) { $custom = CustomClass::getById($customId, true); CustomClass::valid($custom, $this->shopId); $where['customId'] = $customId; } $where['ghsShopId'] = $this->shopId ?? 0; $list = ClearService::getClearList($where); $totalAmount = ClearClass::sum(['ghsShopId' => $this->shopId, 'status' => 2, 'customId' => $customId], 'realPrice'); $list['totalAmount'] = floatval($totalAmount); util::success($list); } //获取基本信息 ssh 20210625 public function actionGetCustomFullInfo() { $id = Yii::$app->request->get('id', ''); $info = ClearClass::getById($id); if (isset($info['ghsShopId']) == false || $info['ghsShopId'] != $this->shopId) { util::fail('没有权限'); } $respond = ClearClass::getSaleInfo($info); //分享结账单时,显示的标题里面,如果是首店或总店,不显示店名 $respond['ghsShopName'] = isset($respond['ghsShopName']) && $respond['ghsShopName'] == '总店' ? '' : $respond['ghsShopName']; util::success($respond); } }