快递订阅数据修改

快递订阅地址
This commit is contained in:
wucongxing 2023-05-22 09:55:34 +08:00
parent d3d5a62fb8
commit 5578850766
6 changed files with 177 additions and 239 deletions

View File

@ -235,7 +235,7 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage
$this->modifyOrderPrescription($data['order_prescription_id'],1); $this->modifyOrderPrescription($data['order_prescription_id'],1);
// 增加上报监管平台表 // 增加上报监管平台表
$res = $this->addReportRegulatory($order_inquiry['order_inquiry_id']); $res = $this->addReportRegulatory($order_inquiry['order_inquiry_id'],$order_prescription['order_prescription_id']);
if (!$res){ if (!$res){
Db::rollBack(); Db::rollBack();
Log::getInstance("queue-AutoPharmacistCaVerify")->error("错误:增加监管平台上报表失败"); Log::getInstance("queue-AutoPharmacistCaVerify")->error("错误:增加监管平台上报表失败");
@ -488,9 +488,10 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage
/** /**
* 增加上报监管平台表 * 增加上报监管平台表
* @param string $order_inquiry_id * @param string $order_inquiry_id
* @param string $order_prescription_id
* @return bool * @return bool
*/ */
protected function addReportRegulatory(string $order_inquiry_id): bool protected function addReportRegulatory(string $order_inquiry_id,string $order_prescription_id): bool
{ {
// 检测是否已添加 // 检测是否已添加
$params = array(); $params = array();
@ -502,6 +503,7 @@ class AutoPharmacistCaVerifyDelayDirectConsumer extends ConsumerMessage
$data = array(); $data = array();
$data['order_inquiry_id'] = $order_inquiry_id; $data['order_inquiry_id'] = $order_inquiry_id;
$data['order_prescription_id'] = $order_prescription_id;
$report_regulatory = ReportRegulatory::addReportRegulatory($data); $report_regulatory = ReportRegulatory::addReportRegulatory($data);
if (empty($report_regulatory)){ if (empty($report_regulatory)){
return false; return false;

View File

@ -46,71 +46,29 @@ class ReportRegulatoryCommand extends HyperfCommand
{ {
$this->line("开始"); $this->line("开始");
// 获取未上传监管平台订单数量 // 获取未上传监管平台订单
$report_regulatory_count = $this->getNotReportRegulatoryCount(); $report_regulatorys = $this->getNotReportRegulatory(0,100);
if ($report_regulatory_count <= 0) { if (empty($report_regulatorys)) {
$this->line("结束:无可执行订单"); $this->line("结束:无可执行订单");
return; return;
} }
for ($i = 0; $i < $report_regulatory_count; $i++) { foreach ($report_regulatorys as $report_regulatory){
// 获取待上报订单 // 获取处方数据
$order_prescription = $this->getOrderPrescription($i); $params = array();
if (empty($order_prescription)) { $params['order_prescription_id'] = $report_regulatory['order_prescription_id'];
$this->line("结束:本轮无可执行订单"); $order_prescription = OrderPrescription::getOne($params);
if (empty($order_prescription)){
// 无处方数据,不处理
continue; continue;
} }
$this->line("开始:" . $order_prescription['order_prescription_id']);
try {
$this->line("信息:检测执行次数");
$res = $this->checkHandleNumber($order_prescription['order_prescription_id']);
} catch (\Exception $e) {
$this->line("错误:" . $e->getMessage());
continue;
}
if (!$res) {
$this->line("错误:超出最大执行次数或检测错误");
Db::beginTransaction();
try {
// 修改为上报失败
$this->line("错误:记录上报失败");
$res = $this->modifyReportRegulatoryInquiry($order_prescription, 2, 1, "超出最大执行次数或检测错误");
if (!$res) {
Db::rollBack();
$this->line("错误:系统错误");
continue;
}
// 修改为上报失败
$this->line("错误:记录上报失败");
$res = $this->modifyReportRegulatoryPrescription($order_prescription, 2, "超出最大执行次数或检测错误");
if (!$res) {
// 记录失败
$this->line("错误:记录失败");
}
Db::commit();
continue;
} catch (\Exception $e) {
Db::rollBack();
$this->line("错误:" . $e->getMessage());
continue;
}
}
$this->line("信息:检测执行次数通过");
// 获取问诊订单数据 // 获取问诊订单数据
$order_inquiry = $this->getOrderInquiry($order_prescription['order_inquiry_id']); $params = array();
$params['order_inquiry_id'] = $order_prescription['order_inquiry_id'];
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) { if (empty($order_inquiry)) {
// 无问诊数据,跳过 // 无处方数据,不处理
$this->line("错误:问诊订单数据为空");
continue; continue;
} }
@ -120,12 +78,35 @@ class ReportRegulatoryCommand extends HyperfCommand
continue; continue;
} }
$this->line("信息:上报监管平台-问诊");
try { $this->line("开始:" . $report_regulatory['report_regulatory_id']);
// 检测问诊是否已经上报监管平台
$res = $this->checkIsReportRegulatoryInquiry($order_prescription['order_inquiry_id']); // 上报问诊
if (!$res) { if ($report_regulatory['report_inquiry_status'] != 1){
$this->line("信息:上报问诊");
try {
$this->line("信息:检测执行次数");
$key = $report_regulatory['report_regulatory_id'] . 'report_inquiry';
$res = $this->checkHandleNumber($key);
if (!$res){
$this->line("错误:超出最大执行次数或检测错误");
$res = $this->modifyReportRegulatoryInquiry($report_regulatory, 2, 1, "超出最大执行次数或检测错误");
if (!$res) {
$this->line("错误:系统错误");
continue;
}
}
$this->line("信息:检测执行次数通过");
} catch (\Exception $e) {
$this->line("错误:" . $e->getMessage());
continue;
}
try {
// 检测患者是否首次问诊 // 检测患者是否首次问诊
$is_first = $this->checkPatientFirstInquiry($order_prescription['patient_id'], $order_prescription['order_prescription_id']); $is_first = $this->checkPatientFirstInquiry($order_prescription['patient_id'], $order_prescription['order_prescription_id']);
@ -136,31 +117,80 @@ class ReportRegulatoryCommand extends HyperfCommand
$res = $this->reportRegulatoryInquiry($report_inquiry_data, $is_first); $res = $this->reportRegulatoryInquiry($report_inquiry_data, $is_first);
if (empty($res)) { if (empty($res)) {
// 上报成功 // 上报成功
$res = $this->modifyReportRegulatoryInquiry($order_prescription, 1, $is_first ? 1 : 2); $res = $this->modifyReportRegulatoryInquiry($report_regulatory, 1, $is_first ? 1 : 2);
if (!$res) { if (!$res) {
// 记录失败 // 记录失败
$this->line("错误:记录失败"); $this->line("错误:上报成功,存储记录失败");
} }
} else { } else {
// 上报失败 // 上报失败
$res = $this->modifyReportRegulatoryInquiry($order_prescription, 2, $is_first ? 1 : 2, $res); $res = $this->modifyReportRegulatoryInquiry($report_regulatory, 2, $is_first ? 1 : 2, $res);
if (!$res) {
// 记录失败
$this->line("错误:上报失败,存储记录失败");
}
}
} catch (\Exception $e) {
$this->line("错误:" . $e->getMessage());
// 上报失败
$res = $this->modifyReportRegulatoryInquiry($report_regulatory, 2, $is_first ? 1 : 2, $e->getMessage());
if (!$res) {
// 记录失败
$this->line("错误:上报失败,存储记录失败");
}
continue;
}
}
// 上报处方
if ($report_regulatory['report_prescription_status'] != 1){
$this->line("信息:上报处方");
try {
$this->line("信息:检测执行次数");
$key = $report_regulatory['report_regulatory_id'] . 'report_prescription';
$res = $this->checkHandleNumber($key);
if (!$res){
// 修改为上报失败
$this->line("错误:超出最大执行次数或检测错误");
$res = $this->modifyReportRegulatoryPrescription($report_regulatory, 2, "超出最大执行次数或检测错误");
if (!$res) { if (!$res) {
// 记录失败 // 记录失败
$this->line("错误:记录失败"); $this->line("错误:记录失败");
} }
} }
$this->line("信息:检测执行次数通过");
} catch (\Exception $e) {
$this->line("错误:" . $e->getMessage());
continue;
} }
} catch (\Exception $e) {
$this->line("错误:" . $e->getMessage());
// 上报失败
$res = $this->modifyReportRegulatoryInquiry($order_prescription, 2, $is_first ? 1 : 2, $e->getMessage());
if (!$res) {
// 记录失败
$this->line("错误:记录失败");
}
continue;
} }
}
for ($i = 0; $i < $report_regulatory_count; $i++) {
$this->line("信息:检测执行次数通过");
$this->line("信息:上报监管平台-处方"); $this->line("信息:上报监管平台-处方");
try { try {
@ -205,72 +235,40 @@ class ReportRegulatoryCommand extends HyperfCommand
$this->line("全部结束"); $this->line("全部结束");
} }
/**
* 获取符合条件的处方订单个数
* @return int
*/
private function getOrderPrescriptionCount(): int
{
$params = array();
$params['pharmacist_audit_status'] = 1;
$prescription_status_params = [2, 3, 4];
return OrderPrescription::getStatusCount($params, $prescription_status_params);
}
/** /**
* 获取符合条件的订单 * 获取符合条件的订单
*/
private function getNotReportRegulatory(int $offset = 0,int $limit = 10)
{
$params = array();
$params[] = ['report_inquiry_int','<',4];
$params[] = ['report_prescription_int','<',4];
$or_params = array();
$or_params['report_inquiry_status'] = 0;
$or_params['report_prescription_status'] = 0;
return ReportRegulatory::getOrStatusLimit($params,$or_params,['*'],$offset,$limit);
}
/**
* 获取符合条件的处方订单
* @param int $offset 起始位置
* @param int $limit 个数
* @return array * @return array
*/ */
private function getOrderPrescription(string|int $offset): array private function getNotReportRegulatory(): array
{ {
$params = array(); $params = array();
$params['pharmacist_audit_status'] = 1; $params[] = ['report_inquiry_int','<',5];
$params[] = ['report_prescription_int','<',5];
$prescription_status_params = [2,3,4]; $report_regulatory = ReportRegulatory::getNotReportList($params,['*']);
$order_prescription = OrderPrescription::getStatusLimit($params,$prescription_status_params,["*"],$offset,1); if (empty($report_regulatory)){
if (empty($order_prescription)){
return []; return [];
}else{
return $report_regulatory->toArray();
} }
$order_prescription = $order_prescription->toArray();
return $order_prescription[0];
} }
/** /**
* 检测执行次数 * 检测执行次数
* @param string $order_prescription_id * @param string $key
* @return bool * @return bool
* @throws ContainerExceptionInterface * @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface * @throws NotFoundExceptionInterface
*/ */
protected function checkHandleNumber(string $order_prescription_id): bool protected function checkHandleNumber(string $key): bool
{ {
try { try {
$redis = $this->container->get(Redis::class); $redis = $this->container->get(Redis::class);
$redis_key = "ReportRegulatoryInquiry" . $order_prescription_id; $redis_key = "ReportRegulatoryInquiry" . $key;
$redis_value = $redis->get($redis_key); $redis_value = $redis->get($redis_key);
if (empty($redis_value)) { if (empty($redis_value)) {
$redis->set($redis_key, 1, 60 * 60 * 24 * 6); $redis->set($redis_key, 1, 60 * 60 * 24 * 10);
return true; return true;
} }
@ -290,45 +288,27 @@ class ReportRegulatoryCommand extends HyperfCommand
} }
/** /**
* 新增/修改 问诊数据 * 修改上报问诊数据
* @param array|object $order_prescription * @param array|object $report_regulatory
* @param int $report_inquiry_status 问诊上报状态0:未上报 1:已上报 2:上报失败) * @param int $report_inquiry_status 问诊上报状态0:未上报 1:已上报 2:上报失败)
* @param int $report_inquiry_type 问诊上报类型1:网络初诊 2:网络复诊) * @param int $report_inquiry_type 问诊上报类型1:网络初诊 2:网络复诊)
* @param string $report_inquiry_fail_reason 问诊上报失败原因 * @param string $report_inquiry_fail_reason 问诊上报失败原因
* @return bool * @return bool
*/ */
private function modifyReportRegulatoryInquiry(array|object $order_prescription, int $report_inquiry_status, int $report_inquiry_type, string $report_inquiry_fail_reason = ""): bool private function modifyReportRegulatoryInquiry(array|object $report_regulatory, int $report_inquiry_status, int $report_inquiry_type, string $report_inquiry_fail_reason = ""): bool
{ {
try { try {
// 检测数据是否存在 // 修改
$params = array(); $params = array();
$params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; $params['report_regulatory_id'] = $report_regulatory['report_regulatory_id'];
$report_regulatory = ReportRegulatory::getOne($params);
if (empty($report_regulatory)) {
// 新增
$data = array();
$data['order_inquiry_id'] = $order_prescription['order_inquiry_id'];
$data['order_prescription_id'] = $order_prescription['order_prescription_id'];
$data['report_inquiry_status'] = $report_inquiry_status;
$data['report_inquiry_type'] = $report_inquiry_type;
$data['report_inquiry_time'] = date('Y-m-d H:i:s', time());
$data['report_inquiry_fail_reason'] = $report_inquiry_fail_reason;
$report_regulatory = ReportRegulatory::addReportRegulatory($data);
if (empty($report_regulatory)) {
return false;
}
} else {
// 修改
$params = array();
$params['order_inquiry_id'] = $order_prescription['order_inquiry_id'];
$data = array(); $data = array();
$data['report_inquiry_status'] = $report_inquiry_status; $data['report_inquiry_status'] = $report_inquiry_status;
$data['report_inquiry_type'] = $report_inquiry_type; $data['report_inquiry_int'] = $report_regulatory['report_inquiry_int'] + 1;
$data['report_inquiry_time'] = date('Y-m-d H:i:s', time()); $data['report_inquiry_type'] = $report_inquiry_type;
$data['report_inquiry_fail_reason'] = $report_inquiry_fail_reason; $data['report_inquiry_time'] = date('Y-m-d H:i:s', time());
ReportRegulatory::edit($params, $data); $data['report_inquiry_fail_reason'] = $report_inquiry_fail_reason;
} ReportRegulatory::edit($params, $data);
} catch (\Exception $e) { } catch (\Exception $e) {
$this->line("失败:" . $e->getMessage()); $this->line("失败:" . $e->getMessage());
return false; return false;
@ -338,42 +318,26 @@ class ReportRegulatoryCommand extends HyperfCommand
} }
/** /**
* 新增/修改 处方数据 * 修改上报处方数据
* @param array|object $order_prescription * @param array|object $report_regulatory
* @param int $report_prescription_status 处方上报状态0:未上报 1:已上报 2:上报失败) * @param int $report_prescription_status 处方上报状态0:未上报 1:已上报 2:上报失败)
* @param string $report_prescription_fail_reason 处方上报失败原因 * @param string $report_prescription_fail_reason 处方上报失败原因
* @return bool * @return bool
*/ */
private function modifyReportRegulatoryPrescription(array|object $order_prescription, int $report_prescription_status, string $report_prescription_fail_reason = ""): bool private function modifyReportRegulatoryPrescription(array|object $report_regulatory, int $report_prescription_status, string $report_prescription_fail_reason = ""): bool
{ {
try { try {
// 检测数据是否存在 // 修改
$params = array(); $params = array();
$params['order_inquiry_id'] = $order_prescription['order_inquiry_id']; $params['report_regulatory_id'] = $report_regulatory['report_regulatory_id'];
$report_regulatory = ReportRegulatory::getOne($params);
if (empty($report_regulatory)) { $data = array();
// 新增 $data['report_prescription_status'] = $report_prescription_status;
$data = array(); $data['report_prescription_int'] = $report_regulatory['report_prescription_int'] + 1;
$data['order_inquiry_id'] = $order_prescription['order_inquiry_id']; $data['report_prescription_time'] = date('Y-m-d H:i:s', time());
$data['order_prescription_id'] = $order_prescription['order_prescription_id']; $data['report_prescription_fail_reason'] = $report_prescription_fail_reason;
$data['report_prescription_status'] = $report_prescription_status; ReportRegulatory::edit($params, $data);
$data['report_prescription_time'] = date('Y-m-d H:i:s', time());
$data['report_prescription_fail_reason'] = $report_prescription_fail_reason;
$report_regulatory = ReportRegulatory::addReportRegulatory($data);
if (empty($report_regulatory)) {
return false;
}
} else {
// 修改
$params = array();
$params['order_inquiry_id'] = $order_prescription['order_inquiry_id'];
$data = array();
$data['report_prescription_status'] = $report_prescription_status;
$data['report_prescription_time'] = date('Y-m-d H:i:s', time());
$data['report_prescription_fail_reason'] = $report_prescription_fail_reason;
ReportRegulatory::edit($params, $data);
}
} catch (\Exception $e) { } catch (\Exception $e) {
$this->line("失败:" . $e->getMessage()); $this->line("失败:" . $e->getMessage());
return false; return false;
@ -382,22 +346,6 @@ class ReportRegulatoryCommand extends HyperfCommand
return true; return true;
} }
/**
* 获取问诊订单数据
* @param string $order_inquiry_id
* @return array
*/
private function getOrderInquiry(string $order_inquiry_id): array
{
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
return [];
}
return $order_inquiry->toArray();
}
/** /**
* 检测问诊订单数据 * 检测问诊订单数据
@ -410,7 +358,7 @@ class ReportRegulatoryCommand extends HyperfCommand
$inquiry_status = [5, 6, 7];// 5:已完成 6:已结束 7:已取消 $inquiry_status = [5, 6, 7];// 5:已完成 6:已结束 7:已取消
if (!in_array($order_inquiry['inquiry_status'], $inquiry_status)) { if (!in_array($order_inquiry['inquiry_status'], $inquiry_status)) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) // 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
$this->line("信息:订单状态未完成-不执行"); $this->line("信息:订单状态未完成,不执行");
return false; return false;
} }
@ -453,47 +401,6 @@ class ReportRegulatoryCommand extends HyperfCommand
return true; return true;
} }
/**
* 检测问诊是否已经上报监管平台
* @param string $order_inquiry_id
* @return bool true:已上报 false:未上报
*/
private function checkIsReportRegulatoryInquiry(string $order_inquiry_id): bool
{
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$report_regulatory = ReportRegulatory::getOne($params);
if (empty($report_regulatory)) {
return false;
}
if ($report_regulatory['report_inquiry_status'] == 1) {
return true;
}
return false;
}
/**
* 检测处方是否已经上报监管平台
* @param string $order_inquiry_id
* @return bool true:已上报 false:未上报
*/
private function checkIsReportRegulatoryPrescription(string $order_inquiry_id): bool
{
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$report_regulatory = ReportRegulatory::getOne($params);
if (empty($report_regulatory)) {
return false;
}
if ($report_regulatory['report_prescription_status'] == 1) {
return true;
}
return false;
}
/** /**
* 获取上报监管数据-问诊 * 获取上报监管数据-问诊

View File

@ -142,6 +142,9 @@ class getPrescriptionOrderStatusCommand extends HyperfCommand
$Kuaidi = new Kuaidi(); $Kuaidi = new Kuaidi();
$Kuaidi->subscribe($result['deliveryId'],$logistics_company_code,$item['consignee_tel']); $Kuaidi->subscribe($result['deliveryId'],$logistics_company_code,$item['consignee_tel']);
// 修改成功时药品订单数据
$this->savePreSuccessOrderStatus($item,$result['deliveryId'],$logistics_company_code,$result['deliveryTime']);
try { try {
// 获取患者数据 // 获取患者数据
$params = array(); $params = array();
@ -161,8 +164,7 @@ class getPrescriptionOrderStatusCommand extends HyperfCommand
} }
} }
// 修改成功时药品订单数据
$this->savePreSuccessOrderStatus($item,$result['deliveryId'],$logistics_company_code,$result['deliveryTime']);
} }
$this->line("获取处方平台订单数据结束:处理完毕"); $this->line("获取处方平台订单数据结束:处理完毕");

View File

@ -44,6 +44,7 @@ use Extend\Prescription\Prescription;
use Extend\RegulatoryPlatform\regulatoryPlatform; use Extend\RegulatoryPlatform\regulatoryPlatform;
use Extend\TencentIm\RecentContact; use Extend\TencentIm\RecentContact;
use Extend\Wechat\Wechat; use Extend\Wechat\Wechat;
use GuzzleHttp\Client;
use Hyperf\Amqp\Producer; use Hyperf\Amqp\Producer;
use Hyperf\Cache\Cache; use Hyperf\Cache\Cache;
use Hyperf\DbConnection\Db; use Hyperf\DbConnection\Db;
@ -335,6 +336,5 @@ class TestController extends AbstractController
public function test_15(){ public function test_15(){
// dump($result);
} }
} }

View File

@ -99,7 +99,7 @@ class ReportRegulatory extends Model
} }
/** /**
* 列表 * 列表-限制数量
* @param array $params * @param array $params
* @param array $or_params * @param array $or_params
* @param array $fields * @param array $fields
@ -115,4 +115,21 @@ class ReportRegulatory extends Model
->limit($limit) ->limit($limit)
->get($fields); ->get($fields);
} }
/**
* 列表
* @param array $params
* @param array $or_params
* @param array $fields
* @return Collection|array
*/
public static function getNotReportList(array $params = [],array $fields = ["*"]): Collection|array
{
return self::where($params)
->Where(function ($query) {
$query->orWhere('report_inquiry_status','!=',1);
$query->orWhere('report_prescription_status','!=',1);
})
->get($fields);
}
} }

View File

@ -23,6 +23,8 @@ class Kuaidi
#[Inject] #[Inject]
protected Client $client; protected Client $client;
protected string $domain_name;
/** /**
* @throws ContainerExceptionInterface * @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface * @throws NotFoundExceptionInterface
@ -31,6 +33,14 @@ class Kuaidi
{ {
$this->container = ApplicationContext::getContainer(); $this->container = ApplicationContext::getContainer();
$this->client = $this->container->get(Client::class); $this->client = $this->container->get(Client::class);
$app_env = config('app_env','dev');
if ($app_env == "prod"){
$this->domain_name = env('DOMAIN_NAME_PROD','https://prod.hospital.applets.igandanyiyuan.com/');
}else{
$this->domain_name = env('DOMAIN_NAME_DEV','https://dev.hospital.applets.igandanyiyuan.com/');
}
} }
/** /**
@ -57,7 +67,7 @@ class Kuaidi
'number' => $logistics_no, // 快递单号 'number' => $logistics_no, // 快递单号
'key' => config("kuaidi100.key"), // 客户授权key 'key' => config("kuaidi100.key"), // 客户授权key
'parameters' => array ( 'parameters' => array (
'callbackurl' => 'http://dev.hospital.applets.igandanyiyuan.com/callback/logistics', // 回调地址 'callbackurl' => $this->domain_name . 'callback/logistics', // 回调地址
'resultv2' => '1', // 行政区域解析 'resultv2' => '1', // 行政区域解析
'phone' => $phone ?: "", // 手机号 'phone' => $phone ?: "", // 手机号
'salt' => config('kuaidi100.salt'), // 签名用字符串 'salt' => config('kuaidi100.salt'), // 签名用字符串