# @Date: 2022-05-22T07:33:08+08:00 # @Email: fm453@lukegzs.com # @Last modified by: fm453 # @Last modified time: 2024-08-09T09:18:10+08:00 # @Copyright: www.hiluker.cn namespace api\controllers\gm\v1; use Yii; use yii\data\Pagination; use yii\helpers\Url; use addons\models\AcFeeOrder; use addons\models\AcFeeDriver; use addons\models\AcOrder; use addons\models\AcOrderStatus; use addons\models\AcStore; use addons\models\AcEmployee; use addons\models\AcDriver; use addons\models\AcTruckOnline; use addons\models\AcTruckCars; use addons\models\AcPlat; use common\models\CVcode; class FeedriverController extends Common { //主界面,费用列表 public function actionIndex() { // return $this->render('@app/views/layouts/dev',[]); $pid = Yii::$app->session->get('pid'); $paytypes = Yii::$app->params['Paytype']; $status = Yii::$app->params['PayStatus']; $post = Yii::$app->request->post(); $oid = Yii::$app->request->get('online_id'); $where = []; $search = isset($post['search']) ? $post['search'] : []; $where[] = 'and'; $where[] = ['=', 'pid', $pid]; $where[] = ['=', 'deleted', 0]; $where[] = ['=', 'is_chonghong', 0]; if ($oid) { $AcTruckOnline = new AcTruckOnline(); $truckonline = $AcTruckOnline->findOne($oid); $truckonline = $truckonline->toArray(); $onlineStatus = Yii::$app->params['TruckOnlineStatus']; $truckonline['online_status_title'] = $onlineStatus[$truckonline['status_code']]; $where[] = ['=', 'online_id', $oid]; } else { $truckonline = []; } $AcFeeDriver = new AcFeeDriver(); $_fees = $AcFeeDriver->find()->where($where)->all(); return $this->render('list', [ 'fees' => $_fees, 'paytypes' => $paytypes, 'status' => $status, 'search' => $search, 'oid' => $oid, 'truckol' => $truckonline, ]); } public function actionNew() { $pid = Yii::$app->session->get('pid'); $paytypes = Yii::$app->params['Paytype']; $status = Yii::$app->params['PayStatus']; $post = Yii::$app->request->post(); $where = []; $search = isset($post['search']) ? $post['search'] : []; $where[] = 'and'; $where[] = ['=', 'pid', $pid]; $where[] = ['=', 'deleted', 0]; $oid = Yii::$app->request->get('online_id'); if ($oid) { $AcTruckOnline = new AcTruckOnline(); $truckonline = $AcTruckOnline->findOne($oid); $truckonline = $truckonline->toArray(); $onlineStatus = Yii::$app->params['TruckOnlineStatus']; $truckonline['online_status_title'] = $onlineStatus[$truckonline['status_code']]; $sn = '00000000000'; //11位 $sn = substr($sn, 0, 11 - strlen($oid)); $sn .= $oid; $truckonline['sn'] = $sn; } else { $return = []; $return['msg'] = '操作失败,请先选择一张出车单'; $return['errorcode'] = 0; $return['url'] = Url::toRoute(['truckonline/list', $post]); $return['buttons'] = [ ['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']] ]; $return['content'] = $return['msg']; $return['class'] = 'warning'; Yii::$app->request->setBodyParams($return); return Yii::$app->runAction('index/msg'); } return $this->render('modify', [ 'paytypes' => $paytypes, 'status' => $status, 'oid' => $oid, 'truckol' => $truckonline, ]); } public function actionEdit() { $pid = Yii::$app->session->get('pid'); $paytypes = Yii::$app->params['Paytype']; $status = Yii::$app->params['PayStatus']; $post = Yii::$app->request->post(); $id = Yii::$app->request->get('id'); $AcFeeDriver = new AcFeeDriver(); $detail = $AcFeeDriver->findOne($id); if (!$detail) { $return = []; $return['msg'] = '明细单获取失败'; $return['url'] = ''; $return['buttons'] = [ ['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']] ]; $return['content'] = $return['msg']; $return['class'] = 'warning'; Yii::$app->request->setBodyParams($return); return Yii::$app->runAction('index/msg'); } else { $detail = $detail->toArray(); $thumbs = isset($detail['thumbs']) ? json_decode($detail['thumbs'], TRUE) : []; $detail['thumbs'] = $thumbs; $logs = isset($detail['cwlogs']) ? json_decode($detail['cwlogs'], TRUE) : []; $detail['logs'] = ''; if ($logs) { foreach ($logs as $log) { $detail['logs'] .= $log . "
"; } } $money = (int)($detail['fee'] / 100); $detail['money1'] = $money; $detail['money2'] = (int)(($detail['fee'] - $money * 100) / 10); $detail['money3'] = $detail['fee'] - $detail['money1'] * 100 - $detail['money2'] * 10; //转换一下角分的正负值 $detail['money2'] = abs($detail['money2']); $detail['money3'] = abs($detail['money3']); } $oid = isset($detail['online_id']) ? $detail['online_id'] : 0; if ($oid) { $AcTruckOnline = new AcTruckOnline(); $truckonline = $AcTruckOnline->findOne($oid); $truckonline = $truckonline->toArray(); $onlineStatus = Yii::$app->params['TruckOnlineStatus']; $truckonline['online_status_title'] = $onlineStatus[$truckonline['status_code']]; $sn = '00000000000'; //11位 $sn = substr($sn, 0, 11 - strlen($oid)); $sn .= $oid; $truckonline['sn'] = $sn; } else { $return = []; $return['msg'] = '操作失败,费用明细与出车单的关联出错'; $return['errorcode'] = 0; $return['url'] = Url::toRoute(['truckonline/list', $post]); $return['buttons'] = [ ['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']] ]; $return['content'] = $return['msg']; $return['class'] = 'warning'; Yii::$app->request->setBodyParams($return); return Yii::$app->runAction('index/msg'); } return $this->render('modify', [ 'paytypes' => $paytypes, 'status' => $status, 'oid' => $oid, 'truckol' => $truckonline, 'detail' => $detail ]); } //保存费用信息 public function actionSave() { $post = Yii::$app->request->post(); $id = (int)$post['id']; $pid = Yii::$app->session->get('pid'); $AcFeeModel = new AcFeeDriver(); if ($id) { $fee = $AcFeeModel->findOne($id); if ($fee->create_by != Yii::$app->user->identity->id) { //不允许修改非本人操作的表单 $return['msg'] = '您不是该费用单的制单人,不允许进行修改!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if (in_array($fee->status_code, [1, -2, 99])) { //不允许修改已被财务确认的表单 $return['msg'] = '订单已被财务确认,不可修改!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } //格式化数据 为空的项则不修改 $cols = ['pay_from' => '支付人', 'pay_to' => '收款人']; foreach ($cols as $key => $ti) { if (isset($post[$key]) && $post[$key] != '') { $data[$key] = trim($post[$key]); } else { $return['msg'] = $ti . '不能为空,请检查并填写'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } $key = 'paytype'; if (isset($post[$key]) && $post[$key] != '') { $data[$key] = (int)$post[$key]; } else { $return['msg'] = '支付方式必须选择,请检查'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $cols = ['money1', 'money2', 'money3']; //金额换算 $is_minus = FALSE; //考虑是否有负值情况 if (isset($post['money1']) && (int)$post['money1'] < 0) { $is_minus = TRUE; } else if (isset($post['money2']) && (int)$post['money2'] < 0) { $is_minus = TRUE; } else if (isset($post['money3']) && (int)$post['money3'] < 0) { $is_minus = TRUE; } foreach ($cols as $key) { if (isset($post[$key]) && $post[$key] != '') { $money[$key] = abs((int)$post[$key]); //取绝对值 } else { $money[$key] = 0; } } //角、分 数值必须个位数 if ($money['money2']) { $money['money2'] = min($money['money2'], 9); } if ($money['money3']) { $money['money3'] = min($money['money3'], 9); } $data['fee'] = 100 * $money['money1'] + 10 * $money['money2'] + $money['money3']; if ($is_minus) { $data['fee'] = 0 - $data['fee']; } $key = 'sn'; if (isset($post[$key]) && $post[$key] != '') { $data[$key] = trim($post[$key]); } //补充说明 $_thumbs = $_logs = []; if ($id) { if (isset($fee->cwlogs)) { $_logs = json_decode($fee->cwlogs, TRUE); } if (isset($fee->thumbs)) { $_thumbs = json_decode($fee->thumbs, TRUE); } } //图片组处理 $key = 'thumbs'; $imgs = []; if (isset($post[$key]) && !empty($post[$key])) { $imgs = $post[$key]; //数组格式 $imgs = array_unique($imgs); } if ($imgs) { if ($_thumbs) { $imgs = array_merge($imgs, $_thumbs); $imgs = array_unique($imgs); } } // if(!$imgs){ // $return['msg'] = '支付凭证截图必须上传,请检查'; // $return['errorcode'] = 404; // exit(json_encode($return,JSON_UNESCAPED_UNICODE)); // } $data[$key] = json_encode($imgs, JSON_UNESCAPED_UNICODE); //操作日志处理 $key = 'logs'; $logs = []; if (isset($post[$key]) && $post[$key] != '') { $data['remark'] = isset($post[$key]) ? htmlspecialchars($post[$key]) : ''; $log = Yii::$app->user->identity->username . '于' . date('Y-m-d H:i') . '备注-' . htmlspecialchars($post[$key]); } else { $log = Yii::$app->user->identity->username . '于' . date('Y-m-d H:i') . '进行了调整'; } if ($_logs) { $logs = $_logs; } array_unshift($logs, $log); $data['cwlogs'] = json_encode($logs, JSON_UNESCAPED_UNICODE); $_time = time(); $pay_at = isset($post['pay_at']) ? strtotime($post['pay_at']) : $_time; $data['pay_at'] = $pay_at; if (!$id) { $data['create_by'] = Yii::$app->user->identity->id; $data['create_at'] = $_time; } $data['update_at'] = $_time; $data['pid'] = $pid; //剩余规则校验 $oid = Yii::$app->request->get('oid'); if (!$oid) { $return['msg'] = '未指定有效的出车单进行关联!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $AcTruckOnline = new AcTruckOnline(); $truckonline = $AcTruckOnline->findOne($oid); if (!$truckonline) { $return['msg'] = '未找到关联出车单!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $data['online_id'] = $oid; if ($id) { $res = $AcFeeModel->updateAll($data, ['id' => $id]); } else { foreach ($data as $key => $val) { $AcFeeModel->$key = $val; } $res = $AcFeeModel->save(); $id = $AcFeeModel->attributes['id']; //获取插入后id } if ($res) { $return['msg'] = '保存成功;可提醒财务人员进行审核操作!'; $return['errorcode'] = 0; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } else { $return['msg'] = '保存失败,请重新检查!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } //财务审核 public function actionCaiwu() { $post = Yii::$app->request->post(); $id = Yii::$app->request->get('id'); if (!$id) { $return = []; $return['msg'] = '操作失败,请先选择一个费用单据'; $return['errorcode'] = 0; $return['url'] = Url::toRoute(['feedriver/list', $post]); $return['buttons'] = [ ['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']] ]; $return['content'] = $return['msg']; $return['class'] = 'warning'; Yii::$app->request->setBodyParams($return); return Yii::$app->runAction('index/msg'); } $AcFeeModel = new AcFeeDriver(); $fee = $AcFeeModel->findOne($id); if (!$fee) { $return = []; $return['msg'] = '操作失败,费用单据未找到,请重新选择'; $return['errorcode'] = 0; $return['url'] = Url::toRoute(['feedriver/list', $post]); $return['buttons'] = [ ['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']] ]; $return['content'] = $return['msg']; $return['class'] = 'warning'; Yii::$app->request->setBodyParams($return); return Yii::$app->runAction('index/msg'); } $detail = $fee->toArray(); $logs = isset($detail['cwlogs']) ? json_decode($detail['cwlogs'], TRUE) : []; $detail['logs'] = ''; if ($logs) { foreach ($logs as $log) { $detail['logs'] .= $log . "
"; } } if ($detail['fee'] < 0) { //如果是支出类单据,先默认支付发生地为起运地 $detail['is_pay_send'] = 1; } //金额转换 $money = (int)($detail['fee'] / 100); $detail['money1'] = $money; $detail['money2'] = (int)(($detail['fee'] - $money * 100) / 10); $detail['money3'] = $detail['fee'] - $detail['money1'] * 100 - $detail['money2'] * 10; //转换一下角分的正负值 $detail['money2'] = abs($detail['money2']); $detail['money3'] = abs($detail['money3']); return $this->render('check', [ 'id' => $id, 'detail' => $detail, ]); } //申请冲红 public function actionCancel() { $pid = Yii::$app->session->get('pid'); $paytypes = Yii::$app->params['Paytype']; $status = Yii::$app->params['PayStatus']; $post = Yii::$app->request->post(); $id = Yii::$app->request->get('id'); $return = []; $return['timeout'] = 1; //几秒后自动跳转 $AcFeeModel = new AcFeeDriver(); $detail = $AcFeeModel->findOne($id); if (!$detail) { $return['msg'] = '申请失败,单据数据不存在,请重新选择单据!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $status = isset($detail->status_code) ? $detail->status_code : 0; if ($status == 0 || $status == -1) { $return['msg'] = '该单据尚未通过财务审核,无需冲红!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($status == 99) { $return['msg'] = '该单据仅确认并不入库,无需冲红!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } /*已是冲红票的,不允许再次冲红*/ if ($detail->is_chonghong) { $return['msg'] = '该单据已经其他费用单的冲红单,不允许被冲红!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $oid = isset($detail->online_id) ? $detail->online_id : 0; if (!$oid) { $return['msg'] = '申请失败,未关联出车单数据,暂不允许操作!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $AcTruckOnline = new AcTruckOnline(); $truckol = $AcTruckOnline->findOne($oid); if (!$truckol) { $return['msg'] = '申请失败,关联出车单数据异常,暂不允许操作!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } /*修改票据状态*/ $saveData = []; //操作日志处理 $key = 'cwlogs'; $logs = $detail->cwlogs ? json_decode($detail->cwlogs, TRUE) : []; $log = Yii::$app->user->identity->username . '于' . date('Y-m-d H:i') . '申请冲红;冲红前状态码[' . $status . ']'; array_unshift($logs, $log); $saveData['cwlogs'] = json_encode($logs, JSON_UNESCAPED_UNICODE); $saveData['update_at'] = time(); $saveData['status_code'] = 2; $res = $detail->updateAll($saveData, ['id' => $id]); if (!$res) { $return['msg'] = '申请失败,票据数据保存不成功!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $return = []; $return['url'] = Url::toRoute(['feedriver/chonghong', 'cid' => $id]); $return['timeout'] = 1; //3秒后自动跳转 $return['msg'] = '申请成功,即将为您跳转到冲红单填写界面!'; $return['errorcode'] = 200; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } //填写冲红单 public function actionChonghong() { $pid = Yii::$app->session->get('pid'); $paytypes = Yii::$app->params['Paytype']; $status = Yii::$app->params['PayStatus']; $post = Yii::$app->request->post(); $chonghong_id = Yii::$app->request->get('cid'); $AcFeeModel = new AcFeeDriver(); $detail = $AcFeeModel->findOne($chonghong_id); if (!$detail) { $return = []; $return['msg'] = '待冲明细单获取失败'; $return['url'] = ''; $return['buttons'] = [ ['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']] ]; $return['content'] = $return['msg']; $return['class'] = 'warning'; Yii::$app->request->setBodyParams($return); return Yii::$app->runAction('index/msg'); } else { $detail = $detail->toArray(); $thumbs = isset($detail['thumbs']) ? json_decode($detail['thumbs'], TRUE) : []; $detail['thumbs'] = $thumbs; $logs = isset($detail['cwlogs']) ? json_decode($detail['cwlogs'], TRUE) : []; $detail['logs'] = ''; if ($logs) { foreach ($logs as $log) { $detail['logs'] .= $log . "
"; } } $money = (int)($detail['fee'] / 100); $detail['money1'] = $money; $detail['money2'] = (int)(($detail['fee'] - $money * 100) / 10); $detail['money3'] = $detail['fee'] - $detail['money1'] * 100 - $detail['money2'] * 10; //转换一下角分的正负值 $detail['money2'] = abs($detail['money2']); $detail['money3'] = abs($detail['money3']); $detail['chonghong_id'] = $chonghong_id; } $oid = isset($detail['online_id']) ? $detail['online_id'] : 0; if (!$oid) { $return = []; $return['msg'] = '未关联出车单数据,操作失败'; $return['errorcode'] = 0; $return['url'] = Url::toRoute('feedriver/list'); $return['buttons'] = [ ['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']] ]; $return['content'] = $return['msg']; $return['class'] = 'warning'; Yii::$app->request->setBodyParams($return); return Yii::$app->runAction('index/msg'); } $AcTruckOnline = new AcTruckOnline(); $truckol = $AcTruckOnline->findOne($oid); if (!$truckol) { $return = []; $return['msg'] = '关联出车单数据异常,操作失败'; $return['errorcode'] = 0; $return['url'] = Url::toRoute(['feedriver/list', 'oid' => $oid]); $return['buttons'] = [ ['title' => '好的,我知道了', 'class' => 'info', 'url' => $return['url']] ]; $return['content'] = $return['msg']; $return['class'] = 'warning'; Yii::$app->request->setBodyParams($return); return Yii::$app->runAction('index/msg'); } $order = $truckol->toArray(); $orderStatus = Yii::$app->params['OrderStatus']; $order['status_title'] = $orderStatus[$order['status_code']]; $sn = '00000000000'; //11位 $sn = substr($sn, 0, 11 - strlen($oid)); $sn .= $oid; $order['sn'] = $sn; //找出关联单据的所有冲红申请 $where = []; $where[] = 'and'; $where[] = ['=', 'pid', $pid]; $where[] = ['=', 'deleted', 0]; $where[] = ['=', 'chonghong_id', $chonghong_id]; $where[] = ['=', 'is_chonghong', 1]; $res = $AcFeeModel->find()->where($where)->all(); $totalCh = $AcFeeModel->find()->where($where)->sum('fee'); $detail['totalCh'] = $totalCh; $list = []; if ($res) { foreach ($res as $r) { $list[$r->id] = $r->toArray(); $list[$r->id]['logs'] = ''; $logs = json_decode($r->cwlogs, TRUE); if ($logs) { foreach ($logs as $l) { $list[$r->id]['logs'] .= $l . '
'; } } } } return $this->render('chonghong', [ 'order' => $order, 'paytypes' => $paytypes, 'status' => $status, 'oid' => $oid, 'detail' => $detail, 'list' => $list ]); } //删除冲红申请 public function actionDelete() { $pid = Yii::$app->session->get('pid'); $paytypes = Yii::$app->params['Paytype']; $status = Yii::$app->params['PayStatus']; $post = Yii::$app->request->post(); $id = Yii::$app->request->get('id'); $return = []; $return['timeout'] = 1; //几秒后自动跳转 $AcFeeModel = new AcFeeDriver(); $detail = $AcFeeModel->findOne($id); if (!$detail) { $return['msg'] = '操作失败,单据数据不存在,请重新选择单据!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($detail->pid != $pid) { $return['msg'] = '非本平台单据,不允许删除!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($detail->deleted != 0) { $return['msg'] = '单据已经被删除过了,操作失败!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($detail->status_code != 2) { $return['msg'] = '该单据状态不允许删除!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($detail->create_by != Yii::$app->user->identity->id) { //不允许修改非本人操作的表单 $return['msg'] = '您不是该费用单的制单人,不允许进行修改!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } /*只有冲红票的且未确认的才能被删除*/ if ($detail->is_chonghong != 1) { $return['msg'] = '只有未被确认的冲红类票据可被删除!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } /*修改票据状态*/ $saveData = []; //操作日志处理 $key = 'cwlogs'; $logs = $detail->cwlogs ? json_decode($detail->cwlogs, TRUE) : []; $log = Yii::$app->user->identity->username . '于' . date('Y-m-d H:i') . '删除'; array_unshift($logs, $log); $saveData['cwlogs'] = json_encode($logs, JSON_UNESCAPED_UNICODE); $saveData['update_at'] = time(); $saveData['deleted'] = 1; $res = $detail->updateAll($saveData, ['id' => $id]); if (!$res) { $return['msg'] = '删除失败,票据数据保存不成功!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $return = []; // $return['url'] = Url::toRoute(['feedriver/chonghong','cid'=>$id]); $return['timeout'] = 1; //几秒后自动跳转 $return['msg'] = '删除成功!'; $return['errorcode'] = 200; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } //结束冲红申请 public function actionFinishch() { $pid = Yii::$app->session->get('pid'); $paytypes = Yii::$app->params['Paytype']; $status = Yii::$app->params['PayStatus']; $post = Yii::$app->request->post(); $id = Yii::$app->request->get('id'); $return = []; $return['timeout'] = 1; //几秒后自动跳转 $AcFeeModel = new AcFeeDriver(); $detail = $AcFeeModel->findOne($id); if (!$detail) { $return['msg'] = '操作失败,单据数据不存在,请重新选择单据!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($detail->create_by != Yii::$app->user->identity->id) { //不允许修改非本人操作的表单 $return['msg'] = '您不是该费用单的制单人,不允许进行修改!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $status = isset($detail->status_code) ? $detail->status_code : 0; if ($status != 2) { $return['msg'] = '该单据并非申请冲红状态,无需结束冲红!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } /*已是冲红票的,不做结束冲红操作*/ if ($detail->is_chonghong) { $return['msg'] = '该单据已经其他费用单的冲红单,没有所谓的结束冲红操作!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } /*修改票据状态*/ $saveData = []; //操作日志处理 $key = 'cwlogs'; $logs = $detail->cwlogs ? json_decode($detail->cwlogs, TRUE) : []; $log = Yii::$app->user->identity->username . '于' . date('Y-m-d H:i') . '结束冲红'; array_unshift($logs, $log); $saveData['cwlogs'] = json_encode($logs, JSON_UNESCAPED_UNICODE); $saveData['update_at'] = time(); $saveData['status_code'] = -2; $res = $detail->updateAll($saveData, ['id' => $id]); if (!$res) { $return['msg'] = '申请失败,票据数据保存不成功!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $return = []; $return['timeout'] = 1; //3秒后自动跳转 $return['msg'] = '结束冲红操作成功!'; $return['errorcode'] = 200; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } //保存冲红信息 public function actionChonghongsave() { $post = Yii::$app->request->post(); $cid = (int)$post['chonghong_id']; $cid = 1; $pid = Yii::$app->session->get('pid'); $AcFeeModel = new AcFeeDriver(); if (!$cid) { $return['msg'] = '未指定要冲红的票据,不可继续操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } else { $fee = $AcFeeModel->findOne($cid); if ($fee->pid != $pid) { $return['msg'] = '非本平台票据,不可继续操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($fee->deleted != 0) { $return['msg'] = '票据已标记删除,不可继续操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($fee->create_by != Yii::$app->user->identity->id) { //不允许修改非本人操作的表单 $return['msg'] = '您不是该费用单的制单人,不允许进行冲红操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($fee->status_code != 2) { //检查原票据单是否仍为待冲红状态 $return['msg'] = '原费用单不是待冲红状态,不可继续操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } $AcTruckOnline = new AcTruckOnline(); $truckol = $AcTruckOnline->findOne($feeOrder->order_id); if (!$truckol) { $return['msg'] = '关联运单数据异常,不可继续操作!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } //屏蔽频繁操作 $where = []; $where[] = 'and'; $where[] = ['=', 'pid', $pid]; $where[] = ['=', 'deleted', 0]; $where[] = ['=', 'chonghong_id', $cid]; $where[] = ['=', 'is_chonghong', 1]; $AcFee = clone $AcFeeModel; $res = $AcFee->find()->where($where)->orderby('create_at ASC')->one(); $lasttime = time(); if ($res) { $t = time() - $res->create_at; if ($t < 60) { $return['msg'] = '操作太频繁,同1冲红申请在1分钟内仅可提交一次!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } $data = $fee->toArray(); //格式化数据 /*需要清除的部分*/ $cols = ['id', 'remark', 'thumbs', 'cwlogs', 'update_at', 'create_at', 'status_code']; foreach ($cols as $key) { unset($data[$key]); } $cols = ['money1', 'money2', 'money3']; //金额换算 $is_minus = FALSE; //考虑是否有负值情况 if (isset($post['money1']) && (int)$post['money1'] < 0) { $is_minus = TRUE; } else if (isset($post['money2']) && (int)$post['money2'] < 0) { $is_minus = TRUE; } else if (isset($post['money3']) && (int)$post['money3'] < 0) { $is_minus = TRUE; } foreach ($cols as $key) { if (isset($post[$key]) && $post[$key] != '') { $money[$key] = abs((int)$post[$key]); //取绝对值 } else { $money[$key] = 0; } } //角、分 数值必须个位数 if ($money['money2']) { $money['money2'] = min($money['money2'], 9); } if ($money['money3']) { $money['money3'] = min($money['money3'], 9); } $data['fee'] = 100 * $money['money1'] + 10 * $money['money2'] + $money['money3']; //需冲红金额 if ($is_minus) { $data['fee'] = 0 - $data['fee']; } //补充说明 //图片组处理 $key = 'thumbs'; $imgs = []; if (isset($post[$key]) && !empty($post[$key])) { $imgs = $post[$key]; //数组格式 $imgs = array_unique($imgs); } $data[$key] = json_encode($imgs, JSON_UNESCAPED_UNICODE); //操作日志处理 $key = 'logs'; $logs = []; if (isset($post[$key]) && $post[$key] != '') { $log = Yii::$app->user->identity->username . '于' . date('Y-m-d H:i') . '备注-' . htmlspecialchars($post[$key]); $data['remark'] = htmlspecialchars($post[$key]); } else { $log = Yii::$app->user->identity->username . '于' . date('Y-m-d H:i') . '进行了修改'; } array_unshift($logs, $log); $data['cwlogs'] = json_encode($logs, JSON_UNESCAPED_UNICODE); $_time = time(); $data['create_by'] = Yii::$app->user->identity->id; $data['create_at'] = $_time; $data['update_at'] = $_time; $data['is_chonghong'] = 1; $data['chonghong_id'] = $cid; $data['status_code'] = 2; $AcFee = clone $AcFeeModel; foreach ($data as $key => $val) { $AcFee->$key = $val; } $res = $AcFee->insert(); $id = $AcFee->attributes['id']; //获取插入后id if ($res) { $return['msg'] = '保存成功;可提醒财务人员进行审核操作!'; $return['errorcode'] = 0; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } else { $return['msg'] = '保存失败,请稍后再试!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } public function actionCaiwusave() { $post = Yii::$app->request->post(); $return = []; if (!isset($post['id'])) { $return['msg'] = '请先重新选择单据!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $id = $post['id']; $pid = Yii::$app->session->get('pid'); $AcFeeModel = new AcFeeDriver(); $fee = $AcFeeModel->findOne($id); if (!$fee) { $return['msg'] = '单据数据不存在,请重新选择单据!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($fee->pid != $pid) { $return['msg'] = '单据不属于本平台,无权操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($fee->is_chonghong == 1 && $fee->status_code == -2) { $return['msg'] = '该单据为已冲红票据,不可编辑修改!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $is_pay_send = isset($post['is_pay_send']) ? $post['is_pay_send'] : 0; $is_pay_receive = isset($post['is_pay_receive']) ? $post['is_pay_receive'] : 0; if ($is_pay_send && $is_pay_receive) { $return['msg'] = '支付发生地为二选一,起运地或目的地必须选一个!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $_time = time(); if (!isset($post['vcode'])) { $return['msg'] = '填写财务操作验证码才能继续!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } else if ($post['vcode'] == '') { $return['msg'] = '填写财务操作验证码才能继续!'; $return['errorcode'] = 100; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } else { // 校验验证码 $plat = AcPlat::findOne($pid); $platExt = json_decode($plat->remark, TRUE); $vcodeModel = new CVcode(); //查询上次发送记录 $where = []; $where['mobile'] = $platExt['cw_phone']; $where['deleted'] = 0; $where['type'] = 'caiwu'; $res = $vcodeModel->find()->where($where)->orderby('id DESC')->one(); if ($res) { if (($_time - $res->create_at) > 7200) { $return['msg'] = '验证码已超时,请重新获取后再填写提交!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } else { if ($post['vcode'] != $res->code) { $return['msg'] = '财务操作验证码校验失败,请检查并重新输入验证码!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } } else { $return['msg'] = '财务操作验证码校验失败,请确认是否配置了财务手机号或发送了验证码!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } $status = Yii::$app->params['PayStatus']; $statuscode = $fee->status_code; $saveData = []; //操作日志处理 $key = 'logs'; $logs = $fee->cwlogs ? json_decode($fee->cwlogs, TRUE) : []; if (isset($post[$key]) && $post[$key] != '') { $log = Yii::$app->user->identity->username . '于' . date('Y-m-d H:i') . '批复-' . htmlspecialchars($post[$key]); } else { $log = Yii::$app->user->identity->username . '于' . date('Y-m-d H:i') . '进行了审核操作'; } array_unshift($logs, $log); $saveData['cwlogs'] = json_encode($logs, JSON_UNESCAPED_UNICODE); $saveData['update_at'] = $_time; /*驳回 *要求状态为 待确认、申请冲红 */ if (isset($post['disagree'])) { if (!in_array($statuscode, Yii::$app->params['PayStatusRequireArr']['-1'])) { $_status = isset($status[$statuscode]) ? $status[$statuscode] : '未知'; $return['msg'] = '当前状态为' . $_status . ';不可做驳回操作!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $saveData['status_code'] = -1; //驳回状态 $res = $fee->updateAll($saveData, ['id' => $id]); if (!$res) { $return['msg'] = '操作失败,单据数据更新没有成功!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $return['msg'] = '操作完成,费用单据已经驳回!'; $return['errorcode'] = 0; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } /*确认但不入账 *要求状态为 待确认、驳回 */ if (isset($post['agree99'])) { if (!in_array($statuscode, Yii::$app->params['PayStatusRequireArr']['99'])) { $_status = isset($status[$statuscode]) ? $status[$statuscode] : '未知'; $return['msg'] = '当前状态为' . $_status . ';不可确认!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($fee->is_chonghong == 1) { $return['msg'] = '当前为冲红票据,只支持“确认冲红”、“驳回”两种操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } //查询关联出车单 $TruckOnlineModel = new AcTruckOnline(); $truckol = $TruckOnlineModel->findOne($oid); if (!$truckol) { $return['msg'] = '关联出车单不存在!'; $res = $fee->updateAll($saveData, ['id' => $id]); if ($res) { $return['msg'] = '操作完成!但' . $return['msg']; $return['errorcode'] = 0; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } else { $return['msg'] = '操作失败!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } $saveData['status_code'] = 99; //确认但不入账 $res = $fee->updateAll($saveData, ['id' => $id]); if (!$res) { $return['msg'] = '操作失败,单据数据更新没有成功!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $return['msg'] = '操作完成,费用单据已更新!'; $return['errorcode'] = 0; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } /*确认并且入账 *要求状态为 待确认、驳回、仅确认不入账 */ if (isset($post['agree1'])) { if (!in_array($statuscode, Yii::$app->params['PayStatusRequireArr']['1'])) { $_status = isset($status[$statuscode]) ? $status[$statuscode] : '未知'; $return['msg'] = '当前状态为' . $_status . ';不可确认入账!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($fee->is_chonghong == 1) { $return['msg'] = '当前为冲红票据,只支持“确认冲红”、“驳回”两种操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } //查询关联出车单 $oid = $fee->online_id; $TruckOnlineModel = new AcTruckOnline(); $truckol = $TruckOnlineModel->findOne($oid); if (!$truckol) { $return['msg'] = '关联出车单不存在,入账失败,已自动变更为“仅确认不入账”!'; $saveData['status_code'] = 99; //仅确认不入账 $res = $fee->updateAll($saveData, ['id' => $id]); if ($res) { $return['msg'] = '操作完成!但' . $return['msg']; $return['errorcode'] = 0; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } else { $return['msg'] = '操作失败!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } $return['msg'] = '操作完成,费用单据均已更新!'; $return['errorcode'] = 0; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } /*确认冲红 *要求状态为 申请冲红、标记冲红单、有冲红单关联 */ if (isset($post['agree-2'])) { if (!in_array($statuscode, Yii::$app->params['PayStatusRequireArr']['2'])) { $_status = isset($status[$statuscode]) ? $status[$statuscode] : '未知'; $return['msg'] = '当前状态为' . $_status . ';不可冲红!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($fee->is_chonghong != 1) { $return['msg'] = '当前并非冲红票据,不支持“确认冲红”操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if (!$fee->chonghong_id) { $return['msg'] = '标记了冲红但未关联相应的对冲票据,不能继续操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } //校验对冲票据有效性 $chonghong = $AcFeeModel->findOne($fee->chonghong_id); if (!$chonghong) { $return['msg'] = '关联对冲票据的数据获取异常,操作中断!'; $return['errorcode'] = 404; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } if ($chonghong->deleted) { $return['msg'] = '关联对冲票据已标记删除,不能继续操作!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $saveData['status_code'] = -2; //确认冲红 $cols = ['money1', 'money2', 'money3']; $is_minus = FALSE; foreach ($cols as $key) { if (isset($post[$key]) && $post[$key] != '') { if ((int)$post[$key] < 0) { $is_minus = TRUE; //考虑是否有负值情况 } $money[$key] = abs((int)$post[$key]); //取绝对值 } else { $money[$key] = 0; } } //角、分 数值必须个位数 if ($money['money2']) { $money['money2'] = min($money['money2'], 9); } if ($money['money3']) { $money['money3'] = min($money['money3'], 9); } $ch_fee = 100 * $money['money1'] + 10 * $money['money2'] + $money['money3']; //要冲红的金额 if ($is_minus) { $ch_fee = 0 - $ch_fee; } $saveData['fee'] = $ch_fee; //本票据实际冲红金额 $chData = []; $saveData['update_at'] = $_time;; $_fee = $chonghong->fee - $ch_fee; //差值即为原单据更新后的金额 $res = $fee->updateAll($saveData, ['id' => $id]); if (!$res) { $return['msg'] = '冲红失败,单据数据更新没有成功!'; $return['errorcode'] = 400; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } $chData['status_code'] = 2; //避免不可预知的逻辑错误,原对冲票状态仍然应标记为申请冲红状态 $res = $chonghong->updateAll($chData, ['id' => $chonghong->id]); //对冲票为原始数据,不作其他修改 $orderData = []; $orderData['update_at'] = $_time; $return['msg'] = '操作完成,运单数据与费用单据均已更新!'; $return['errorcode'] = 0; exit(json_encode($return, JSON_UNESCAPED_UNICODE)); } } }