hospital-applets-api/app/Command/getProductCommand.php

332 lines
12 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Command;
use App\Model\Product;
use App\Model\ProductPlatform;
use App\Utils\Log;
use Extend\Prescription\Prescription;
use Hyperf\Command\Command as HyperfCommand;
use Hyperf\Command\Annotation\Command;
use Hyperf\DbConnection\Db;
use Hyperf\Utils\Coroutine\Concurrent;
use Psr\Container\ContainerInterface;
use Symfony\Component\Console\Input\InputArgument;
/**
* 更新处方平台商品
*/
#[Command]
class getProductCommand extends HyperfCommand
{
public function __construct(protected ContainerInterface $container)
{
parent::__construct('getProduct:command');
}
public function configure()
{
parent::configure();
$this->setDescription('获取处方平台商品数据');
}
// 主逻辑处理
public function handle()
{
$this->line("商品更新开始");
try {
$prescription = new Prescription();
$page = 1;
$page_size = 100;
$result = $prescription->getProd(1, 100);
if (!empty($result['rows'])) {
foreach ($result['rows'] as $item) {
// 执行入库
$this->handleData($item);
}
$count = ceil($result['count'] / ($page * $page_size));
if ($result['count'] > $page * $page_size) {
for ($i = 2; $i < $count; $i++) {
try {
$result = $prescription->getProd($i, $page_size);
if (!isset($result['rows'])) {
continue;
}
foreach ($result['rows'] as $item) {
// 执行入库
$this->handleData($item);
}
} catch (\Exception $e) {
$this->line("部分商品更新失败:" . $e->getMessage());
}
}
}
}
} catch (\Exception $e) {
$this->line("商品更新失败:" . $e->getMessage());
}
$this->line("商品更新成功");
}
/**
* 参数设置
* @return array[]
*/
protected function getArguments(): array
{
return [
// ['sign', InputArgument::REQUIRED, '签名数据']
];
}
/**
* 入库
* @param array $item
* @return bool
*/
protected function handleData(array $item): bool
{
try {
Db::beginTransaction();
if (empty($item['drugCode'])) {
Db::rollBack();
// $this->line("商品更新失败,缺少平台药品编码" . json_encode($item, JSON_UNESCAPED_UNICODE));
return false;
}
if (empty($item['drugPrice'])) {
Db::rollBack();
// $this->line("商品更新失败,缺少药品价格" . json_encode($item, JSON_UNESCAPED_UNICODE));
return false;
}
if (empty($item['thirdCode'])) {
Db::rollBack();
// $this->line("商品更新失败,缺少药品价格" . json_encode($item, JSON_UNESCAPED_UNICODE));
return false;
}
$pharmacy_code = \Hyperf\Config\config("prescription_platform.pharmacy_code");
if (empty($pharmacy_code)) {
$pharmacy_code = "JG-10009";
}
// 非药店编码
if ($pharmacy_code != $item['thirdCode']) {
Db::rollBack();
return false;
}
Log::getInstance("xiaomeiqiu")->info(json_encode($item,JSON_UNESCAPED_UNICODE));
// 查询是否存在
$params = array();
$params['product_platform_code'] = $item['drugCode'];
$product_platform = ProductPlatform::getOne($params);
if (!empty($product_platform)) {
// 已存在,更新
$product_platform_data = array();
$product_data = array();
// 商品名称
if (isset($item['tradeName'])) {
if ($product_platform['product_name'] != $item['tradeName']) {
$product_platform_data['product_name'] = $item['tradeName'];
$product_data['product_name'] = $item['tradeName'];
}
}
// 商品价格
if ($product_platform['product_price'] != $item['drugPrice']) {
$product_platform_data['product_price'] = $item['drugPrice'];
$product_data['product_price'] = $item['drugPrice'];
}
// 药品类型
if (isset($item['drugClassCode'])) {
if ($item['drugClassCode'] == 1) {
$product_type = 1;
} elseif ($item['drugClassCode'] == 2) {
$product_type = 2;
} else {
$product_type = 0;
}
if ($product_platform['product_type'] != $product_type) {
$product_platform_data['product_type'] = $product_type;
$product_data['product_type'] = $product_type;
}
}
// 商品规格
if (isset($item['specifications'])) {
if ($product_platform['product_spec'] != $item['specifications']) {
$product_platform_data['product_spec'] = $item['specifications'];
$product_data['product_spec'] = $item['specifications'];
}
}
// 批准文号
if (isset($item['approvalNumber'])) {
if ($product_platform['license_number'] != $item['approvalNumber']) {
$product_platform_data['license_number'] = $item['approvalNumber'];
$product_data['license_number'] = $item['approvalNumber'];
}
}
// 生产厂家
if (isset($item['manufacturer'])) {
if ($product_platform['manufacturer'] != $item['manufacturer']) {
$product_platform_data['manufacturer'] = $item['manufacturer'];
$product_data['manufacturer'] = $item['manufacturer'];
}
}
// 零售包装单位
if (isset($item['packingUnit'])) {
if ($product_platform['retail_unit'] != $item['packingUnit']) {
$product_platform_data['retail_unit'] = $item['packingUnit'];
$product_data['packaging_unit'] = $item['packingUnit']; // 平台返回零售包装单位为:盒,此结果适用于商品表的基本包装单位
}
}
// 第三方药店商品编码
if (isset($item['thirdDrugCode'])) {
if ($product_platform['product_pharmacy_code'] != $item['thirdDrugCode']) {
$product_platform_data['product_pharmacy_code'] = $item['thirdDrugCode'];
$product_data['product_pharmacy_code'] = $item['thirdDrugCode'];
}
}
// 基本包装数量
if (isset($item['basicPackingCount'])) {
if ($product_platform['packaging_count'] != $item['basicPackingCount']) {
$product_platform_data['packaging_count'] = $item['basicPackingCount'];
}
}
// 基本包装单位
if (isset($item['basicPackingUnit'])) {
if ($product_platform['packaging_unit'] != $item['basicPackingUnit']) {
$product_platform_data['packaging_unit'] = $item['basicPackingUnit'];
}
}
// 单次剂量单位
if (isset($item['defaultSingleDosageUnit'])) {
if ($product_platform['single_unit'] != $item['defaultSingleDosageUnit']) {
$product_platform_data['single_unit'] = $item['defaultSingleDosageUnit'];
}
}
if (!empty($product_platform_data)) {
// 更新商品表-处方平台
$params = array();
$params['product_platform_id'] = $product_platform['product_platform_id'];
ProductPlatform::edit($params, $product_platform_data);
if (!empty($product_data)) {
// 获取商品表数据
$params = array();
$params['product_platform_id'] = $product_platform['product_platform_id'];
$product = Product::getOne($params);
if (!empty($product)) {
// 更新商品表
$params = array();
$params['product_platform_id'] = $product_platform['product_platform_id'];
Product::edit($params, $product_data);
}
}
}
} else {
// 不存在,创建
$data = array();
// 商品名称
if (isset($item['tradeName'])) {
$data['product_name'] = $item['tradeName'];
}
// 商品价格
$data['product_price'] = $item['drugPrice'];
// 药品类型
if (isset($item['drugClassCode'])) {
if ($item['drugClassCode'] == 1) {
$data['product_type'] = 1;
} elseif ($item['drugClassCode'] == 2) {
$data['product_type'] = 2;
} else {
$data['product_type'] = 0;
}
}
// 处方平台商品编码
$data['product_platform_code'] = $item['drugCode'];
// 第三方药店商品编码
if (isset($item['thirdDrugCode'])) {
$data['product_pharmacy_code'] = $item['thirdDrugCode'];
}
// 商品规格
if (isset($item['specifications'])) {
$data['product_spec'] = $item['specifications'];
}
// 批准文号
if (isset($item['approvalNumber'])) {
$data['license_number'] = $item['approvalNumber'];
}
// 生产厂家
if (isset($item['manufacturer'])) {
$data['manufacturer'] = $item['manufacturer'];
}
// 单次剂量单位
if (isset($item['defaultSingleDosageUnit'])) {
$data['single_unit'] = $item['defaultSingleDosageUnit'];
}
// 基本包装单位
if (isset($item['basicPackingUnit'])) {
$data['packaging_unit'] = $item['basicPackingUnit'];
}
// 基本包装数量
if (isset($item['basicPackingCount'])) {
$data['packaging_count'] = $item['basicPackingCount'];
}
// 零售包装单位
if (isset($item['packingUnit'])) {
$data['retail_unit'] = $item['packingUnit'];
}
$product_platform = ProductPlatform::addProductPlatform($data);
if (empty($product_platform)) {
Db::rollBack();
$this->line("商品更新失败:" . json_encode($data, JSON_UNESCAPED_UNICODE));
}
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
$this->line("商品更新失败:" . $e->getMessage());
return false;
}
return true;
}
}