Browse Source

结报逻辑优化 任务脚本优化 结报管理接口优化

master
wanghongjun 11 months ago
parent
commit
c0e4a74970
  1. 24
      app/controller/admin/Index.php
  2. 59
      app/controller/admin/InvoiceFinalReport.php
  3. 11
      app/controller/task/InvoiceIssuanceTask.php
  4. 16
      app/model/FinalReportData.php
  5. 17
      app/model/FinalReportDate.php
  6. 16
      app/model/InvoiceFinalReport.php
  7. 91
      app/service/invoice/InvoiceIssuanceService.php
  8. 1
      route/app.php

24
app/controller/admin/Index.php

@ -3,7 +3,7 @@ declare (strict_types=1);
namespace app\controller\admin;
use app\model\InvoiceFinalReport;
use app\model\FinalReportDate;
use app\model\InvoiceHead;
use app\model\WechatUser;
use app\util\ReturnCode;
@ -78,11 +78,7 @@ class Index extends Base {
}
$finalReportArr = ['type' => '当月结报金额', 'count' => 0];
$where = [
['report_time', '>=', strtotime(date("Y-m"))],
['report_time', '<', strtotime('+1 month', strtotime(date("Y-m")))]
];
$finalReportArr['count'] = (new InvoiceFinalReport())->getSumAmount($where);
$finalReportArr['count'] = (new FinalReportDate())->getSumAmount(date("Y-m"));
$data['invoice_head_data'][] = $finalReportArr;
return $this->buildSuccess($data);
@ -95,11 +91,8 @@ class Index extends Base {
/**
* 结报金额统计-月
* @return Response
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getFinalReportData()
public function getFinalReportData(): Response
{
$dateArr = [];
$amountArr = [];
@ -111,16 +104,7 @@ class Index extends Base {
$dateArr[] = $nowDate;
foreach ($dateArr as $key => $monthDate) {
$start_time = strtotime($monthDate);
$end_time = strtotime('+1 month', $start_time);
$where = [
['report_time', '>=', $start_time],
['report_time', '<', $end_time]
];
$amountArr[$key] = (new InvoiceFinalReport())->getSumAmount($where);
$amountArr[$key] = (new FinalReportDate())->getSumAmount($monthDate);
}
return $this->buildSuccess([

59
app/controller/admin/InvoiceFinalReport.php

@ -2,11 +2,11 @@
namespace app\controller\admin;
use app\model\FinalReportData;
use app\model\FinalReportDate;
use app\service\invoice\InvoiceIssuanceService;
use app\util\ReturnCode;
use think\facade\Db;
use think\Response;
use app\model\InvoiceFinalReport as InvoiceFinalReportModel;
class InvoiceFinalReport extends Base
{
@ -17,43 +17,52 @@ class InvoiceFinalReport extends Base
$param = $this->request->get();
$limit = $this->request->get('size', config('apiadmin.ADMIN_LIST_DEFAULT'));
$start = $this->request->get('page', 1);
$where = [['status', '=', 3]];
$where = [];
if (isset($param['expire_time']) && !empty($param['expire_time'])) {
$where = ['expire_time', '=', strtotime($param['expire_time'])];
if (isset($param['report_date']) && !empty($param['report_date'])) {
$where = ['report_date', '=', strtotime($param['report_date'])];
}
$list = Db::table('invoice_issuance')
->where($where)
->field('expire_time, sum(amount) as amount_sum')
->order('expire_time asc')
->group('expire_time')
->page($start, $limit)
->select()
->toArray();
$select = Db::table('invoice_issuance')->where('status', 3)->field('count(expire_time)')->group('expire_time')->select();
$total = count($select);
foreach ($list as &$item) {
$count = (new InvoiceFinalReportModel())->where('report_time', $item['expire_time'])->count();
$item['status'] = $count ? 1 : 0;
$item['status_str'] = $item['status'] == 1 ? '已结报' : '未结报';
$item['expire_time'] = date("Y-m", $item['expire_time']);
}
$listObj = (new FinalReportDate())
->where($where)
->order('report_date', 'DESC')
->paginate(['page' => $start, 'list_rows' => $limit])
->each(function ($item) {
$item['amount_sum'] = FinalReportData::getFrdSumAmount($item['id']);
$item['status_str'] = $item['status'] == 1 ? '已结报' : '未结报';
return $item;
})
->toArray();
return $this->buildSuccess([
'list' => $list,
'total' => $total
'list' => $listObj['data'],
'total' => $listObj['total']
]);
}
public function view(): Response
{
try {
$frd_id = $this->request->get('id', '');
if (empty($frd_id)) {
throw new \Exception('缺少请求参数');
}
$FinalReportData = new FinalReportData();
$data = $FinalReportData->where('frd_id', $frd_id)->select()->toArray();
return $this->buildSuccess($data);
} catch (\Exception $e) {
return $this->buildFailed(ReturnCode::EMPTY_PARAMS, $e->getMessage());
}
}
public function report(): Response
{
try {
$param = $this->request->get();
validate()->rule(['report_time|结报日期' => 'require|date'])->check($param);
$report_time = $param['report_time'];
$frd_id = $param['frd_id'];
$InvoiceIssuanceService = new InvoiceIssuanceService();
$result = $InvoiceIssuanceService->summaryReport(strtotime($report_time));
$result = $InvoiceIssuanceService->finalReport($frd_id);
if ($result !== true) throw new \Exception($result);
return $this->buildSuccess();
} catch (\Exception $e) {

11
app/controller/task/InvoiceIssuanceTask.php

@ -56,16 +56,15 @@ class InvoiceIssuanceTask extends Base
}
/**
*
* 保存结报数据
* @return Response
* @throws \fast\FuncException
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function runSummaryReport(): Response
{
$result = (new InvoiceIssuanceService())->summaryReport();
$result = (new InvoiceIssuanceService())->saveSummaryReport();
if ($result !== true) {
return $this->buildFailed('0', $result);
}
return $this->buildSuccess();
}

16
app/model/FinalReportData.php

@ -0,0 +1,16 @@
<?php
namespace app\model;
use think\Model;
class FinalReportData extends Model
{
public static function getFrdSumAmount($frd_id)
{
$res = self::where('frd_id', $frd_id)->field('sum(ydzse) as sum_amount')->find();
return $res ? $res['sum_amount'] : 0;
}
}

17
app/model/FinalReportDate.php

@ -0,0 +1,17 @@
<?php
namespace app\model;
use think\Model;
class FinalReportDate extends Model
{
public function getSumAmount($date)
{
$result = $this->where(['report_date' => $date])->field('id')->find();
if (!$result) return 0;
$ydzse_sum = FinalReportData::getFrdSumAmount($result['id']);
return $ydzse_sum ? number_format($ydzse_sum, 2, '.', ',') : 0;
}
}

16
app/model/InvoiceFinalReport.php

@ -1,16 +0,0 @@
<?php
namespace app\model;
use think\Model;
class InvoiceFinalReport extends Model
{
public function getSumAmount($where)
{
$result = $this->where($where)->field('sum(`ydzse`) as ydzse_sum')->find();
return $result['ydzse_sum'] ? number_format($result['ydzse_sum'], 2, '.', ',') : 0;
}
}

91
app/service/invoice/InvoiceIssuanceService.php

@ -2,7 +2,8 @@
namespace app\service\invoice;
use app\model\InvoiceFinalReport;
use app\model\FinalReportData;
use app\model\FinalReportDate;
use app\model\InvoiceHead;
use app\model\InvoiceIssuance;
use app\model\InvoiceIssuanceData;
@ -405,42 +406,90 @@ class InvoiceIssuanceService
}
/**
* 汇总结报 (汇总、结报)
* @param int $final_report_date
* 保存汇总结报数据 (汇总、结报)
* @return bool|string
*/
public function summaryReport(int $final_report_date = 0)
public function saveSummaryReport()
{
try {
if ($final_report_date <= 0) $final_report_date = time();
$invoiceDate = $this->getInvoiceDate($final_report_date);
$report_date = date("Y-m");
$FinalReportDate = new FinalReportDate();
$frd_id = $FinalReportDate->where('report_date', $report_date)->value('id');
if (!$frd_id) {
$frdSave = [
'report_date' => $report_date,
'status' => 0,
'create_time' => time()
];
$frd_id = $FinalReportDate->insertGetId($frdSave);
}
$invoiceDate = $this->getInvoiceDate(strtotime($report_date));
$bdznsrsbh = $this->getTaxNumber(0); // 被征纳税人
$ChinaTaxes = new ChinaTaxes([], $invoiceDate);
$daiZhengSummaryQuery = $ChinaTaxes->daiZhengSummaryQuery($bdznsrsbh);
$ydzse = 0;
$FinalReportData = new FinalReportData();
$save = [];
foreach ($daiZhengSummaryQuery['cxwjbList'] as $value) {
foreach ($value['cxwjbVO'] as $val) {
$sbpch = $val['sbpch']; // 申报批次号
$ydzse += $val['ydzse']; // 应代征税额
$save[] = [
'sbpch' => $sbpch,
'ydzse' => $ydzse,
'report_time' => strtotime($invoiceDate['skssqq']),
'create_time' => time()
$queryWhere = [
'frd_id' => $frd_id,
'sbpch' => $sbpch
];
$queryData = $FinalReportData->where($queryWhere)->field('id')->find();
if ($queryData) {
continue;
}
$queryWhere['ydzse'] = $val['ydzse'];
$queryWhere['create_time'] = time();
$save[] = $queryWhere;
}
}
if ($ydzse > 0) {
$result = $ChinaTaxes->daiZhengSummaryReport($ydzse);
if ($save && $result['code'] == 200) {
(new InvoiceFinalReport())->saveAll($save);
} else {
throw new FuncException($result['message'] ?? '结报失败');
}
if (!$save) {
throw new FuncException($daiZhengSummaryQuery['message'] ?? '数据储存失败');
}
$FinalReportData->saveAll($save);
return true;
} catch (\Exception $e) {
return $e->getMessage();
}
}
/**
* 结报
* @param $frd_id
* @return bool|string
*/
public function finalReport($frd_id)
{
try {
$FinalReportDate = new FinalReportDate();
$data = $FinalReportDate->where('id', $frd_id)->find();
if (!$data) {
throw new \Exception('参数有误');
}
$zje = FinalReportData::getFrdSumAmount($frd_id);
if ($zje <= 0) {
throw new \Exception('结报金额为0');
}
$invoiceDate = $this->getInvoiceDate(strtotime($data['report_date']));
$ChinaTaxes = new ChinaTaxes([], $invoiceDate);
$result = $ChinaTaxes->daiZhengSummaryReport($zje);
if ($result['code'] == 200 && $result['message'] == '结报成功') {
$update = [
'status' => 1,
'report_time' => time()
];
FinalReportDate::update($update, ['id' => $frd_id]);
} else {
throw new FuncException($daiZhengSummaryQuery['message'] ?? '结报失败');
throw new FuncException($result['message'] ?? '结报失败');
}
return true;
} catch (\Exception $e) {

1
route/app.php

@ -79,4 +79,5 @@ Route::group('admin', function() {
Route::rule('Config/add', 'admin.Config/add', 'post')->middleware([app\middleware\AdminAuth::class, app\middleware\AdminPermission::class, app\middleware\AdminLog::class, app\middleware\AdminResponse::class]);
Route::rule('InvoiceFinalReport/index', 'admin.InvoiceFinalReport/index', 'get')->middleware([app\middleware\AdminAuth::class, app\middleware\AdminPermission::class, app\middleware\AdminLog::class, app\middleware\AdminResponse::class]);
Route::rule('InvoiceFinalReport/report', 'admin.InvoiceFinalReport/report', 'get')->middleware([app\middleware\AdminAuth::class, app\middleware\AdminPermission::class, app\middleware\AdminLog::class, app\middleware\AdminResponse::class]);
Route::rule('InvoiceFinalReport/report', 'admin.InvoiceFinalReport/view', 'get')->middleware([app\middleware\AdminAuth::class, app\middleware\AdminPermission::class, app\middleware\AdminLog::class, app\middleware\AdminResponse::class]);
});

Loading…
Cancel
Save