新增 迁移历史订单 脚本

This commit is contained in:
wucongxing8150 2024-04-08 20:38:19 +08:00
parent 8b37043113
commit ffeda6b0d8
2 changed files with 606 additions and 1 deletions

View File

@ -0,0 +1,586 @@
<?php
declare(strict_types=1);
namespace App\Command;
use App\Model\Order;
use App\Model\OrderCoupon;
use App\Model\OrderDetection;
use App\Model\OrderDetectionRefund;
use App\Model\OrderInquiry;
use App\Model\OrderInquiryCoupon;
use App\Model\OrderInquiryRefund;
use App\Model\OrderProduct;
use App\Model\OrderProductCoupon;
use App\Model\OrderProductRefund;
use App\Model\OrderRefund;
use Hyperf\Command\Command as HyperfCommand;
use Hyperf\Command\Annotation\Command;
use Hyperf\DbConnection\Db;
use Psr\Container\ContainerInterface;
/**
* 迁移订单
*/
#[Command]
class MoveOrderCommand extends HyperfCommand
{
public function __construct(protected ContainerInterface $container)
{
parent::__construct('MoveOrder:command');
}
public function configure()
{
parent::configure();
$this->setDescription('迁移历史订单');
}
public function handle()
{
$this->line("开始");
// 处理问诊订单
// $this->handleOrderInquiry();
// 处理问诊订单退款
// $this->handleOrderInquiryRefund();
// 处理问诊订单优惠卷
// $this->handleOrderInquiryCoupon();
// 处理药品订单
// $this->handleOrderProduct();
// 处理药品订单退款
// $this->handleOrderProductRefund();
// 处理药品订单优惠卷
// $this->handleOrderProductCoupon();
// 处理检测订单
// $this->handleOrderDetection();
// 处理检测订单退款
// $this->handleOrderDetectionRefund();
}
/**
* 处理问诊订单
* @return void
*/
public function handleOrderInquiry(): void
{
$params = array();
$order_inquirys = OrderInquiry::getList($params);
if (empty($order_inquirys)){
$this->line("无问诊订单需要执行");
return;
}
foreach ($order_inquirys as $order_inquiry){
if (!empty($order_inquiry['order_id'])){
// 已存在订单id跳过
continue;
}
$params = array();
$params['order_no'] = $order_inquiry['inquiry_no'];
$order = Order::getOne($params);
if (!empty($order)){
// 已存在订单,跳过
continue;
}
Db::beginTransaction();
try {
// 生成订单表
$data = array();
$data['user_id'] = $order_inquiry['user_id'];
$data['patient_id'] = $order_inquiry['patient_id'];
if (!empty($order_inquiry['doctor_id'])){
$data['doctor_id'] = $order_inquiry['doctor_id'];
}
$data['order_type'] = 1;
$data['is_delete'] = $order_inquiry['is_delete']; // 删除状态0:否 1:是)
$data['pay_channel'] = $order_inquiry['inquiry_pay_channel'];
$data['pay_status'] = $order_inquiry['inquiry_pay_status'];
$data['pay_time'] = $order_inquiry['pay_time'];
$data['refund_status'] = $order_inquiry['inquiry_refund_status'];
$data['order_no'] = $order_inquiry['inquiry_no'];
$data['escrow_trade_no'] = $order_inquiry['escrow_trade_no'];
$data['amount_total'] = $order_inquiry['amount_total'];
$data['coupon_amount_total'] = $order_inquiry['coupon_amount_total'];
$data['payment_amount_total'] = $order_inquiry['payment_amount_total'];
if ($order_inquiry['inquiry_status'] == 7){
$data['cancel_status'] = 1;
}
$data['cancel_time'] = $order_inquiry['cancel_time'];
if (!empty($order_inquiry['cancel_reason'])){
$data['cancel_remarks'] = inquiryCancelReasonToString($order_inquiry['cancel_reason']);
}
$order = Order::addOrder($data);
if (empty($order)) {
Db::rollBack();
$this->line("添加问诊订单失败");
}
// 修改问诊订单表
$data = array();
$data['order_id'] = $order['order_id'];
$params = array();
$params['inquiry_no'] = $order['order_no'];
OrderInquiry::edit($params,$data);
Db::commit();
}catch (\Throwable $e){
Db::rollBack();
$this->line($e->getMessage());
}
}
}
/**
* 处理问诊订单退款
* @return void
*/
public function handleOrderInquiryRefund(): void
{
$params = array();
$order_inquiry_refunds = OrderInquiryRefund::getList($params);
if (empty($order_inquiry_refunds)){
$this->line("无问诊退款订单需要执行");
return;
}
foreach ($order_inquiry_refunds as $order_inquiry_refund){
$params = array();
$params['order_no'] = $order_inquiry_refund['inquiry_no'];
$order_refund = OrderRefund::getOne($params);
if (!empty($order_refund)){
// 已存在订单,跳过
continue;
}
// 获取订单数据
$params = array();
$params['order_no'] = $order_inquiry_refund['inquiry_no'];
$order = Order::getOne($params);
if (empty($order)){
// 已存在订单,跳过
$this->line("无对应订单数据");
continue;
}
Db::beginTransaction();
try {
// 生成订单表
$data = array();
$data['order_id'] = $order['order_id'];
$data['patient_id'] = $order_inquiry_refund['patient_id'];
$data['order_no'] = $order['order_no'];
$data['refund_no'] = $order_inquiry_refund['inquiry_refund_no'];
$data['refund_id'] = $order_inquiry_refund['refund_id'];
$data['refund_status'] = $order_inquiry_refund['inquiry_refund_status'];
$data['refund_total'] = $order_inquiry_refund['refund_total'];
$data['refund_reason'] = $order_inquiry_refund['refund_reason'];
$data['success_time'] = $order_inquiry_refund['success_time'];
$order_refund = OrderRefund::addOrderRefund($data);
if (empty($order_refund)) {
Db::rollBack();
$this->line("添加问诊退款订单失败");
}
Db::commit();
}catch (\Throwable $e){
Db::rollBack();
$this->line($e->getMessage());
}
}
}
/**
* 处理问诊订单优惠卷
* @return void
*/
public function handleOrderInquiryCoupon(): void
{
$params = array();
$order_inquiry_coupons = OrderInquiryCoupon::getList($params);
if (empty($order_inquiry_coupons)){
$this->line("无问诊订单优惠卷需要执行");
return;
}
foreach ($order_inquiry_coupons as $order_inquiry_coupon){
// 获取问诊订单详情
$params = array();
$params['order_inquiry_id'] = $order_inquiry_coupon['order_inquiry_id'];
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
$this->line("问诊订单数据错误");
continue;
}
// 获取订单数据
$params = array();
$params['order_no'] = $order_inquiry['inquiry_no'];
$order = Order::getOne($params);
if (empty($order)){
$this->line("无对应订单数据");
continue;
}
Db::beginTransaction();
try {
// 生成订单表
$data = array();
$data['order_id'] = $order['order_id'];
$data['user_coupon_id'] = $order_inquiry_coupon['user_coupon_id'];
$data['coupon_name'] = $order_inquiry_coupon['coupon_name'];
$data['coupon_use_price'] = $order_inquiry_coupon['coupon_use_price'];
$order_coupon = OrderCoupon::addOrderCoupon($data);
if (empty($order_coupon)) {
Db::rollBack();
$this->line("添加问诊订单优惠卷失败");
}
Db::commit();
}catch (\Throwable $e){
Db::rollBack();
$this->line($e->getMessage());
}
}
}
/**
* 处理药品订单
* @return void
*/
public function handleOrderProduct(): void
{
$params = array();
$order_products = OrderProduct::getList($params);
if (empty($order_products)){
$this->line("无药品订单需要执行");
return;
}
foreach ($order_products as $order_product){
if (!empty($order_product['order_id'])){
// 已存在订单id跳过
continue;
}
$params = array();
$params['order_no'] = $order_product['order_product_no'];
$order = Order::getOne($params);
if (!empty($order)){
// 已存在订单,跳过
continue;
}
// 获取问诊订单数据
$params = array();
$params['order_inquiry_id'] = $order_product['order_inquiry_id'];
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
$this->line("无问诊订单数据");
continue;
}
Db::beginTransaction();
try {
// 生成订单表
$data = array();
$data['user_id'] = $order_inquiry['user_id'];
$data['patient_id'] = $order_product['patient_id'];
$data['doctor_id'] = $order_product['doctor_id'];
$data['order_type'] = 2;
$data['is_delete'] = $order_product['is_delete']; // 删除状态0:否 1:是)
$data['pay_channel'] = $order_product['pay_channel'];
$data['pay_status'] = $order_product['pay_status'];
$data['pay_time'] = $order_product['pay_time'];
$data['refund_status'] = $order_product['refund_status'];
$data['order_no'] = $order_product['order_product_no'];
$data['escrow_trade_no'] = $order_product['escrow_trade_no'];
$data['amount_total'] = $order_product['amount_total'];
$data['coupon_amount_total'] = $order_product['coupon_amount_total'];
$data['payment_amount_total'] = $order_product['payment_amount_total'];
if ($order_inquiry['order_product_status'] == 5){
$data['cancel_status'] = 1;
}
$data['cancel_time'] = $order_product['cancel_time'];
$data['cancel_remarks'] = $order_product['cancel_remarks'];
$order = Order::addOrder($data);
if (empty($order)) {
Db::rollBack();
$this->line("添加药品订单失败");
}
// 修改药品订单表
$data = array();
$data['order_id'] = $order['order_id'];
$params = array();
$params['order_product_no'] = $order['order_no'];
OrderProduct::edit($params,$data);
Db::commit();
}catch (\Throwable $e){
Db::rollBack();
$this->line($e->getMessage());
}
}
}
/**
* 处理药品订单退款
* @return void
*/
public function handleOrderProductRefund(): void
{
$params = array();
$order_product_refunds = OrderProductRefund::getList($params);
if (empty($order_product_refunds)){
$this->line("无问诊退款订单需要执行");
return;
}
foreach ($order_product_refunds as $order_product_refund){
$params = array();
$params['order_no'] = $order_product_refund['order_product_no'];
$order_refund = OrderRefund::getOne($params);
if (!empty($order_refund)){
// 已存在订单,跳过
continue;
}
// 获取订单数据
$params = array();
$params['order_no'] = $order_product_refund['order_product_no'];
$order = Order::getOne($params);
if (empty($order)){
// 已存在订单,跳过
$this->line("无对应订单数据");
continue;
}
Db::beginTransaction();
try {
// 生成订单表
$data = array();
$data['order_id'] = $order['order_id'];
$data['patient_id'] = $order_product_refund['patient_id'];
$data['order_no'] = $order['order_no'];
$data['refund_no'] = $order_product_refund['order_product_no'];
$data['refund_id'] = $order_product_refund['refund_id'];
$data['refund_status'] = $order_product_refund['product_refund_status'];
$data['refund_total'] = $order_product_refund['refund_total'];
$data['refund_reason'] = $order_product_refund['refund_reason'];
$data['success_time'] = $order_product_refund['success_time'];
$order_refund = OrderRefund::addOrderRefund($data);
if (empty($order_refund)) {
Db::rollBack();
$this->line("添加药品退款订单失败");
}
Db::commit();
}catch (\Throwable $e){
Db::rollBack();
$this->line($e->getMessage());
}
}
}
/**
* 处理药品订单优惠卷
* @return void
*/
public function handleOrderProductCoupon(): void
{
$params = array();
$order_product_coupons = OrderProductCoupon::getList($params);
if (empty($order_product_coupons)){
$this->line("无药品订单优惠卷需要执行");
return;
}
foreach ($order_product_coupons as $order_product_coupon){
// 获取问诊订单详情
$params = array();
$params['order_product_id'] = $order_product_coupon['order_product_id'];
$order_product = OrderProduct::getOne($params);
if (empty($order_product)){
$this->line("药品订单数据错误");
continue;
}
// 获取订单数据
$params = array();
$params['order_no'] = $order_product['order_product_no'];
$order = Order::getOne($params);
if (empty($order)){
$this->line("无对应订单数据");
continue;
}
Db::beginTransaction();
try {
// 生成订单表
$data = array();
$data['order_id'] = $order['order_id'];
$data['user_coupon_id'] = $order_product_coupon['user_coupon_id'];
$data['coupon_name'] = $order_product_coupon['coupon_name'];
$data['coupon_use_price'] = $order_product_coupon['coupon_use_price'];
$order_coupon = OrderCoupon::addOrderCoupon($data);
if (empty($order_coupon)) {
Db::rollBack();
$this->line("添加问诊订单优惠卷失败");
}
Db::commit();
}catch (\Throwable $e){
Db::rollBack();
$this->line($e->getMessage());
}
}
}
/**
* 处理检测订单
* @return void
*/
public function handleOrderDetection(): void
{
$params = array();
$order_detections = OrderDetection::getList($params);
if (empty($order_detections)){
$this->line("无检测订单需要执行");
return;
}
foreach ($order_detections as $order_detection){
if (!empty($order_detection['order_id'])){
// 已存在订单id跳过
continue;
}
$params = array();
$params['order_no'] = $order_detection['detection_no'];
$order = Order::getOne($params);
if (!empty($order)){
// 已存在订单,跳过
continue;
}
Db::beginTransaction();
try {
// 生成订单表
$data = array();
$data['user_id'] = $order_detection['user_id'];
$data['patient_id'] = $order_detection['patient_id'];
$data['doctor_id'] = $order_detection['doctor_id'];
$data['order_type'] = 3;
$data['is_delete'] = $order_detection['is_delete']; // 删除状态0:否 1:是)
$data['pay_channel'] = $order_detection['detection_pay_channel'];
$data['pay_status'] = $order_detection['detection_pay_status'];
$data['pay_time'] = $order_detection['pay_time'];
$data['refund_status'] = $order_detection['detection_refund_status'];
$data['order_no'] = $order_detection['detection_no'];
$data['escrow_trade_no'] = $order_detection['escrow_trade_no'];
$data['amount_total'] = $order_detection['amount_total'];
$data['coupon_amount_total'] = $order_detection['coupon_amount_total'];
$data['payment_amount_total'] = $order_detection['payment_amount_total'];
if ($order_detection['detection_status'] == 5){
$data['cancel_status'] = 1;
}
$data['cancel_time'] = $order_detection['cancel_time'];
if (!empty($order_detection['cancel_reason'])){
$data['cancel_remarks'] = detectionCancelReasonToString($order_detection['cancel_reason']);
}
$order = Order::addOrder($data);
if (empty($order)) {
Db::rollBack();
$this->line("添加检测订单失败");
}
// 修改检测订单表
$data = array();
$data['order_id'] = $order['order_id'];
$params = array();
$params['detection_no'] = $order['order_no'];
OrderDetection::editOrderDetection($params,$data);
Db::commit();
}catch (\Throwable $e){
Db::rollBack();
$this->line($e->getMessage());
}
}
}
/**
* 处理检测订单退款
* @return void
*/
public function handleOrderDetectionRefund(): void
{
$params = array();
$order_detection_refunds = OrderDetectionRefund::getList($params);
if (empty($order_detection_refunds)){
$this->line("无检测退款订单需要执行");
return;
}
foreach ($order_detection_refunds as $order_detection_refund){
$params = array();
$params['order_no'] = $order_detection_refund['detection_no'];
$order_refund = OrderRefund::getOne($params);
if (!empty($order_refund)){
// 已存在订单,跳过
continue;
}
// 获取订单数据
$params = array();
$params['order_no'] = $order_detection_refund['detection_no'];
$order = Order::getOne($params);
if (empty($order)){
// 已存在订单,跳过
$this->line("无对应订单数据");
continue;
}
Db::beginTransaction();
try {
// 生成订单表
$data = array();
$data['order_id'] = $order['order_id'];
$data['patient_id'] = $order_detection_refund['patient_id'];
$data['order_no'] = $order['order_no'];
$data['refund_no'] = $order_detection_refund['detection_refund_no'];
$data['refund_id'] = $order_detection_refund['refund_id'];
$data['refund_status'] = $order_detection_refund['detection_refund_status'];
$data['refund_total'] = $order_detection_refund['refund_total'];
$data['refund_reason'] = $order_detection_refund['refund_reason'];
$data['success_time'] = $order_detection_refund['success_time'];
$order_refund = OrderRefund::addOrderRefund($data);
if (empty($order_refund)) {
Db::rollBack();
$this->line("添加检测退款订单失败");
}
Db::commit();
}catch (\Throwable $e){
Db::rollBack();
$this->line($e->getMessage());
}
}
}
}

View File

@ -196,7 +196,7 @@ function inquiryCancelReasonToString(int|string $cancel_reason): string
} elseif ($cancel_reason == 5) { } elseif ($cancel_reason == 5) {
$result = "支付超时"; $result = "支付超时";
} else { } else {
$result = "未知"; $result = NULL;
} }
return $result; return $result;
} }
@ -245,6 +245,25 @@ function productCancelReasonToString(int|string $cancel_reason): string
return $result; return $result;
} }
/**
* 转换检测订单取消原因-字符串
* @param int|string $cancel_reason 取消订单原因1:主动取消 2:客服取消 3:支付超时)
* @return string
*/
function detectionCancelReasonToString(int|string $cancel_reason): string
{
if ($cancel_reason == 1) {
$result = "主动取消";
} elseif ($cancel_reason == 2) {
$result = "客服取消";
} elseif ($cancel_reason == 3) {
$result = "支付超时";
} else {
$result = "";
}
return $result;
}
/** /**
* 转换性别至字符串 * 转换性别至字符串
* @param string|int $sex * @param string|int $sex