123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- <?php
- /**
- * 财务应付生成和检测脚本
- * Created by PhpStorm.
- * User: phperstar
- * Date: 2019/12/19
- * Time: 10:38 AM
- */
- namespace Jobs\Model\MTopic\Finance;
- use Mall\Framework\Core\StatusCode;
- use Jobs\Cache\FinanceCache;
- use Jobs\Dao\Purchase\DPurchase;
- use Jobs\Dao\Purchase\DPurchaseOut;
- use Jobs\Dao\Stock\DInventoryOut;
- use Jobs\Dao\Stock\DInventoryInDetails;
- use Jobs\Dao\Finance\DPay;
- use Jobs\Dao\Finance\DPayReceiptIndex;
- class MPayable
- {
- private $objDPurchase;
- private $objDPurchaseOut;
- private $objDInventoryOut;
- private $objDPay;
- private $objDPayReceiptIndex;
- public function __construct()
- {
- $this->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;
- }
- }
|