第一次更新,完成了初版调整

This commit is contained in:
2026-09-07 22:05:51 +08:00
parent b5a26a8848
commit 4d6a7e7aac
198 changed files with 6142 additions and 3856 deletions
+2 -42
View File
@@ -224,48 +224,8 @@ class Company extends Controller
*/
public function stock(): Json
{
$arr = $this->postData();
// 商品详情
foreach ((array)$arr as $company_id) {
$company = CompanyModel::detail($company_id);
$IdingjuOil = new IdingjuOil();
$goodsNo = $this->getGoodsNo($company['orgNo']);
$goodsList = GoodsModel::getAll([['goods_no','in',$goodsNo]]);
$canOrderNum = $unUseNum = $useNum = 0;
foreach ($goodsList as $array){
// 对接平台接口
$res = $IdingjuOil->stockList(['goodsNo' => $array['goods_no']], $company);
// 更新记录
if ($res['code'] == '1') {
/*$res['data']['canOrderNum'] = $res['data']['canOrderNum']?:0;
$res['data']['unUseNum'] = $res['data']['unUseNum']?:0;
$res['data']['useNum'] = $res['data']['useNum']?:0;
$canOrderNum += $res['data']['canOrderNum'];
$unUseNum += $res['data']['unUseNum'];
$useNum += $res['data']['useNum'];
Db::name('goods')
->where('goods_id', $array['goods_id'])
->update(['stock_total' => $res['data']['canOrderNum'], 'unUseNum' => $res['data']['unUseNum'], 'useNum' => $res['data']['useNum']]);
Db::name('goods_sku')
->where('goods_id', $array['goods_id'])
->update(['stock_num' => $res['data']['canOrderNum'], 'unUseNum' => $res['data']['unUseNum'], 'useNum' => $res['data']['useNum']]);
*/
$res['data']['quantity'] = $res['data']['quantity']?:0;
$canOrderNum += $res['data']['quantity'];
Db::name('goods')
->where('goods_id', $array['goods_id'])
->update(['stock_total' => $res['data']['quantity']]);
Db::name('goods_sku')
->where('goods_id', $array['goods_id'])
->update(['stock_num' => $res['data']['quantity']]);
}
}
$company->save(['canOrderNum'=>$canOrderNum,'unUseNum'=>$unUseNum,'useNum'=>$useNum]);
}
return $this->renderSuccess($arr);
// 企油通改造:本功能依赖已下线的上游(智慧油客/定聚),现已停用。
return $this->renderError('上游库存同步已停用(企油通无油券库存概念)');
}
}
+2 -11
View File
@@ -183,17 +183,8 @@ class Goods extends Controller
*/
public function onReloadStock(int $goodsId): Json
{
// 商品详情
$model = GoodsModel::detail($goodsId);
$company = CompanyModel::detail(['status'=>10]);
$SybOil = new SybOil();
// 对接平台接口
$res = $SybOil->stockList(['goodsNo' => $model['goods_no']], $company);
// 更新记录
if ($res['code'] == '00') {
return $this->renderSuccess($res['data']);
}
return $this->renderError($model->getError() ?: $res['errMessage']);
// 企油通改造:上游库存同步已停用(企油通无油券库存概念,库存改为平台内部维护)。
return $this->renderError('上游库存同步已停用,请直接在「合作商」中维护可下单额度');
}
/**
+6 -126
View File
@@ -153,47 +153,8 @@ class Order extends Controller
*/
public function cancelShare(): Json
{
$postData = $this->postForm();
$postData['order_goods_id'] = $this->request->param('orderGoodsId');
$order_goods_id = $postData['order_goods_id'];
$password = $postData['password'];
//验证密码
$user = UserModel::detail($this->store['user']['store_user_id']);
if(!password_verify($password, $user['password'])){
return $this->renderError('登录密码错误');
}
$model = OrderGoodsModel::detail($order_goods_id);
if ($model['oil_status'] != 1) {
return $this->renderError('该订单状态不是已分油状态');
}
if ($model['use_status'] != 0) {
return $this->renderError('油卡已核销,无法撤销');
}
$order = OrderModel::detail($model['order_id']);
$company = CompanyModel::detail($model['company_id']);
// 对接平台接口,撤销分油
$res = $this->oilOilCardCancelShare(['shareNo'=>$model['shareNo'],'amount'=>$model['goods_price'],'saleOrderNo'=>$order['order_no'],'type'=>'recovery','oilCardType'=>$model['oilCardType']], $company);
if($res['code'] == '00'){
if ($model->cancelShare($postData)) {
// 更新商户余额(增加)
MerchantModel::setIncBalance((int)$model['merchant_id'], (float)$model['goods_price']);
BalanceLogModel::add(SceneEnum::REFUND, [
'merchant_id' => (int)$model['merchant_id'],
'money' => (float)$model['goods_price'],
], ['saleOrderNo' => $order['order_no']]);
// 更新公司余额(增加)
CompanyModel::setIncBalance((int)$model['company_id'], (float)$model['goods_price']);
CompanyBalanceLogModel::add(SceneEnum::REFUND, [
'company_id' => (int)$model['company_id'],
'money' => (float)$model['goods_price'],
], ['saleOrderNo' => $order['order_no']]);
return $this->renderSuccess('操作成功');
}
return $this->renderError($model->getError() ?: '操作失败');
}else{
return $this->renderError('平台撤销分油失败【'.($res['errMessage'] ?? $res['message']).'】');
}
// 企油通改造:本功能依赖已下线的上游(智慧油客/定聚),现已停用。
return $this->renderError('小程序油品链路已停用');
}
/**
@@ -203,36 +164,8 @@ class Order extends Controller
*/
public function qrCode(): Json
{
$postData = $this->postForm();
$postData['order_goods_id'] = $this->request->param('orderGoodsId');
$orderGoods = OrderGoodsModel::detail($postData['order_goods_id']);
if($orderGoods['use_status'] != 0){
return $this->renderError('油券已核销');
}else {
$company = CompanyModel::detail($orderGoods['company_id']);
$IdingjuOil = new IdingjuOil();
// 对接平台接口
$res = $IdingjuOil->payQrCodeRequest(['order_no'=>$orderGoods['oilCardNo']], $company);
if($res['code'] == '1' && isset($res['data']['useQrCodeUrl'])){
// 插入支付码记录
$QrCodeModel = new QrCodeModel();
$QrCodeModel->add([
'oilCardNo'=>$orderGoods['oilCardNo'],
'qrCode'=>$res['data']['useQrCodeUrl'],
'amount'=>$orderGoods['goods_price'],
'order_id'=>$orderGoods['order_id'],
'user_id'=>$orderGoods['user_id'],
'store_id'=>$orderGoods['store_id'],
]);
$res = [
'qrCode'=>$res['data']['useQrCodeUrl']
];
return $this->renderSuccess($res, '提交成功');
}else{
return $this->renderError($res['errMessage'] ?? $res['message']);
}
}
// 企油通改造:本功能依赖已下线的上游(智慧油客/定聚),现已停用。
return $this->renderError('小程序油品链路已停用');
}
/**
@@ -317,60 +250,7 @@ class Order extends Controller
*/
public function share(): Json
{
$IdingjuOil = new IdingjuOil();
$postData = $this->request->param();
$postData['order_goods_id'] = $this->request->param('orderGoodsId');
$goods = OrderGoodsModel::detail($postData['order_goods_id']);
if($goods['oil_status'] != 0){
return $this->renderError('已分油');
}else {
if($goods['oilCardType']) {
$data['amount'] = $goods['total_price']; // 金额
$company = CompanyModel::detail(['orgNo' => $this->getCompany($goods['goods_no'])]);
if (!$company) {
return $this->renderError('已分油');
}
try {
// 查找一个未被调用的用户
$account = $this->processUserOrders($company['company_id']);
} catch (\Throwable $e) {
return $this->renderError($e->getMessage());
}
// 查询公司余额
/*if ($data['amount'] > $company['balance']) {
$this->error = '公司余额不足';
return false;
}*/
// 对接平台接口
$res = $IdingjuOil->oilOilCardShare([
'goodsNo'=>$goods['goods_no'],
'amount'=>$data['amount'],
'userNo'=>$account['userNo'],
'mobile'=>$account['mobile'],
'saleOrderNo'=>$goods['oilCardNo'],
'oilCardType'=>$goods['oilCardType']
], $company);
//$res = json_decode('{"code":"00","message":"请求成功","errCode":null,"errMessage":null,"data":{"oilCardNo":null,"amount":100,"balance":null,"shareNo":"CDV2408021928160001"}}', true);
if ($res['code'] != 1) {
return $this->renderError($res['errMessage'] ?? $res['message']);
}
$IdingjuOil->saveLogStore("分油接口结果".json_encode($res,320));
$item['account_id'] = $account['account_id'];
$item['userNo'] = $account['userNo'];
$item['mobile'] = $account['mobile'];
$item['company_id'] = $company['company_id'];
$item['shareNo'] = $res['data']['trade_no'] ?? '';
$item['qrCode'] = $res['data']['useUrl'] ?? '';
$item['oil_status_zsy'] = $res['data']['state'] ?? 0;
$item['oil_time'] = time();
$item['oil_status'] = $item['oil_status_zsy'] == 2 ? 1 : 0; // 已发券 为1
$r = $goods->save($item);
$IdingjuOil->saveLogStore("保存分油结果".json_encode($r,320));
return $this->renderSuccess('分油成功');
}
}
// 企油通改造:本功能依赖已下线的上游(智慧油客/定聚),现已停用。
return $this->renderError('小程序油品链路已停用');
}
}
@@ -5,7 +5,6 @@ namespace app\store\controller;
use app\store\controller\Controller;
use app\store\model\Partners as PartnersModel;
use app\store\model\PartnersGoods as PartnersGoodsModel;
use app\store\model\partners\Order as OrderModel;
use app\store\model\store\User;
use think\response\Json;
@@ -94,13 +93,6 @@ class Partners extends Controller
public function detail(int $partnersId): Json
{
$partnersInfo = PartnersModel::detail($partnersId);
// 商品列表
$partnersInfo['goodsList'] = PartnersGoodsModel::getGoodsList($partnersInfo['partners_id']);
// 给每个元素加上 allot_num
foreach ($partnersInfo['goodsList'] as &$item) {
$item['allot_num'] = 0; // 默认值,可以改成其他逻辑
}
unset($item); // 解除引用,避免后续误操作
return $this->renderSuccess(compact('partnersInfo'));
}
+4 -108
View File
@@ -64,40 +64,8 @@ class User extends Controller
*/
public function add()
{
$model = new UserModel;
$data = $this->postForm();
if (empty($data['company_id'])) {
return $this->renderError('请填写分油公司');
}
if (empty($data['merchant_id'])) {
return $this->renderError('请填写商户');
}
if (empty($data['userType'])) {
return $this->renderError('请填写用户角色');
}
if (empty($data['userName'])) {
return $this->renderError('请填写用户姓名');
}
if (empty($data['mobile'])) {
return $this->renderError('请填写用户手机号');
}
if (empty($data['userIdCard'])) {
return $this->renderError('请填写用户身份证号');
}
$company = CompanyModel::detail($data['company_id']);
// 对接平台接口
$res = $this->userOptAdd(['mobile'=>$data['mobile'],'userName'=>$data['userName'],'userIdCard'=>$data['userIdCard'],'userType'=>$data['userType']], $company);
if($res['code'] == '00' && isset($res['data']['userNo'])){
$data['userNo'] = $res['data']['userNo'];
}else{
return $this->renderError('平台创建用户失败【'.($res['errMessage'] ?? $res['message']).'】');
}
// 新增记录
if ($model->add($data,$this->store['user'])) {
return $this->renderSuccess('添加成功');
}
return $this->renderError($model->getError() ?: '添加失败');
// 企油通改造:分油用户池已停用(司机信息改由下单平台随单传入),不再向上游注册用户。
return $this->renderError('分油用户池已停用');
}
/**
@@ -201,80 +169,8 @@ class User extends Controller
*/
public function oil(int $userId, string $target)
{
$data = $this->postForm();
$user = UserModel::detail($userId);
$data['amount'] = $data['amount']??0;
$data['goodsNo'] = $data['goodsNo']??'';
// 用户详情
$model = new OrderModel();
if (empty($data['oilCardType'])) {
return $this->renderError('请填写卡券类型');
}
if ($data['oilCardType'] == 'card' && empty($data['amount'])) {
return $this->renderError('请填写分油金额');
}
if ($data['oilCardType'] != 'card' && empty($data['goods_id'])) {
return $this->renderError('请选择油券');
}
if($data['goods_id']) {
$goods = GoodsModel::detail($data['goods_id']);
$data['goodsNo'] = $goods['goods_no'];
$data['amount'] = $goods['goods_price_max']; // 金额
}
// 查询用户余额
if($data['amount'] > $user['balance']){
return $this->renderError('用户余额不足');
}
$saleOrderNo = OrderService::createOrderNo();
try {
// 查找一个未被调用的用户
$account = $this->processUserOrders();
} catch (Exception $e) {
return $this->renderError($e->getMessage());
}
$company = CompanyModel::detail($account['company_id']);
// 查询公司余额
if($data['amount'] > $company['balance']){
return $this->renderError('公司余额不足');
}
$SybOil = new SybOil();
// 对接平台接口
$res = $SybOil->oilOilCardShare(['goodsNo'=>$data['goodsNo'],'amount'=>$data['amount'],'userNo'=>$account['userNo'],'mobile'=>$account['mobile'],'saleOrderNo'=>$saleOrderNo,'oilCardType'=>$data['oilCardType']], $company);
//$res = json_decode('{"code":"00","message":"请求成功","errCode":null,"errMessage":null,"data":{"oilCardNo":null,"amount":100,"balance":null,"shareNo":"CDV2407271355570001"}}',true);
if($res['code'] == '00'){
$data['saleOrderNo'] = $saleOrderNo;
$data['oilCardNo'] = $data['oilCardType'] == 'zsy_ticket' ? $res['data']['shareNo'] : $res['data']['oilCardNo'];
$data['amount'] = $res['data']['amount'];
$data['shareNo'] = $res['data']['shareNo'] ?? '';
$data['company_id'] = $account['company_id'];
$data['account_id'] = $account['account_id'];
$data['userNo'] = $account['userNo'];
$data['mobile'] = $account['mobile'];
}else{
return $this->renderError('平台分油失败【'.($res['errMessage'] ?? $res['message']).'】');
}
$data['user_id'] = $user['user_id'];
$data['store_id'] = $user['store_id'];
$data['payType'] = 10;
if ($model->addOil($data)) {
// 更新用户余额
UserModel::setDecBalance((int)$user['user_id'], (float)$data['amount']);
BalanceLogModel::add(SceneEnum::CONSUME, [
'user_id' => (int)$user['user_id'],
'money' => -(float)$data['amount'],
], ['saleOrderNo' => $saleOrderNo]);
// 累积用户总消费金额
UserModel::setIncPayMoney($user['user_id'], (float)$data['amount']);
// 更新公司余额
CompanyModel::setDecBalance((int)$user['company_id'], (float)$data['amount']);
CompanyBalanceLogModel::add(SceneEnum::CONSUME, [
'company_id' => (int)$user['company_id'],
'money' => -(float)$data['amount'],
], ['saleOrderNo' => $saleOrderNo]);
return $this->renderSuccess('操作成功');
}
return $this->renderError($model->getError() ?: '操作失败');
// 企油通改造:后台给小程序用户手动分油依赖已下线的上游(智慧油客)+ 分油用户池,现已停用。
return $this->renderError('小程序油品链路已停用');
}
/**
+126 -188
View File
@@ -1,34 +1,31 @@
<?php
// +----------------------------------------------------------------------
// | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
// | 后台 · 下单平台(合作商)订单管理
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2023 https://www.yiovo.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
// +----------------------------------------------------------------------
// | Author: 萤火科技 <admin@yiovo.com>
// | 企油通改造后:
// | list() 订单列表(含企油通批次号/运单号/发放态/加油明细)
// | detail() 订单详情 + 加油消费流水
// | share() 重新发放:把订单打回未提交态并重投 partners_queue,由 7.7 下发
// | qrCode() 获取司机免登加油地址(7.15),出参 qrCode 为 H5 URL
// | oilCallback() / useCallback() 重推「发放/加油」结果给下单平台
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\store\controller\partners;
use app\store\controller\Controller;
use app\store\model\partners\Order as OrderModel;
use app\store\model\Company as CompanyModel;
use app\common\service\IdingjuOil;
use app\store\model\order\QrCode as QrCodeModel;
use app\common\service\PartnersBalance;
use app\common\service\QueueService;
use app\common\service\QytOil;
use app\store\controller\Controller;
use app\store\model\order\QrCode as QrCodeModel;
use app\store\model\partners\Order as OrderModel;
use think\facade\Db;
use think\response\Json;
/**
* 余额明细
* Class Order
* @package app\store\controller\user
*/
class Order extends Controller
{
/**
* 订单明细
* 订单列表
* @return mixed
*/
public function list()
@@ -39,207 +36,148 @@ class Order extends Controller
}
/**
* 获取支付二维码
* 订单详情(含企油通加油消费流水)
* @return Json
*/
public function detail(): Json
{
$orderId = (int) $this->request->param('orderId');
$order = OrderModel::detail($orderId);
if (!$order) {
return $this->renderError('订单不存在');
}
$consume = Db::name('qyt_consume')
->where('order_id', $orderId)
->order('id', 'desc')
->select()
->toArray();
return $this->renderSuccess(['order' => $order, 'consume' => $consume]);
}
/**
* 获取司机免登加油地址(企油通 7.15)
* @return Json
* @throws \think\db\exception\DbException
*/
public function qrCode(): Json
{
$postData = $this->postForm();
$postData['order_id'] = $this->request->param('orderId');
$order = OrderModel::detail($postData['order_id']);
if($order['use_status'] != 0){
return $this->renderError('油券已核销');
}else {
$company = CompanyModel::detail(['orgNo' => $this->getCompany($order['goods_no'])]);
$IdingjuOil = new IdingjuOil();
// 对接平台接口
$res = $IdingjuOil->payQrCodeRequest(['order_no'=>$order['oilCardNo']], $company);
if($res['code'] == '1' && isset($res['data']['useQrCodeUrl'])){
// 插入支付码记录
$QrCodeModel = new QrCodeModel();
$QrCodeModel->add([
'oilCardNo'=>$order['oilCardNo'],
'qrCode'=>$res['data']['useQrCodeUrl'],
'amount'=>$order['goods_price'],
'order_id'=>$order['order_id'],
'user_id'=>0,
'store_id'=>$order['store_id'],
]);
$res = [
'qrCode'=>$res['data']['useQrCodeUrl']
];
return $this->renderSuccess($res, '提交成功');
}else{
return $this->renderError($res['errMessage'] ?? $res['message']);
}
$orderId = (int) $this->request->param('orderId');
$order = OrderModel::detail($orderId);
if (!$order) {
return $this->renderError('订单不存在');
}
if ($order['use_status'] != 0) {
return $this->renderError('该单已加油核销');
}
if ($order['oil_status'] != 1) {
return $this->renderError('该单尚未发放成功,无法获取加油地址');
}
$h5Url = (new QytOil())->h5Url((string) $order['mobile']);
if (!$h5Url) {
return $this->renderError('生成加油地址失败,请检查企油通配置');
}
// 留痕
(new QrCodeModel())->add([
'oilCardNo' => $order['oilCardNo'],
'qrCode' => $h5Url,
'amount' => $order['goods_price'],
'order_id' => $order['order_id'],
'user_id' => 0,
'store_id' => $order['store_id'],
]);
return $this->renderSuccess(['qrCode' => $h5Url], '获取成功');
}
/**
* @param $goodsNo
* @return string
*/
public function getCompany($goodsNo): string
{
switch ($goodsNo) {
case 'djgdface100':
case 'djgdface200':
case 'djgdface300':
return 'umQZhIHKofyA';
case 'jmgxyyface100':
case 'jmgxyyface200':
case 'jmgxyyface300':
case 'jmgzface100':
case 'jmgzface200':
case 'jmgzface300':
case 'jmfjface100':
case 'jmfjface200':
case 'jmfjface300':
return 'HpWqXIgYvTBg';
case 'face003':
return 'NKJBgaaRNdiL'; // 测试参数
default:
return '';
}
}
/**
* 手动分油
* 重新发放(把订单打回未提交态并重投队列,由 partners:queue 调用企油通 7.7)
* @return Json
* @throws \think\db\exception\DbException
*/
public function share(): Json
{
$IdingjuOil = new IdingjuOil();
$postData = $this->request->param();
$postData['order_id'] = $this->request->param('orderId');
$order = OrderModel::detail($postData['order_id']);
if($order['oil_status'] != 0){
return $this->renderError('已分油');
}else {
if($order['oilCardType']) {
$data['amount'] = $order['total_price']; // 金额
$company = CompanyModel::detail(['orgNo' => $this->getCompany($order['goods_no'])]);
if (!$company) {
return $this->renderError('已分油');
}
// 对接平台接口
$res = $IdingjuOil->oilOilCardShare([
'goodsNo'=>$order['goods_no'],
'amount'=>$data['amount'],
'userNo'=>0,
'mobile'=>$order['mobile'],
'saleOrderNo'=>$order['oilCardNo'],
'oilCardType'=>$order['oilCardType']
], $company);
if ($res['code'] != 1) {
return $this->renderError($res['errMessage'] ?? $res['message']);
}
$IdingjuOil->saveLogStore("分油接口结果".json_encode($res,320));
// $item['company_id'] = $company['company_id'];
$item['shareNo'] = $res['data']['trade_no'] ?? '';
$item['qrCode'] = $res['data']['useUrl'] ?? '';
$item['oil_status_zsy'] = $res['data']['state'] ?? 0;
$item['oil_time'] = time();
$item['oil_status'] = $item['oil_status_zsy'] == 2 ? 1 : 0; // 已发券 为1
$r = $order->save($item);
$IdingjuOil->saveLogStore("保存分油结果".json_encode($r,320));
return $this->renderSuccess('分油成功');
}
$orderId = (int) $this->request->param('orderId');
$order = OrderModel::detail($orderId);
if (!$order) {
return $this->renderError('订单不存在');
}
if ($order['oil_status'] == 1) {
return $this->renderError('该单已发放成功,无需重发');
}
if ($order['use_status'] != 0) {
return $this->renderError('该单已加油核销,不可重发');
}
// 发放失败时余额已回补,重发需重新扣减合作商余额
$logId = PartnersBalance::deduct(
(int) $order['partners_id'],
(float) $order['total_price'],
(string) $order['partners_order_no'],
$orderId,
(int) $order['store_id']
);
if ($logId === false) {
return $this->renderError('合作商余额不足,请先充值后再重发');
}
// 仅允许从「发放失败(3)」重置为「未提交(0)」,避免与正在处理的单冲突
$reset = Db::name('partners_order')->where('order_id', $orderId)
->where('oil_status', 0)
->where('oil_status_zsy', 3)
->update(['oil_status_zsy' => 0, 'oil_text' => '后台重新发放', 'update_time' => time()]);
if (!$reset) {
// 状态已被其它进程改变 -> 回补刚扣的余额
PartnersBalance::refund(
(int) $order['partners_id'],
(float) $order['total_price'],
(string) $order['partners_order_no'],
$orderId,
(int) $order['store_id']
);
return $this->renderError('当前状态不允许重发(仅「发放失败」的订单可重发)');
}
(new QueueService())->push('partners_queue', json_encode(['order_id' => $orderId], 320));
return $this->renderSuccess('已提交重新发放,请稍后刷新查看结果');
}
/**
* 分油回调
* 重推「发放结果」给下单平台
* @return Json
* @throws \think\db\exception\DbException
*/
public function oilCallback(): Json
{
/*
$model = new OrderModel;
$list = $model->getAll([
['partners_id', '=', 4],
['oil_status', '=', 1],
['oil_callback', '=', 0],
])->toArray();
$queueService = new QueueService();
foreach ($list as $order){
// 存入队列处理
$queueService->push('notify_queue', json_encode([
'order_id' => $order['order_id'],
'type' => 'add',
'optType' => 'share_oil',
'retry_count' => 0,
], 320));
$orderId = (int) $this->request->param('orderId');
$order = OrderModel::detail($orderId);
if (!$order) {
return $this->renderError('订单不存在');
}
return $this->renderSuccess('回调成功');*/
$postData = $this->request->param();
$postData['order_id'] = $this->request->param('orderId');
$order = OrderModel::detail($postData['order_id']);
if($order['oil_status'] == 0){
return $this->renderError('未分油');
}else {
// 存入队列处理
$queueService = new QueueService();
$queueService->push('notify_queue', json_encode([
'order_id' => $order['order_id'],
'type' => 'add',
'optType' => 'share_oil',
'retry_count' => 0,
], 320));
return $this->renderSuccess('回调成功');
if ($order['oil_status'] != 1) {
return $this->renderError('该单未发放成功,无可回调内容');
}
(new QueueService())->push('notify_queue', json_encode([
'order_id' => $orderId,
'type' => 'add',
'optType' => 'share_oil',
'retry_count' => 0,
], 320));
return $this->renderSuccess('已重新推送发放结果');
}
/**
* 使用回调
* 重推「加油核销」结果给下单平台
* @return Json
* @throws \think\db\exception\DbException
*/
public function useCallback(): Json
{
/*
$model = new OrderModel;
$list = $model->getAll([
['partners_id', '=', 4],
['use_status', '=', 1],
['use_callback', '=', 0],
])->toArray();
$queueService = new QueueService();
foreach ($list as $order){
// 存入队列处理
$queueService->push('notify_queue', json_encode([
'order_id' => $order['order_id'],
'optType' => 'add_oil',
'retry_count' => 0,
], 320));
$orderId = (int) $this->request->param('orderId');
$order = OrderModel::detail($orderId);
if (!$order) {
return $this->renderError('订单不存在');
}
return $this->renderSuccess('回调成功');*/
$postData = $this->request->param();
$postData['order_id'] = $this->request->param('orderId');
$order = OrderModel::detail($postData['order_id']);
if($order['use_status'] == 0){
return $this->renderError('未使用');
}else {
// 通知对接公司
$queueService = new QueueService();
$queueService->push('notify_queue', json_encode([
'order_id' => $order['order_id'],
'optType' => 'add_oil',
'retry_count' => 0,
], 320));
return $this->renderSuccess('回调成功');
if ($order['use_status'] != 1) {
return $this->renderError('该单未加油核销,无可回调内容');
}
(new QueueService())->push('notify_queue', json_encode([
'order_id' => $orderId,
'type' => 'sub',
'optType' => 'add_oil',
'retry_count' => 0,
], 320));
return $this->renderSuccess('已重新推送加油结果');
}
}
-14
View File
@@ -8,10 +8,8 @@ use think\Session;
use app\common\model\Partners as PartnersModel;
use app\store\model\Order as OrderModel;
use app\store\model\store\User as UserModel;
use app\store\model\PartnersGoods as PartnersGoodsModel;
use app\store\model\partners\BalanceLog as BalanceLogModel;
use app\store\model\partners\StockLog as StockLogModel;
use app\store\service\store\User as StoreUserService;
use app\common\enum\partners\balanceLog\Scene as SceneEnum;
use app\common\library\helper;
@@ -51,8 +49,6 @@ class Partners extends PartnersModel
$this->error = '请填写商户名称';
return false;
}
// 检查商品数据
$goodsList = PartnersGoodsModel::checkGoodsData($data['goodsList']);
$this->startTrans();
try {
$data['orgNo'] = $this->createNo();
@@ -75,10 +71,6 @@ class Partners extends PartnersModel
$userModel->save($newData);
// 新增角色关系记录
UserRole::increased((int)$userModel['store_user_id'], [10014]);
// 新增商品关系记录
PartnersGoodsModel::increased((int)$this['partners_id'], $goodsList);
// 新增合作商商品库存变动记录
StockLogModel::increased((int)$this['partners_id'], $goodsList);
$this->commit();
return true;
} catch (\Exception $e) {
@@ -146,16 +138,10 @@ class Partners extends PartnersModel
$this->error = '请填写商户名称';
return false;
}
// 检查商品数据
$goodsList = PartnersGoodsModel::checkGoodsData($data['goodsList']);
$this->startTrans();
try {
// 更新管理员记录
$this->save($data);
// 更新商品关系记录
PartnersGoodsModel::updates((int)$this['partners_id'], $goodsList);
// 新增合作商商品库存变动记录
StockLogModel::increased((int)$this['partners_id'], $goodsList);
$this->commit();
return true;
} catch (\Exception $e) {
@@ -1,85 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2023 https://www.yiovo.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
// +----------------------------------------------------------------------
// | Author: 萤火科技 <admin@yiovo.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\store\model;
use app\common\library\helper;
use app\common\model\PartnersGoods as PartnersGoodsModel;
use cores\exception\BaseException;
/**
* 合作商商品关系模型
* Class PartnersGoods
* @package app\store\model
*/
class PartnersGoods extends PartnersGoodsModel
{
/**
* 验证商品是否合法
* @param array $goodsList
* @throws BaseException
*/
public static function checkGoodsData(array $goodsList)
{
$values = helper::getArrayColumn($goodsList, 'goods_id');
if (count($goodsList) != count(array_unique($values))) {
throwError('很抱歉,不能存在重复的商品 请检查您的选择');
}
foreach ($goodsList as &$item) {
if($item['allot_num'] < 0 && abs($item['allot_num']) > $item['stock_num']){
throwError('很抱歉,分配数量减少不能低于库存数量 请检查您的输入');
}elseif($item['allot_num'] > 100){
throwError('很抱歉,分配数量不能大于100 请检查您的输入');
}
$item['before_num'] = $item['stock_num'];
$item['stock_num'] += $item['allot_num'];
$item['after_num'] = $item['stock_num'];
$item['change_type'] = $item['allot_num'] < 0 ? 2 : 1;
}
unset($item);
return $goodsList;
}
/**
* 批量写入合作商与商品关系记录
* @param int $partnersId
* @param array $goodsList
* @return array|false
*/
public static function increased(int $partnersId, array $goodsList)
{
$dataset = [];
foreach ($goodsList as $item) {
$dataset[] = [
'partners_id' => $partnersId,
'goods_id' => $item['goods_id'],
'stock_num' => $item['stock_num'],
'store_id' => self::$storeId
];
}
return (new static)->addAll($dataset);
}
/**
* 批量更新合作商和商品关系记录
* @param int $partnersId
* @param array $goodsList
* @return array|false
*/
public static function updates(int $partnersId, array $goodsList)
{
// 删除所有的记录
static::deleteAll(['partners_id' => $partnersId]);
// 批量新增记录
return static::increased($partnersId, $goodsList);
}
}
+20 -11
View File
@@ -31,13 +31,13 @@ class Order extends OrderModel
// 设置查询条件
$filter = $this->getFilter($param);
// 先查询总金额
$totalPayPrice = $this->with(['goods.images.file', 'partners'])
$totalPayPrice = $this->with(['partners'])
->alias('order')
->field('order.*')
->where($filter)
->sum('order.total_pay_price');
// 获取列表数据
$list = $this->with(['goods.images.file', 'partners'])
$list = $this->with(['partners'])
->alias('order')
->field('order.*')
->where($filter)
@@ -60,23 +60,32 @@ class Order extends OrderModel
// 设置默认的检索数据
$params = $this->setQueryDefaultValue($param, [
'partners_id' => 0, // 合作商ID
'search' => '', // 用户昵称
'goods_no' => '', // 商品编码
'oil_status' => -1, // 分油状态
'use_status' => -1, // 使用状态
'search' => '', // 司机手机号
'driver_name' => '', // 司机姓名
'orderNo' => '', // 单号:油卡编号/下单平台单号/批次号/运单号
'oil_status' => -1, // 分油(发放)状态
'oil_status_zsy' => -1, // 企油通发放态 0未提交 2成功 3失败
'use_status' => -1, // 加油核销状态
'betweenTime' => [] // 起止时间
]);
// 检索查询条件
$filter = [];
// 合作商ID
$params['partners_id'] > 0 && $filter[] = ['order.partners_id', '=', $params['partners_id']];
// 用户昵称
// 司机手机号
!empty($params['search']) && $filter[] = ['order.mobile', 'like', "%{$params['search']}%"];
// 商品编码
!empty($params['goods_no']) && $filter[] = ['order.goods_no', 'like', "%{$params['goods_no']}%"];
// 分油状态
// 司机姓名
!empty($params['driver_name']) && $filter[] = ['order.driver_name', 'like', "%{$params['driver_name']}%"];
// 单号模糊检索(油卡编号 / 下单平台销售单号 / 企油通批次号 / 运单号)
if (!empty($params['orderNo'])) {
$kw = $params['orderNo'];
$filter[] = ['order.oilCardNo|order.partners_order_no|order.batch_no|order.waybill_no', 'like', "%{$kw}%"];
}
// 分油(发放)状态
$params['oil_status'] > -1 && $filter[] = ['oil_status', '=', (int)$params['oil_status']];
// 使用状态
// 企油通发放态
$params['oil_status_zsy'] > -1 && $filter[] = ['oil_status_zsy', '=', (int)$params['oil_status_zsy']];
// 加油核销状态
$params['use_status'] > -1 && $filter[] = ['use_status', '=', (int)$params['use_status']];
// 起止时间
if (!empty($params['betweenTime'])) {
@@ -1,95 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2023 https://www.yiovo.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
// +----------------------------------------------------------------------
// | Author: 萤火科技 <admin@yiovo.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\store\model\partners;
use app\common\model\partners\StockLog as StockLogModel;
/**
* 合作商商品库存变动明细模型
* Class StockLog
* @package app\store\model\partners
*/
class StockLog extends StockLogModel
{
/**
* 获取合作商商品库存变动明细列表
* @param array $param
* @return \think\Paginator
*/
public function getList(array $param = [])
{
// 设置查询条件
$filter = $this->getFilter($param);
// 获取列表数据
return $this->alias('log')
->field('log.*,partners.name')
->where($filter)
->join('partners', 'partners.partners_id = log.partners_id')
->order(['log.create_time' => 'desc'])
->paginate(15);
}
/**
* 设置查询条件
* @param array $param
* @return array
*/
private function getFilter(array $param): array
{
// 设置默认的检索数据
$params = $this->setQueryDefaultValue($param, [
'partners_id' => 0, // 合作商ID
'search' => '', // 用户昵称
'betweenTime' => [] // 起止时间
]);
// 检索查询条件
$filter = [];
// 用户ID
$params['partners_id'] > 0 && $filter[] = ['log.partners_id', '=', $params['partners_id']];
// 用户昵称
!empty($params['search']) && $filter[] = ['partners.name', 'like', "%{$params['search']}%"];
// 起止时间
if (!empty($params['betweenTime'])) {
$times = between_time($params['betweenTime']);
$filter[] = ['log.create_time', '>=', $times['start_time']];
$filter[] = ['log.create_time', '<', $times['end_time'] + 86400];
}
return $filter;
}
/**
* 批量写入合作商与商品库存变动记录
* @param int $partnersId
* @param array $goodsList
* @return array|false
*/
public static function increased(int $partnersId, array $goodsList)
{
$dataset = [];
foreach ($goodsList as $item) {
if(!empty($item['allot_num'])) {
$dataset[] = [
'partners_id' => $partnersId,
'goods_id' => $item['goods_id'],
'before_num' => $item['before_num'],
'after_num' => $item['after_num'],
'change_type' => $item['change_type'],
'change_num' => $item['allot_num'],
'store_id' => self::$storeId
];
}
}
return (new static)->addAll($dataset);
}
}