Explorar o código

Merge branch 'version1.5' of http://120.46.155.214:3000/wugg/phpstock into version1.5

wugg %!s(int64=2) %!d(string=hai) anos
pai
achega
2079a4904f

+ 25 - 5
app/admin/controller/Consult.php

@@ -24,7 +24,7 @@ class Consult extends Base
         $where=[['a.is_del',"=",0],['b.is_del',"=",0]];
         $infoNo = isset($this->post['zxNo']) && $this->post['zxNo'] !== "" ? trim($this->post['zxNo']) : "";
         if ($infoNo !== "") {
-            $where[] = ['a.infoNo','=',$infoNo];
+            $where[] = ['a.infoNo','like','%'.$infoNo.'%'];
         }
 
         $salesman = isset($this->post['salesman']) && $this->post['salesman'] !== "" ? trim($this->post['salesman']) : "";
@@ -1300,7 +1300,7 @@ class Consult extends Base
                 "sale_price"=>$info['sale_price'],
                 "cost_before_price"=>$info['sale_cost_fee'],
                 "cost_after_price"=>$cost_price,
-                "before_rate"=>round(($info['sale_price']-$info['total_fee'])/$info['sale_price'],2),
+                "before_rate"=>round(($info['origin_price']-$info['total_fee'])/$info['origin_price'],2),
                 "after_rate"=>round(($bargain_price-$info['total_fee'])/$bargain_price,2),
                 "after_price"=>$bargain_price,
                 "exam_info"=>"",
@@ -1691,15 +1691,15 @@ class Consult extends Base
         $where=[['is_del',"=",0]];
         $zxNo = isset($this->post['zxNo']) && $this->post['zxNo'] !== "" ? trim($this->post['zxNo']) : "";
         if ($zxNo !== "") {
-            $where[] = ['zxNo','=',$zxNo];
+            $where[] = ['zxNo','like','%'.$zxNo.'%'];
         }
         $infoNo = isset($this->post['infoNo']) && $this->post['infoNo'] !== "" ? trim($this->post['infoNo']) : "";
         if ($infoNo !== "") {
-            $where[] = ['infoNo','=',$infoNo];
+            $where[] = ['infoNo','like','%'.$infoNo.'%'];
         }
         $bidNo = isset($this->post['bidNo']) && $this->post['bidNo'] !== "" ? trim($this->post['bidNo']) : "";
         if ($bidNo !== "") {
-            $where[] = ['bidNo','=',$bidNo];
+            $where[] = ['bidNo','like','%'.$bidNo.'%'];
         }
         $pgNo = isset($this->post['pgNo']) && $this->post['pgNo'] !== "" ? trim($this->post['pgNo']) : "";
         if ($pgNo !== "") {
@@ -1921,10 +1921,21 @@ class Consult extends Base
         if ($zxNo !== "") {
             $where[] = ['zxNo','=',$zxNo];
         }
+        $bargainNo = isset($this->post['bargainNo']) && $this->post['bargainNo'] !== "" ? trim($this->post['bargainNo']) : "";
+        if ($bargainNo !== "") {
+            $where[] = ['bargainNo','=',$bargainNo];
+        }
+
+        $status = isset($this->post['status']) && $this->post['status'] !== "" ? intval($this->post['status']) : "";
+        if ($status!== "") {
+            $where[] = ['status','=',$status];
+        }
+
         $infoNo = isset($this->post['infoNo']) && $this->post['infoNo'] !== "" ? trim($this->post['infoNo']) : "";
         if ($infoNo !== "") {
             $where[] = ['infoNo','=',$infoNo];
         }
+
         $projectNo = isset($this->post['projectNo']) && $this->post['projectNo'] !== "" ? trim($this->post['projectNo']) : "";
         if ($projectNo !== "") {
             $zxlist = Db::name("consult_order")->where(["projectNo"=>$projectNo,"is_del"=>0,"is_project"=>1])->column
@@ -1936,6 +1947,15 @@ class Consult extends Base
             $bidinfo = Db::name("consult_info")->where([["pgNo","=",$pgNo],["is_del","=",0]])->column("infoNo");
             $where[] = ['infoNo','in',$bidinfo];
         }
+        $start= isset($this->post['start']) && $this->post['start'] !== "" ? $this->post['start'] : "";
+        $end= isset($this->post['end']) && $this->post['end'] !== "" ? $this->post['end'] : "";
+        if($start!=""){
+            $where[]=["addtime",">=",date("Y-m-d H:i:s",strtotime($start))];
+        }
+        if($end!=""){
+            $where[]=["addtime","<=",date("Y-m-d H:i:s",strtotime($end))];
+        }
+
         $role=$this->checkRole();
         if(!empty($role['write'])){
             $where[]=["createrid","in",$role['write']];

+ 274 - 97
app/admin/controller/Data.php

@@ -2,141 +2,318 @@
 
 namespace app\admin\controller;
 
+use app\BaseController;
 use think\App;
 use think\facade\Db;
 
-//数据统计类
-class Data extends Base
+//数据统计类(数据看板,获取相关统计数据)
+class Data extends BaseController
 
 {
-    //数据看板,获取相关统计数据
-    public function index()
+
+    /**
+     * public function index()
+     * {
+     * $data = [];
+     *
+     * //        //1.今日销量(单数、金额)
+     * //        $today_sales_volume = Db::name('sale')
+     * //            ->field('count(id) orders_number,sum(total_price) money')
+     * //            ->where('is_del',0)
+     * //            ->whereDay('addtime','today')
+     * //            ->find();
+     * //
+     * //        $data['today_sales_volume'] = [
+     * //            'orders_number' => isset($today_sales_volume['orders_number'])?$today_sales_volume['orders_number']:0,
+     * //            'money' =>  isset($today_sales_volume['money'])?$today_sales_volume['money']:0,
+     * //        ];
+     *
+     * //2.今日销冠(部门、姓名、单数、金额)
+     * $temp = Db::name('sale')
+     * ->field('count(id) orders,sum(total_price) money,apply_id')
+     * ->where('is_del', 0)
+     * ->whereDay('addtime', 'today')
+     * ->group('apply_id')
+     * ->order('money', 'desc')
+     * ->limit(1)
+     * ->buildSql();
+     *
+     * $data['today_sales_champion'] = Db::table($temp)
+     * ->alias('t')
+     * ->field('t.apply_id,t.orders,t.money,u.itemid company_id,    c.`name` company,    u.nickname')
+     * ->leftJoin('depart_user u', 'u.uid=t.apply_id AND u.is_del=0')
+     * ->leftJoin('company_item c', 'c.id=u.itemid AND c.is_del=0')
+     * ->select()
+     * ->toArray();
+     *
+     * //3.今日采购(采购订单数量、商品数量、竞价单数、反馈商品数)
+     * $data['today_purchase'] = [
+     * 'orders' => '0',
+     * 'goods' => '0',
+     * 'bidding_orders' => '0',
+     * 'feedback_goods' => '0'
+     * ];
+     *
+     * //4.今日订单列表(按照完成率排序,前三名的部门、单数、金额)
+     * $data['today_order'] = [
+     * ['company' => 'xxx部', 'orders' => '30', 'money' => '300'],
+     * ['company' => 'xx部', 'orders' => '20', 'money' => '200'],
+     * ['company' => 'x部', 'orders' => '10', 'money' => '100'],
+     * ];
+     *
+     * //5.本月完成率列表(按照完成率排序,前三名的部门、完成单数和完成率,区分今日、本周、本月和毛利率状态:2达标、1最低、0不达标等情况)
+     * $data['month_completion_rate'] = [
+     * 'today' => [
+     * ['company' => 'xxx部', 'completion' => 10, 'completion_rate' => '30%', 'type' => '2'],
+     * ['company' => 'xx部', 'completion' => 10, 'completion_rate' => '20%', 'type' => '1'],
+     * ['company' => 'x部', 'completion' => 10, 'completion_rate' => '10%', 'type' => '0'],
+     * ],
+     * 'week' => [
+     * ['company' => 'xxx部', 'completion' => 10, 'completion_rate' => '30%', 'type' => '2'],
+     * ['company' => 'xx部', 'completion' => 10, 'completion_rate' => '20%', 'type' => '1'],
+     * ['company' => 'x部', 'completion' => 10, 'completion_rate' => '10%', 'type' => '0'],
+     * ],
+     * 'month' => [
+     * ['company' => 'xxx部', 'completion' => 10, 'completion_rate' => '30%', 'type' => '2'],
+     * ['company' => 'xx部', 'completion' => 10, 'completion_rate' => '20%', 'type' => '1'],
+     * ['company' => 'x部', 'completion' => 10, 'completion_rate' => '10%', 'type' => '0'],
+     * ],
+     * ];
+     *
+     * //6.待开票(单数、金额)
+     * $data['wait_invoice'] = [
+     * 'orders' => '10',
+     * 'money' => '34.45'
+     * ];
+     *
+     * //7.待回款(单数、金额)
+     * $data['wait_return'] = [
+     * 'orders' => '100',
+     * 'money' => '3.45'
+     * ];
+     *
+     * //8.待回票(单数、金额)
+     * $data['wait_ticket'] = [
+     * 'orders' => '8',
+     * 'money' => '38.5'
+     * ];
+     *
+     * //9.待付款(单数、金额)
+     * $data['wait_payment'] = [
+     * 'orders' => '34',
+     * 'money' => '5338.58'
+     * ];
+     *
+     *
+     * //10.竞价(招标单数、未竞标单数)
+     * $data['bidding'] = [
+     * 'bidding_orders' => '10',
+     * 'no_bidding_orders' => '2'
+     * ];
+     *
+     * //11.采购单(采购单数、未下单数)
+     * $data['purchase'] = [
+     * 'purchase_orders' => '10',
+     * 'no_purchase_orders' => '2'
+     * ];
+     *
+     * //12.采购单(采购下单数、未生产单数)
+     * $data['purchase_2'] = [
+     * 'orders' => '10',
+     * 'no_orders' => '2'
+     * ];
+     *
+     * //13.未发货(单数、商品数)
+     * $data['no_deliver'] = [
+     * 'orders' => '10',
+     * 'goods' => '2'
+     * ];
+     *
+     * //14.转单率(部门名称、今日转单率、本月转单率,今年转单率,按照年度转单率排序)
+     * $data['transfer_order_rate'] = [
+     * ['company' => 'xxx部', 'today_tor' => '34%', 'month_tor' => '68%', 'year_tor' => '45%'],
+     * ['company' => 'xx部', 'today_tor' => '34%', 'month_tor' => '68%', 'year_tor' => '40%'],
+     * ['company' => 'x部', 'today_tor' => '34%', 'month_tor' => '68%', 'year_tor' => '6%'],
+     * ];
+     *
+     * return app_show(0, '请求成功', $data);
+     *
+     * }
+     **/
+
+    //1.今日销量
+    public function todaySalesVolume()
     {
-        $data = [];
 
-        //1.今日销量(单数、金额)
-        $today_sales_volume = Db::name('sale')
+        $rs = Db::name('sale')
             ->field('count(id) orders_number,sum(total_price) money')
-            ->where('is_del',0)
-            ->whereDay('addtime','today')
+            ->where('is_del', 0)
+            ->whereDay('addtime', 'today')
             ->find();
 
-        $data['today_sales_volume'] = [
-            'orders_number' => isset($today_sales_volume['orders_number'])?$today_sales_volume['orders_number']:0,
-            'money' =>  isset($today_sales_volume['money'])?$today_sales_volume['money']:0,
+        $temp = [
+            'orders_number' => isset($rs['orders_number']) ? $rs['orders_number'] : 0,
+            'money' => isset($rs['money']) ? $rs['money'] : 0,
         ];
 
-        //2.今日销冠(部门、姓名、单数、金额)
+        return app_show(0, '请求成功', $temp);
+
+    }
+
+    //2.今日销冠
+    public function todaySalesChampion()
+    {
+
         $temp = Db::name('sale')
             ->field('count(id) orders,sum(total_price) money,apply_id')
-            ->where('is_del',0)
-            ->whereDay('addtime','today')
+            ->where('is_del', 0)
+            ->whereDay('addtime', 'today')
             ->group('apply_id')
-            ->order('money','desc')
+            ->order('money', 'desc')
             ->limit(1)
             ->buildSql();
 
-        $data['today_sales_champion'] = Db::table($temp)
+        $rs = Db::table($temp)
             ->alias('t')
             ->field('t.apply_id,t.orders,t.money,u.itemid company_id,	c.`name` company,	u.nickname')
-            ->leftJoin('depart_user u','u.uid=t.apply_id AND u.is_del=0')
-            ->leftJoin('company_item c','c.id=u.itemid AND c.is_del=0')
+            ->leftJoin('depart_user u', 'u.uid=t.apply_id AND u.is_del=0')
+            ->leftJoin('company_item c', 'c.id=u.itemid AND c.is_del=0')
             ->select()
             ->toArray();
 
-        //3.今日采购(采购订单数量、商品数量、竞价单数、反馈商品数)
-        $data['today_purchase'] = [
-            'orders' => '0',
-            'goods' => '0',
-            'bidding_orders' => '0',
-            'feedback_goods' => '0'
-        ];
+        return app_show(0, '请求成功', empty($rs[0]) ? [] : $rs[0]);
 
-        //4.今日订单列表(按照完成率排序,前三名的部门、单数、金额)
-        $data['today_order'] = [
-            ['company' => 'xxx部', 'orders' => '30', 'money' => '300'],
-            ['company' => 'xx部', 'orders' => '20', 'money' => '200'],
-            ['company' => 'x部', 'orders' => '10', 'money' => '100'],
-        ];
+    }
 
-        //5.本月完成率列表(按照完成率排序,前三名的部门、完成单数和完成率,区分今日、本周、本月和毛利率状态:2达标、1最低、0不达标等情况)
-        $data['month_completion_rate'] = [
-            'today' => [
-                ['company' => 'xxx部', 'completion' => 10, 'completion_rate' => '30%', 'type' => '2'],
-                ['company' => 'xx部', 'completion' => 10, 'completion_rate' => '20%', 'type' => '1'],
-                ['company' => 'x部', 'completion' => 10, 'completion_rate' => '10%', 'type' => '0'],
-            ],
-            'week' => [
-                ['company' => 'xxx部', 'completion' => 10, 'completion_rate' => '30%', 'type' => '2'],
-                ['company' => 'xx部', 'completion' => 10, 'completion_rate' => '20%', 'type' => '1'],
-                ['company' => 'x部', 'completion' => 10, 'completion_rate' => '10%', 'type' => '0'],
-            ],
-            'month' => [
-                ['company' => 'xxx部', 'completion' => 10, 'completion_rate' => '30%', 'type' => '2'],
-                ['company' => 'xx部', 'completion' => 10, 'completion_rate' => '20%', 'type' => '1'],
-                ['company' => 'x部', 'completion' => 10, 'completion_rate' => '10%', 'type' => '0'],
-            ],
-        ];
+    //3.今日采购
+    public function todayPurchase()
+    {
 
-        //6.待开票(单数、金额)
-        $data['wait_invoice'] = [
-            'orders' => '10',
-            'money' => '34.45'
-        ];
+        $rs = Db::name('purchease_order')
+            ->field('count(id) orders_number,sum(good_num) good_num')
+            ->where('is_del', 0)
+            ->whereDay('addtime', 'today')
+            ->find();
 
-        //7.待回款(单数、金额)
-        $data['wait_return'] = [
-            'orders' => '100',
-            'money' => '3.45'
-        ];
+        $consult_info_total = Db::name('consult_info')
+            ->where('is_del', 0)
+            ->whereDay('addtime', 'today')
+            ->count('id');
 
-        //8.待回票(单数、金额)
-        $data['wait_ticket'] = [
-            'orders' => '8',
-            'money' => '38.5'
-        ];
+        $consult_bids_total = Db::name('consult_bids')
+            ->where('is_del', 0)
+            ->whereDay('addtime', 'today')
+            ->count('id');
 
-        //9.待付款(单数、金额)
-        $data['wait_payment'] = [
-            'orders' => '34',
-            'money' => '5338.58'
+        $data = [
+            'orders_number' => isset($rs['orders_number']) ? $rs['orders_number'] : 0,
+            'good_num' => isset($rs['good_num']) ? $rs['good_num'] : 0,
+            'consult_info_total' => $consult_info_total,
+            'consult_bids_total' => $consult_bids_total,
         ];
 
+        return app_show(0, '请求成功', $data);
 
+    }
 
-        //10.竞价(招标单数、未竞标单数)
-        $data['bidding'] = [
-            'bidding_orders' => '10',
-            'no_bidding_orders' => '2'
-        ];
+    //4.票(相关,暂不做)
 
-        //11.采购单(采购单数、未下单数)
-        $data['purchase'] = [
-            'purchase_orders' => '10',
-            'no_purchase_orders' => '2'
-        ];
+    //5.竞价单和采购单
+    public function totalZixunPurchease()
+    {
 
-        //12.采购单(采购下单数、未生产单数)
-        $data['purchase_2'] = [
-            'orders' => '10',
-            'no_orders' => '2'
-        ];
+        //招标单数(咨询单数)
+        $zixun_total = Db::name('consult_info')
+            ->where('is_del', 0)
+            ->count('id');
 
-        //13.未发货(单数、商品数)
-        $data['no_deliver'] = [
-            'orders' => '10',
-            'goods' => '2'
-        ];
 
-        //14.转单率(部门名称、今日转单率、本月转单率,今年转单率,按照年度转单率排序)
-        $data['transfer_order_rate'] = [
-            ['company' => 'xxx部', 'today_tor' => '34%', 'month_tor' => '68%', 'year_tor' => '45%'],
-            ['company' => 'xx部', 'today_tor' => '34%', 'month_tor' => '68%', 'year_tor' => '40%'],
-            ['company' => 'x部', 'today_tor' => '34%', 'month_tor' => '68%', 'year_tor' => '6%'],
-        ];
+        //已反馈单数
+        $zixun_bids = Db::name('consult_bids')
+            ->where('is_del', 0)
+            ->count('id');
+
+        //未竞价单数(未反馈单数)
+        $not_feedback = $zixun_total - $zixun_bids;
+
+        //采购单数
+        $purchease_total = Db::name('purchease_order')
+            ->where('is_del', 0)
+            ->count('id');
+
+
+        //采购单未下单数(状态为待与供应商确认)
+        $purchease_wait_confirm = Db::name('purchease_order')
+            ->where(['is_del' => 0, 'status' => 0])
+            ->count('id');
+
+        return app_show(0, '请求成功', [
+            'zixun_total' => $zixun_total,
+            'not_feedback' => $not_feedback,
+            'purchease_total' => $purchease_total,
+            'purchease_wait_confirm' => $purchease_wait_confirm,
+        ]);
 
-        return app_show(0, '请求成功', $data);
 
     }
 
-}
+    //6.未发货
+    public function waitSendTotal()
+    {
+        return 123;
+    }
+
+    //7.今日订单
+    public function todaySale()
+    {
+
+        $temp = Db::name('sale')
+            ->alias('s')
+            ->field('s.id,s.apply_id,s.total_price,u.nickname,u.itemid')
+            ->leftJoin('depart_user u', 'u.uid=s.apply_id AND u.is_del=0')
+            ->where('s.is_del', 0)
+            ->whereDay('s.addtime', 'today')
+            ->buildSql();
+
+        $rs = Db::table($temp)
+            ->alias('t')
+            ->field('itemid companyId,c.`name` companyName,SUM(t.total_price) total_price,COUNT(t.id) total_order')
+            ->leftJoin('company_item c', 'c.id=t.itemid')
+            ->group('t.itemid')
+            ->order('total_price', 'desc')
+            ->limit(3)
+            ->select()
+            ->toArray();
+
+        return app_show(0, '请求成功', $rs);
+
+    }
+
+    //8.本月完成率(数据在结算库里)
+    public function monthFinishRate()
+    {
+    }
+
+    //9.转单率-今日
+    public function orderTransferRateToday(){
+
+//        sale  order_type==2   咨询生成订单数
+
+
+
+    }
+
+    //9.转单率-本月
+    public function orderTransferRateMonth(){
+
+    }
+
+    //9.转单率-今年
+    public function orderTransferRateYear(){
+
+
+
+    }
+
+
+}

+ 6 - 4
app/admin/controller/Goodup.php

@@ -821,11 +821,12 @@ class Goodup extends Base
                         $lemp['package_fee'] = $value['package_fee'];
                         $lemp['other_fee'] = $value['other_fee'];
                         if($is_gold_price==1 && $datas['cat_id']==6){
-                            $gold =Db::name("gold_price1")->where(["type"=>$noble_metal,"status"=>1,"is_del"=>0])->order("addtime desc")->find();
+                            //$gold =Db::name("gold_price1")->where(["type"=>$noble_metal,"status"=>1,"is_del"=>0])
+//                            ->order("addtime desc")->find();
                             //$lemp['nake_total'] =$noble_weight*$gold['price'] + $value['cost_fee']*$noble_weight+$value['mark_fee']+$value['package_fee']+$value['cert_fee']+$value['nake_fee']+$value['delivery_fee']+$value['other_fee'];
                             //成本合计=贵金属重量*供应商采购金价 + 工艺费*贵金属重量+加标费+包装费+证书费+成本裸价+运费+其他费用
                             //成本总计启用实时金价时,采用供应商实时金价
-                            $lemp['nake_total'] = $noble_weight * $gold['price'] + $value['cost_fee'] * $noble_weight +
+                            $lemp['nake_total'] = $noble_weight * $cgd_gold_price+ $value['cost_fee'] * $noble_weight +
                                 $value['mark_fee'] + $value['package_fee'] + $value['cert_fee'] + $value['nake_fee'] + $value['delivery_fee'] + $value['other_fee'];
                         }else{
                             $lemp['nake_total'] =$value['nake_fee']+$value['delivery_fee']+$value['cert_fee']+$value['mark_fee']+$value['package_fee']+$value['other_fee'];
@@ -1820,12 +1821,13 @@ class Goodup extends Base
                         $lemp['other_fee'] = $value['other_fee'];
 
                         if ($is_gold_price == 1 && $top_cat_id == 6) {
-                            $gold =Db::name("gold_price1")->where(["type"=>$noble_metal,"status"=>1,"is_del"=>0])->order("addtime desc")->find();
+                           // $gold =Db::name("gold_price1")->where(["type"=>$noble_metal,"status"=>1,"is_del"=>0])
+                           // ->order("addtime desc")->find();
 
                             //$lemp['nake_total'] =$noble_weight*$gold['price'] + $value['cost_fee']*$noble_weight+$value['mark_fee']+$value['package_fee']+$value['cert_fee']+$value['nake_fee']+$value['delivery_fee']+$value['other_fee'];
                             //成本合计=贵金属重量*供应商采购金价 + 工艺费*贵金属重量+加标费+包装费+证书费+成本裸价+运费+其他费用
                             //成本总计启用实时金价时,采用供应商实时金价
-                            $lemp['nake_total'] =$noble_weight *$gold['price']+ $value['cost_fee'] * $noble_weight +
+                            $lemp['nake_total'] =$noble_weight *$cgd_gold_price+ $value['cost_fee'] * $noble_weight +
                                 $value['mark_fee'] + $value['package_fee'] + $value['cert_fee'] + $value['nake_fee'] + $value['delivery_fee'] + $value['other_fee'];
                         }else{
                             $lemp['nake_total'] =$value['nake_fee']+$value['delivery_fee']+$value['cert_fee']+$value['mark_fee']+$value['package_fee']+$value['other_fee'];

+ 10 - 8
app/admin/controller/OrderImport.php

@@ -27,14 +27,15 @@ class OrderImport extends Base
         try {
 
             //平台订单号不允许重复
-            $all_platform_codes = array_column($param['list'], 'platform_code');
-
-            $temp = Db::name('order_import_from_c')
-                ->field('id,platform_code')
-                ->whereIn('platform_code', $all_platform_codes)
-                ->find();
-
-            if (!empty($temp)) throw new Exception('平台订单号' . $temp['platform_code'] . '重复');
+            //平台订单号允许重复,但是平台订单号和平台商品编号的组合不能重复(2022-05-25 10)
+//            $all_platform_codes = array_column($param['list'], 'platform_code');
+//
+//            $temp = Db::name('order_import_from_c')
+//                ->field('id,platform_code')
+//                ->whereIn('platform_code', $all_platform_codes)
+//                ->find();
+//
+//            if (!empty($temp)) throw new Exception('平台订单号' . $temp['platform_code'] . '重复');
 
             $userinfo = GetUserInfo($param['token']);
             $createrid = isset($userinfo["data"]['id']) ? $userinfo["data"]['id'] : 0;
@@ -130,6 +131,7 @@ class OrderImport extends Base
             'orderCode' => $info['orderCode'],
             'success_date' => $info['status'] == OIFCModel::$status_success ? $info['updatetime'] : '',//录入成功时间
             'addtime' => $info['addtime'],
+            'error_msg' => $info['remark']//错误原因
         ];
 
         //导入原始数据

+ 125 - 0
app/admin/controller/Report.php

@@ -9,6 +9,131 @@ use think\facade\Validate;
 class Report extends Base
 {
 
+    //产品价格和产品导出
+    public function exportGood()
+    {
+
+        $param = $this->request->only(['date', 'platform_id', 'status'], 'post', 'trim');
+
+        $val = Validate::rule([
+            'date|筛选时间' => 'require|date',
+            'platform_id|筛选平台ID' => 'require|number|gt:0',
+            'status|状态' => 'require|number|in:5,6,8',
+        ]);
+
+        if (!$val->check($param)) return error_show(1004, $val->getError());
+
+        $where_ladder = [['gl.is_del', '=', 0]];
+        $where_good = [['g.is_del', '=', 0]];
+        if (!empty($param['date'])) {
+            $where_ladder[] = ['gl.addtime', 'between', [$param['date'] . ' 00:00:00', $param['date'] . ' 23:59:59']];
+            $where_good[] = ['g.addtime', 'between', [$param['date'] . ' 00:00:00', $param['date'] . ' 23:59:59']];
+        }
+        if (!empty($param['platform_id'])) {
+            $where_ladder[] = ['gp.platform_code', '=', $param['platform_id']];
+            $where_good[] = ['gp.platform_code', '=', $param['platform_id']];
+        }
+        if (!empty($param['status'])) {
+            $where_ladder[] = ['g.status', '=', $param['status']];
+            $where_good[] = ['g.status', '=', $param['status']];
+        }
+
+        $data = [];
+
+        //产品价格
+        $rs_ladder = Db::name('good_ladder')
+            ->alias('gl')
+            ->field('g.good_name 商品名称,gl.market_price 市场价,gl.origin_rate 税率,g.moq 起订量,gl.sale_price 售价,gl.skuCode 商品编码,gl.cost_fee 工艺费,gl.market_platform 对比平台')
+            ->where($where_ladder)
+            ->leftJoin('good_platform gp', 'gp.skuCode=gl.skuCode AND gp.is_del=0')
+            ->leftJoin('good g', 'g.spuCode=gp.spuCode AND g.is_del=0')
+            ->order('gl.id')
+            ->select()
+            ->toArray();
+
+        if (!empty($rs_ladder)) {
+            $data[] = [
+                'head' => array_keys($rs_ladder[0]),
+                'list' => $rs_ladder,
+                'filename' => '产品价格' . date('YmdHis'),
+            ];
+        }
+
+        //产品
+        $rs_temp_good = Db::name('good')
+            ->alias('g')
+            ->field('"" 一级分类,"" 二级分类, g.cat_id 三级分类,g.good_name 商品名称,g.good_type 商品类型,g.brand_id 商品品牌,\'\' 型号,g.origin_place 产地,g.good_unit 计量单位,g.weight 重量g,\'\' 响应时间,g.lead_time 供货周期,g.good_size 商品尺寸,g.packing_size 装箱尺寸,g.packing_way 包装方式,g.packing_spec 装箱规格,g.packing_list 包装清单,g.delivery_place 发货地,g.delivery_day 物流时间,gp.skuCode 商品编码,g.spuCode')
+            ->where($where_good)
+            ->leftJoin('good_platform gp', 'gp.spuCode=g.spuCode AND gp.is_del=0')
+            ->order('g.id')
+            ->select()
+            ->toArray();
+
+        $all_good_type = [1 => '定制商品', 2 => '常规商品'];
+        $all_brand = Db::name('brand')->whereIn('id', array_column($rs_temp_good, '商品品牌'))->where('is_del', 0)->column('brand_name', 'id');
+        $all_cat = Db::name('cat')
+            ->alias('c3')
+            ->whereIn('c3.id', array_column($rs_temp_good, '三级分类'))
+            ->where('c3.is_del', 0)
+            ->leftJoin('cat c2', 'c2.id=c3.pid AND c2.is_del=0')
+            ->leftJoin('cat c1', 'c1.id=c2.pid AND c1.is_del=0')
+            ->column('c3.cat_name cat_name_3,c2.cat_name cat_name_2,c1.cat_name cat_name_1', 'c3.id');
+
+        $all_unit = Db::name('unit')->whereIn('id', array_column($rs_temp_good, '计量单位'))->where('is_del', 0)->column('unit', 'id');
+
+        foreach ($rs_temp_good as &$value) {
+            $value['商品品牌'] = isset($all_brand[$value['商品品牌']]) ? $all_brand[$value['商品品牌']] : '';
+            $value['商品类型'] = isset($all_good_type[$value['商品类型']]) ? $all_good_type[$value['商品类型']] : '';
+            $value['一级分类'] = isset($all_cat[$value['三级分类']]['cat_name_1']) ? $all_cat[$value['三级分类']]['cat_name_1'] : '';
+            $value['二级分类'] = isset($all_cat[$value['三级分类']]['cat_name_2']) ? $all_cat[$value['三级分类']]['cat_name_2'] : '';
+            $value['三级分类'] = isset($all_cat[$value['三级分类']]['cat_name_3']) ? $all_cat[$value['三级分类']]['cat_name_3'] : '';
+
+            $temp = explode(',', $value['产地']);
+            $value['产地'] = GetAddr(json_encode(['provice_code' => isset($temp[0]) ? $temp[0] : '', 'city_code' => isset($temp[1]) ? $temp[1] : '', 'area_code' => isset($temp[2]) ? $temp[2] : '']));
+            $value['计量单位'] = isset($all_unit[$value['计量单位']]) ? $all_unit[$value['计量单位']] : '';
+            $temp_2 = explode(',', $value['发货地']);
+            $value['发货地'] = GetAddr(json_encode(['provice_code' => isset($temp_2[0]) ? $temp_2[0] : '', 'city_code' => isset($temp_2[1]) ? $temp_2[1] : '', 'area_code' => isset($temp_2[2]) ? $temp_2[2] : '']));
+
+            $value['型号'] = Db::name('good_spec')
+                ->alias('gp')
+                ->field('')
+                ->leftJoin('specs s', 's.id=gp.spec_id AND s.is_del=0')
+                ->leftJoin('spec_value sv', 'sv.id=gp.spec_value_id AND s.is_del=0')
+                ->where([
+                    'gp.spuCode' => $value['spuCode'],
+                    'gp.is_del' => 0,
+                    's.spec_name' => '型号',
+                ])
+                ->value('sv.spec_value', '');
+
+            $value['响应时间'] = Db::name('good_spec')
+                ->alias('gp')
+                ->field('')
+                ->leftJoin('specs s', 's.id=gp.spec_id AND s.is_del=0')
+                ->leftJoin('spec_value sv', 'sv.id=gp.spec_value_id AND s.is_del=0')
+                ->where([
+                    'gp.spuCode' => $value['spuCode'],
+                    'gp.is_del' => 0,
+                    's.spec_name' => '响应时间',
+                ])
+                ->value('sv.spec_value', '');
+
+            unset($value['spuCode']);
+        }
+
+        if (!empty($rs_temp_good)) {
+            $data[] = [
+                'head' => array_keys($rs_temp_good[0]),
+                'list' => $rs_temp_good,
+                'filename' => '产品' . date('YmdHis'),
+            ];
+        }
+
+        if (empty($data)) return error_show(1005, '没有可供导出的数据');
+        else excelSaveBatch($data);
+
+    }
+
     //【一、采购日报表】1.咨询单总数
     public function zixunTotal()
     {

+ 57 - 39
app/admin/controller/Sale.php

@@ -171,6 +171,9 @@ class Sale extends Base
             }
             $send_num = array_sum(array_column($addrlist,"receipt_quantity"));
         }
+        if($send_num>$good_num){
+            return error_show(1004,"发货数量超出订单总数量");
+        }
         $remark =isset($this->post['remark']) && $this->post['remark'] !=="" ?trim($this->post['remark']):"";
 
         $apply_id =GetUserInfo($token);
@@ -194,10 +197,10 @@ class Sale extends Base
                 "origin_price"=>$origin_price,
                 "sale_price"=>$sale_price,
                 "post_fee"=>0,
-                "status"=>$send_num == 0 ? 0 : 1,
-                "send_num"=>$send_num,
-                "wsend_num"=>$good_num-$send_num,
-                "send_status"=>$good_num==$send_num? 3 :($send_num==0?1 :2) ,
+                "status"=>0,
+                "send_num"=>0,
+                "wsend_num"=>$good_num,
+                "send_status"=>0 ,
                 "good_type"=>$goodtype,
                 "send_type"=>$sendtype,
                 "supplierNo"=>$supplierNo,
@@ -398,8 +401,8 @@ class Sale extends Base
                 "supplierNo"=>$supplier['code'],
                 "addr"=>"",
                 "addrs_code"=>"",
-                "contactor"=>0,
-                "contactor_name"=>0,
+                "contactor"=>$data['order_type']==1? $supplier['personid']:$data['createrid'],
+                "contactor_name"=>$data['order_type']==1? $supplier['person']:$data['creater'],
                 "mobile"=>"",
                 "position"=>"",
                 "companyNo"=>$data['companyNo'],
@@ -413,6 +416,12 @@ class Sale extends Base
                 return false;
             }
         }else{
+            if($wsm['wsm_type']==2){
+                $wsm['contactor']=$data['createrid'];
+                $wsm['contactor_name']=$data['creater'];
+                $wsm['updatetime']=date("Y-m-d H:i:s");
+                Db::name("warehouse_info")->save($wsm);
+            }
             $wsm_code =$wsm['wsm_code'];
         }
 
@@ -783,6 +792,9 @@ class Sale extends Base
             }
             $send_num = array_sum(array_column($va,"receipt_quantity"));
         }
+        if($good_num<$send_num){
+            return error_show(1002, "发货数量不能超过购买数量");
+        }
         $arrtime=isset($this->post['arrtime'])&&$this->post['arrtime']!="" ?$this->post['arrtime']:"";
         if($arrtime==""){
             return error_show(1002, "参数arrtime不能为空");
@@ -808,10 +820,10 @@ class Sale extends Base
                 "origin_price"=>$zxinfo['total_fee'],
                 "sale_price" => $sale_price,//销售单价支持修改
                 "post_fee"=>0,
-                "status"=>$send_num == 0 ? 0 : 1,
-                "send_num"=>$send_num,
-                "wsend_num"=>$good_num-$send_num,
-                "send_status"=>$good_num==$send_num? 3 :($send_num==0?1 :2) ,
+                "status"=>0,
+                "send_num"=>0,
+                "wsend_num"=>$good_num,
+                "send_status"=>1,
                 "good_type"=>1,
                 "send_type"=>$sendtype,
                 "supplierNo"=>$zxorder['companyNo'],
@@ -1239,10 +1251,10 @@ class Sale extends Base
             "origin_price"=>$goodinfo['total_fee'],
             "sale_price"=>$data['sale_price'],
             "post_fee"=>0,
-            "status"=>$data['send_num']==0?0 :1,
-            "send_num"=>$data['send_num'],
-            "wsend_num"=>$data['good_num']-$data['send_num'],
-            "send_status"=>$data['good_num']==$data['send_num']? 3 :($data['send_num']==0?1 :2),
+            "status"=>0,
+            "send_num"=>0,
+            "wsend_num"=>$data['good_num'],
+            "send_status"=>1,
             "good_type"=>1,
             "send_type"=>$data['sendtype'],
             "supplierNo"=>$data['companyNo'],
@@ -1450,10 +1462,10 @@ class Sale extends Base
             "origin_price"=>$origin_price,
             "sale_price"=>$sale_price,
             "post_fee"=>0,
-            "status"=>$data['send_num']==0?0 :1,
-            "send_num"=>$data['send_num'],
-            "wsend_num"=>$data['good_num']-$data['send_num'],
-            "send_status"=>$data['good_num']==$data['send_num']? 3 :($data['send_num']==0?1 :2) ,
+            "status"=>0,
+            "send_num"=>0,
+            "wsend_num"=>$data['good_num'],
+            "send_status"=>1,
             "good_type"=>1,
             "send_type"=>$data['sendtype'],
             "supplierNo"=>$data['companyNo'],
@@ -2804,21 +2816,23 @@ class Sale extends Base
 
         }
         $role=$this->checkRole();
-        if(!empty($role['write'])){
-            $where[]=["a.apply_id","in",$role['write']];
+        $condition='';
+        if(!empty($role['write']) && $this->uid!=""){
+            // $where[]=["a.apply_id","in",$role['write']];
+            $condition .="n.contactor = {$this->uid} or a.apply_id in (".implode(',',$role['write']).")";
         }
         $count = Db::name('order_out')->alias('a')
             ->join("sale b", "b.orderCode=a.orderCode", "left")
             ->join("customer_info v", "v.companyNo=b.customer_code", "left")
-            //->join("good n","n.good_code=b.good_code","left")
-            ->where($where)->count();
+            ->join("warehouse_info n","n.wsm_code=a.wsm_code","left")
+            ->where($where)->where($condition)->count();
         $total = ceil($count / $size);
         $page = $page >= $total ? $total : $page;
         $list = Db::name('order_out')->alias('a')->join("sale b", "b.orderCode=a.orderCode", "left")
             ->join("customer_info v", "v.companyNo=b.customer_code", "left")
-            //->join("good n","n.good_code=b.good_code","left")
+            ->join("warehouse_info n","n.wsm_code=a.wsm_code","left")
             ->field("a.*,b.good_name,b.good_code,b.skuCode,b.supplierNo,b.customer_code,v.companyName,b.origin_price,b.sale_price,b.total_price")
-            ->where($where)->order("addtime desc")->page($page, $size)->select();
+            ->where($where)->where($condition)->order("addtime desc")->page($page, $size)->select();
         $data=[];
         foreach ($list as $value) {
             $wsmcode = Db::name("warehouse_info")->alias("k")->leftJoin("supplier c", "k.supplierNo=c.code")
@@ -2900,7 +2914,8 @@ class Sale extends Base
         if ($send_num == "") {
             return error_show(1002, "发货数量不能为空");
         }
-        if ($send_num > $der['wsend_num']) {
+        $wsed=Db::name("order_out")->where(["orderCode"=>$orderCode])->where("status","<",2)->sum('send_num');
+        if ($send_num > $der['wsend_num']-$wsed) {
             return error_show(1002, "超出可发货数量");
         }
 
@@ -2956,16 +2971,16 @@ class Sale extends Base
             ];
             $addrid = Db::name("order_addr")->insert($addrlst,true);
             if($addrid>0){
-                    $der['send_num'] +=$send_num;
-                    $der['wsend_num'] -= $send_num;
-                    $der['send_status'] = $der['send_num'] == 0 ? 1 : $der['wsend_num'] == 0 ? 3 : 2;
-                    $der['status'] = $der['send_num'] == 0 ? 0 : $der['wsend_num'] == 0 ?2 :1;
-                    $der['updatetime'] = date("Y-m-d H:i:s");
-                    $si = Db::name('sale')->save($der);
-                    if($si==false){
-                        Db::rollback();
-                        return error_show(1002,"出库单新建失败");
-                    }
+//                    $der['send_num'] +=$send_num;
+//                    $der['wsend_num'] -= $send_num;
+//                    $der['send_status'] = $der['send_num'] == 0 ? 1 : $der['wsend_num'] == 0 ? 3 : 2;
+//                    $der['status'] = $der['send_num'] == 0 ? 0 : $der['wsend_num'] == 0 ?2 :1;
+//                    $der['updatetime'] = date("Y-m-d H:i:s");
+//                    $si = Db::name('sale')->save($der);
+//                    if($si==false){
+//                        Db::rollback();
+//                        return error_show(1002,"出库单新建失败");
+//                    }
 
                         $outCode = makeNo("DF");
                         $cgd =Db::name("purchease_order")->where(["cgdNo"=>$order['cgdNo']])->find();
@@ -3111,16 +3126,19 @@ class Sale extends Base
         try{
             $up =Db::name("order_out")->save($outinfo);
             if($up){
-                $sendnum = Db::name("order_out")->where([['orderCode',"=", $outinfo['orderCode']], ["status","<",2]])->count();
-                if($sendnum==0 && $einfo['wsend_num']==0){
-                    $einfo['status']=2;
+
+
+                    $einfo['send_num']+=$outinfo['send_num'];
+                    $einfo['wsend_num']-=$outinfo['send_num'];
+                    $einfo['status']=$einfo['wsend_num']==0?2:($einfo['send_num']==0?0:1);
+                    $einfo['send_status']=$einfo['wsend_num']==0?3:($einfo['send_num']==0?1:2);
                     $einfo['updatetime']=date("Y-m-d H:i:s");
                     $saleup=Db::name("sale")->save($einfo);
                     if($saleup==false){
                         Db::rollback();
                         return error_show(1002, "销售单状态更新失败");
                     }
-                }
+//                }
                 //修改状态,添加待办
                 ActionLog::logAdd($this->post['token'], [
                     "order_code" => $outinfo['outCode'],//出库单号

+ 10 - 2
app/admin/route/app.php

@@ -472,7 +472,6 @@ Route::rule("projectshareplan","admin/Version/project_plan");
 Route::rule("projectsharecheck","admin/Version/feedCheck");
 Route::rule("plancheck","admin/Version/planCheck");
 
-Route::rule('getdata','admin/Data/index');//数据看板,获取相关统计数据
 Route::rule('orderimport','admin/OrderImport/import');//C端订单导入
 Route::rule('orderimportlist','admin/OrderImport/getImportList');//C端订单列表
 Route::rule('orderimportinfo','admin/OrderImport/getImportInfo');//C端订单详情
@@ -482,8 +481,17 @@ Route::rule('confirmimportdata','admin/OrderImport/confirmImportData');//用户
 Route::rule('relationstockbatch','admin/OrderImport/relationStockBatch');//用户批量关联库存
 Route::rule('delimportorder','admin/OrderImport/delImportData');//删除【待用户确认】的订单
 
+Route::rule('exportgood','admin/Report/exportGood');//报表-产品价格和产品
 Route::rule('reportzixuntotal','admin/Report/zixunTotal');//报表-采购日报表-咨询单总数
 Route::rule('reportpurcheaseordersum','admin/Report/purcheaseOrderSum');//报表-采购日报表-采购订单总金额
 Route::rule('reportconsultbidssum','admin/Report/consultBidsSum');//报表-采购日报表-采购员回复咨询单数
 Route::rule('reportpurcheaseordersumbyuser','admin/Report/purcheaseOrderSumByUser');//报表-采购日报表-采购员订单金额
-Route::rule('reportconsultinfobidssum','admin/Report/consultInfoBidsSum');//报表-咨询单报表-已采反报价信息
+Route::rule('reportconsultinfobidssum','admin/Report/consultInfoBidsSum');//报表-咨询单报表-已采反报价信息
+
+//数据看板
+Route::rule('datatodaysalesvolume','admin/Data/todaySalesVolume');//1.今日销量
+Route::rule('datatodaysaleschampion','admin/Data/todaySalesChampion');//2.今日销冠
+Route::rule('datatodaypurchase','admin/Data/todayPurchase');//3.今日采购
+Route::rule('datatotalzixunpurchease','admin/Data/totalZixunPurchease');//5.竞价单和采购单
+Route::rule('datawaitsendtotal','admin/Data/waitSendTotal');//6.未发货
+Route::rule('datatodaysale','admin/Data/todaySale');//7.今日订单

+ 13 - 0
app/command/ImportOrderFromCAnalysisData.php

@@ -66,6 +66,19 @@ class ImportOrderFromCAnalysisData extends Command
                 $update_c_data['remark'] = '数据错误,' . $val->getError();
             }
 
+            //平台订单号和平台商品编号的组合不能重复
+            $temp = $order_import_from_c_db
+                ->where([
+                    'is_del' => OIFCModel::$is_del_normal,
+                    'platform_code' => $rs['platform_code'],
+                    'plat_code' => $rs['plat_code'],
+                ])->find();
+
+            if (!empty($temp)) {
+                $update_c_data['status'] = OIFCModel::$status_wait_confirm;
+                $update_c_data['remark'] = isset($update_c_data['remark']) ? $update_c_data['remark'] . ',平台订单号和平台商品编号重复' : '平台订单号和平台商品编号重复';
+            }
+
             $extend_insert_data = [
                 'order_import_from_c_id' => $rs['id'],
                 'createrid' => 0,

+ 95 - 0
app/common.php

@@ -801,4 +801,99 @@ if (!function_exists('get_address')) {
         ];
     }
 
+}
+
+/**
+ * 批量生成多个文件excel,生成压缩包
+ */
+if (!function_exists('excelSaveBatch')) {
+    function excelSaveBatch(array $datas = [])
+    {
+
+        $urls = [];
+        $dir = root_path() . 'public/storage/report/' . date("YmdHis") . "/";
+        if (!is_dir($dir)) {
+            mkdir($dir, 0777, true);
+        }
+        foreach ($datas as $item) {
+
+            $objPHPExcel = new PHPExcel();
+            $objPHPExcel->getProperties();
+            $keyA = 0; // 设置表头
+            foreach ($item['head'] as $v) {
+                $colum = PHPExcel_Cell::stringFromColumnIndex($keyA);
+                $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
+                $keyA += 1;
+            }
+
+            $column = 2;
+            $objActSheet = $objPHPExcel->getActiveSheet();
+
+            foreach ($item['list'] as $key => $rows) { // 行写入
+                $span = 0;
+                foreach ($rows as $keyName => $value) { // 列写入
+                    //判断数据是否有数组,如果有数组,转换成字符串
+
+                    if (is_array($value)) {
+                        $value = implode("、", $value);
+                    }
+                    $objActSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($span) . $column, $value);
+                    $span++;
+                }
+                $column++;
+            }
+            //  var_dump($objActSheet->getActiveCell());
+            $file = $item['filename'] . ".xls";
+            //$fileName .= "_" . date("Y_m_d", Request()->instance()->time()) . ".xls";
+            //$fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表
+
+            $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
+            $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
+            $objWriter->save($dir . $file); // 文件通过浏览器下载
+            $url = $dir . $file;
+            if (!file_exists($url)) {
+                echo "文件生成失败";
+            } else {
+                $urls[] = $url;
+            }
+        }
+
+
+        $saveDir = root_path() . "public/storage/zip/";
+        if (!is_dir($saveDir)) {
+            mkdir($saveDir, 0777, true);
+        }
+
+        $datetime = date("YmdHis");
+        $file_dir = $saveDir . $datetime . ".zip";
+        # 5.1 文件打包,提示:使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
+        $zip = new \ZipArchive ();
+        # 5.2 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zip
+        if ($zip->open($file_dir, \ZipArchive::OVERWRITE) !== true && $zip->open($file_dir, \ZipArchive::CREATE) !== true) echo '无法打开文件或者文件创建失败';
+
+        # 5.3 批量写入压缩包
+//        $zip->addEmptyDir($fileName);//往zip压缩包写入空目录
+        foreach ($urls as $fileName) {
+            @$zip->addFile($fileName);
+        }
+        // @$zip->addFile($v['file_path'], 'resume'.DIRECTORY_SEPARATOR.basename($headername));
+        # 5.4 关闭压缩包写入
+        $zip->close();
+
+        @deldir($dir);//删除已生成的文件及目录
+        //6. 检查文件是否存在,并输出文件
+        if (!file_exists($file_dir)) echo '压缩包文件不存在';
+
+        ob_clean();
+        flush();
+        header("Cache-Control: max-age=0");
+        header("Content-Description: File Transfer");
+        header('Content-disposition: attachment; filename=' . basename($file_dir)); # 处理文件名
+        header("Content-Type: application/octet-stream");                           # 流文件输出
+        header("Content-Transfer-Encoding: binary");                                # 告诉浏览器,这是二进制文件
+        header('Content-Length: ' . filesize($file_dir));                           # 告诉浏览器,文件大小
+        readfile($file_dir);//输出文件
+        @unlink($file_dir);
+        exit();
+    }
 }