123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499 |
- <?php
- namespace JinDouYun\Model\Finance;
- use JinDouYun\Controller\Market\VipCard;
- use Mall\Framework\Core\ErrorCode;
- use Mall\Framework\Core\StatusCode;
- use Mall\Framework\Core\ResultWrapper;
- use JinDouYun\Dao\Finance\DExpenseSingle;
- use JinDouYun\Dao\Finance\DExpenseSingleAccount;
- use JinDouYun\Model\Finance\MAccount;
- use JinDouYun\Model\Finance\MAccountDetail;
- class MExpenseSingle
- {
- private $objDExpenseSingle;
- private $objDExpenseSingleAccount;
- private $objMAccount;
- private $objMAccountDetail;
- private $objMCustomerBalanceDetail;
- private $objMCustomerBalance;
- private $objMSupplierBalanceDetail;
- private $objMSupplierBalance;
- private $enterpriseId;
- private $userCenterId;
- public function __construct($enterpriseId, $userCenterId)
- {
- $this->userCenterId = $userCenterId;
- $this->enterpriseId = $enterpriseId;
- $this->objDExpenseSingle = new DExpenseSingle('finance');
- $this->objDExpenseSingleAccount = new DExpenseSingleAccount('finance');
- $this->objMAccount = new MAccount($enterpriseId, $userCenterId);
- $this->objMAccountDetail = new MAccountDetail($enterpriseId, $userCenterId);
- $this->objMCustomerBalanceDetail = new MCustomerBalanceDetail($enterpriseId, $userCenterId);
- $this->objMCustomerBalance = new MCustomerBalance($enterpriseId, $userCenterId);
- $this->objMSupplierBalanceDetail = new MSupplierBalanceDetail($enterpriseId, $userCenterId);
- $this->objMSupplierBalance = new MSupplierBalance($enterpriseId, $userCenterId);
- $this->objDExpenseSingle->setTable('qianniao_expense_single_' . $enterpriseId);
- $this->objDExpenseSingleAccount->setTable('qianniao_expense_single_account_' . $enterpriseId);
- }
-
- public function addExpenseSingle($params)
- {
- $expenseSingleAccountDate = $params['expenseSingleAccountDate'];
- unset($params['expenseSingleAccountDate']);
-
- $dbResult = $this->objDExpenseSingle->get('createTime >='.strtotime(date('Ymd'.'0:0:0')), 'no', 'createTime desc');
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDExpenseSingle->error(), ErrorCode::$dberror);
- }
- if(empty($dbResult)){
- $params['no'] = createSerialNumberByDate('');
- }else{
- $params['no'] = createSerialNumberByDate($dbResult['no']);
- }
-
- $beginTransactionStatus = $this->objDExpenseSingle->beginTransaction();
- $expenseSingleId = $this->objDExpenseSingle->insert($params);
- if ($expenseSingleId === false) {
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($this->objDExpenseSingle->error(), ErrorCode::$dberror);
- }
- foreach ($expenseSingleAccountDate as $key => $value){
- $expenseSingleAccountDate[$key]['expenseSingleId'] = $expenseSingleId;
- }
- $expenseSingleAccountId = $this->objDExpenseSingleAccount->insert($expenseSingleAccountDate,true);
- if ($expenseSingleAccountId === false) {
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($this->objDExpenseSingleAccount->error(), ErrorCode::$dberror);
- }
- if($beginTransactionStatus){
- $this->objDExpenseSingle->commit();
- }
- return ResultWrapper::success($expenseSingleId);
- }
-
- public function getExpenseSingleInfo($expenseSingleId)
- {
- $dbResult = $this->objDExpenseSingle->get($expenseSingleId);
- if($dbResult === false){
- return ResultWrapper::fail($this->objDExpenseSingle->error(), ErrorCode::$dberror);
- }
- if(empty($dbResult)){
- return ResultWrapper::success([]);
- }
-
- $dbResult['no'] = StatusCode::$noPrefix[28] . '-' . $dbResult['no'];
- $dbResultAccount = $this->objDExpenseSingleAccount->select(['expenseSingleId'=>$expenseSingleId,'deleteStatus'=>StatusCode::$standard]);
- if($dbResultAccount === false){
- return ResultWrapper::fail($this->objDExpenseSingleAccount->error(), ErrorCode::$dberror);
- }
- if(!empty($dbResultAccount)){
- $dbResult['accountList'] = $dbResultAccount;
- }
- return ResultWrapper::success($dbResult);
- }
-
- public function editExpenseSingle($params)
- {
- $updateExpenseSingleId = $params['id'];
- unset($params['id']);
- unset($params['createTime']);
- $expenseSingleAccountDate = $params['expenseSingleAccountDate'];
- unset($params['expenseSingleAccountDate']);
-
- $params['totalCollectionAmount'] = 0;
- $params['totalPreferentialAmount'] = 0;
- $params['totalActualAmount'] = 0;
- foreach ($expenseSingleAccountDate as $account) {
- $account['preferentialAmount'] = !empty($account['preferentialAmount']) ? $account['preferentialAmount'] : 0;
- $params['totalCollectionAmount'] += $account['amount'];
- $params['totalPreferentialAmount'] += $account['preferentialAmount'];
- $params['totalActualAmount'] += ($account['amount'] - $account['preferentialAmount']);
- }
-
- $beginTransactionStatus = $this->objDExpenseSingle->beginTransaction();
- $receiptRequisitionId = $this->objDExpenseSingle->update($params, $updateExpenseSingleId);
- if($receiptRequisitionId === false){
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($this->objDExpenseSingle->error(), ErrorCode::$dberror);
- }
- foreach ($expenseSingleAccountDate as $key => $value){
- $id = getArrayItem($value, 'id', 0);
- if($id){
- $dbResult = $this->objDExpenseSingleAccount->update($value,$id);
- }else{
- $value['expenseSingleId'] = $updateExpenseSingleId;
- $dbResult = $this->objDExpenseSingleAccount->insert($value);
- }
- }
- if ($dbResult === false) {
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($this->objDExpenseSingleAccount->error(), ErrorCode::$dberror);
- }
- if($beginTransactionStatus){
- $this->objDExpenseSingle->commit();
- }
- return ResultWrapper::success($receiptRequisitionId);
- }
-
- public function delExpenseSingle($expenseSingleId)
- {
- if (empty($expenseSingleId)) {
- return ResultWrapper::fail('参数错误', ErrorCode::$paramError);
- }
- $beginTransactionStatus = $this->objDExpenseSingle->beginTransaction();
- $dbResult = $this->objDExpenseSingle->update( ['deleteStatus'=>StatusCode::$delete], $expenseSingleId);
- if($dbResult === false){
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($this->objDExpenseSingle->error(), ErrorCode::$dberror);
- }
- unset($dbResult);
- $dbResult = $this->objDExpenseSingleAccount->update( ['deleteStatus'=>StatusCode::$delete], ['expenseSingleId'=>$expenseSingleId]);
- if($dbResult === false){
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($this->objDExpenseSingleAccount->error(), ErrorCode::$dberror);
- }
- if($beginTransactionStatus){
- $this->objDExpenseSingle->commit();
- }
- return ResultWrapper::success($expenseSingleId);
- }
-
- public function getAllExpenseSingle($selectParams)
- {
- $limit = $selectParams['limit'];
- unset($selectParams['limit']);
- $offset = $selectParams['offset'];
- unset($selectParams['offset']);
- $selectParams['deleteStatus'] = StatusCode::$standard;
- $returnData = [
- 'data' => [],
- 'total' => 0,
- ];
- $whereSql = '';
- if (isset($selectParams['currentUnitId']) && !empty($selectParams['currentUnitId'])) {
- $where = empty($whereSql) ? ' WHERE ' : ' AND ';
- $whereSql .= $where . ' currentUnitId = ' . $selectParams['currentUnitId'];
- }
- if (isset($selectParams['payType']) && !empty($selectParams['payType'])) {
- $where = empty($whereSql) ? ' WHERE ' : ' AND ';
- $whereSql .= $where . ' payType = ' . $selectParams['payType'];
- }
- if (isset($selectParams['consumeTypeId']) && !empty($selectParams['consumeTypeId'])) {
- $where = empty($whereSql) ? ' WHERE ' : ' AND ';
- $whereSql .= $where . ' consumeTypeId = ' . $selectParams['consumeTypeId'];
- }
- if (isset($selectParams['auditStatus']) && !empty($selectParams['auditStatus'])) {
- $where = empty($whereSql) ? ' WHERE ' : ' AND ';
- $whereSql .= $where . ' auditStatus = ' . $selectParams['auditStatus'];
- }
- if ( (isset($selectParams['start']) && !empty($selectParams['start']))&&(isset($selectParams['end']) && !empty($selectParams['end'])) ) {
- $where = empty($whereSql) ? ' WHERE ' : ' AND ';
- $whereSql .= $where . ' createTime BETWEEN ' . $selectParams['start'] . ' AND '. $selectParams['end'];
- }
- $where = empty($whereSql) ? ' WHERE ' : ' AND ';
- $whereSql .= $where . 'deleteStatus = ' . StatusCode::$standard;
- $sql = 'SELECT * FROM ' .$this->objDExpenseSingle->get_Table().$whereSql . ' ORDER BY createTime DESC LIMIT ' . $offset . ' , ' . $limit;
- $dbResult = $this->objDExpenseSingle->query($sql);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDExpenseSingle->error(), ErrorCode::$dberror);
- }
- if(empty($dbResult)){
- return ResultWrapper::success($returnData);
- }
-
- foreach ($dbResult as $key => $value){
- $dbResult[$key]['no'] = StatusCode::$noPrefix[28] . '-' . $value['no'];
- }
- $totalSql = 'SELECT COUNT(1) as count FROM ' .$this->objDExpenseSingle->get_Table() . $whereSql;
- $dbTotalResult = $this->objDExpenseSingle->query($totalSql);
- if ($dbTotalResult === false) {
- return ResultWrapper::fail($this->objDExpenseSingle->error(), ErrorCode::$dberror);
- }
- if(empty($dbTotalResult)){
- return ResultWrapper::success([]);
- }
- $return = [
- 'data' => $dbResult,
- 'total' => $dbTotalResult[0]['count']
- ];
- return ResultWrapper::success($return);
- }
-
- public function updateExpenseStatus($params)
- {
- $dbResult = $this->objDExpenseSingle->get($params['id']);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDExpenseSingle->error(), ErrorCode::$dberror);
- }
- if(empty($dbResult)){
- return ResultWrapper::fail('要审核的单据不存在', ErrorCode::$contentNotExists);
- }
- if ($dbResult['auditStatus'] === StatusCode::$auditStatus['auditPass']) {
- return ResultWrapper::fail('单据已审核', ErrorCode::$actionIsDo);
- }
- $beginTransactionStatus = $this->objDExpenseSingle->beginTransaction();
-
- $updateDbResult = $this->objDExpenseSingle->update(['auditStatus' => StatusCode::$auditStatus['auditPass']], $params['id']);
- if ($updateDbResult === false) {
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($this->objDExpenseSingle->error(), ErrorCode::$dberror);
- }
-
- $accountDbResult = $this->objDExpenseSingleAccount->select(['expenseSingleId'=>$params['id']]);
- if( $accountDbResult === false ){
- return ResultWrapper::fail($this->objDExpenseSingleAccount->error(), ErrorCode::$dberror);
- }
- if( empty($accountDbResult) ){
- return ResultWrapper::success($updateDbResult);
- }
- foreach ($accountDbResult as $key => $value){
- $accountResult = $this->objMAccount->getAccountInfo($value['accountId']);
- if(!$accountResult->isSuccess()) {
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($accountResult->getData(), $accountResult->getErrorCode());
- }
- $accountInfo = $accountResult->getData();
- if(empty($accountInfo)){
- continue;
- }
-
- $accountDetail = [
- 'accountId'=> $accountInfo['id'],
- 'accountCode'=> $accountInfo['accountCode'],
- 'accountName'=> $accountInfo['name'],
- 'accountNumber'=> $accountInfo['accountNumber'],
- 'sourceNo'=>StatusCode::$noPrefix['28'].'-'.$dbResult['no'],
- 'sourceId'=>$dbResult['id'],
- 'financeType'=> ($dbResult['payType'] == StatusCode::$standard) ? StatusCode::$systemFinanceType[7] :StatusCode::$systemFinanceType[8],
- 'beginBalance'=>$accountInfo['money'],
- 'shopId'=>$dbResult['shopId'],
- 'shopName'=>$dbResult['shopName'],
- 'income'=>($dbResult['payType'] == StatusCode::$standard) ? $value['amount'] : 0,
- 'expend'=>($dbResult['payType'] == StatusCode::$delete) ? $value['amount'] : 0,
- 'endBalance'=>($dbResult['payType'] == StatusCode::$standard) ? bcadd($accountInfo['money'],$value['amount'],4) : bcsub($accountInfo['money'],$value['amount'],4),
- 'contactUnit'=>$dbResult['currentUnit'],
- 'supplierId'=>0,
- 'customerId'=>0,
- 'operatorId'=>$this->userCenterId,
- 'receiveOrPayPerson'=>$dbResult['manager'],
- 'remark'=>'费用单审核通过',
- 'createTime'=>time(),
- 'updateTime'=>time(),
- ];
- $result = $this->objMAccountDetail->addAccountDetail($accountDetail);
- if ($result->isSuccess() === false) {
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
-
- $changedMoney = ($dbResult['payType'] == StatusCode::$standard) ? abs($value['amount']) : -1 * $value['amount'];
- $result = $this->objMAccount->updateMoney($value['accountId'], $changedMoney);
- if ($result->isSuccess() === false) {
- $this->objDExpenseSingle->rollBack();
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- }
-
- if($beginTransactionStatus){
- $this->objDExpenseSingle->commit();
- }
- return ResultWrapper::success($updateDbResult);
- }
- }
|