setDescription('获取处方平台商品库存数据'); } public function handle() { $this->line("商品库存更新开始"); try { // 获取商品 $params = array(); $product = Product::getPage($params,['*'],1,10); if (empty($product['data'])){ $this->line("商品库存更新成功,无可更新库存商品"); return; } $prescription = new Prescription(); foreach ($product['data'] as $item){ if (!empty($item['product_pharmacy_code'])){ $result = $prescription->getProdStock($item['product_pharmacy_code']); $this->handleData($item['product_platform_id'],$item['product_platform_code'],$result[0]); } } if ($product['last_page'] > 1){ for ($i = 2; $i <= $product['last_page']; $i++) { // 获取商品 $params = array(); $product = Product::getPage($params,['*'],$i,10); if (empty($product['data'])){ $this->line("商品库存更新成功,无可更新库存商品"); return; } $prescription = new Prescription(); foreach ($product['data'] as $item){ if (!empty($item['product_pharmacy_code'])){ $result = $prescription->getProdStock($item['product_pharmacy_code']); $this->handleData($item['product_platform_id'],$item['product_platform_code'],$result[0]); } } } } } catch (\Exception $e) { $this->line("商品库存更新失败:" . $e->getMessage()); } $this->line("商品库存更新成功"); } /** * 入库 * @param string $product_platform_id * @param string $product_platform_code * @param array $resultData * @return bool */ public function handleData(string $product_platform_id,string $product_platform_code,array $resultData): bool { if (empty($resultData['quantity'])){ $resultData['quantity'] = 0; } try { Db::beginTransaction(); // 当前库存数量 $stock = 0; $params = array(); $params['product_platform_id'] = $product_platform_id; $params['product_platform_code'] = $product_platform_code; $product_platform_amount = ProductPlatformAmount::getSharedLockOne($params); if (empty($product_platform_amount)){ // 无库存数据,新增 $data = array(); $data['product_platform_id'] = $product_platform_id; $data['product_platform_code'] = $product_platform_code; $data['stock'] = $resultData['quantity']; $product_platform_amount = ProductPlatformAmount::addProductPlatformAmount($data); if (empty($product_platform_amount)){ Db::rollBack(); $this->line("商品库存更新失败,无法新增库存数据" . json_encode($data, JSON_UNESCAPED_UNICODE)); } }else{ $stock = $product_platform_amount['stock']; // 存在库存数据,修改 $data = array(); $data['stock'] = $resultData['quantity']; $params = array(); $params['amount_id'] = $product_platform_amount['amount_id']; ProductPlatformAmount::edit($params,$data); } // 获取商品数据 $params = array(); $params['product_platform_id'] = $product_platform_id; $product = Product::getOne($params); if (!empty($product)){ // 增加库存记录 $data = array(); $data['product_id'] = $product['product_id']; $data['change_quantity'] = $resultData['quantity'] - $stock; // 库存变动的数量 变动的库存-原库存 $data['quantity'] = $resultData['quantity']; // 变动后库存数量 $data['change_time'] = date('Y-m-d H:i:s',time()); $data['remark'] = "库存同步"; $product_amount_record = ProductAmountRecord::addProductAmountRecord($data); if (empty($product_amount_record)){ Db::rollBack(); $this->line("商品库存更新失败,增加库存记录失败" . json_encode($data, JSON_UNESCAPED_UNICODE)); } } Db::commit(); } catch (\Throwable $e) { Db::rollBack(); $this->line("商品库存更新失败:" . $e->getMessage()); return false; } return true; } }