objDPurchase = new DPurchase('stock'); $this->objDPurchaseOut = new DPurchaseOut('stock'); $this->objDInventoryOut = new DInventoryOut('stock'); $this->objDPay = new DPay('finance'); $this->objDPayReceiptIndex = new DPayReceiptIndex('finance'); //$this->objDPay->setSearchIndex('should_pay_receipt_search')->setType('should_pay_receipt'); } /** * 检测销售出库单是否都生成应收单了 */ public function checkSaleOutCreateReceivable() { } /** * 采购入库单生成应付单 */ public function createPayable($params) { if (empty($params)) { echo '请求创建应付单参数为空'.PHP_EOL; return false; } if (empty($params['type'])) { echo '生成应付单:type字段错误,请提供单据类型'.PHP_EOL; return false; } $payableExtraData = []; $purchaseData = []; $payableData = []; //采购入库生成应付 if($params['type'] == StatusCode::$orderType['purchaseIn']) { // 查询采购单信息 $this->objDPurchase->setTable($this->objDPurchase->get_Table() . '_' . $params['enterpriseId']); $purchaseData = $this->objDPurchase->get(['id'=>$params['id']]); if($purchaseData === false){ echo 'sql错误'.$this->objDPurchase->error().PHP_EOL; return false; } if (empty($purchaseData)) { echo '采购订单id:' . $params['id'] . '的数据为空'.PHP_EOL; return false; } // 获取入库金额生成应付 $objDInventoryInDetails = new DInventoryInDetails('stock'); $objDInventoryInDetails->setTable('qianniao_inventory_in_details_'.$params['enterpriseId']); $inDetailsData = $objDInventoryInDetails->select(['linkId' => $params['inventoryInId']]); if($inDetailsData === false){ echo '查询采购订单对应的入库单详情数据错误'.$objDInventoryInDetails->error().PHP_EOL; return false; } if( empty($inDetailsData) ){ echo '采购订单'.$params['id'].'对应的入库单详情数据为空'.PHP_EOL; return false; } $payMoney = 0; foreach ($inDetailsData as $key => $value){ $payMoney = bcadd($payMoney, bcmul($value['inNum'], $value['unitPrice']), 2); } $payableExtraData = [ 'supplierId' => $purchaseData['supplierId'], 'supplierName' => $purchaseData['supplierName'], 'sourceNo' => $purchaseData['no'], //'payMoney' => $payMoney, // 应付 = 实际采购总成本-均摊费用 'payMoney' => bcadd(bcsub($purchaseData['purchaseAmount'],$purchaseData['couponAmount'],2),$purchaseData['otherAmount'],2), 'discountMoney' => $purchaseData['couponAmount'], 'receiptTypeId' => StatusCode::$orderType['purchaseOrder'], 'purchaseId' => $purchaseData['id'], 'notOffsetMoney' => $payMoney, ]; // 创建应付单数据 $payableData = [ 'warehouseId' => $purchaseData['warehouseId'], 'warehouseName' => $purchaseData['warehouseName'], 'financeTypeId' => StatusCode::$orderType['purchaseReturn'], 'financeType' => '采购单', 'auditStatus' => StatusCode::$auditStatus['auditing'], 'createTime' => time(), 'updateTime' => time(), ]; } //采购退货出库生成应付 if($params['type'] == StatusCode::$orderType['purchaseReturnOut']) { // 查询采购退货出库单信息 $this->objDInventoryOut->setTable($this->objDInventoryOut->get_Table() . '_' . $params['enterpriseId']); $inventoryOutData = $this->objDInventoryOut->get(['id'=>$params['id']]); if($inventoryOutData === false){ echo 'sql错误'.$this->objDInventoryOut->error().PHP_EOL; return false; } if (empty($inventoryOutData)) { echo '采购退货出库单id:' . $params['id'] . '的数据为空'.PHP_EOL; return false; } //查出源采购退货单对应的供应商Id和名称 $this->objDPurchaseOut->setTable($this->objDPurchaseOut->get_Table() . '_' . $params['enterpriseId']); $purchaseData = $this->objDPurchaseOut->get(['no'=>$inventoryOutData['sourceNo']]); if($purchaseData === false){ echo 'sql错误'.$this->objDPurchase->error().PHP_EOL; return false; } if (empty($purchaseData)) { echo '采购退货单no:' . $inventoryOutData['originNo'] . '的数据为空'.PHP_EOL; return false; } $payableExtraData = [ 'supplierId' => $purchaseData['supplierId'], 'supplierName' => $purchaseData['supplierName'], 'sourceNo' => $purchaseData['originNo'],//采购订单编号 'payMoney' => '-'.bcadd($purchaseData['purchaseAmount'], $purchaseData['otherAmount'],4),//实际应付金额 'discountMoney' => 0, 'receiptTypeId' => StatusCode::$orderType['purchaseReturn'], 'purchaseId' => $purchaseData['originId'], 'notOffsetMoney'=>'-'.bcadd($purchaseData['purchaseAmount'], $purchaseData['otherAmount'],4),//实际应付金额 ]; // 创建应付单数据 $payableData = [ 'warehouseId' => $purchaseData['warehouseId'], 'warehouseName' => $purchaseData['warehouseName'], 'financeTypeId' => StatusCode::$orderType['purchaseReturn'], 'financeType' => '采购退款单', 'auditStatus' => StatusCode::$auditStatus['auditing'], 'createTime' => time(), 'updateTime' => time(), ]; } /*foreach ($payableData as $key => $value) { if (empty($value) && $value !== 0) { echo $key . '参数错误'; return false; } }*/ $payableData = array_merge($payableData, $payableExtraData); // 添加应付单 $this->objDPay->beginTransaction(); $this->objDPay->setTable('qianniao_pay_receipt_' . $params['enterpriseId'] . '_' . date('Y') . '_' . ceil(date('m') / 3)); //添加应付单no编号 $dbResult = $this->objDPay->get('createTime >='.strtotime(date('Ymd'.'0:0:0')), 'no', 'createTime desc'); if ($dbResult === false) { echo '数据库查询失败'.$this->objDPay->error().PHP_EOL; return false; } if(empty($dbResult)){ $payableData['no'] = createSerialNumberByDate(''); }else{ $payableData['no'] = createSerialNumberByDate($dbResult['no']); } //索引表数据 $indexData = [ 'payReceiptId' => 0, 'supplierId' => $payableData['supplierId'], 'sourceNo' => $payableData['sourceNo'], 'auditStatus' => $payableData['auditStatus'], 'financeTypeId' => $payableData['financeTypeId'], 'financeType' => $payableData['financeType'], 'warehouseId' => $payableData['warehouseId'], 'createTime' => $payableData['createTime'], 'updateTime' => $payableData['updateTime'], ]; $this->objDPayReceiptIndex->setTable('qianniao_pay_receipt_index_' . $params['enterpriseId']); $payReceiptId = $this->objDPayReceiptIndex->insert($indexData); if ($payReceiptId === false) { $this->objDPay->rollBack(); echo 'sql错误'.$this->objDPayReceiptIndex->error().PHP_EOL; return false; } $payableData['id'] = $payReceiptId; $payableId = $this->objDPay->insert($payableData); if ($payableId === false) { $this->objDPay->rollBack(); echo 'sql错误'.$this->objDPay->error().PHP_EOL; return false; } $this->objDPay->commit(); /* $_id = self::createEsDocumentId($payableId, $params['enterpriseId']); $esData = $payableData; $esData['id'] = $payableId; $esData['enterpriseId'] = $params['enterpriseId']; $result = $this->objDPay->addUpSearchIndexDocument($esData, $_id); if (isset($result['_shards']) && isset($result['_shards']['successful']) && $result['_shards']['successful'] == 1) { //echo "es操作成功";die; }*/ $objFinanceCache = new FinanceCache(); $objFinanceCache->cacheExistPayEnterprise($params['enterpriseId']); echo '添加应付单成功'.PHP_EOL; return true; } private function createEsDocumentId($payId, $enterpriseId) { $t = date('Y') . '_' . ceil(date('m') / 3); return 'EnterpriseId_' . $enterpriseId . '_'. $t .'_payId_' . $payId; } }