wugg 5 月之前
父节点
当前提交
5279be8806
共有 5 个文件被更改,包括 421 次插入15 次删除
  1. 99 0
      app/cxinv/controller/Label.php
  2. 16 1
      app/cxinv/model/OrderTag.php
  3. 1 11
      app/cxinv/model/PaymentOrder.php
  4. 304 1
      app/cxinv/model/TagLog.php
  5. 1 2
      app/provider.php

+ 99 - 0
app/cxinv/controller/Label.php

@@ -0,0 +1,99 @@
+<?php
+
+
+namespace app\cxinv\controller;
+
+
+use app\cxinv\model\OrderTag;use app\cxinv\model\TagLog;use think\App;use think\facade\Validate;
+class Label extends Base{
+    public function __construct(App $app) {
+        parent::__construct($app);
+        $this->model = new OrderTag();
+    }
+
+    public function create(){
+        $param = $this->request->param(["tag_id"=>"","code"=>"","total_fee"=>"","tag_img"=>"","tag_remark"=>""],"post","trim");
+        $valid = Validate::rule([
+            "tag_id|标签id"=>"require|number|gt:0",
+            "code|订单编号"=>"require|max:255",
+            "total_fee|标签金额"=>"require|float|gt:0",
+            "tag_img|标签图片"=>"max:255",
+            "tag_remark|标签备注"=>"max:255"
+            ]);
+        if(!$valid->check($param)) return error($valid->getError());
+        $tag_info= $this->model->where("id",$param["tag_id"])->findOrEmpty();
+        if($tag_info->isEmpty()) return error("标签不存在");
+         $tagdata=[
+	            'code'=>$param['code'],
+	            'tag_id'=>$param['tag_id'],
+	            'creater'=>$this->uname,
+	            'createrid'=>$this->uid,
+	            'tag_fee'=>$param['total_fee'],
+	            'tag_img'=>$param['tag_img'],
+	            'tag_remark'=>$param['tag_remark'],
+	            'status'=>1,
+			];
+        $this->model->startTrans();
+        try{
+            TagLog::CheckOrderInfo($param['code'],$param['total_fee'],$tag_info->type);
+            TagLog::create($tagdata);
+            $this->model->commit();
+        }catch (\Exception $e){
+            $this->model->rollback();
+            return error($e->getMessage());
+        }
+        return success('创建成功');
+    }
+
+      public function returnTag(){
+        $param= $this->request->post(['orderCode'=>'','type'=>''],'post','trim');
+        $valid =Validate::rule(['orderCode|订单编号'=>'require','type|标签类型'=>'require|number|in:1,2,3,4,5,6']);
+        if($valid->check($param)==false)return error($valid->getError());
+        $loginfo = TagLog::withJoin(['tagInfo'])->where(['code'=>$param['orderCode'],'tag_log.status'=>[1,2],
+        'tagInfo.type'=>$param['type']])->order('tag_log.id','desc')->findOrEmpty();
+        if($loginfo->isEmpty())return error('未找到标签关联数据');
+         $this->model->startTrans();
+        try{
+        	$fee= TagLog::ReturnTag($param['type'],$param['orderCode']);
+        	if($fee==0) throw new \Exception('标签已解除');
+	        $loginfo['status']=0;
+	        $loginfo['tag_fee']=$fee;
+	       unset($loginfo['addtime'],$loginfo['updatetime']);
+	        $loginfo->id=null;
+	        $loginfo->apply_id=$this->uid;
+	        $loginfo->apply_name=$this->uname;
+	       TagLog::create($loginfo->toArray());
+	        $this->model->commit();
+        }catch (\Exception $exception){
+        	$this->model->rollback();
+        	return error($exception->getMessage());
+        }
+        return  success("数据标签解除");
+      }
+
+      public function List(){
+        $param = $this->request->param(['betweenTime'=>[],'customerNo'=>'','supplierNo'=>'','companyNo'=>'',
+    	'type'=>'','status'=>'','orderCode'=>'','creater'=>'','order_type'=>0,'size'=>10,'page'=>1],'post','trim');
+    	$modela=['','payInfo','orderInfo','cgdInfo'];
+    	$sbtable = $modela[$param['order_type']];
+    	$type = [[],[1,2],[3,4],[5,6]];
+    	$where=[['tagInfo.type','in',$type[$param['order_type']]],["{$sbtable}.is_del",'=',0],['tagInfo.is_del','=',0]];
+
+    	empty($param['betweenTime'])?:$where[]=['tag_log.addtime','between',$param['betweenTime']];
+
+        if($param['order_type']==1)$param['customerNo']==''?:$where[]=["{$sbtable}.customerNo",'like',"%{$param['customerNo']}%"];
+        if($param['order_type']!=1)$param['supplierNo']==''?:$where[]=["{$sbtable}.supplierNo",'like',"%{$param['supplierNo']}%"];
+    	$param['companyNo']==''?:$where[]=["{$sbtable}.companyNo",'like',"%{$param['companyNo']}%"];
+    	$param['type']==''?:$where[]=['tagInfo.type','=',$param['type']];
+    	$param['status']===''?:$where[]=['tag_log.status','=',$param['status']];
+    	$param['orderCode']==''?:$where[]=['code','like',"%{$param['orderCode']}%"];
+    	$param['creater']==''?:$where[]=['creater','like',"%{$param['creater']}%"];
+    	$model =new TagLog();
+    	$list = $model->withJoin(['tagInfo',$sbtable],'left')->where($where)
+    	->order('id','desc')
+    	->paginate(['list_rows'=>$param['size'],'page'=>$param['page']]);
+    	return success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
+
+    }
+
+}

+ 16 - 1
app/cxinv/model/OrderTag.php

@@ -1,12 +1,13 @@
 <?php
 namespace app\cxinv\model;
 
+use think\Model;
 class OrderTag extends Base
 {
 //设置字段信息
     protected $schema = [
         'id'  =>'int',//
-        'type'  =>'tinyint',//标签类型1采购单付款2采购单回票3销售回款4销售开票
+        'type'  =>'tinyint',//标签类型 1对账单付款2对账单回票3销售回款4销售开票5采购单付款 6采购单开票
         'tag_name'  =>'varchar',//标签名称
         'companyNo'  =>'varchar',//业务公司编号
         'status'  =>'tinyint',//标签使用状态
@@ -16,4 +17,18 @@ class OrderTag extends Base
         'addtime'  =>'datetime',//
         'updatetime'  =>'datetime',//
        ];
+    protected $createTime = 'addtime';
+    protected $updateTime = 'updatetime';
+    public static $type_list=[
+        1=>'对账单付款',
+        2=>'对账单回票',
+        3=>'销售回款',
+        4=>'销售开票',
+        5=>'采购单付款',
+        6=>'采购单开票',
+    ];
+
+
+
+
 }

+ 1 - 11
app/cxinv/model/PaymentOrder.php

@@ -11,17 +11,7 @@ class PaymentOrder extends Base{
     protected $createTime='createTime';
     protected $updateTime='updateTime';
     protected $deleteTime='delete_time';
-    //CREATE TABLE `cfp_payment_order` (
-    //  `id` int(11) NOT NULL AUTO_INCREMENT,
-    //  `dzNo` varchar(255) NOT NULL COMMENT '对账付款申请编号',
-    //  `cgdNo` varchar(255) NOT NULL COMMENT '关联采购单编号',
-    //  `rela_fee` decimal(18,2) NOT NULL COMMENT '关联金额',
-    //  `status` tinyint(3) NOT NULL COMMENT '状态 0 关联中 1 已付款 2 解除付款 3 取消付款',
-    //  `createTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    //  `updateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    //  `delete_time` datetime DEFAULT NULL,
-    //  PRIMARY KEY (`id`)
-    //) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='付款申请关联订单数据';
+
     protected $schema=[
         'id'=>'int',
         'dzNo'=>'string',

+ 304 - 1
app/cxinv/model/TagLog.php

@@ -1,7 +1,10 @@
 <?php
 namespace app\cxinv\model;
 
-class TagLog extends Base
+/**
+ * Class TagLog
+ * @package app\cxinv\model
+ */class TagLog extends Base
 {
 //设置字段信息
     protected $schema = [
@@ -17,4 +20,304 @@ class TagLog extends Base
         'updatetime'  =>'datetime',//
         'tag_remark'  =>'varchar',//备注
        ];
+    protected $createTime = 'addtime';
+    protected $updateTime = 'updatetime';
+
+    public function TagInfo(){
+    	return $this->belongsTo(OrderTag::class,'tag_id','id')->bind(['type','tag_name']);
+    }
+
+    public function OrderInfo(){
+        return $this->belongsTo(QrdInfo::class,'code','sequenceNo')
+        ->bind(['companyNo','companyName','customerNo','customerName',]);
+    }
+
+    public function PayInfo(){
+        return $this->belongsTo(Pay::class,'code','payNo')
+        ->bind(['companyNo','companyName','supplierNo','supplierName']);
+    }
+
+    public function CgdInfo(){
+    	return $this->belongsTo(CgdInfo::class,'code','sequenceNo')
+    	->bind(['companyNo','companyName','supplierNo','supplierName']);
+    }
+    /** 添加标签
+	* @param $type 标签类型 1对账单付款2对账单回票3销售回款4销售开票5采购单付款 6采购单开票
+	* @param $code  单编号
+	* @param $total_fee 标签金额
+	* @return \think\response\Json|void
+	* @throws \think\db\exception\DbException
+	*/
+    public static function CheckOrderInfo($code,$total_fee,$type){
+        switch($type){
+		 case 1:
+		 case 2:
+		 	self::payTag($type,$code,$total_fee);
+		 	break;
+		 case 3:
+		 case 4:
+		 	self::qrdTag($type,$code,$total_fee);
+		 	break;
+        case 5:
+        case 6:
+		 	self::cgdTag($type,$code,$total_fee);
+		 break;
+		 default:
+		 	throw  new \Exception('标签类型错误');
+		 }
+    }
+    /** 解除标签
+    * @param $type
+    * @param $code
+     * @return int|\think\response\Json|void
+    * @throws \think\db\exception\DbException
+     */
+    public static function ReturnTag($type,$code){
+        $fee=0;
+        switch($type){
+        		 case 1:
+        		 case 2:
+        		 	$fee=self::payReTag($type,$code);
+        		 	break;
+        		 case 3:
+        		 case 4:
+        		 	$fee=self::qrdReTag($type,$code);
+        		 	break;
+                case 5:
+                case 6:
+        		 	$fee=self::cgdReTag($type,$code);
+        		 break;
+        		 default:
+        		 	throw  new \Exception('标签类型错误');
+        		 }
+        return $fee;
+    }
+    /**
+	* @param $tagId 标签类型 1 付款2回票
+	* @param $code  对账单编号
+	* @param $total_fee 标签金额
+	* @return \think\response\Json|void
+	* @throws \think\db\exception\DbException
+	*/
+    private static  function payTag($type,$code,$total_fee){
+		 $pay=Pay::where(['payNo'=>$code,'is_del'=>0])->findOrEmpty();
+		 if($pay->isEmpty())throw  new \Exception('未找到对账单数据');
+		 if($type==1){
+		 	if($pay->wpay_fee+$pay->pay_tag_fee<$total_fee)throw  new \Exception('对账单未付金额不足');
+		 	$pay->wpay_fee=$pay->wpay_fee+$pay->pay_tag_fee-$total_fee;
+		 	$pay->pay_status = $pay->wpay_fee==0 &&$pay->pay_fee==0 ? 3:($pay->apay_fee==0?1:2);
+		 	$pay->pay_tag_fee +=$total_fee;
+		 	$pay->pay_tag= 1;
+		 }
+		 if($type==2){
+		 	if($pay->winv_fee+$pay->inv_tag_fee<$total_fee)throw  new \Exception('对账单未开票金额不足');
+		 	$pay->winv_fee=$pay->winv_fee+$pay->inv_tag_fee-$total_fee;
+		 	$pay->inv_status = $pay->winv_fee==0 &&$pay->inv_fee==0 ? 3:($pay->ainv_fee==0?1:2);
+		 	$pay->inv_tag_fee +=$total_fee;
+		 	$pay->inv_tag =1;
+		 }
+		 $resulr= $pay->save();
+		 if($resulr==false) throw  new \Exception('对账单更新失败');
+    }
+
+    	/**解除标签
+	* @param $tagId 标签类型 1 付款2回票
+	* @param $code  对账单编号
+	* @param $total_fee 标签金额
+	* @return \think\response\Json|void
+	* @throws \think\db\exception\DbException
+	*/
+     private static function payReTag($type,$code){
+		 $pay=Pay::where(['payNo'=>$code,'is_del'=>0])->findOrEmpty();
+		 if($pay->isEmpty())throw  new \Exception('未找到对账单数据');
+		 $fee=0;
+		 if($type==1){
+		 	if($pay->pay_tag_fee<0)throw  new \Exception('对账单付款标签金额不足');
+		 	$fee=$pay->pay_tag_fee;
+		 	$pay->wpay_fee=$pay->wpay_fee+$pay->pay_tag_fee;
+		 	$pay->pay_tag_fee=0;
+		 	$pay->pay_status = $pay->wpay_fee==0 && $pay->pay_fee==0?3:($pay->apay_fee==0?1:2);
+		 	$pay->pay_tag=0;
+		 }
+		 if($type==2){
+		 	if($pay->inv_tag_fee<0)throw  new \Exception('对账单回票标签金额不足');
+		 	$fee=$pay->inv_tag_fee;
+		 	$pay->winv_fee=$pay->winv_fee+$pay->inv_tag_fee;
+		 	$pay->inv_tag_fee=0;
+		 	$pay->inv_status = $pay->winv_fee==0 && $pay->inv_fee==0?3:($pay->ainv_fee==0?1:2);
+		 	$pay->inv_tag=0;
+		 }
+		 $resulr= $pay->save();
+		if($resulr==false)throw  new \Exception('对账单更新失败');
+		return $fee;
+    }
+	/**
+	* @param $tagId 标签类型 3 回款4开票
+	* @param $code 销售单编号
+	* @param $total_fee 标签金额
+	 * @return \think\response\Json|void
+	* @throws \think\db\exception\DbException
+	 */
+     private static function qrdTag($type,$code,$total_fee){
+    	$qrd=QrdInfo::where(['sequenceNo'=>$code,'is_del'=>0])->findOrEmpty();
+		 if($qrd->isEmpty())throw  new \Exception('未找到销售单数据');
+		 if($type==3){
+		 	if($qrd->wpay_fee+$qrd->pay_tag_fee<$total_fee){
+		 		throw  new \Exception('销售单未付金额不足');
+		 	}
+		 	$qrd->wpay_fee=$qrd->wpay_fee+$qrd->pay_tag_fee-$total_fee;
+		 	$qrd->pay_status = $qrd->wpay_fee==0 &&$qrd->pay_fee==0 ? 3:($qrd->apay_fee==0?1:2);
+            $qrd->pay_tag_fee +=$total_fee;
+            $qrd->pay_tag= 1;
+		 }
+		 if($type==4){
+		 	if($qrd->winv_fee+$qrd->inv_tag_fee<$total_fee)throw  new \Exception('对账单未开票金额不足');
+		 	$qrd->winv_fee=$qrd->winv_fee+$qrd->inv_tag_fee-$total_fee;
+		 	$qrd->inv_status = $qrd->winv_fee==0 &&$qrd->inv_fee==0 ? 3:($qrd->ainv_fee==0?1:2);
+		 	$qrd->inv_tag_fee +=$total_fee;
+		 	$qrd->inv_tag =1;
+		 }
+		 $resulr=$qrd->save();
+		  if($resulr==false) throw  new \Exception('标签添加失败');
+    }
+
+    /** 解除标签销售单
+	* @param $tagId 标签类型 3 回款4开票
+	* @param $code 销售单编号
+	* @param $total_fee 标签金额
+	 * @return \think\response\Json|void
+	* @throws \think\db\exception\DbException
+	 */
+     private static function qrdReTag($tagId,$code){
+    	$qrd=QrdInfo::where(['sequenceNo'=>$code,'is_del'=>0])->findOrEmpty();
+		 if($qrd->isEmpty())throw  new \Exception('未找到销售单数据');
+		 $fee =0 ;
+		  if($tagId==3){
+		 	if($qrd->pay_tag_fee<0)throw  new \Exception('销售单回款标签金额不足');
+		 	 $fee =$qrd->pay_tag_fee ;
+		 	$qrd->wpay_fee=$qrd->wpay_fee+$qrd->pay_tag_fee;
+		 	$qrd->pay_tag_fee=0;
+		 	$qrd->pay_status = $qrd->wpay_fee==0 && $qrd->pay_fee==0?3:($qrd->apay_fee==0?1:2);
+		 	$qrd->pay_tag=0;
+		 }
+		 if($tagId==4){
+		 	if($qrd->inv_tag_fee<0)throw  new \Exception('销售单开票标签金额不足');
+		 	$fee =$qrd->inv_tag_fee ;
+		 	$qrd->winv_fee=$qrd->winv_fee+$qrd->inv_tag_fee;
+		 	$qrd->inv_tag_fee=0;
+		 	$qrd->inv_status = $qrd->winv_fee==0 && $qrd->inv_fee==0?3:($qrd->ainv_fee==0?1:2);
+		 	$qrd->inv_tag=0;
+		 }
+		 $resulr= $qrd->save();
+		if($resulr==false)throw  new \Exception('销售单更新失败');
+		return $fee;
+    }
+
+    	/**
+	* @param $tagId 标签类型 3 回款4开票
+	* @param $code 销售单编号
+	* @param $total_fee 标签金额
+	 * @return \think\response\Json|void
+	* @throws \think\db\exception\DbException
+	 */
+     private static function cgdTag($type,$code,$total_fee){
+    	$cgd=CgdInfo::where(['sequenceNo'=>$code,'is_del'=>0])->findOrEmpty();
+		 if($cgd->isEmpty())throw  new \Exception('未找到采购单数据');
+		 $payInfo = PayInfo::where(["cgdNo"=>$code,"status"=>1,"is_del"=>0])->findOrEmpty();
+		 if(!$payInfo->isEmpty()){
+            $pay= Pay::where(["PayNo"=>$payInfo->payNo,"is_del"=>0,"status"=>[0,1,2]])->findOrEmpty();
+		 }
+
+		 if($type==5){
+		 	if($cgd->wpay_fee+$cgd->pay_tag_fee<$total_fee)throw  new \Exception('采购单未付金额不足');
+		 	$cgd->wpay_fee=$cgd->wpay_fee+$cgd->pay_tag_fee-$total_fee;
+            $cgd->pay_status = $cgd->wpay_fee==0 ? 3:($cgd->apay_fee==0?1:2);
+            $cgd->pay_tag_fee +=$total_fee;
+            $cgd->pay_tag= 1;
+            if(!$payInfo->isEmpty()){
+                $payInfo->wpay_fee=$payInfo->wpay_fee-$total_fee;
+                if(!$pay->isEmpty()){
+                    if ($pay->wpay_fee<=$total_fee) throw  new \Exception('对账单未付金额不足');
+                    $pay->wpay_fee=$pay->wpay_fee-$total_fee;
+                    $pay->pay_status = $pay->wpay_fee==0 &&$pay->pay_fee==0 ? 3:($pay->apay_fee==0?1:2);
+                    $payInfo->save();
+                    $pay->save();
+                }
+            }
+		 }
+		 if($type==6){
+		 	if($cgd->winv_fee+$cgd->inv_tag_fee<$total_fee)throw  new \Exception('对账单未开票金额不足');
+            $cgd->winv_fee=$cgd->winv_fee+$cgd->inv_tag_fee-$total_fee;
+            $cgd->inv_status = $cgd->winv_fee==0? 3:($cgd->ainv_fee==0?1:2);
+            $cgd->inv_tag_fee +=$total_fee;
+            $cgd->inv_tag =1;
+            if(!$payInfo->isEmpty()){
+                $payInfo->winv_fee=$payInfo->winv_fee-$total_fee;
+                if(!$pay->isEmpty()){
+                    if ($pay->winv_fee<=$total_fee) throw  new \Exception('对账单未开票金额不足');
+                    $pay->winv_fee=$pay->winv_fee-$total_fee;
+                    $pay->inv_status = $pay->winv_fee==0 && $pay->inv_fee==0? 3:($pay->ainv_fee==0?1:2);
+                    $payInfo->save();
+                    $pay->save();
+                }
+            }
+		 }
+		 $resulr= $cgd->save();
+		 if($resulr==false) throw  new \Exception('标签添加失败');
+
+    }
+
+    /** 解除标签销售单
+	* @param $tagId 标签类型 3 回款4开票
+	* @param $code 销售单编号
+	* @param $total_fee 标签金额
+	 * @return \think\response\Json|void
+	* @throws \think\db\exception\DbException
+	 */
+     private static function cgdReTag($type,$code){
+    	$cgd=CgdInfo::where(['sequenceNo'=>$code,'is_del'=>0])->findOrEmpty();
+		 if($cgd->isEmpty())throw  new \Exception('未找到采购单数据');
+		 $payInfo = PayInfo::where(['cgdNo'=>$code,'status'=>1,'is_del'=>0])->findOrEmpty();
+		 if(!$payInfo->isEmpty()){
+            $pay= Pay::where(['PayNo'=>$payInfo->payNo,'is_del'=>0,'status'=>[0,1,2]])->findOrEmpty();
+		 }
+		 $fee =0 ;
+		  if($type==5){
+		 	if($cgd->pay_tag_fee<0)throw  new \Exception('采购单回款标签金额不足');
+		 	 $fee =$cgd->pay_tag_fee ;
+		 	$cgd->wpay_fee=$cgd->wpay_fee+$cgd->pay_tag_fee;
+		 	$cgd->pay_tag_fee=0;
+		 	$cgd->pay_status = $cgd->wpay_fee==0?3:($cgd->apay_fee==0?1:2);
+		 	$cgd->pay_tag=0;
+		 	if(!$payInfo->isEmpty()){
+                $payInfo->wpay_fee=$payInfo->wpay_fee+$fee;
+                if(!$pay->isEmpty()){
+                    $pay->wpay_fee=$pay->wpay_fee+$fee;
+                    $pay->pay_status = $pay->wpay_fee==0 &&$pay->pay_fee==0 ? 3:($pay->apay_fee==0?1:2);
+                    $payInfo->save();
+                    $pay->save();
+                }
+		 	}
+		 }
+		 if($type==6){
+		 	if($cgd->inv_tag_fee<0)throw  new \Exception('采购单开票标签金额不足');
+		 	$fee =$cgd->inv_tag_fee ;
+		 	$cgd->winv_fee=$cgd->winv_fee+$cgd->inv_tag_fee;
+		 	$cgd->inv_tag_fee=0;
+		 	$cgd->inv_status = $cgd->winv_fee==0?3:($cgd->ainv_fee==0?1:2);
+		 	$cgd->inv_tag=0;
+		 	if(!$payInfo->isEmpty()){
+                $payInfo->winv_fee=$payInfo->winv_fee+$fee;
+                if(!$pay->isEmpty()){
+                    $pay->winv_fee=$pay->winv_fee+$fee;
+                    $pay->inv_status = $pay->winv_fee==0 && $pay->inv_fee==0? 3:($pay->ainv_fee==0?1:2);
+                    $payInfo->save();
+                }
+		 	}
+		 }
+		 $resulr= $cgd->save();
+		if($resulr==false)throw  new \Exception('采购单更新失败');
+		return $fee;
+    }
+
 }

+ 1 - 2
app/provider.php

@@ -5,6 +5,5 @@ use app\Request;
 // 容器Provider定义文件
 return [
     'think\Request'          => Request::class,
-  'think\exception\Handle' => \app\common\Error::class,
-   
+    'think\exception\Handle' => \app\common\Error::class,
 ];