|
|
<?php
|
|
|
namespace Admin\Controller;
|
|
|
use Think\Controller;
|
|
|
/**
|
|
|
* cp/公会对账单
|
|
|
* ThinkController
|
|
|
*/
|
|
|
class StatementWarningController extends AdminController
|
|
|
{
|
|
|
private $statementWarningKey;
|
|
|
private $statementWarningModel;
|
|
|
private $statementWarningInfoModel;
|
|
|
private $statementWarningType=[
|
|
|
1=>'业务收入',
|
|
|
2=>'业务成本',
|
|
|
3=>'毛利',
|
|
|
4=>'营业利润'
|
|
|
];
|
|
|
private $companyBelong=[
|
|
|
0=>'下游内团',
|
|
|
1=>'下游外团',
|
|
|
9=>'上游'
|
|
|
];
|
|
|
private $isWm=[
|
|
|
1=>'是',
|
|
|
2=>'否'
|
|
|
];
|
|
|
//创建
|
|
|
public function _initialize(){
|
|
|
//初始化
|
|
|
$this->statementWarningModel=M("statement_warning","tab_");
|
|
|
$this->statementWarningInfoModel=M("statement_warning_info","tab_");
|
|
|
$this->statementWarningKey=A("StatementWarningSet")->getStatementWarningKey();
|
|
|
parent::_initialize();
|
|
|
}
|
|
|
public function lists()
|
|
|
{
|
|
|
if(!array_key_exists("year",$_REQUEST)){
|
|
|
$this->redirect(ACTION_NAME, array('year' => date('Y',time())));
|
|
|
}
|
|
|
$year = $_REQUEST['year'];
|
|
|
$yearData = $this->statementWarningModel->where("count_year = '{$year}'")->select();
|
|
|
$yearData = $this->setWaringDataShow( $this->setWaringDataCount( $this->resetWaringData($yearData) ) );
|
|
|
|
|
|
$isCan = D("CmdTasks")->isCanAddTask("StatementWarningSet");
|
|
|
|
|
|
$this->assign("is_can",$isCan);
|
|
|
$this->assign("data",$yearData);
|
|
|
$this->getLastUpdate();
|
|
|
$this->getYearList();
|
|
|
$this->display();
|
|
|
}
|
|
|
|
|
|
private function getLastUpdate()
|
|
|
{
|
|
|
$time =strtotime(date('Y',time()).'-'.date('m',time())."-1");
|
|
|
$nextMonth = explode('-', date('Y-m',strtotime('+32 day',$time)) );
|
|
|
|
|
|
$lastUpdate = $this->statementWarningModel->where([
|
|
|
'count_year'=>$nextMonth[0],
|
|
|
'count_month'=>$nextMonth[1],
|
|
|
"name"=>'wm_platm',
|
|
|
"type"=>1
|
|
|
])->field("create_time")->find();
|
|
|
if($lastUpdate){
|
|
|
$lastUpdate = date('Y-m-d H:i:s',$lastUpdate['create_time']);
|
|
|
}else{
|
|
|
$lastUpdate = '未更新';
|
|
|
}
|
|
|
$this->assign('last_update', $lastUpdate);
|
|
|
}
|
|
|
|
|
|
private function resetWaringData($data)
|
|
|
{
|
|
|
$sendData = [];
|
|
|
foreach ($this->statementWarningType as $key => $va) {
|
|
|
$sendData[$key] = [
|
|
|
'name'=>$va,
|
|
|
'list'=>[],
|
|
|
'count'=>[0,0,0,0,0,0,0,0,0,0,0,0,0]
|
|
|
];
|
|
|
if($key == 3){
|
|
|
$sendData[$key]['list']['margin_ratio'] = [0,0,0,0,0,0,0,0,0,0,0,0,0];
|
|
|
}
|
|
|
if($key == 4){
|
|
|
$sendData[$key]['list']['profit_ratio'] = [0,0,0,0,0,0,0,0,0,0,0,0,0];
|
|
|
}
|
|
|
}
|
|
|
foreach ($data as $k => $v) {
|
|
|
$name = $v['name'];
|
|
|
$typelist = &$sendData[$v['type']]['list'];
|
|
|
if( !isset($typelist[$name]) ){
|
|
|
$typelist[$name] = [0,0,0,0,0,0,0,0,0,0,0,0,0];
|
|
|
}
|
|
|
$typelist[$name][$v['count_month']-1] = $v['money'];
|
|
|
}
|
|
|
return $sendData;
|
|
|
}
|
|
|
private function setWaringDataCount($data)
|
|
|
{
|
|
|
//业务成本/收入
|
|
|
for ($type=1; $type < 3; $type++) {
|
|
|
foreach ($data[$type]['list'] as $k => &$item) {
|
|
|
$item[12] = array_sum($item);
|
|
|
for ($i=0; $i < 13; $i++) {
|
|
|
$data[$type]['count'][$i] += $item[$i];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//毛利
|
|
|
$data[3]['list']['cost'][12] = array_sum($data[3]['list']['cost']);
|
|
|
$data[3]['list']['other_income'][12] = array_sum($data[3]['list']['other_income']);
|
|
|
for ($i=0; $i < 13; $i++) {
|
|
|
$data[3]['count'][$i] = $data[1]['count'][$i]-$data[2]['count'][$i];
|
|
|
$data[4]['count'][$i] = ($data[3]['count'][$i]-$data[3]['list']['cost'][$i]+$data[3]['list']['other_income'][$i]);
|
|
|
|
|
|
if($data[1]['count'][$i] != 0){
|
|
|
$data[3]['list']['margin_ratio'][$i] = round( $data[3]['count'][$i]/$data[1]['count'][$i],4);
|
|
|
$data[4]['list']['profit_ratio'][$i] = round($data[4]['count'][$i]/$data[1]['count'][$i],4);
|
|
|
}
|
|
|
}
|
|
|
return $data;
|
|
|
}
|
|
|
private function setWaringDataShow($data)
|
|
|
{
|
|
|
foreach ($data as $type => $item) {
|
|
|
for ($i=0; $i < 13; $i++) {
|
|
|
$data[$type]['count'][$i] = round($data[$type]['count'][$i]/10000,2);
|
|
|
}
|
|
|
foreach ($item['list'] as $name => $value) {
|
|
|
for ($i=0; $i < 13; $i++) {
|
|
|
if( in_array($name,['margin_ratio','profit_ratio']) ){
|
|
|
$value[$i] = ( ($value[$i]*100)."%");
|
|
|
}else{
|
|
|
$value[$i] = round($value[$i]/10000,2);
|
|
|
}
|
|
|
}
|
|
|
unset($data[$type]['list'][$name]);
|
|
|
if(isset($this->statementWarningKey[$name])){
|
|
|
if( in_array($name,['margin_ratio','profit_ratio']) ){
|
|
|
$data[$type]['list'][$name]['is_edit'] = 0;
|
|
|
}else{
|
|
|
$data[$type]['list'][$name]['is_edit'] = 1;
|
|
|
}
|
|
|
$data[$type]['list'][$name]['name'] = $this->statementWarningKey[$name];
|
|
|
$data[$type]['list'][$name]['list'] = $value;
|
|
|
$data[$type]['list'][$name]['is_del'] = 0;
|
|
|
}else{
|
|
|
$data[$type]['list'][$name]['name'] = $name;
|
|
|
$data[$type]['list'][$name]['list'] = $value;
|
|
|
$data[$type]['list'][$name]['is_edit'] = 1;
|
|
|
$data[$type]['list'][$name]['is_del'] = 1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return $data;
|
|
|
}
|
|
|
//获取历史年份
|
|
|
private function getYearList()
|
|
|
{
|
|
|
$star = 2021;
|
|
|
// $end = date("Y",time());
|
|
|
$end = date( 'Y', strtotime('last day of + 1 months' ) );
|
|
|
$list = [];
|
|
|
for ($i=$star; $i <= $end; $i++) {
|
|
|
$temp = array(
|
|
|
"value"=>$i,
|
|
|
"name"=>"{$i}年"
|
|
|
);
|
|
|
$list[] = $temp ;
|
|
|
}
|
|
|
$this->assign('YearList', $list);
|
|
|
}
|
|
|
public function edit()
|
|
|
{
|
|
|
$act = $_REQUEST['act'];
|
|
|
$isEdit = 1;
|
|
|
if($act == 'add'){
|
|
|
$isEdit = 0;
|
|
|
$this->assign('is_edit', 0);
|
|
|
$this->assign('chenge_name', 1);
|
|
|
}else{
|
|
|
$this->assign('is_edit', 1);
|
|
|
}
|
|
|
$this->getYearList();
|
|
|
if(IS_POST) {
|
|
|
$parm = I('post.');
|
|
|
if(count($parm['value']) < 12){
|
|
|
$this->ajaxReturn(["msg"=>"不想添加的月份请设置值为0,不能为空","code"=>0]);
|
|
|
}
|
|
|
if($parm['is_edit'] == 0){
|
|
|
$this->doAdd($parm);
|
|
|
}else{
|
|
|
$this->doEdit($parm);
|
|
|
}
|
|
|
$this->ajaxReturn(["msg"=>"添加成功","code"=>1,"url"=>U("lists")]);
|
|
|
}else{
|
|
|
if($isEdit == 1){
|
|
|
$this->resetWarningData();
|
|
|
$this->assign('title', '编辑预警类目');
|
|
|
}else{
|
|
|
$this->assign('title', '新增预警类目');
|
|
|
}
|
|
|
$this->display();
|
|
|
}
|
|
|
}
|
|
|
private function doAdd($p)
|
|
|
{
|
|
|
$adddata = [];
|
|
|
$baseArray = [
|
|
|
'count_year'=>$p['year'],
|
|
|
'type'=>$p['type'],
|
|
|
'name'=>trim($p['name']),
|
|
|
'create_time'=>time()
|
|
|
];
|
|
|
|
|
|
for ($i=0; $i < 12; $i++) {
|
|
|
if($p['value'][$i] != 0){
|
|
|
$countMoth = ($i-0+1);
|
|
|
if(strlen($countMoth) < 2) $countMoth="0".$countMoth;
|
|
|
$baseArray['count_month'] = $countMoth;
|
|
|
$baseArray['money'] = $p['value'][$i]*10000;
|
|
|
$adddata[] = $baseArray;
|
|
|
}
|
|
|
}
|
|
|
if(empty($adddata)){
|
|
|
$this->ajaxReturn(["msg"=>"添加失败,值不能全为0","code"=>0]);
|
|
|
}
|
|
|
$res = $this->statementWarningModel->addAll($adddata);
|
|
|
if(!$res){
|
|
|
$this->ajaxReturn(["msg"=>"添加失败","code"=>0]);
|
|
|
}
|
|
|
}
|
|
|
private function resetWarningData()
|
|
|
{
|
|
|
//获取真实名称
|
|
|
$name = $_REQUEST['name'];
|
|
|
$sendData = [
|
|
|
'value'=>[0,0,0,0,0,0,0,0,0,0,0,0],
|
|
|
'ids'=>[0,0,0,0,0,0,0,0,0,0,0,0],
|
|
|
'chenge_name'=>1,
|
|
|
'count_year'=>$_REQUEST['count_year']
|
|
|
];
|
|
|
$key = array_flip($this->statementWarningKey);
|
|
|
if(isset($key[$_REQUEST['name']])){
|
|
|
$sendData['chenge_name'] = 0;
|
|
|
$sendData['orgin_name'] = $key[$_REQUEST['name']];
|
|
|
$sendData['name'] = $name;
|
|
|
$name = $key[$_REQUEST['name']];
|
|
|
}else{
|
|
|
$sendData['orgin_name'] = $name;
|
|
|
$sendData['name'] = $name;
|
|
|
}
|
|
|
$where = [
|
|
|
'name'=>$name,
|
|
|
'count_year'=>$_REQUEST['count_year']
|
|
|
];
|
|
|
$data = $this->statementWarningModel->where($where)->select();
|
|
|
$sendData['type'] = $data[0]['type'];
|
|
|
foreach ($data as $key => $value) {
|
|
|
$sendData['value'][$value['count_month']-1] = round($value['money']/10000,2);
|
|
|
$sendData['ids'][$value['count_month']-1] = $value['id'];
|
|
|
}
|
|
|
$this->assign('data', $sendData);
|
|
|
}
|
|
|
private function doEdit($p)
|
|
|
{
|
|
|
$adddata = [];
|
|
|
$baseArray = [
|
|
|
'count_year'=>$p['year'],
|
|
|
'type'=>$p['type'],
|
|
|
'name'=>trim($p['name']),
|
|
|
'create_time'=>time()
|
|
|
];
|
|
|
|
|
|
for ($i=0; $i < 12; $i++) {
|
|
|
$id = $p['ids'][$i];
|
|
|
$money = $p['value'][$i];
|
|
|
if($id > 0){
|
|
|
$save['id'] = $id;
|
|
|
$save['money'] = $p['value'][$i]*10000;
|
|
|
$save['name'] = trim($p['name']);
|
|
|
$this->statementWarningModel->save($save);
|
|
|
continue;
|
|
|
}
|
|
|
if($money != 0){
|
|
|
$countMoth = ($i-0+1);
|
|
|
if(strlen($countMoth) < 2) $countMoth="0".$countMoth;
|
|
|
$baseArray['count_month'] = $countMoth;
|
|
|
$baseArray['money'] = $p['value'][$i]*10000;
|
|
|
$adddata[] = $baseArray;
|
|
|
}
|
|
|
}
|
|
|
if(!empty($adddata)){
|
|
|
$this->statementWarningModel->addAll($adddata);
|
|
|
}
|
|
|
}
|
|
|
public function del()
|
|
|
{
|
|
|
$parm = I('get.');
|
|
|
$where = [
|
|
|
'count_year'=>$parm['count_year'],
|
|
|
'name'=>trim($parm['name']),
|
|
|
];
|
|
|
$this->statementWarningModel->where($where)->delete();
|
|
|
$this->success("删除成功!");
|
|
|
}
|
|
|
|
|
|
public function updateStatement()
|
|
|
{
|
|
|
if(!isset($_REQUEST['time'])) $this->error("参数错误");
|
|
|
|
|
|
$time =strtotime($_REQUEST['time']."-1")-1;
|
|
|
$time = date('Y-m',$time);
|
|
|
|
|
|
$params = "php ".SUBSITE_INDEX." StatementWarningSet/setFreeMonth/count_date/{$time}";
|
|
|
$r = D("CmdTasks")->addTask("StatementWarningSet",$params);
|
|
|
if($r){
|
|
|
$this->ajaxReturn(["success"=>"ok"]);
|
|
|
}else{
|
|
|
$this->ajaxReturn(["error"=>"error"]);
|
|
|
}
|
|
|
}
|
|
|
/*********** 详情 ***************/
|
|
|
public function infoLists()
|
|
|
{
|
|
|
if(!array_key_exists("time",$_REQUEST)){
|
|
|
$this->redirect(ACTION_NAME, array('time' => date('Y-m',time())));
|
|
|
}
|
|
|
$time = explode('-',$_REQUEST['time']);
|
|
|
$year= $time[0];
|
|
|
if(strlen($time[1]) < 2) $time[1]="0".$time[1];
|
|
|
$month= $time[1];
|
|
|
|
|
|
$data = $this->statementWarningInfoModel->where("count_year = '{$year}' AND count_month = '{$month}'")->order('FIELD(company_belong,9,0,1),is_wm asc,statement_money desc')->select();
|
|
|
$count = $this->statementWarningInfoModel->where("count_year = '{$year}' AND count_month = '{$month}'")->field("company_belong,sum(statement_money) statement_money,sum(wm_amount) wm_amount,sum(other_amount) other_amount")->group('company_belong')->select();
|
|
|
$this->setWaringInfShow($data,$count);
|
|
|
$this->getMonthLastUpdate($year,$month);
|
|
|
|
|
|
$this->display();
|
|
|
}
|
|
|
private function setWaringInfShow($data,$count)
|
|
|
{
|
|
|
$allcount = [
|
|
|
'statement_money'=>0,
|
|
|
'wm_amount'=>0,
|
|
|
'other_amount'=>0
|
|
|
];
|
|
|
$sendData = [];
|
|
|
foreach ($data as $key => $value) {
|
|
|
$value['statement_money'] = round($value['statement_money']/10000,2);
|
|
|
$value['wm_amount'] = round($value['wm_amount']/10000,2);
|
|
|
$value['other_amount'] = round($value['other_amount']/10000,2);
|
|
|
$value['is_wmstr'] = $this->isWm[$value['is_wm']];
|
|
|
$sendData[$value['company_belong']]['list'][] = $value;
|
|
|
}
|
|
|
foreach ($count as $key => $value) {
|
|
|
$value['statement_money'] = round($value['statement_money']/10000,2);
|
|
|
$value['wm_amount'] = round($value['wm_amount']/10000,2);
|
|
|
$value['other_amount'] = round($value['other_amount']/10000,2);
|
|
|
|
|
|
$sendData[$value['company_belong']]['name'] = $this->companyBelong[$value['company_belong']];
|
|
|
$sendData[$value['company_belong']]['row'] = count( $sendData[$value['company_belong']]['list'])-0+1;
|
|
|
$sendData[$value['company_belong']]['count'] = $value;
|
|
|
|
|
|
$allcount['statement_money'] += $value['statement_money'];
|
|
|
$allcount['wm_amount'] += $value['wm_amount'];
|
|
|
$allcount['other_amount'] += $value['other_amount'];
|
|
|
}
|
|
|
$this->assign('data',$sendData);
|
|
|
$this->assign('allcount',$allcount);
|
|
|
}
|
|
|
|
|
|
|
|
|
private function getMonthLastUpdate($year,$month)
|
|
|
{
|
|
|
$lastUpdate = $this->statementWarningInfoModel->where([
|
|
|
'count_year'=>$year,
|
|
|
'count_month'=>$month,
|
|
|
])->field("MAX(create_time) create_time")->find();
|
|
|
if($lastUpdate){
|
|
|
$lastUpdate = date('Y-m-d H:i:s',$lastUpdate['create_time']);
|
|
|
}else{
|
|
|
$lastUpdate = '未更新';
|
|
|
}
|
|
|
$this->assign('last_update', $lastUpdate);
|
|
|
}
|
|
|
|
|
|
public function infoEdit()
|
|
|
{
|
|
|
$p = I('post.');
|
|
|
$id = $p['id'];
|
|
|
$info = $this->statementWarningInfoModel->where("id = '{$id}'")->find();
|
|
|
$diffMoney = $info['wm_amount'];
|
|
|
|
|
|
if(isset($p['is_wm']) && $p['is_wm'] != $info['is_wm']){
|
|
|
if($p['is_wm'] == 1){
|
|
|
$info['wm_amount'] = $info['statement_money'];
|
|
|
$info['other_amount'] = 0;
|
|
|
}else{
|
|
|
$info['wm_amount'] = 0;
|
|
|
$info['other_amount'] = $info['statement_money'];
|
|
|
}
|
|
|
$info['is_wm'] = $p['is_wm'];
|
|
|
}
|
|
|
if(isset($p['wm_amount'])){
|
|
|
$info['wm_amount'] = $p['wm_amount']*10000;
|
|
|
$info['other_amount'] = $info['statement_money']-$p['wm_amount']*10000;
|
|
|
}
|
|
|
$this->statementWarningInfoModel->save($info);
|
|
|
|
|
|
$diffMoney = ($diffMoney - $info['wm_amount']);
|
|
|
if($diffMoney != 0)
|
|
|
{
|
|
|
//获取母单
|
|
|
$poolname = '';
|
|
|
if($info['company_belong'] == 1){
|
|
|
$poolname = 'pu_statement';
|
|
|
}
|
|
|
if($info['company_belong'] == 0){
|
|
|
$poolname = 'pc_statement';
|
|
|
}
|
|
|
if($info['company_belong'] == 9){
|
|
|
$poolname = 'up_statement';
|
|
|
}
|
|
|
|
|
|
$time =strtotime($info['count_year'].'-'.$info['count_month']."-1");
|
|
|
$nextMonth = explode('-', date('Y-m',strtotime('+32 day',$time)) );
|
|
|
$this->statementWarningModel->where([
|
|
|
'count_year'=>$nextMonth[0],
|
|
|
'count_month'=>$nextMonth[1],
|
|
|
'name'=>$poolname,
|
|
|
])->setDec('money',$diffMoney);
|
|
|
}
|
|
|
|
|
|
$this->ajaxReturn(['success'=>'ok']);
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|