|
@@ -4,13 +4,12 @@
|
|
|
namespace app\cxinv\controller;
|
|
|
|
|
|
|
|
|
-use app\cxinv\model\CgdInfo;use app\cxinv\model\OrderCategory;use app\cxinv\model\Pay;use app\cxinv\model\PayInfo;use app\user\model\AccountCompany;use app\user\model\Business;use app\user\model\Supplier;use think\App;use think\facade\Validate;
|
|
|
+use app\cxinv\model\CgdInfo;use app\cxinv\model\FhdChild;use app\cxinv\model\InvoicePay;use app\cxinv\model\InvoicePool;use app\cxinv\model\OrderCategory;use app\cxinv\model\Pay;use app\cxinv\model\PayInfo;use app\cxinv\model\RoleAction;use app\cxinv\model\TagLog;use app\cxinv\model\Track;use app\user\model\AccountCompany;use app\user\model\Business;use app\user\model\Supplier;use think\App;use think\facade\Validate;
|
|
|
class Payment extends Base{
|
|
|
public function __construct(App $app) {
|
|
|
parent::__construct($app);
|
|
|
$this->model = new Pay();
|
|
|
}
|
|
|
-
|
|
|
public function create(){
|
|
|
$params = $this->request->param(['cids'=>[]],"post","trim");
|
|
|
$valid=Validate::rule(["cids|采购单id集合"=>"require|array"]);
|
|
@@ -75,6 +74,313 @@ class Payment extends Base{
|
|
|
$this->model->rollback();
|
|
|
return error($e->getMessage());
|
|
|
}
|
|
|
+ event("report_code",["type"=>"add","key"=>"payNo","value"=>$payNo,"main"=>['key'=>'cgdNo','value'=>array_column($payinfo,'cgdNo')]]);
|
|
|
return success('创建付款单成功');
|
|
|
}
|
|
|
-}
|
|
|
+ public function list(){
|
|
|
+ $params = $this->request->param(['page'=>1,'size'=>20,'startTime'=>'',"endTime"=>"","supplierNo"=>"",
|
|
|
+ "supplierName"=>"","pay_status"=>"","inv_status"=>"","tag_id"=>"","status"=>"",'companyNo'=>'','pay_type'=>'',
|
|
|
+ 'companyName'=>'','is_comon'=>'',"relaComNo"=>""],"post","trim");
|
|
|
+ $where=[['is_del','=',0],['pay_type','=',$params['pay_type']??1]];
|
|
|
+ $check = RoleAction::checkRole($this->roleid, [77,117]);
|
|
|
+ if ($check) $where[]=['apply_id','=',$this->uid];
|
|
|
+ if ($params['startTime']!=="") $where[]=['addtime','>=',startTime($params['startTime'])];
|
|
|
+ if ($params['endTime']!=="") $where[]=['addtime','<=',endTime($params['endTime'])];
|
|
|
+ if ($params['supplierNo']!=="") $where[]=['supplierNo','like','%'.$params['supplierNo'].'%'];
|
|
|
+ if ($params['supplierName']!=="") $where[]=['supplierName','like','%'.$params['supplierName'].'%'];
|
|
|
+ if ($params['pay_status']!==""){
|
|
|
+ if($params['pay_status']==0)$where[]=['pay_status','<>',3];
|
|
|
+ else $where[]=['pay_status','=',$params['pay_status']];
|
|
|
+ }
|
|
|
+ if ($params['inv_status']!==""){
|
|
|
+ if($params['inv_status']==0)$where[]=['inv_status','<>',3];
|
|
|
+ else $where[]=['inv_status','=',$params['inv_status']];
|
|
|
+ }
|
|
|
+ if ($params['status']!=="") $where[]=['status','=',$params['status']];
|
|
|
+ if ($params['tag_id']!=="") {
|
|
|
+ $conditions_map = [
|
|
|
+ 1 => ['inv_tag', '=', 1],
|
|
|
+ 2 => ['pay_tag', '=', 1],
|
|
|
+ 3 => ["pay_tag|inv_tag", '=', 1],
|
|
|
+ 4 => ['pay_tag&inv_tag', '=', 1],
|
|
|
+ ];
|
|
|
+ $where[]=$conditions_map[$params['tag_id']];
|
|
|
+ }
|
|
|
+ if ($params['companyNo']!=="") $where[]=['companyNo','=',$params['companyNo']];
|
|
|
+ if ($params['companyName']!=="") $where[]=['companyName','like','%'.$params['companyName'].'%'];
|
|
|
+ if ($params['is_comon']!=="") $where[]=['is_comon','=',$params['is_comon']];
|
|
|
+ if($params['relaComNo']!=="") $where[]=['companyNo|supplierNo','=',$params['relaComNo']];
|
|
|
+ $list = $this->model->where($where)->order("id desc")->paginate(["list_rows"=>$params['size'],"page"=>$params['page']]);
|
|
|
+
|
|
|
+ foreach ($list as $k=>&$v){
|
|
|
+ $v['orderNum'] = PayInfo::where([['payNo','=',$v['payNo']],['is_del','=',0],['status','=',1]])->count();
|
|
|
+ $v['inv_tag_name']='';
|
|
|
+ $v['pay_tag_name']='';
|
|
|
+ $v['pay_tag_img']='';
|
|
|
+ $v['inv_tag_id']='0';
|
|
|
+ $v['pay_tag_id']='0';
|
|
|
+ $v['pay_tag_remark']='';
|
|
|
+ $v['inv_tag_img']='';
|
|
|
+ $v['inv_tag_remark']='';
|
|
|
+ if($v['inv_tag']==1 || $v['pay_tag']==1){
|
|
|
+ $tag = TagLog::alias("a")
|
|
|
+ ->leftJoin("order_tag b", "a.tag_id=b.id")
|
|
|
+ ->where(['code'=>$v['payNo'],'a.status'=>[1,2]])
|
|
|
+ ->order("a.id desc")
|
|
|
+ ->column('a.id,b.tag_name,a.tag_img,a.tag_remark','b.type');
|
|
|
+ if($tag['inv_tag']==1){
|
|
|
+ $v['inv_tag_name']=$tag['2']['tag_name']??"";
|
|
|
+ $v['inv_tag_img']=$tag['2']['tag_img']??'';
|
|
|
+ $v['inv_tag_remark']=$tag['2']['tag_remark']??'';
|
|
|
+ $v['inv_tag_id']=$tag['2']['id']??'';
|
|
|
+ }
|
|
|
+ if($tag['pay_tag']==1){
|
|
|
+ $v['pay_tag_name']=$tag['1']['tag_name']??'';
|
|
|
+ $v['pay_tag_img']=$tag['1']['tag_img']??'';
|
|
|
+ $v['pay_tag_remark']=$tag['1']['tag_remark']??'';
|
|
|
+ $v['pay_tag_id']=$tag['1']['id']??'';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $v['has_account'] = AccountCompany::SupplierHasAcount($v['supplierNo']);
|
|
|
+ }
|
|
|
+
|
|
|
+ return success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
|
|
|
+ }
|
|
|
+ public function save(){
|
|
|
+ $params = $this->request->param(["cids"=>[],"payNo"=>""],"post","trim");
|
|
|
+ $valid=Validate::rule(["cids|采购单集合数据"=>"require|array","payNo|对账单编号"=>"require|max:255"]);
|
|
|
+ if(!$valid->check($params)) return error($valid->getError());
|
|
|
+ $pay = $this->model->where(['payNo'=>$params['payNo']])->findOrEmpty();
|
|
|
+ if($pay->isEmpty()) return error("对账单不存在");
|
|
|
+ if($pay['status']!=1) return error("对账单已提交审核");
|
|
|
+ $cgdlist = CgdInfo::whereIn('id',$params['cids'])
|
|
|
+ ->field('sequenceNo,supplierNo,totalPrice,companyNo')->select();
|
|
|
+ if($cgdlist->isEmpty())return error('采购单数据不能为空');
|
|
|
+ $supplier =array_unique($cgdlist->column('supplierNo')) ;
|
|
|
+ $company = array_unique($cgdlist->column('companyNo'));
|
|
|
+ if (count($supplier)>1) return error('采购单数据供应商不一致');
|
|
|
+ if (count($company)>1) return error('采购单数据业务公司不一致');
|
|
|
+ if($this->level==2){
|
|
|
+ $isBool = AccountCompany::SupplierHasAcount($supplier[0]);
|
|
|
+ if ($isBool) return error('该供应商已经开通账号,不允许当前账号操作');
|
|
|
+ }
|
|
|
+ $orderCate = OrderCategory::where(['code'=>$cgdlist->column('sequenceNo')])->column('*','code');
|
|
|
+ if(empty($orderCate)) return error('采购单数据商品进项类目不存在');
|
|
|
+ $payCgd = PayInfo::where([['payNo','=',$params['payNo']],['is_del','=',0]])->column("cgdNo");
|
|
|
+ if (!empty($payCgd)){
|
|
|
+ $add = array_diff($cgdlist->column('sequenceNo'),$payCgd);
|
|
|
+ $remove = array_diff($payCgd,$cgdlist->column('sequenceNo'));
|
|
|
+ }
|
|
|
+ $payinfo = [];
|
|
|
+ $totalPrice='0';
|
|
|
+ foreach ($cgdlist as $k=>$v){
|
|
|
+ if(!empty($add)&& in_array($v['sequenceNo'],$add)){
|
|
|
+ $temp= [
|
|
|
+ 'cgdNo'=>$v['sequenceNo'],
|
|
|
+ 'total_fee'=>$v['totalPrice'],
|
|
|
+ 'wapy_fee'=>$v['totalPrice'],
|
|
|
+ 'winv_fee'=>$v['totalPrice'],
|
|
|
+ 'payNo'=>$params['payNo']
|
|
|
+ ];
|
|
|
+ if (!isset($orderCate[$v['sequenceNo']])) return error("采购单{$v['sequenceNo']}数据商品进项类目不存在");
|
|
|
+ if($v['status']==1) return error("采购单{$v['sequenceNo']}数据已付款");
|
|
|
+ if($v['status']==2) return error("采购单{$v['sequenceNo']}数据不结算");
|
|
|
+ $payinfo[]=$temp;
|
|
|
+ }
|
|
|
+ $totalPrice+=$v['totalPrice'];
|
|
|
+ }
|
|
|
+ $paydata=[
|
|
|
+ 'total_fee'=>$totalPrice,
|
|
|
+ 'supplierNo'=>$supplier[0],
|
|
|
+ 'supplierName'=>Supplier::where('code',$supplier[0])->value('name',''),
|
|
|
+ 'companyNo'=>$company[0],
|
|
|
+ 'companyName'=>Business::where('companyNo',$company[0])->value('company',''),
|
|
|
+ 'wpay_fee'=>$totalPrice,
|
|
|
+ 'ainv_fee'=>$totalPrice,
|
|
|
+ ];
|
|
|
+
|
|
|
+ $this->model->startTrans();
|
|
|
+ try{
|
|
|
+ $paySave=$pay->save($paydata);
|
|
|
+ if($paySave==false) throw new \Exception("对账单保存失败");
|
|
|
+ if(!empty($payinfo)){
|
|
|
+ $payinfoSave = (new \app\cxinv\model\PayInfo)->saveAll($payinfo);
|
|
|
+ if($payinfoSave==false) throw new \Exception("对账单明细保存失败");
|
|
|
+ $up = CgdInfo::where([['sequenceNo','in',$add],['status','=',0]])->save(['status'=>1, 'updatetime'=>date('Y-m-d H:i:s')]);
|
|
|
+ if($up==false) throw new \Exception("采购单状态修改失败");
|
|
|
+ }
|
|
|
+ if (!empty($remove)){
|
|
|
+ $payRemove = PayInfo::where([['cgdNo','in',$remove],['payNo','=',$params['payNo']]])->save(['is_del'=>1, 'updatetime'=>date('Y-m-d H:i:s')]);
|
|
|
+ if($payRemove==false) throw new \Exception("对账单明细删除失败");
|
|
|
+ $up = CgdInfo::where([['sequenceNo','in',$remove],['status','=',1]])->save(['status'=>0, 'updatetime'=>date('Y-m-d H:i:s')]);
|
|
|
+ if($up==false) throw new \Exception("采购单状态修改失败");
|
|
|
+ }
|
|
|
+ $this->model->commit();
|
|
|
+ event('report_code',['type'=>'add','key'=>'payNo','value'=>$params['payNo'],'main'=>['key'=>'cgdNo','value'=>$add]]);
|
|
|
+ event('report_code',['type'=>'sub','key'=>'payNo','value'=>$params['payNo'],'main'=>['key'=>'cgdNo','value'=>$remove]]);
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ $this->model->rollback();
|
|
|
+ return error($exception->getMessage());
|
|
|
+ }
|
|
|
+ return success('保存成功');
|
|
|
+ }
|
|
|
+ public function status(){
|
|
|
+ $params = $this->request->param(["payNo"=>"","status"=>"","remark"=>""],"post","trim");
|
|
|
+ $valid = Validate::rule(["payNo|对账申请编号"=>"require|max:255","status|状态"=>"require|in:1,2,3,4","remark|备注"=>"max:255"]);
|
|
|
+ if(!$valid->check($params)) return error($valid->getError());
|
|
|
+ $pay = $this->model->where(['payNo'=>$params['payNo'],"is_del"=>0])->findOrEmpty();
|
|
|
+ if($pay->isEmpty()) return error("对账单不存在");
|
|
|
+ if($params["status"]==4){
|
|
|
+ if($pay['inv_tag']==1)return error('存在回票标签未解除');
|
|
|
+ if($pay['pay_tag']==1)return error('存在付款标签未解除');
|
|
|
+ if($pay->pay_status!=1)return error("对账单存在未解除的付款金额");
|
|
|
+ if($pay->inv_status!=1) return error("对账单存在未解除的开票金额");
|
|
|
+ if($pay->is_comon==1){
|
|
|
+ $invoceAr=InvoicePay::where(['payNo'=>$params['payNo']])->column('invNo');
|
|
|
+ if(!empty($invoceAr)){
|
|
|
+ $ist= InvoicePool::where([['invNo','in',$invoceAr],['status','in',[0,1,2,3,4]]])->select()
|
|
|
+ ->isEmpty();
|
|
|
+ if($ist==false)return error('通用订单存在开票申请未解除');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $this->model->startTrans();
|
|
|
+ try{
|
|
|
+ $pay->status=$params["status"];
|
|
|
+ $pay->remark=$params["remark"];
|
|
|
+ $pay->updatetime=date("Y-m-d H:i:s");
|
|
|
+ $paySave=$pay->save();
|
|
|
+ if($paySave==false) throw new \Exception("对账单状态修改失败");
|
|
|
+ if($params["status"]==4||$params["status"]==3){
|
|
|
+ $cgdNo= PayInfo::where(['payNo'=>$params['payNo'],'is_del'=>0,"status"=>1])->column('cgdNo');
|
|
|
+ if(!empty($cgdNo)){
|
|
|
+ if($params["pay_type"]==1){
|
|
|
+ $up = CgdInfo::where([['sequenceNo','in',$cgdNo],['status','=',1]])->save(['status'=>0, 'updatetime'=>date('Y-m-d H:i:s')]);
|
|
|
+ if($up==false) throw new \Exception("采购单状态修改失败");
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $up = Track::where([['TrackCode','in',$cgdNo],['status','=',1]])->save(['status'=>0, 'updatetime'=>date('Y-m-d H:i:s')]);
|
|
|
+ if($up==false) throw new \Exception('物流单状态修改失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $payRemove = PayInfo::where([['payNo'=>$params['payNo'],'status'=>1,'is_del'=>0]])->save(['status'=>0, 'updatetime'=>date('Y-m-d H:i:s')]);
|
|
|
+ if($payRemove==false) throw new \Exception("对账单明细删除失败");
|
|
|
+ }
|
|
|
+ $this->model->commit();
|
|
|
+ event('report_code',['type'=>'sub','key'=>'payNo','value'=>$params['payNo']]);
|
|
|
+ if(($params['status']==3 || $params['status']==4)&&$pay['is_comon']==1){
|
|
|
+ event('comonOrder',['payNo'=>$params['payNo'],'type'=>'check']);
|
|
|
+ }
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ $this->model->rollback();
|
|
|
+ return error($exception->getMessage());
|
|
|
+ }
|
|
|
+ return success('保存成功');
|
|
|
+ }
|
|
|
+ public function delete(){
|
|
|
+ $params = $this->request->param(["payNo"=>""],"post","trim");
|
|
|
+ $valid = Validate::rule(["payNo|对账单编号"=>"require|max:255"]);
|
|
|
+ if(!$valid->check($params)) return error($valid->getError());
|
|
|
+ $pay = $this->model->where(['payNo'=>$params['payNo'],"is_del"=>0])->findOrEmpty();
|
|
|
+ if($pay->isEmpty()) return error("对账单不存在");
|
|
|
+ if($pay->status!=1)return error('对账单当前状态不可删除');
|
|
|
+ if($this->level==2){
|
|
|
+ $isBool = AccountCompany::SupplierHasAcount($pay->supplierNo);
|
|
|
+ if ($isBool) return error('该供应商已经开通账号,不允许当前账号操作');
|
|
|
+ }
|
|
|
+ $payinfo = PayInfo::where(['payNo'=>$params['payNo'],"status"=>1,'is_del'=>0])->select();
|
|
|
+ if($payinfo->isEmpty()) return error('该对账单没有明细');
|
|
|
+ $this->model->startTrans();
|
|
|
+ try{
|
|
|
+ $pay->is_del=1;
|
|
|
+ $pay->updatetime=date("Y-m-d H:i:s");
|
|
|
+ $paySave=$pay->save();
|
|
|
+ if($paySave==false) throw new \Exception("对账单删除失败");
|
|
|
+ $payRemove = PayInfo::where([['payNo'=>$params['payNo'],"status"=>1,'is_del'=>0]])->save(["is_del"=>1, 'updatetime'=>date('Y-m-d H:i:s')]);
|
|
|
+ if($payRemove==false) throw new \Exception("对账单明细删除失败");
|
|
|
+ if ($pay->pay_type==1){
|
|
|
+ $cgdNo=$payinfo->column('cgdNo');
|
|
|
+ if(!empty($cgdNo)){
|
|
|
+ $up = CgdInfo::where([['sequenceNo','in',$cgdNo],['status','=',1]])->save(['status'=>0, 'updatetime'=>date('Y-m-d H:i:s')]);
|
|
|
+ if($up==false) throw new \Exception( "采购单状态修改失败");
|
|
|
+ }else{
|
|
|
+ $up = Track::where([['TrackCode','in',$cgdNo],['status','=',1]])->save(['status'=>0, 'updatetime'=>date('Y-m-d H:i:s')]);
|
|
|
+ if($up==false) throw new \Exception('物流单状态修改失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $this->model->commit();
|
|
|
+ event('report_code',['type'=>'sub','key'=>'payNo','value'=>$params['payNo']]);
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ $this->model->rollback();
|
|
|
+ return error($exception->getMessage());
|
|
|
+ }
|
|
|
+ return success('删除成功');
|
|
|
+ }
|
|
|
+ public function info(){
|
|
|
+ $params = $this->request->param(["payNo"=>""],"post","trim");
|
|
|
+ $valid = Validate::rule(["payNo|对账单编号"=>"require|max:255"]);
|
|
|
+ if(!$valid->check($params)) return error($valid->getError());
|
|
|
+ $pay = $this->model->where(['payNo'=>$params['payNo'],"is_del"=>0])->findOrEmpty();
|
|
|
+ if($pay->isEmpty()) return error("对账单不存在");
|
|
|
+ $payinfo= PayInfo::where(['payNo'=>$params['payNo'],"is_del"=>0,"status"=>1])->select();
|
|
|
+ if($payinfo->isEmpty()) return error("对账单明细不存在");
|
|
|
+ $cgdNo = $payinfo->column('cgdNo');
|
|
|
+ if($pay->pay_type==1){
|
|
|
+ $cgdInfo = CgdInfo::where(['sequenceNo'=>['in',$cgdNo],'is_del'=>0,'status'=>1])->select();
|
|
|
+ if(!$cgdInfo->isEmpty()){
|
|
|
+ $cgdInfo = $cgdInfo->toArray();
|
|
|
+ foreach ($cgdInfo as $key=>&$value){
|
|
|
+ $value['orderTax'] = OrderCategory::where(['code'=>$value['sequenceNo'],'spuCode'=>$value['goodNo']])
|
|
|
+ ->field(['cat_code', 'cat_name', 'merge_code', 'short_name', 'tax', 'inv_good_name'])->findOrEmpty();
|
|
|
+ $value['catInfo'] = json_decode($value['catInfo'],true);
|
|
|
+ $value['goodNum'] =$value['goodNum']- $value['thNum'];
|
|
|
+ $value['sendNum'] =$value['sendNum']- $value['thNum'];
|
|
|
+ if($payinfo['is_comon']==1){
|
|
|
+ $value['qrdCode'] = (new \app\cxinv\model\ComonOrder())->where(['cgdNo'=>$value['sequenceNo']])->value('orderCode','');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{
|
|
|
+ $cgdInfo = Track::where(['TrackCode'=>['in',$cgdNo],'is_del'=>0,'status'=>1])->select();
|
|
|
+ if(!$cgdInfo->isEmpty()){
|
|
|
+ $fhds = FhdChild::where(['outChildCode'=>$cgdInfo->column("outChildCode")])->column("outCode,good_name,spuCode,post_name,post_code","outChildCode");
|
|
|
+ $cgdInfo = $cgdInfo->toArray();
|
|
|
+ foreach ($cgdInfo as $key=>&$value){
|
|
|
+ if(!isset($fhds[$value['outChildCode']]))$fhds[$value['outChildCode']]=["outCode"=>"","good_name"=>"","spuCode"=>"","post_name"=>"","post_code"=>""];
|
|
|
+ $value = array_merge($value,$fhds[$value['outChildCode']]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $pay['pay_type']=Supplier::where(['code'=>$pay['supplierNo']])->value("pay_method",'');
|
|
|
+ $pay['inv_tag_name']='';
|
|
|
+ $pay['pay_tag_name']='';
|
|
|
+ $pay['pay_tag_img']='';
|
|
|
+ $pay['inv_tag_id']='0';
|
|
|
+ $pay['pay_tag_id']='0';
|
|
|
+ $pay['pay_tag_remark']='';
|
|
|
+ $pay['inv_tag_img']='';
|
|
|
+ $pay['inv_tag_remark']='';
|
|
|
+ if($pay['inv_tag']==1 || $pay['pay_tag']==1){
|
|
|
+ $tag = TagLog::alias('a')
|
|
|
+ ->leftJoin('order_tag b', 'a.tag_id=b.id')
|
|
|
+ ->where(['code'=>$pay['payNo'],'a.status'=>[1,2]])
|
|
|
+ ->order('a.id desc')
|
|
|
+ ->column('a.id,b.tag_name,a.tag_img,a.tag_remark','b.type');
|
|
|
+ if($tag['inv_tag']==1){
|
|
|
+ $pay['inv_tag_name']=$tag['2']['tag_name']??'';
|
|
|
+ $pay['inv_tag_img']=$tag['2']['tag_img']??'';
|
|
|
+ $pay['inv_tag_remark']=$tag['2']['tag_remark']??'';
|
|
|
+ $pay['inv_tag_id']=$tag['2']['id']??'';
|
|
|
+ }
|
|
|
+ if($tag['pay_tag']==1){
|
|
|
+ $pay['pay_tag_name']=$tag['1']['tag_name']??'';
|
|
|
+ $pay['pay_tag_img']=$tag['1']['tag_img']??'';
|
|
|
+ $pay['pay_tag_remark']=$tag['1']['tag_remark']??'';
|
|
|
+ $pay['pay_tag_id']=$tag['1']['id']??'';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $pay['cgdlist']= $cgdInfo;
|
|
|
+ return success("获取成功",$pay);
|
|
|
+ }
|
|
|
+ }
|