Browse Source

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

master
wanghongjun 1 year 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; namespace app\controller\admin;
use app\model\InvoiceFinalReport; use app\model\FinalReportDate;
use app\model\InvoiceHead; use app\model\InvoiceHead;
use app\model\WechatUser; use app\model\WechatUser;
use app\util\ReturnCode; use app\util\ReturnCode;
@ -78,11 +78,7 @@ class Index extends Base {
} }
$finalReportArr = ['type' => '当月结报金额', 'count' => 0]; $finalReportArr = ['type' => '当月结报金额', 'count' => 0];
$where = [ $finalReportArr['count'] = (new FinalReportDate())->getSumAmount(date("Y-m"));
['report_time', '>=', strtotime(date("Y-m"))],
['report_time', '<', strtotime('+1 month', strtotime(date("Y-m")))]
];
$finalReportArr['count'] = (new InvoiceFinalReport())->getSumAmount($where);
$data['invoice_head_data'][] = $finalReportArr; $data['invoice_head_data'][] = $finalReportArr;
return $this->buildSuccess($data); return $this->buildSuccess($data);
@ -95,11 +91,8 @@ class Index extends Base {
/** /**
* 结报金额统计-月 * 结报金额统计-月
* @return Response * @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 = []; $dateArr = [];
$amountArr = []; $amountArr = [];
@ -111,16 +104,7 @@ class Index extends Base {
$dateArr[] = $nowDate; $dateArr[] = $nowDate;
foreach ($dateArr as $key => $monthDate) { foreach ($dateArr as $key => $monthDate) {
$amountArr[$key] = (new FinalReportDate())->getSumAmount($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);
} }
return $this->buildSuccess([ return $this->buildSuccess([

59
app/controller/admin/InvoiceFinalReport.php

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

11
app/controller/task/InvoiceIssuanceTask.php

@ -56,16 +56,15 @@ class InvoiceIssuanceTask extends Base
} }
/** /**
* * 保存结报数据
* @return Response * @return Response
* @throws \fast\FuncException
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/ */
public function runSummaryReport(): Response public function runSummaryReport(): Response
{ {
$result = (new InvoiceIssuanceService())->summaryReport(); $result = (new InvoiceIssuanceService())->saveSummaryReport();
if ($result !== true) {
return $this->buildFailed('0', $result);
}
return $this->buildSuccess(); 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; namespace app\service\invoice;
use app\model\InvoiceFinalReport; use app\model\FinalReportData;
use app\model\FinalReportDate;
use app\model\InvoiceHead; use app\model\InvoiceHead;
use app\model\InvoiceIssuance; use app\model\InvoiceIssuance;
use app\model\InvoiceIssuanceData; use app\model\InvoiceIssuanceData;
@ -405,42 +406,90 @@ class InvoiceIssuanceService
} }
/** /**
* 汇总结报 (汇总、结报) * 保存汇总结报数据 (汇总、结报)
* @param int $final_report_date
* @return bool|string * @return bool|string
*/ */
public function summaryReport(int $final_report_date = 0) public function saveSummaryReport()
{ {
try { try {
if ($final_report_date <= 0) $final_report_date = time(); $report_date = date("Y-m");
$invoiceDate = $this->getInvoiceDate($final_report_date);
$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); // 被征纳税人 $bdznsrsbh = $this->getTaxNumber(0); // 被征纳税人
$ChinaTaxes = new ChinaTaxes([], $invoiceDate); $ChinaTaxes = new ChinaTaxes([], $invoiceDate);
$daiZhengSummaryQuery = $ChinaTaxes->daiZhengSummaryQuery($bdznsrsbh); $daiZhengSummaryQuery = $ChinaTaxes->daiZhengSummaryQuery($bdznsrsbh);
$ydzse = 0;
$FinalReportData = new FinalReportData();
$save = []; $save = [];
foreach ($daiZhengSummaryQuery['cxwjbList'] as $value) { foreach ($daiZhengSummaryQuery['cxwjbList'] as $value) {
foreach ($value['cxwjbVO'] as $val) { foreach ($value['cxwjbVO'] as $val) {
$sbpch = $val['sbpch']; // 申报批次号 $sbpch = $val['sbpch']; // 申报批次号
$ydzse += $val['ydzse']; // 应代征税额 $queryWhere = [
$save[] = [ 'frd_id' => $frd_id,
'sbpch' => $sbpch, 'sbpch' => $sbpch
'ydzse' => $ydzse,
'report_time' => strtotime($invoiceDate['skssqq']),
'create_time' => time()
]; ];
$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) {
if ($save && $result['code'] == 200) { throw new FuncException($daiZhengSummaryQuery['message'] ?? '数据储存失败');
(new InvoiceFinalReport())->saveAll($save); }
} else {
throw new FuncException($result['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 { } else {
throw new FuncException($daiZhengSummaryQuery['message'] ?? '结报失败'); throw new FuncException($result['message'] ?? '结报失败');
} }
return true; return true;
} catch (\Exception $e) { } 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('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/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/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