555 lines
13 KiB
PHP
Executable File
555 lines
13 KiB
PHP
Executable File
<?php
|
|
|
|
namespace app\farm\model;
|
|
|
|
use app\BaseModel;
|
|
use app\farm\model\BalanceWater;
|
|
use app\farm\model\User;
|
|
use app\publics\model\TmplConfig;
|
|
use app\shop\model\DistributionCash;
|
|
use app\shop\model\IntegralLog;
|
|
use longbingcore\wxcore\PayModel;
|
|
use longbingcore\wxcore\PushMsgModel;
|
|
use think\facade\Db;
|
|
|
|
class ClaimOrder extends BaseModel
|
|
{
|
|
//定义表名
|
|
protected $name = 'lbfarm_claim_order';
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2020-09-29 11:04
|
|
* @功能说明:添加
|
|
*/
|
|
public function dataAdd($data)
|
|
{
|
|
|
|
$data['create_time'] = time();
|
|
|
|
$res = $this->insert($data);
|
|
|
|
return $res;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2020-09-29 11:05
|
|
* @功能说明:编辑
|
|
*/
|
|
public function dataUpdate($dis, $data)
|
|
{
|
|
|
|
$res = $this->where($dis)->update($data);;
|
|
|
|
return $res;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2021-12-14 15:45
|
|
* @功能说明:添加关联
|
|
*/
|
|
public function updateSome($id, $data)
|
|
{
|
|
|
|
$server = new \app\farm\server\Claim();
|
|
|
|
$claim_text_model = new ClaimText();
|
|
|
|
$source_text_model = new LandSourceText();
|
|
|
|
$monitor_text_model = new MonitorText();
|
|
|
|
$server->addObserver($claim_text_model);
|
|
|
|
$server->addObserver($source_text_model);
|
|
|
|
$server->addObserver($monitor_text_model);
|
|
|
|
$server->notify($id, $data);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2020-09-29 11:06
|
|
* @功能说明:列表
|
|
*/
|
|
public function dataList($dis, $page = 10)
|
|
{
|
|
|
|
$data = $this->where($dis)->order('id desc')->paginate($page)->toArray();
|
|
|
|
return $data;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2020-09-29 11:43
|
|
* @功能说明:
|
|
*/
|
|
public function dataInfo($dis)
|
|
{
|
|
|
|
$data = $this->where($dis)->find();
|
|
|
|
return !empty($data) ? $data->toArray() : [];
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2021-12-16 15:39
|
|
* @功能说明:回调
|
|
*/
|
|
public function orderResult($order_code, $transaction_id)
|
|
{
|
|
|
|
$order = $this->dataInfo(['order_code' => $order_code]);
|
|
|
|
if (!empty($order) && $order['pay_type'] == 1) {
|
|
|
|
$update = [
|
|
|
|
'pay_time' => time(),
|
|
|
|
'pay_type' => 2,
|
|
|
|
'transaction_id' => $transaction_id
|
|
];
|
|
|
|
Db::startTrans();
|
|
|
|
$this->dataUpdate(['id' => $order['id']], $update);
|
|
//扣除余额
|
|
if ($order['balance'] > 0) {
|
|
|
|
$water_model = new BalanceWater();
|
|
|
|
$res = $water_model->addWater($order, 2, 0);
|
|
|
|
if ($res == 0) {
|
|
|
|
Db::rollback();
|
|
|
|
}
|
|
}
|
|
//添加流水
|
|
$water_model = new FinanceWater();
|
|
|
|
$water_model->addWater($order['id'], 1, 1, 1);
|
|
|
|
$integral_model = new IntegralLog();
|
|
//增加佣金
|
|
$integral_model->integralUserAdd($order['user_id'], $order['get_integral'], $order['uniacid'], 2, 5, $order['id'], 0, $order);
|
|
//分销
|
|
$cash_model = new DistributionCash();
|
|
//增加分销激励
|
|
$cash_model->addUserCash($order, 3);
|
|
//分销到账
|
|
$cash_model->cashArrival($order, 3);
|
|
|
|
$collage_model = new CollageStart();
|
|
//拼团
|
|
$collage_model->atvResult($order['id']);
|
|
|
|
Db::commit();
|
|
|
|
$sys_model = new PushMsgModel($order['uniacid']);
|
|
|
|
$sys_model->sendMsg($order, 8);
|
|
|
|
$sys_model->sendMsg($order, 10);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2021-04-01 10:13
|
|
* @功能说明:超时自动退款
|
|
*/
|
|
public function autoCancelOrder($uniacid, $user_id = 0)
|
|
{
|
|
|
|
$dis[] = ['uniacid', '=', $uniacid];
|
|
|
|
$dis[] = ['pay_type', '=', 1];
|
|
|
|
$dis[] = ['over_time', '<', time()];
|
|
|
|
if (!empty($user_id)) {
|
|
|
|
$dis[] = ['user_id', '=', $user_id];
|
|
}
|
|
|
|
$order = $this->where($dis)->select()->toArray();
|
|
|
|
if (!empty($order)) {
|
|
|
|
foreach ($order as $value) {
|
|
|
|
$this->cancelOrder($value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2021-04-01 10:13
|
|
* @功能说明:退款
|
|
*/
|
|
public function cancelOrder($order, $refund = 1, $payConfig = [])
|
|
{
|
|
|
|
Db::startTrans();
|
|
|
|
if ($refund == 2) {
|
|
|
|
$res = $this->refundCash($payConfig, $order);
|
|
|
|
if ($res != true) {
|
|
|
|
Db::rollback();
|
|
|
|
return ['code' => 500, 'msg' => '退款失败'];
|
|
}
|
|
|
|
} else {
|
|
//取消订单
|
|
$collage_model = new CollageStart();
|
|
|
|
$collage_model->cancelOrderAtvFail($order['id']);
|
|
|
|
}
|
|
|
|
$res = $this->dataUpdate(['id' => $order['id'], 'pay_type' => $refund], ['pay_type' => -1, 'cancel_time' => time(), 'ear_tag' => null, 'ear_tag_code' => null]);
|
|
|
|
if ($res != 1) {
|
|
|
|
Db::rollback();
|
|
|
|
return ['code' => 500, 'msg' => '取消失败'];
|
|
}
|
|
|
|
$claim_model = new Claim();
|
|
|
|
$claim = $claim_model->dataInfo(['id' => $order['goods_id']]);
|
|
//加销量减库存
|
|
$update = [
|
|
|
|
'stock' => $claim['stock'] + $order['num'],
|
|
|
|
'sale_num' => $claim['sale_num'] - $order['num'],
|
|
|
|
'lock' => $claim['lock'] + 1
|
|
|
|
];
|
|
|
|
$res = $claim_model->dataUpdate(['id' => $claim['id'], 'lock' => $claim['lock']], $update);
|
|
|
|
if ($res == 0) {
|
|
|
|
Db::rollback();
|
|
|
|
return ['code' => 500, 'msg' => '取消失败'];
|
|
|
|
}
|
|
|
|
$specInfo = ClaimSpec::find($order['spec_id']);
|
|
if ($specInfo) {
|
|
$specInfo['stock'] = $specInfo['stock'] + $order['num'];
|
|
$specInfo->save();
|
|
}
|
|
|
|
$earInfo = ClaimEarTag::find($order['ear_tag']);
|
|
if ($earInfo) {
|
|
$earInfo['status'] = 0;
|
|
$earInfo->save();
|
|
}
|
|
|
|
Db::commit();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2022-08-18 13:53
|
|
* @功能说明:退钱
|
|
*/
|
|
public function refundCash($payConfig, $pay_order)
|
|
{
|
|
|
|
if ($pay_order['pay_price'] <= 0) {
|
|
|
|
return true;
|
|
}
|
|
|
|
$water_model = new FinanceWater();
|
|
|
|
$water_model->addWater($pay_order['id'], 2, 1, 1);
|
|
|
|
if ($pay_order['pay_model'] == 1) {
|
|
//微信退款
|
|
$response = orderRefundApi($payConfig, $pay_order['pay_price'], $pay_order['pay_price'], $pay_order['transaction_id']);
|
|
//如果退款成功修改一下状态
|
|
if (isset($response['return_code']) && isset($response['result_code']) && $response['return_code'] == 'SUCCESS' && $response['result_code'] == 'SUCCESS') {
|
|
|
|
$response['out_refund_no'] = !empty($response['out_refund_no']) ? $response['out_refund_no'] : $pay_order['order_code'];
|
|
|
|
$this->dataUpdate(['id' => $pay_order['id']], ['out_refund_no' => $response['out_refund_no']]);
|
|
|
|
} else {
|
|
//失败就报错
|
|
$discption = !empty($response['err_code_des']) ? $response['err_code_des'] : $response['return_msg'];
|
|
|
|
return ['code' => 500, 'msg' => $discption];
|
|
|
|
}
|
|
|
|
} elseif ($pay_order['pay_model'] == 2) {
|
|
|
|
$data = [
|
|
|
|
'user_id' => $pay_order['user_id'],
|
|
|
|
'pay_price' => $pay_order['pay_price'],
|
|
|
|
'id' => $pay_order['id'],
|
|
|
|
'uniacid' => $pay_order['uniacid']
|
|
];
|
|
|
|
$water_model = new \app\farm\model\BalanceWater();
|
|
|
|
$res = $water_model->addWater($data, 13, 1);
|
|
|
|
if ($res == 0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else {
|
|
//支付宝
|
|
$pay_model = new PayModel($payConfig);
|
|
|
|
$res = $pay_model->aliRefund($pay_order['transaction_id'], $pay_order['pay_price']);
|
|
|
|
if (isset($res['alipay_trade_refund_response']['code']) && $res['alipay_trade_refund_response']['code'] == 10000) {
|
|
|
|
$this->dataUpdate(['id' => $pay_order['id']], ['out_refund_no' => $res['alipay_trade_refund_response']['out_trade_no']]);
|
|
|
|
} else {
|
|
|
|
return ['code' => 500, 'msg' => $res['alipay_trade_refund_response']['sub_msg']];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @param $dis
|
|
* @param int $page
|
|
* @功能说明:后台下单列表
|
|
* @author chenniang
|
|
* @DataTime: 2022-02-16 14:05
|
|
*/
|
|
public function adminDataList($dis, $page = 10)
|
|
{
|
|
|
|
$data = $this->alias('a')
|
|
->join('lbfarm_order_address b', 'a.id = b.order_id AND b.type=2', 'left')
|
|
->where($dis)
|
|
->field('a.*,b.user_name,b.mobile')
|
|
->group('a.id')
|
|
->order('a.id desc')
|
|
->paginate($page)
|
|
->toArray();
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* @param $dis
|
|
* @param int $page
|
|
* @功能说明:后台下单列表
|
|
* @author chenniang
|
|
* @DataTime: 2022-02-16 14:05
|
|
*/
|
|
public function adminDataSelect($dis, $page = 10)
|
|
{
|
|
|
|
$data = $this->alias('a')
|
|
->join('lbfarm_order_address b', 'a.id = b.order_id AND b.type=2', 'left')
|
|
->where($dis)
|
|
->field('a.*,b.user_name,b.mobile')
|
|
->group('a.id')
|
|
->order('a.id desc')
|
|
->select()
|
|
->toArray();
|
|
|
|
return $data;
|
|
}
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2022-02-24 16:46
|
|
* @功能说明:预支付信息
|
|
*/
|
|
public function payOrderInfo($input, $is_err = 0)
|
|
{
|
|
|
|
$claim_model = new Claim();
|
|
|
|
$data = $claim_model->dataInfo(['id' => $input['claim_id'], 'status' => 1]);
|
|
|
|
$input['num'] = !empty($input['num']) ? $input['num'] : 1;
|
|
|
|
$specModel = new ClaimSpec();
|
|
|
|
$specInfo = $specModel->getSpecInfo($input['spec_id']);
|
|
$data['stock'] = $specInfo['stock'];
|
|
$data['price'] = $specInfo['price'];
|
|
|
|
|
|
if (empty($data)) {
|
|
|
|
return ['code' => 500, 'msg' => '该产品已下架'];
|
|
}
|
|
|
|
if ($data['stock'] < $input['num'] && $is_err == 1) {
|
|
|
|
return ['code' => 500, 'msg' => '该产品库存不足'];
|
|
}
|
|
|
|
if ($data['end_time'] < time() && $is_err == 1) {
|
|
|
|
return ['code' => 500, 'msg' => '该产品认养期已结束'];
|
|
|
|
}
|
|
|
|
$data['pay_price'] = round($data['price'] * $input['num'], 2);
|
|
|
|
$pay_price = $data['init_price'] = $data['pay_price'];
|
|
|
|
if (!empty($input['coupon_id']) && empty($input['collage_start_id'])) {
|
|
|
|
$coupon_record_model = new CouponRecord();
|
|
|
|
$coupon = $coupon_record_model->dataInfo(['id' => $input['coupon_id'], 'is_claim' => 1, 'status' => 1]);
|
|
|
|
if (!empty($coupon) && $coupon['full'] <= $data['pay_price']) {
|
|
|
|
$data['pay_price'] -= $coupon['discount'];
|
|
|
|
} else {
|
|
|
|
$coupon = [];
|
|
}
|
|
|
|
}
|
|
//发起拼团
|
|
if (!empty($input['collage_start_id'])) {
|
|
|
|
$collage_model = new ClaimCollage();
|
|
|
|
$data['collage_start_data'] = $collage_model->getAtvInfo($input['collage_start_id'], $input['claim_id']);
|
|
|
|
if (!empty($data['collage_start_data'])) {
|
|
|
|
$data['pay_price'] = $data['collage_start_data']['price'];
|
|
}
|
|
//参与拼团
|
|
} elseif (!empty($input['collage_join_id'])) {
|
|
|
|
$collage_model = new CollageStart();
|
|
|
|
$data['collage_join_data'] = $collage_model->getAtvInfo($input['collage_join_id'], $input['claim_id']);
|
|
|
|
if (!empty($data['collage_join_data'])) {
|
|
|
|
$data['pay_price'] = $data['collage_join_data']['price'];
|
|
}
|
|
|
|
}
|
|
|
|
$data['pay_price'] = $data['pay_price'] > 0 ? $data['pay_price'] : 0;
|
|
|
|
$data['pay_price'] = round($data['pay_price'], 2);
|
|
|
|
$data['coupon_discount'] = !empty($coupon) ? $coupon['discount'] : 0;
|
|
|
|
$data['coupon_discount'] = $data['coupon_discount'] < $pay_price ? $data['coupon_discount'] : $pay_price;
|
|
|
|
$data['coupon_discount'] = round($data['coupon_discount'], 2);
|
|
|
|
$data['coupon_id'] = !empty($coupon) ? $coupon['id'] : 0;
|
|
|
|
return $data;
|
|
}
|
|
|
|
|
|
/**
|
|
* @author chenniang
|
|
* @DataTime: 2022-03-09 17:45
|
|
* @功能说明:认养发送可配送提醒
|
|
*/
|
|
public function claimSendNotice($uniacid)
|
|
{
|
|
|
|
$push_model = new PushMsgModel($uniacid);
|
|
|
|
$dis[] = ['pay_type', '>', 1];
|
|
|
|
$dis[] = ['have_notice', '=', 0];
|
|
|
|
$dis[] = ['end_time', '<', time()];
|
|
|
|
$list = $this->where($dis)->select()->toArray();
|
|
|
|
if (!empty($list)) {
|
|
|
|
foreach ($list as $value) {
|
|
|
|
$this->dataUpdate(['id' => $value['id']], ['have_notice' => 1]);
|
|
|
|
$push_model->sendMsg($value, 7);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
}
|