Browse Source

Merge branch 'version1.5' into wugg-dev

wugg 2 years ago
parent
commit
e92fd33dc9

+ 142 - 0
app/abutment/controller/Filing.php

@@ -0,0 +1,142 @@
+<?php
+
+namespace app\abutment\controller;
+
+use think\facade\Db;
+use think\facade\Validate;
+use app\abutment\logic\Filing as FilingLogic;
+
+class Filing extends HomeBaseController
+{
+
+    //列表
+    public function getList()
+    {
+        $param = $this->request->only(['page' => 1, 'size' => 10, 'cat_id' => '', 'start_date' => '', 'end_date' => '', 'filingCode' => '', 'status' => '', 'good_name' => '', 'companyName' => '', 'companyCode' => '', 'orderCode' => ''], 'post');
+
+        $param['supplierNo'] = $this->request->user['supplierNo'];
+
+        return FilingLogic::list($param);
+    }
+
+    //添加
+    public function add()
+    {
+        $param = $this->request->only(['customerCode','companyName', 'num', 'is_determine_price', 'price' => 0, 'expect_service_proportion', 'expect_service', 'cgd_charge' => 0, 'brand_id', 'preservation_day', 'delivery_day', 'make_day', 'tax', 'unit_id', 'cat_id', 'spec_list' => [], 'good_name', 'origin_place', 'delivery_place', 'weight', 'supply_area', 'pay_way', 'gold_weight', 'noble_metal', 'config', 'other_config', 'remark', 'cost_desc', 'good_img'], 'post');
+
+        $val = Validate::rule([
+            'customerCode|业务公司' => 'require|max:255',
+            'companyName|客户名称' => 'require|max:255',
+            'num|销售数量' => 'require|number|gt:0|lt:999999999',
+            'is_determine_price|是否确定售价' => 'require|number|in:1,0',
+            'price|销售价' => 'requireIf:is_determine_price,1|float|max:99999999.99',
+            'expect_service_proportion|期望服务费比例' => 'require|float|between:0,100',
+            'expect_service|期望服务费' => 'require|float|max:99999999.99',
+            'cgd_charge|采购价' => 'requireIf:is_determine_price,0|float|max:99999999.99',
+            'brand_id|品牌' => 'require|number|gt:0',
+            'preservation_day|有效期' => 'require|number|max:999999999',
+            'delivery_day|物流时间' => 'require|number|max:999999999',
+            'make_day|生产工期' => 'require|number|max:999999999',
+            'tax|税点' => 'require|number|between:0,100',
+            'unit_id|单位' => 'require|number|gt:0',
+            'cat_id|分类' => 'require|number|gt:0',
+            'spec_list|规格类型' => 'array|max:100',
+            'good_name|商品名称' => 'require|max:255',
+            'origin_place|产地' => 'require|array|length:3',
+            'delivery_place|发货地' => 'require|array|length:3',
+            'weight|总重量' => 'require|float|max:99999999.99',
+            'supply_area|供货区域' => 'require|number|in:1,2',
+            'pay_way|付款方式' => 'require|number|in:0,1,2',
+            'remark|采购备注' => 'require|max:255',
+            'cost_desc|工艺说明' => 'max:255',
+            'good_img|商品图片' => 'require|array|max:10',
+        ]);
+
+        if (!$val->check($param)) return json_show(1004, $val->getError());
+
+        //如果是贵金属的话,额外判断
+        $cat=made($param['cat_id']);
+        if(isset($cat[0]['id']) && $cat[0]['id']==6){
+            $val_gold = Validate::rule([
+                'gold_weight|贵金属重量' => 'require|float|max:99999999.99',
+                'noble_metal|贵金属类型' => 'require|number|in:1,2,3',
+                'config|配置要求' => 'require|max:255',
+                'other_config|其他配置要求' => 'require|max:255',
+            ]);
+            if(!$val_gold->check($param)) return json_show(1004,$val_gold->getError());
+        }
+
+        $val2 = Validate::rule([
+            'spec_id|规格id' => 'require|number|gt:0',
+            'spec_value_id|规格值id' => 'require|number|gt:0',
+        ]);
+
+        $all_spec = Db::name('specs')
+            ->whereIn('id', array_column($param['spec_list'], 'spec_id'))
+            ->column('spec_name', 'id');
+
+        $all_spec_value = Db::name('spec_value')
+            ->whereIn('id', array_column($param['spec_list'], 'spec_value_id'))
+            ->column('spec_value', 'id');
+
+        foreach ($param['spec_list'] as &$spec_list) {
+            if (!$val2->check($spec_list)) return json_show(1004, $val2->getError());
+            $spec_list['spec_name'] = $all_spec[$spec_list['spec_id']] ?? '';
+            $spec_list['spec_value_name'] = $all_spec_value[$spec_list['spec_value_id']] ?? '';
+        }
+
+        $param['supplierNo']= $this->request->user['supplierNo'];
+        $param['supplierName']= $this->request->user['supplierName'];
+
+        return FilingLogic::add($param);
+
+    }
+
+    //详情
+    public function detail()
+    {
+        $param = $this->request->only(['id'], 'post');
+        $param['supplierNo'] = $this->request->user['supplierNo'];
+        return FilingLogic::detail($param);
+    }
+
+    //取消转单
+    public function cancel()
+    {
+        $param = $this->request->only(['id'], 'post');
+        $param['supplierNo'] = $this->request->user['supplierNo'];
+        return FilingLogic::cancel($param);
+    }
+
+    //转单
+    public function transfer()
+    {
+
+        $param = $this->request->only(['id', 'addr_list'], 'post');
+
+        $val = Validate::rule([
+            'id' => 'require|number|gt:0',
+            'addr_list|收货地址' => 'require|array|max:100',
+        ]);
+
+        if (!$val->check($param)) return json_show(1004, $val->getError());
+
+        $val2 = Validate::rule([
+            'receipt_quantity|收货数量' => 'require|number|gt:0|max:999999999',
+            'contactor|联系人' => 'require|max:255',
+            'mobile|联系电话' => 'require|mobile',
+            'addr_code|收货省市区编码' => 'require|array|length:3',
+            'addr|详细地址' => 'require|max:255',
+        ]);
+
+
+        foreach ($param['addr_list'] as $addr_list) {
+            if (!$val2->check($addr_list)) return json_show(1004, $val2->getError());
+        }
+
+        $param['supplierNo'] = $this->request->user['supplierNo'];
+        return FilingLogic::transfer($param);
+    }
+
+
+}

+ 464 - 0
app/abutment/logic/Filing.php

@@ -0,0 +1,464 @@
+<?php
+
+namespace app\abutment\logic;
+
+use think\Exception;
+use think\facade\Db;
+
+class Filing
+{
+    //列表
+    public static function list(array $data = [])
+    {
+
+        $where = [['is_del', '=', '0']];
+        if ($data['cat_id'] != '') $where[] = ['cat_id', '=', $data['cat_id']];
+        if ($data['start_date'] != '' && $data['end_date'] != '') $where[] = ['addtime', 'between', [$data['start_date'], $data['end_date']]];
+        if ($data['filingCode'] != '') $where[] = ['filingCode', 'like', '%' . $data['filingCode'] . '%'];
+        if ($data['status'] != '') $where[] = ['status', '=', $data['status']];
+        if ($data['good_name'] != '') $where[] = ['good_name', 'like', '%' . $data['good_name'] . '%'];
+        if ($data['companyName'] != '') $where[] = ['companyName', 'like', '%' . $data['companyName'] . '%'];
+        if ($data['companyCode'] != '') $where[] = ['companyCode', 'like', '%' . $data['companyCode'] . '%'];
+        if ($data['orderCode'] != '') $where[] = ['orderCode', 'like', '%' . $data['orderCode'] . '%'];
+        if ($data['supplierNo'] != '') $where[] = ['supplierNo', '=', $data['supplierNo']];
+
+        $count = Db::name('filing')
+            ->where($where)
+            ->count('id');
+
+        $list = Db::name('filing')
+            ->field('id,filingCode,cat_id,good_name,num,good_img,price,expect_service,companyName,companyCode,status,addtime,"" catinfo,orderCode')
+            ->where($where)
+            ->page($data['page'], $data['size'])
+            ->order('id', 'desc')
+            ->withAttr('good_img', function ($val) {
+                return explode(',', $val);
+            })
+            ->select()
+            ->toArray();
+
+        $all_cat = [];
+        foreach ($list as &$value) {
+            if (!isset($all_cat[$value['cat_id']])) {
+                $value['catinfo'] = $all_cat[$value['cat_id']] = implode('/', array_column(made($value['cat_id']), 'name'));
+
+            }
+        }
+
+        return json_show(0, '获取报备单列表成功', ['count' => $count, 'list' => $list]);
+
+    }
+
+    //添加
+    public static function add(array $data = [])
+    {
+
+        if ($data['is_determine_price'] == 1) $data['cgd_charge'] = round(bcsub($data['price'], $data['expect_service'], 3), 2);//确定售价时,采购价=售价-服务费
+        else $data['price'] = round(bcadd($data['cgd_charge'], $data['expect_service'], 3), 2);//不确定售价时,售价=采购价+服务费
+
+        $customerName = Db::name('business')
+            ->where(['companyNo' => $data['customerCode']])
+            ->value('company', '');
+        if ($customerName == '') return json_show(1004, '该业务公司不存在');
+
+        $rs = Db::name('filing')
+            ->strict(false)
+            ->insert(array_merge($data, [
+                'customerName' => $customerName,
+                'filingCode' => makeNo('BM'),
+                'service_charge' => $data['expect_service'],//服务费与期望服务费一致
+                'specinfo' => json_encode($data['spec_list']),
+                'send_way' => 2,
+                'cert_fee' => 0,
+                'pakge_fee' => 0,
+                'cost_fee' => 0,
+                'mark_fee' => 0,
+                'demo_fee' => 0,
+                'open_fee' => 0,
+                'delivery_fee' => 0,
+                'is_gold_price' => 0,
+                'is_diff' => 0,
+                'apply_id' => request()->user['uid'],
+                'apply_name' => request()->user['nickname'],
+                'status' => 0,
+                'is_del' => 0,
+                'addtime' => date('Y-m-d H:i:s'),
+                'updatetime' => date('Y-m-d H:i:s'),
+                'gold_weight' => $data['gold_weight'] ?? 0,
+                'noble_metal' => $data['noble_metal'] ?? 0,
+                'config' => $data['config'] ?? '',
+                'other_config' => $data['other_config'] ?? '',
+                'good_img' => implode(',', $data['good_img']),
+                'origin_place' => implode(',', $data['origin_place']),
+                'delivery_place' => implode(',', $data['delivery_place']),
+            ]));
+
+        return $rs ? json_show(0, '创建报备单成功') : json_show(1004, '创建报备单失败');
+
+    }
+
+    //详情
+    public static function detail(array $data = [])
+    {
+        $rs = Db::name('filing')
+            ->alias('a')
+            ->field('a.*,b.brand_name,d.unit unit_name,p.platform_name,"" cat_info')
+            ->leftJoin('brand b', 'b.id=a.brand_id')
+            ->leftJoin('unit d', 'd.id=a.unit_id')
+            ->leftJoin('platform p', 'p.id=a.platform_id')
+            ->where(['a.is_del' => 0, 'a.id' => $data['id']])
+            ->withAttr('specinfo', function ($val) {
+                return json_decode($val);
+            })
+            ->withAttr('good_img', function ($val) {
+                return explode(',', $val);
+            })->withAttr('origin_place', function ($val) {
+                return explode(',', $val);
+            })->withAttr('delivery_place', function ($val) {
+                return explode(',', $val);
+            })->withAttr('cat_info', function ($val, $da) {
+                return made($da['cat_id']);
+            })
+            ->findOrEmpty();
+        return json_show(0, '获取报备单详情成功', $rs);
+    }
+
+    //审核
+    public static function status(array $data = [])
+    {
+
+        $rs = Db::name('filing')
+            ->field('id,status')
+            ->where(['is_del' => 0, 'id' => $data['id']])
+            ->whereIn('status', [0, 2])
+            ->findOrEmpty();
+        if (empty($rs)) return json_show(1005, '该报备单不存在或不允许审核');
+
+        $companyName = Db::name('customer_info')
+            ->where(['is_del' => 0, 'companyNo' => $data['companyCode']])
+            ->value('companyName', '');
+        if ($companyName == '') return json_show(1005, '该客户不存在');
+
+        $tmp = Db::name('platform')
+            ->where(['is_del' => 0, 'id' => $data['platform_id']])
+            ->field('id')
+            ->findOrEmpty();
+        if (empty($tmp)) return json_show(1005, '该平台不存在');
+
+        $res = Db::name('filing')
+            ->where(['is_del' => 0, 'id' => $data['id']])
+            ->whereIn('status', [0, 2])
+            ->update(array_merge($data, [
+                'companyName' => $companyName,
+                'updatetime' => date('Y-m-d H:i:s')
+            ]));
+        return $res ? json_show(0, '操作成功') : json_show(1004, '操作失败');
+
+
+    }
+
+    //取消转单
+    public static function cancel(array $data = [])
+    {
+        $where = [
+            ['is_del', '=', 0],
+            ['id', '=', $data['id']],
+            ['supplierNo', '=', $data['supplierNo']],
+            ['status', 'in', [0, 1, 2, 4]]
+        ];
+
+        $rs = Db::name('filing')
+            ->field('id,status')
+            ->where($where)
+            ->findOrEmpty();
+        if (empty($rs)) return json_show(1005, '该报备单不存在或不允许取消');
+
+        $res = Db::name('filing')
+            ->where($where)
+            ->update(['status' => 5, 'updatetime' => date('Y-m-d H:i:s')]);
+        return $res ? json_show(0, '操作成功') : json_show(1004, '操作失败');
+
+    }
+
+    //转单
+    public static function transfer(array $data = [])
+    {
+        $filing = Db::name('filing')
+            ->field(true)
+            ->where(['is_del' => 0, 'id' => $data['id'], 'supplierNo' => $data['supplierNo'], 'status' => 2])
+            ->findOrEmpty();
+        if (empty($filing)) return json_show(1005, '该报备单不存在或不允许转单');
+
+        if (array_sum(array_column($data['addr_list'], 'receipt_quantity')) != $filing['num']) return json_show(1004, '收货地址的收货总数不符合');
+
+        $supplier = Db::name('supplier')
+            ->field('id,person,personid,name,code')
+            ->where(['code' => $filing['supplierNo']])
+            ->findOrEmpty();
+
+        $date = date('Y-m-d H:i:s');
+
+        Db::startTrans();
+
+        try {
+
+            $spuCode = makeNo('SKU');
+
+            //商品表
+            Db::name('good_zixun')
+                ->insert([
+                    'spuCode' => $spuCode,
+                    'good_name' => $filing['good_name'],
+                    'brand_id' => $filing['brand_id'],
+                    'cat_id' => $filing['cat_id'],
+                    'good_unit' => $filing['unit_id'],
+                    'good_type' => 0,
+                    'moq' => 1,
+                    'customized' => $filing['make_day'],
+                    'tax' => $filing['tax'],
+                    'platform_id' => $filing['platform_id'],
+                    'supplierNo' => $filing['supplierNo'],
+                    'is_auth' => 0,
+                    'craft_desc' => $filing['good_name'],
+                    'good_remark' => '',
+                    'good_img' => $filing['good_img'],
+                    'good_thumb_img' => '',
+                    'good_info_img' => '',
+                    'status' => 1,
+                    'createrid' => $filing['apply_id'],
+                    'creater' => $filing['apply_name'],
+                    'is_del' => 0,
+                    'addtime' => $date,
+                    'updatetime' => $date,
+                    'specinfo' => $filing['specinfo'],
+                    'work_day' => $filing['make_day'],
+                    'noble_metal' => $filing['noble_metal'],
+                    'is_gold_price' => $filing['is_gold_price'],
+                    'good_weight' => $filing['gold_weight'],
+                    'config' => $filing['config'],
+                    'other_config' => $filing['other_config'],
+                    'weight' => $filing['weight'],
+                    'supply_area' => $filing['supply_area'],
+                    'is_diff' => $filing['is_diff'],
+                    'pay_way' => $filing['pay_way'],
+                    'send_way' => $filing['send_way'],
+                    'companyNo' => $filing['customerCode'],
+                    'proof_type' => '',
+                    'proof_url' => '',
+                ]);
+
+            $orderCode = makeNo('QR');
+            //订单表
+            //sale
+            $sale_id = Db::name('sale')->insertGetId([
+                'orderCode' => $orderCode,
+                'apply_id' => $filing['apply_id'],
+                'apply_name' => $filing['apply_name'],
+                'order_type' => 4,//报备商品
+                'order_source' => 7,//报备转单
+                'platform_id' => $filing['platform_id'],
+                'good_code' => $spuCode,
+                'skuCode' => '',
+                'cat_id' => $filing['cat_id'],
+                'good_name' => $filing['good_name'],
+                'good_num' => $filing['num'],
+                'good_type' => 1,
+                'origin_price' => $filing['cgd_charge'],
+                'sale_price' => $filing['price'],
+                'total_price' => round(bcmul($filing['price'], $filing['num'], 3), 2),
+                'post_fee' => 0,
+                'is_diff' => $filing['is_diff'],
+                'is_activity' => 0,
+                'activity_code' => '',
+                'is_stock' => 0,
+                'customer_code' => $filing['companyCode'],
+                'supplierNo' => $filing['supplierNo'],
+                'zxNo' => '',
+                'platform_order' => '',
+                'send_num' => 0,
+                'wsend_num' => $filing['num'],
+                'th_num' => 0,
+                'th_fee' => 0,
+                'send_status' => 1,
+                'send_type' => 1,//直接发货
+                'remark' => '',
+                'status' => 0,
+                'is_del' => 0,
+                'proof_id' => 0,
+                'other_orderNo' => '',
+                'workNo' => '',
+                'poNo' => '',
+                'use_order' => 0,
+                'good_weight' => 0,
+                'gold_price' => 0,
+                'cost_price' => $filing['cost_fee'],
+                'diff_weight' => 0,
+                'diff_fee' => 0,
+                'returnCode' => '',
+                'addtime' => $date,
+                'updatetime' => $date,
+                'cgderid' => $supplier['personid'],
+                'cgder' => $supplier['person'],
+                'good_createrid' => $filing['apply_id'],
+                'good_creater' => $filing['apply_name'],
+            ]);
+
+            //仓库
+            $wsm = Db::name('warehouse_info')
+                ->field('id,wsm_code')
+                ->where(['supplierNo' => $filing['supplierNo'], 'companyNo' => $filing['customerCode'], 'is_del' => 0])
+                ->findOrEmpty();
+            if (empty($wsm)) {
+                $wsm_code = makeNo('WSM');
+
+                Db::name('warehouse_info')->insert([
+                    'wsm_code' => $wsm_code,
+                    'name' => $supplier['name'],
+                    'wsm_type' => 2,
+                    'supplierNo' => $supplier['code'],
+                    'addr' => '',
+                    'addrs_code' => '',
+                    'contactor' => 0,
+                    'contactor_name' => 0,
+                    'mobile' => '',
+                    'position' => '',
+                    'companyNo' => $filing['supplierNo'],
+                    'status' => 1,
+                    'is_del' => 0,
+                    'addtime' => $date,
+                    'updatetime' => $date,
+                ]);
+
+            } else  $wsm_code = $wsm['wsm_code'];
+
+            //采购单
+            $cgdCode = makeNo('CG');
+
+            Db::name('purchease_order')->insert([
+                'cgdNo' => $cgdCode,
+                'bkcode' => '',
+                'wsm_code' => $wsm_code,
+                'cgder' => $supplier['person'],
+                'cgder_id' => $supplier['personid'],
+                'spuCode' => $spuCode,
+                'good_name' => $filing['good_name'],
+                'good_num' => $filing['num'],
+                'good_price' => $filing['cgd_charge'],
+                'total_fee' => round(bcmul($filing['cgd_charge'], $filing['num']), 2),
+                'pakge_fee' => $filing['pakge_fee'],
+                'cert_fee' => $filing['cert_fee'],
+                'open_fee' => $filing['open_fee'],
+                'delivery_fee' => $filing['delivery_fee'],
+                'mark_fee' => $filing['mark_fee'],
+                'demo_fee' => $filing['demo_fee'],
+                'diff_weight' => '0',
+                'diff_fee' => '0',
+                'gold_price' => '0',
+                'supplierNo' => $filing['supplierNo'],
+                'supplier_name' => $filing['supplierName'],
+                'companyNo' => $filing['customerCode'],
+                'send_status' => 1,
+                'send_num' => '0',
+                'wsend_num' => $filing['num'],
+                'remark' => '',
+                'status' => 0,
+                'lasttime' => $date,
+                'is_del' => 0,
+                'order_type' => 2,
+                'order_source' => 2,
+                'good_type' => 1,
+                'addtime' => $date,
+                'updatetime' => $date,
+                'good_createrid' => $filing['apply_id'],
+                'good_creater' => $filing['apply_name'],
+            ]);
+
+            //台账
+            $standing_bood_data = [
+                'standBookNo' => makeNo('IO'),
+                'orderCode' => $orderCode,
+                'sale_id' => $sale_id,
+                'customer_code' => $filing['companyCode'],
+                'supplierNo' => $filing['supplierNo'],
+                'order_type' => 2,
+                'order_source' => 2,
+                'spuCode' => $spuCode,
+                'addtime' => $date,
+                'updatetime' => $date,
+                'cgdNo' => $cgdCode,
+            ];
+
+            $i = 0;
+            foreach ($data['addr_list'] as $addr) {
+                //地址addr
+                $addrid = Db::name('order_addr')->insertGetId([
+                    'orderCode' => $orderCode,
+                    'addr' => $addr['addr'],
+                    'addr_code' => implode(',', $addr['addr_code']),
+                    'contactor' => $addr['contactor'],
+                    'mobile' => $addr['mobile'],
+                    'customer_code' => $filing['companyCode'],
+                    'post_fee' => 0,
+                    'receipt_quantity' => $addr['receipt_quantity'],
+                    'is_del' => 0,
+                    'addtime' => $date,
+                    'updatetime' => $date,
+                ]);
+
+                //发货单
+                $outCode = makeNo('DF');
+                //改变编码规则,将原来的编码后两位换成序列号
+                //str_pad字符串填充
+                $outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
+                Db::name('order_out')->insert([
+                    'orderCode' => $orderCode,
+                    'outCode' => $outCode,
+                    'apply_id' => request()->user['uid'],
+                    'apply_name' => request()->user['nickname'],
+                    'addrid' => $addrid,
+                    'post_name' => '',
+                    'post_code' => '',
+                    'post_fee' => 0,
+                    'sendtime' => $date,
+                    'send_num' => $addr['receipt_quantity'],
+                    'check_num' => 0,
+                    'error_num' => 0,
+                    'wsm_code' => '',
+                    'order_type' => 2,
+                    'status' => 0,
+                    'addtime' => $date,
+                    'updatetime' => $date,
+                ]);
+                $standing_bood_data['outCode'][] = $outCode;
+                $i++;
+            }
+
+            //更新报备单
+            Db::name('filing')
+                ->where(['is_del' => 0, 'id' => $data['id'], 'supplierNo' => $data['supplierNo'], 'status' => 2])
+                ->update(['status' => 3, 'updatetime' => $date, 'orderCode' => $orderCode, 'reason' => '']);
+
+
+            //待办已办先不处理
+
+
+            //处理台账
+            if (isset($standing_bood_data['outCode']) && is_array($standing_bood_data['outCode'])) $standing_bood_data['outCode'] = implode(',', $standing_bood_data['outCode']);
+
+            Db::name('standing_book')->insert($standing_bood_data);
+
+            Db::commit();
+            return json_show(0, '转单成功');
+
+        } catch (Exception $exception) {
+            Db::rollback();
+            Db::name('filing')
+                ->where(['is_del' => 0, 'id' => $data['id'], 'supplierNo' => $data['supplierNo'], 'status' => 2])
+                ->update(['status' => 4, 'updatetime' => $date, 'reason' => $exception->getMessage()]);
+            return json_show(1005, '转单失败,' . $exception->getMessage());
+        }
+
+    }
+
+
+}

+ 8 - 0
app/abutment/route/app.php

@@ -68,3 +68,11 @@ route::rule('consultFeadback', 'abutment/Consult/feadback');//反馈商品添加
 route::rule('consultFeadEdit', 'abutment/Consult/feededit');//反馈商品编辑
 
 
+//报备单
+route::rule('filingList', 'Filing/getList');//获取列表
+route::rule('filingAdd', 'Filing/add');//创建
+route::rule('filingDetail', 'Filing/detail');//详情
+route::rule('filingCancel', 'Filing/cancel');//取消
+route::rule('filingTransfer', 'Filing/transfer');//转单
+
+

+ 4 - 1
app/admin/controller/Activity.php

@@ -496,6 +496,7 @@ class Activity extends Base
         }
         Db::startTrans();
         try{
+            $isRejectAll = true;//是否全部驳回
             foreach ($good_list as $value){
                 $temp=[];
                 $temp["id"]=$value['id'];
@@ -507,9 +508,11 @@ class Activity extends Base
                     Db::rollback();
                     return error_show(1004,"商品数据更新失败");
                 }
+
+                if ($isRejectAll && ($value['status'] == 1)) $isRejectAll = false;//只要有一个商品通过,即不能全部驳回
             }
             $old_activity_status = $activity['status'];
-            $activity['status']=4;
+            $activity['status'] = $isRejectAll ? 8 : 4;//4审核通过,8审核未通过
             $activity['updatetime']=date("Y-m-d H:i:s");
             $act = Db::name("good_activity")->save($activity);
             if($act){

+ 7 - 5
app/admin/controller/After.php

@@ -60,7 +60,7 @@ class After extends Base
 //	        $cgderid =$wsm['contactor'] ??0;
 //		}
 
-        if ($oder['order_type'] == 3) {
+        if ($oder['order_type'] == 3||$oder['order_type'] == 4) {
             $goon = Db::name("good_zixun")->where(["spuCode" => $oder['good_code'], "is_del" => 0])->find();
         } else {
             $goon = Db::name('good_platform')->alias('a')->join('good b', 'b.spuCode=a.spuCode', 'left')
@@ -302,7 +302,7 @@ class After extends Base
         $info['order_type'] = $orderinfo['order_type'];
         $info['sale_price'] = $orderinfo['sale_price'];
         $info['total_price'] = sprintf("%1\$.2f", $orderinfo['sale_price'] * $info['error_num']);
-        if ($orderinfo['order_type'] == 3) {
+        if ($orderinfo['order_type'] == 3 || $orderinfo['order_type'] == 4) {
             $goon = Db::name("good_zixun")->where(["spuCode" => $orderinfo['good_code'], "is_del" => 0])->find();
         } else {
             $goon = Db::name('good_platform')->alias('a')->join('good b', 'b.spuCode=a.spuCode', 'left')
@@ -1416,7 +1416,7 @@ class After extends Base
 
 
         //根据是否咨询类商品,分别处理
-        if ($info['order_type'] == 3) return $this->createSaleZixun($info['id'], $info['good_code'], $info, $old_sale, $rm, $ri, $old_out['addrid'], $param['token']);
+        if ($info['order_type'] == 3||$info['order_type'] == 4) return $this->createSaleZixun($info['id'], $info['good_code'], $info, $old_sale, $rm, $ri, $old_out['addrid'], $param['token']);
         else return $this->createSaleNotZixun($info['id'], $info['good_code'], $info, $old_sale, $rm, $ri, $old_out, $param['token']);
 
     }
@@ -1571,6 +1571,7 @@ class After extends Base
                 ->where('code',$old_cgd['supplierNo'])
                 ->findOrEmpty();
 
+            $tmp_sale_price = $old_sale['sale_price'];//取原售价
             $data = array_merge($old_sale, [
                 'id' => null,
                 "orderCode" => $orderCode,
@@ -1614,7 +1615,7 @@ class After extends Base
                 "addtime" => date("Y-m-d H:i:s"),
                 "updatetime" => date("Y-m-d H:i:s"),
                 'returnCode' => $info['returnCode'],
-//                'total_price' => round($sale_price * $good_num, 2),
+                'total_price' => round(bcmul($tmp_sale_price, $good_num, 3), 2),
 //                'workNo'=>$workNo,
                 'cgderid' => $supplier_temp_info['personid'],
                 'cgder' => $supplier_temp_info['person'],//采购员(供应商负责人)
@@ -2180,6 +2181,7 @@ class After extends Base
 
 
 
+            $tmp_sale_price = $old_sale['sale_price'];//取原价格
             $data = array_merge($old_sale, [
                 'id' => null,
                 "orderCode" => $orderCode,
@@ -2193,7 +2195,7 @@ class After extends Base
                 "apply_name" => $ri,
                 "origin_price" => $origin_price,
 //                "sale_price" => $old_sale['sale_price'],//取原价格
-//                "total_price" => $sale_price,//取原总价
+                "total_price" => round(bcmul($good_num, $tmp_sale_price, 3), 2),//重新计算总价
 //                "post_fee" => 0,
 //                "status" => 0,
                 "th_num" => 0,

+ 60 - 28
app/admin/controller/Data.php

@@ -22,12 +22,12 @@ class Data extends BaseController
             ->whereDay('addtime', 'today')
             ->find();
 
-        //跨库查询网络部
+        //跨库查询网络部和客服部
         $internet = Db::connect('mysql3')
             ->table('source_all')
             ->field('SUM(sale_total) money,COUNT(id) orders_number')
             ->whereDay('ordertime')
-            ->where('depart', '网络部')
+            ->whereIn('depart', ['网络部', '客服部'])
             ->find();
 
         $temp = [
@@ -183,25 +183,42 @@ class Data extends BaseController
             ->order('total_price', 'desc')
             ->column('itemid companyId,c.`name` companyName,SUM(t.total_price) total_price,COUNT(t.id) total_order', 'name');
 
-        //跨库添加网络部数据
+        //跨库添加网络部数据和客服部数据
         $internet = Db::connect('mysql3')
             ->table('source_all')
-            ->field('SUM(sale_total) total_price,COUNT(id) total_order ')
             ->whereDay('ordertime')
-            ->where('depart', '网络部')
-            ->find();
+            ->group('depart')
+            ->whereIn('depart', ['网络部', '客服部'])
+            ->column('depart,SUM(sale_total) total_price,COUNT(id) total_order ', 'depart');
+
 
         if (!empty($internet)) {
-            if (isset($rs['网络部'])) {
-                $rs['网络部']['total_price'] += $internet['total_price'];
-                $rs['网络部']['total_order'] += $internet['total_order'];
-            } else {
-                $rs[] = [
-                    'companyId' => '',
-                    'companyName' => '网络部',
-                    'total_price' => $internet['total_price'],
-                    'total_order' => $internet['total_order'],
-                ];
+            if (isset($internet['网络部'])) {
+                if (isset($rs['网络部'])) {
+                    $rs['网络部']['total_price'] += $internet['网络部']['total_price'];
+                    $rs['网络部']['total_order'] += $internet['网络部']['total_order'];
+                } else {
+                    $rs[] = [
+                        'companyId' => '',
+                        'companyName' => '网络部',
+                        'total_price' => $internet['网络部']['total_price'],
+                        'total_order' => $internet['网络部']['total_order'],
+                    ];
+                }
+            }
+
+            if (isset($internet['客服部'])) {
+                if (isset($rs['客服部'])) {
+                    $rs['客服部']['total_price'] += $internet['客服部']['total_price'];
+                    $rs['客服部']['total_order'] += $internet['客服部']['total_order'];
+                } else {
+                    $rs[] = [
+                        'companyId' => '',
+                        'companyName' => '客服部',
+                        'total_price' => $internet['客服部']['total_price'],
+                        'total_order' => $internet['客服部']['total_order'],
+                    ];
+                }
             }
 
             //重新按照总金额排序
@@ -228,19 +245,34 @@ class Data extends BaseController
             ->whereMonth('s.addtime')
             ->column('(sum(s.total_price) - sum(s.th_fee)) sales_volume,u.itemid,c.name', 'c.name');
 
-        //额外把网络部的销售数据跨数据库查询出来
+        //额外把网络部和客服部的销售数据跨数据库查询出来
         $other_network = Db::connect('mysql3')
             ->table('source_all')
             ->whereMonth('ordertime')
-            ->where('depart', '网络部')
-            ->sum('sale_total');
-        if (isset($sales_volume['网络部'])) $sales_volume['网络部']['sales_volume'] += $other_network;
-        else {
-            $sales_volume['网络部'] = [
-                'sales_volume' => $other_network,
-                'itemid' => -1,
-                'name' => '网络部'
-            ];
+            ->whereIn('depart', ['网络部', '客服部'])
+            ->group('depart')
+            ->column('SUM(sale_total) sale_total', 'depart');
+
+        if (isset($other_network['网络部'])) {
+            if (isset($sales_volume['网络部'])) $sales_volume['网络部']['sales_volume'] += $other_network['网络部'];
+            else {
+                $sales_volume['网络部'] = [
+                    'sales_volume' => $other_network['网络部'],
+                    'itemid' => -1,
+                    'name' => '网络部'
+                ];
+            }
+        }
+
+        if (isset($other_network['客服部'])) {
+            if (isset($sales_volume['客服部'])) $sales_volume['客服部']['sales_volume'] += $other_network['客服部'];
+            else {
+                $sales_volume['客服部'] = [
+                    'sales_volume' => $other_network['客服部'],
+                    'itemid' => -2,
+                    'name' => '客服部'
+                ];
+            }
         }
 
         //部门销售指标
@@ -376,12 +408,12 @@ class Data extends BaseController
             ->whereDay('addtime', 'today')
             ->find();
 
-        //跨库查询网络部
+        //跨库查询网络部和客服部
         $internet = Db::connect('mysql3')
             ->table('source_all')
             ->field('SUM(sale_total) money,SUM(order_num) good_num,COUNT(id) orders_number')
             ->whereDay('ordertime')
-            ->where('depart', '网络部')
+            ->whereIn('depart', ['网络部', '客服部'])
             ->find();
 
         //组织数据

+ 46 - 0
app/admin/controller/Filing.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\abutment\logic\Filing as FilingLogic;
+use think\facade\Validate;
+
+//报备单
+class Filing extends Base
+{
+    //列表
+    public function getList()
+    {
+        $param = $this->request->only(['page' => 1, 'size' => 10, 'cat_id' => '', 'start_date' => '', 'end_date' => '', 'filingCode' => '', 'status' => '', 'good_name' => '', 'companyName' => '', 'companyCode' => '', 'orderCode' => '', 'supplierNo' => ''], 'post');
+
+        return FilingLogic::list($param);
+    }
+
+    //详情
+    public function detail()
+    {
+        $param = $this->request->only(['id' => 0], 'post', 'trim');
+        return FilingLogic::detail($param);
+    }
+
+    //审核
+    public function status()
+    {
+        $param = $this->request->only(['id', 'status', 'companyCode', 'plat_code' => '', 'service_charge', 'service_proportion','platform_id'], 'post');
+
+        $val = Validate::rule([
+            'id' => 'require|number|gt:0',
+            'status|状态' => 'require|number|in:1,2',
+            'companyCode|客户' => 'require|length:18',
+            'service_charge|服务费' => 'require|float|max:99999999.99',
+            'service_proportion|服务费比例' => 'require|float|between:0,100',
+            'platform_id|平台id' => 'require|number|gt:0',
+        ]);
+
+        if (!$val->check($param)) return json_show(1004, $val->getError());
+
+        return FilingLogic::status($param);
+    }
+
+
+}

+ 3 - 1
app/admin/controller/Good.php

@@ -747,10 +747,12 @@ class Good extends Base
         return app_show(0,"获取成功",["list"=>$data,"count"=>$count]);
     }
 
+    //库存统计
     public function GetStockGod(){
         $page = isset($this->post['page']) &&$this->post['page'] !=="" ? intval($this->post['page']):1;
         $size = isset($this->post['size']) &&$this->post['size'] !=="" ? intval($this->post['size']):10;
-        $condition = [["b.is_del","=",0],["c.usable_stock",">",0],["a.wsm_type","<>",2]];
+//        $condition = [["b.is_del","=",0],["c.usable_stock",">",0],["a.wsm_type","<>",2]];
+        $condition = [["b.is_del", "=", 0], ["a.wsm_type", "<>", 2]];//库存为0的也要显示出来
         $type_code = isset($this->post['type_code']) &&$this->post['type_code'] !=="" ? trim($this->post['type_code']):"";
         if($type_code!==""){
             $condition[]=["b.spuCode","like","%{$type_code}%"];

+ 11 - 4
app/admin/controller/Purch.php

@@ -23,6 +23,7 @@ class Purch extends Base
         $this->noble=\think\facade\Config::get("noble");
     }
 
+    //采购单列表
     public function  list(){
         $page = isset($this->post['page']) && $this->post['page'] !=="" ? intval($this->post['page']):"1";
         $size = isset($this->post['size']) && $this->post['size'] !=="" ? intval($this->post['size']):"10";
@@ -109,6 +110,12 @@ class Purch extends Base
             //$where['lasttime'] = Db::raw(" <= '{$last_end}'");
             $where[]=['on.orderCode',"like", '%'.$orderCode.'%'];
         }
+
+        //筛选供应商名称
+        $supplier_name = isset($this->post['supplier_name']) && $this->post['supplier_name'] != "" ? $this->post['supplier_name'] : "";
+        if ($supplier_name != '') $where[] = ['po.supplier_name', 'like', '%' . $supplier_name . '%'];
+
+
 //		$whereor=[];
 //        if(!empty($role['write'])){
 ////            $whereor[]=["po.cgder_id","in",$role['write']];
@@ -172,7 +179,7 @@ class Purch extends Base
 //			$supplierCgder =Db::name("supplier")->where(["code"=>$value['supplierNo']])->findOrEmpty();
 //            $value['supplier_cgderid'] = $supplierCgder['personid'] ??'';
 //            $value['supplier_cgder'] = $supplierCgder['person'] ??'';
-            if($value['order_type']==3){
+            if($value['order_type']==3||$value['order_type']==4){
                 $goon = Db::name("good_zixun")->where(["spuCode"=>$value['spuCode'],"is_del"=>0])->find();
                 $value["speclist"]=isset($goon['specinfo'])&&$goon['specinfo']!=""? json_decode($goon['specinfo'],true):"";
             }else {
@@ -233,7 +240,7 @@ class Purch extends Base
         $im = Db::name('purchease_back')->where(['cgdNo'=>$data['cgdNo'],'is_del'=>0])->select();
         $var=[];
         foreach ($im as $value){
-            if($data['order_type']==3){
+            if($data['order_type']==3||$data['order_type']==4){
                 $goo = Db::name("good_zixun")->where(["spuCode"=>$value['spuCode'],"is_del"=>0])->find();
             }else {
                 $goo =Db::name('good_basic')->where(['spuCode'=>$value['spuCode']])->find();
@@ -247,7 +254,7 @@ class Purch extends Base
         }
         //采购工差单
         $dom = Db::name("purchease_diff")->where(['cgdNo'=>$data['cgdNo'],'is_del'=>0])->find();
-        if($data['order_type']==3){
+        if($data['order_type']==3||$data['order_type']==4){
             $goon = Db::name("good_zixun")->where(["spuCode"=>$data['spuCode'],"is_del"=>0])->find();
         }else {
             $goon =Db::name('good_basic')->where(['spuCode'=>$data['spuCode']])->find();
@@ -765,7 +772,7 @@ class Purch extends Base
         if($cg==""){
             return error_show(1002,"未找到采购单数据");
         }
-        if($cg['order_type']==3){
+        if($cg['order_type']==3||$cg['order_type']==4){
             $gd = Db::name("good_zixun")->where(["spuCode"=>$cg['spuCode']])->find();
         }else {
             $gd =Db::name('good_basic')->where(['spuCode'=>$cg['spuCode']])->find();

+ 1 - 1
app/admin/controller/Purchback.php

@@ -209,7 +209,7 @@ public function backfe(){
             return error_show(1002,"未找到数据");
         }
         $dom = Db::name("purchease_order")->where(['cgdNo'=>$info['cgdNo'],'is_del'=>0])->find();
-        if($dom['order_type']==3){
+        if($dom['order_type']==3||$dom['order_type']==4){
             $goon = Db::name("good_zixun")->where(["spuCode"=>$dom['spuCode'],"is_del"=>0])->find();
         }else {
             $goon =Db::name('good_basic')->where(['spuCode'=>$dom['spuCode']])->find();

+ 26 - 7
app/admin/controller/Reorder.php

@@ -398,6 +398,7 @@ class Reorder extends Base
         }
     }
 
+    //退货单列表
     public function list(){
         $page = isset($this->post['page']) && $this->post['page'] !=="" ? intval($this->post['page']):"1";
         $size = isset($this->post['size']) && $this->post['size'] !=="" ? intval($this->post['size']):"10";
@@ -426,6 +427,17 @@ class Reorder extends Base
         if($end!==""){
             $where[]=['sr.addtime',"<=", $end.' 23:59:59'];
         }
+        //商品成本编码搜索
+        $good_code = isset($this->post['good_code']) && $this->post['good_code'] != "" ? trim($this->post['good_code']) : "";
+        if ($good_code != "") {
+            $where[] = ['sr.good_code', "like", "%{$good_code}%"];
+        }
+        //商品上线编码搜索
+        $skuCode = isset($this->post['skuCode']) && $this->post['skuCode'] != "" ? trim($this->post['skuCode']) : "";
+        if ($skuCode != "") {
+            $where[] = ['b.skuCode', "like", "%{$skuCode}%"];
+        }
+
         $condition=[];
 //        $role=$this->checkRole();
 //        if(!empty($role['write']) && $this->uid!=""){
@@ -447,18 +459,25 @@ class Reorder extends Base
 //        $role = $this->checkDataShare();
 //        if (!empty($role[DataGroupModel::$type_全部])) $condition .= "sr.cgderid = {$this->uid} or sr.person_id = {$this->uid} or sr.apply_id in (" . implode(',', $role[DataGroupModel::$type_全部]) . ")";
 		if(in_array($this->roleid,config('app.wsm_cgder_role'))){
-			$where[]=["order_type","=",1];
+			$where[]=["b.order_type","=",1];
 		}
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["sr.apply_id", 'in', get_company_item_user_by_name($company_name)];
 
-        $count=Db::name("sale_return")->alias('sr')->where($where)->where(function ($query)use ($condition){$query->whereOr($condition);})->count();
+        $count=Db::name("sale_return")
+            ->alias('sr')
+            ->leftJoin("depart_user u", "u.uid=sr.apply_id AND u.is_del=0")
+            ->leftJoin("sale b", "b.orderCode=sr.orderCode AND b.is_del=0")
+            ->where($where)
+            ->where(function ($query)use ($condition){$query->whereOr($condition);})
+            ->count('sr.id');
         $total = ceil($count/$size);
         $page = $total>=$page ? $page :$total;
         $list = Db::name("sale_return")
             ->alias('sr')
-            ->field('sr.*,u.itemid')
+            ->field('sr.*,u.itemid,b.skuCode,b.sale_price,b.good_num total_num ')
             ->leftJoin("depart_user u", "u.uid=sr.apply_id AND u.is_del=0")
+            ->leftJoin("sale b", "b.orderCode=sr.orderCode AND b.is_del=0")
             ->where($where)
             ->where(function ($query)use ($condition){$query->whereOr($condition);})
             ->order("addtime desc")
@@ -472,10 +491,10 @@ class Reorder extends Base
                 $error = Db::name("result_info")->where(["result_code"=>$value['error_code']])->find();
                 $value['error_msg']= isset($error['result'])?$error['result']:"";
             }
-            $order =Db::name("sale")->where(["orderCode"=>$value['orderCode'],"is_del"=>0])->find();
-            $value['sale_price'] = isset($order['sale_price']) ?$order['sale_price']:0;
+//            $order =Db::name("sale")->where(["orderCode"=>$value['orderCode'],"is_del"=>0])->find();
+//            $value['sale_price'] = isset($order['sale_price']) ?$order['sale_price']:0;
             $value['return_total'] =$value['sale_price']*$value['num'] ;
-            $value['total_num'] =$order['good_num'] ;
+//            $value['total_num'] =$order['good_num'] ;
             $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
 
             //是否具有编辑权限
@@ -484,7 +503,7 @@ class Reorder extends Base
 
             $data[]=$value ;
         }
-        return app_show(0,"获取成功",['list'=>$data,"count"=>$count]);
+        return app_show(0,"获取成功",["count"=>$count,'list'=>$data]);
     }
 
     public function info(){

+ 22 - 8
app/admin/controller/Report.php

@@ -835,7 +835,7 @@ class Report extends Base
 
         if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
 
-        $where = [['po.is_del', '=', 0],["po.order_type","<>",1]];
+        $where = [['po.is_del', '=', 0], ["po.order_type", "<>", 1]];
 
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['po.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
         if ($param['status'] != '') $where[] = ['po.status', '=', $param['status']];
@@ -911,7 +911,8 @@ class Report extends Base
 
         if (!$val_params->check($param)) return error_show(1004, $val_params->getError());
 
-        $where = [['po.is_del', '=', 0]];
+        $where = [['po.is_del', '=', 0], ["po.order_type", "<>", 1]];
+
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['po.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
         if ($param['status'] != '') $where[] = ['po.status', '=', $param['status']];
 
@@ -931,6 +932,8 @@ class Report extends Base
 
         $list = [];
 
+        $tmp=[];
+
         foreach ($data as $v) {
 
             //单据状态
@@ -947,15 +950,22 @@ class Report extends Base
             else $temp = Db::name('sale')->where(['orderCode' => $v['orderCode'], 'is_del' => 0])->field('id,apply_id,apply_name')->find();
 
             $v['创建人'] = isset($temp['apply_name']) ? $temp['apply_name'] : '';
-            $v['创建人所属部门'] = get_company_name_by_uid($temp['apply_id'] ?? 0);
+
+            if(!isset($tmp[$temp['apply_id'] ?? 0])){
+                $tmp[$temp['apply_id'] ?? 0] =  get_company_name_by_uid($temp['apply_id'] ?? 0);
+            }
+            $v['创建人所属部门'] = $tmp[$temp['apply_id'] ?? 0];//get_company_name_by_uid($temp['apply_id'] ?? 0);
 
             //创建时间
             $v['发货时间'] = Db::name('order_out')
-                ->where(['orderCode' => $v['orderCode']])
+                ->where(['is_del' => 0, 'orderCode' => $v['orderCode']])
                 ->order('addtime', 'desc')
                 ->value('addtime');
 
-            $v['采购员所属部门'] = get_company_name_by_uid($v['cgder_id'] ?? 0);
+            if(!isset($tmp[$v['cgder_id'] ?? 0])){
+                $tmp[$v['cgder_id'] ?? 0] =  get_company_name_by_uid($v['cgder_id'] ?? 0);
+            }
+            $v['采购员所属部门'] = $tmp[$v['cgder_id'] ?? 0];//get_company_name_by_uid($v['cgder_id'] ?? 0);
 
             unset($v['orderCode']);
             unset($v['order_type']);
@@ -1210,20 +1220,24 @@ class Report extends Base
         $count = Db::name('sale_return')
             ->alias('s')
             ->where($where)
+            ->leftJoin('sale ss', 'ss.orderCode=s.orderCode AND ss.is_del=0')
             ->leftJoin('order_num on', 'on.orderCode=s.orderCode')
             ->leftJoin('purchease_order po', 'po.cgdNo=on.cgdNo')
-            ->leftJoin('good_basic gb', 'gb.spuCode=po.spuCode AND gb.is_del=0')
+            ->leftJoin('good_basic gb', 'gb.spuCode=s.good_code AND gb.is_del=0')
             ->leftJoin('result_info ri', 'ri.result_code=s.error_code AND ri.is_del=0')
+            ->leftJoin('supplier sp', 'sp.code=gb.supplierNo')
             ->count('s.id');
 
         $list = Db::name('sale_return')
             ->alias('s')
-            ->field('s.returnCode,s.addtime,po.cgdNo,po.supplier_name,po.good_name,gb.is_stock,po.good_num,po.cgder_id,po.cgder,"" name,s.num,on.send_num,ri.result,s.is_th')
+            ->field('s.id,s.returnCode,s.addtime,po.cgdNo,sp.name supplier_name,s.good_name,gb.is_stock,ss.good_num,po.cgder_id,po.cgder,"" name,s.num,on.send_num,ri.result,s.is_th')
             ->where($where)
+            ->leftJoin('sale ss', 'ss.orderCode=s.orderCode AND ss.is_del=0')
             ->leftJoin('order_num on', 'on.orderCode=s.orderCode')
             ->leftJoin('purchease_order po', 'po.cgdNo=on.cgdNo')
-            ->leftJoin('good_basic gb', 'gb.spuCode=po.spuCode AND gb.is_del=0')
+            ->leftJoin('good_basic gb', 'gb.spuCode=s.good_code AND gb.is_del=0')
             ->leftJoin('result_info ri', 'ri.result_code=s.error_code AND ri.is_del=0')
+            ->leftJoin('supplier sp', 'sp.code=gb.supplierNo')
             ->page($param['page'], $param['size'])
             ->order('s.addtime desc')
             ->cursor();

+ 1 - 1
app/admin/controller/Resign.php

@@ -72,7 +72,7 @@ class Resign extends Base
         $end = isset($this->post['end']) && $this->post['end']!=="" ? $this->post['end']:"";
         if($end!==""){
            // $where['p.addtime'] = Db::Raw("<= '{$end}'");
-            $where[]=['p.addtime',"<=",$end];
+            $where[] = ['p.addtime', "<=", $end . ' 23:59:59'];
         }
 //        $role=$this->checkRole();
         $condition=[];

+ 799 - 58
app/admin/controller/SaleReport.php

@@ -2,10 +2,11 @@
 
 namespace app\admin\controller;
 
+use app\abutment\model\SupplierRelationUser;
+use app\abutment\model\SupplierUser;
 use think\facade\Db;
-use think\facade\Validate;
 
-//销售报表处理类
+//前端报表处理类
 class SaleReport extends Base
 {
 
@@ -173,8 +174,7 @@ class SaleReport extends Base
             $list[] = $val;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
-
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
         excelSave('咨询单报表' . date('YmdHis'), array_keys($list[0]), $list);
 
     }
@@ -271,7 +271,7 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
 
         excelSave('咨询单报表' . date('YmdHis'), array_keys($list[0]), $list);
 
@@ -339,13 +339,15 @@ class SaleReport extends Base
             ->order('s.addtime', 'desc')
             ->cursor();
 
-        $list = [];
+        $list = $tmp_customer = $tmp_item = [];
         foreach ($data as $value) {
 
             if (!empty($value['itemid'])) {
-                $customer_org1 = array_column(get_top_customer_org($value['itemid']), 'name', 'level');
-                $value['一级企业'] = isset($customer_org1[1]) ? $customer_org1[1] : '';
-                $value['二级企业'] = isset($customer_org1[2]) ? $customer_org1[2] : '';
+
+                if (!isset($tmp_customer[$value['itemid']])) $tmp_customer[$value['itemid']] = array_column(get_top_customer_org($value['itemid']), 'name', 'level');
+//                $customer_org1 = array_column(get_top_customer_org($value['itemid']), 'name', 'level');
+                $value['一级企业'] = isset($tmp_customer[$value['itemid']][1]) ? $tmp_customer[$value['itemid']][1] : '';
+                $value['二级企业'] = isset($tmp_customer[$value['itemid']][2]) ? $tmp_customer[$value['itemid']][2] : '';
             }
 
             if ($value['订单类型'] == 3 || $value['订单类型'] == 4) {
@@ -365,7 +367,8 @@ class SaleReport extends Base
             $value['是否库存'] = isset($this->all_stock[$value['是否库存']]) ? $this->all_stock[$value['是否库存']] : '';
             $value['订单类型'] = isset($this->all_order_type[$value['订单类型']]) ? $this->all_order_type[$value['订单类型']] : '';
 
-            $value['创建人所属部门'] = get_company_name_by_uid($value['apply_id']);//获取创建人的所属部门
+            if (!isset($tmp_item[$value['apply_id']])) $tmp_item[$value['apply_id']] = get_company_name_by_uid($value['apply_id']);
+            $value['创建人所属部门'] = $tmp_item[$value['apply_id']];//获取创建人的所属部门
 
             unset($value['itemid']);
             unset($value['apply_id']);
@@ -374,7 +377,7 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
 
         excelSave('订单报表' . date('YmdHis'), array_keys($list[0]), $list);
 
@@ -480,7 +483,7 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
 
         excelSave('未发货报表' . date('YmdHis'), array_keys($list[0]), $list);
 
@@ -499,7 +502,7 @@ class SaleReport extends Base
             ->alias('oo')
             ->leftJoin('sale s', 's.orderCode=oo.orderCode')
             ->leftJoin('customer_info csi', 'csi.companyNo=s.customer_code')
-            ->leftJoin('order_out out', 'out.orderCode=s.orderCode AND out.is_del=0')
+//            ->leftJoin('order_out out', 'out.orderCode=s.orderCode AND out.is_del=0')
             ->where($where)
             ->count('oo.id');
 
@@ -508,7 +511,7 @@ class SaleReport extends Base
             ->field('oo.id,s.apply_name,s.addtime,s.orderCode,csi.companyName,s.good_name,s.good_num,s.sale_price,s.total_price,oo.sendtime,csi.itemid,s.good_code,s.order_type,s.apply_id')
             ->leftJoin('sale s', 's.orderCode=oo.orderCode')
             ->leftJoin('customer_info csi', 'csi.companyNo=s.customer_code')
-            ->leftJoin('order_out out', 'out.orderCode=s.orderCode AND out.is_del=0')
+//            ->leftJoin('order_out out', 'out.orderCode=s.orderCode AND out.is_del=0')
             ->where($where)
             ->page($param['page'], $param['size'])
             ->order('s.addtime', 'desc')
@@ -624,7 +627,7 @@ class SaleReport extends Base
 
         $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'status' => '', 'page' => 1, 'size' => 15], 'post', 'trim');
 
-        $where = [['or.is_del','=',0]];
+        $where = [['or.is_del', '=', 0]];
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['or.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
         if ($param['status'] != '') $where[] = ['or.status', '=', $param['status']];
 
@@ -678,7 +681,7 @@ class SaleReport extends Base
 
         $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'status' => ''], 'post', 'trim');
 
-        $where = [['or.is_del','=',0]];
+        $where = [['or.is_del', '=', 0]];
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['or.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
         if ($param['status'] != '') $where[] = ['or.status', '=', $param['status']];
 
@@ -719,7 +722,7 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
         excelSave('售后报表' . date('YmdHis'), array_keys($list[0]), $list);
 
     }
@@ -810,7 +813,7 @@ class SaleReport extends Base
         }
 
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
         excelSave('产品热销排行' . date('YmdHis'), array_keys($list[0]), $list);
 
     }
@@ -925,7 +928,7 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
         excelSave('咨询单导出明细' . date('YmdHis'), array_keys($list[0]), $list);
 
     }
@@ -1025,7 +1028,7 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
         excelSave('工差明细表' . date('YmdHis'), array_keys($list[0]), $list);
 
     }
@@ -1206,7 +1209,7 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
         excelSave('退货明细表' . date('YmdHis'), array_keys($list[0]), $list);
 
     }
@@ -1304,7 +1307,7 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
         excelSave('售后明细表' . date('YmdHis'), array_keys($list[0]), $list);
 
     }
@@ -1384,19 +1387,22 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
         excelSave('议价明细表' . date('YmdHis'), array_keys($list[0]), $list);
 
     }
 
-    //【八、无地址待发货订单
+    //【八、延时发货申请单统计
     public function orderOutNotAddr()
     {
+        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'start_sendtime' => '', 'end_sendtime' => '', 'status' => '', 'apply_company' => '', 'page' => 1, 'size' => 15, 'order_type' => ''], 'post', 'trim');
 
-        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'page' => 1, 'size' => 15], 'post', 'trim');
-
-        $where = [['b.send_type', '=', 2]];//send_type==2 延迟发货
+        $where = [['a.is_del', '=', 0], ['b.send_type', '=', 2], ['a.send_num', '>', 0], ['a.status', '<>', 4]];//send_type==2 延迟发货,a.status==4 已全部退货
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['a.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
+        if ($param['start_sendtime'] != '' && $param['end_sendtime'] != '') $where[] = ['a.sendtime', 'between', [$param['start_sendtime'] . ' 00:00:00', $param['end_sendtime'] . ' 23:59:59']];
+        if ($param['status'] != '') $where[] = ['a.status', '=', $param['status']];
+        if ($param['apply_company'] != '') $where[] = ['ci.name', 'like', '%' . $param['apply_company'] . '%'];
+        if ($param['order_type'] != '') $where[] = ['b.order_type', '=', $param['order_type']];
 
         $count = Db::name('order_out')
             ->alias('a')
@@ -1404,26 +1410,32 @@ class SaleReport extends Base
             ->leftJoin("customer_info v", "v.companyNo=b.customer_code")
             ->leftJoin("order_send os", "os.outCode=a.outCode")
             ->leftJoin("business bus", "bus.companyNo=b.supplierNo")
-            ->where($where)
+            ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->leftJoin("purchease_order d", "d.cgdNo=os.cgdNo")
+            ->leftJoin("supplier e", "e.code=d.supplierNo")->where($where)
             ->order("a.addtime desc")
             ->count('a.id');
 
         $data = Db::name('order_out')
             ->alias('a')
-            ->field('a.addtime,a.orderCode,os.cgdNo,bus.company,a.apply_name,a.apply_id,a.status,a.send_num,b.good_code,b.good_name,v.companyName,b.wsend_num,b.skuCode,a.order_type')
+            ->field('a.addtime,a.orderCode,os.cgdNo,bus.company,a.apply_name,a.apply_id,a.status,a.send_num,b.good_code,b.good_name,v.companyName,b.wsend_num,b.skuCode,b.order_type,e.person')
             ->leftJoin("sale b", "b.orderCode=a.orderCode")
             ->leftJoin("customer_info v", "v.companyNo=b.customer_code")
             ->leftJoin("order_send os", "os.outCode=a.outCode")
             ->leftJoin("business bus", "bus.companyNo=b.supplierNo")
-            ->where($where)
+            ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->leftJoin("purchease_order d", "d.cgdNo=os.cgdNo")
+            ->leftJoin("supplier e", "e.code=d.supplierNo")->where($where)
             ->page($param['page'], $param['size'])
             ->order("a.addtime desc")
             ->cursor();
 
-        $list = [];
+        $list = $tmp_apply = $tmp_cat = [];
         foreach ($data as $value) {
-
-            $value['apply_company'] = get_company_name_by_uid($value['apply_id']);
+            if (!isset($tmp_apply[$value['apply_id']])) $tmp_apply[$value['apply_id']] = get_company_name_by_uid($value['apply_id']);
+            $value['apply_company'] = $tmp_apply[$value['apply_id']];
 
             if ($value['order_type'] == 3 || $value['order_type'] == 4) {
                 $goon = Db::name("good_zixun")
@@ -1435,11 +1447,13 @@ class SaleReport extends Base
                     ->alias('a')
                     ->field('a.id,b.cat_id,b.customized')
                     ->join('good b', 'b.spuCode=a.spuCode', 'left')
-                    ->where(['a.skuCode' => $value['skuCode']])
+                    ->where(['a.is_del' => 0, 'a.skuCode' => $value['skuCode']])
                     ->find();
             }
 
-            $value['cat'] = implode('/', array_column(made($goon['cat_id']), 'name'));
+            if (!isset($tmp_cat[$goon['cat_id']])) $tmp_cat[$goon['cat_id']] = implode('/', array_column(made($goon['cat_id']), 'name'));
+            $value['cat'] = $tmp_cat[$goon['cat_id']];
+
             $value['send_date'] = date('Y-m-d H:i:s', strtotime($value['addtime']) + $goon['customized'] * 24 * 3600);
 
             $value['status'] = isset($this->order_out_status[$value['status']]) ? $this->order_out_status[$value['status']] : '';
@@ -1450,72 +1464,86 @@ class SaleReport extends Base
         return app_show(0, '请求成功', ['list' => $list, 'count' => $count]);
     }
 
-    //【八、无地址待发货订单
+    //【八、延时发货申请单统计
     public function orderOutNotAddrExport()
     {
 
-        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => ''], 'post', 'trim');
+        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'start_sendtime' => '', 'end_sendtime' => '', 'status' => '', 'apply_company' => '', 'page' => 1, 'size' => 15, 'order_type' => ''], 'post', 'trim');
 
-        $where = [['b.send_type', '=', 2]];//send_type==2 延迟发货
+        $where = [['a.is_del', '=', 0], ['b.send_type', '=', 2], ['a.send_num', '>', 0], ['a.status', '<>', 4]];//send_type==2 延迟发货,a.status==4 已全部退货
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['a.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
+        if ($param['start_sendtime'] != '' && $param['end_sendtime'] != '') $where[] = ['a.sendtime', 'between', [$param['start_sendtime'] . ' 00:00:00', $param['end_sendtime'] . ' 23:59:59']];
+        if ($param['status'] != '') $where[] = ['a.status', '=', $param['status']];
+        if ($param['apply_company'] != '') $where[] = ['ci.name', 'like', '%' . $param['apply_company'] . '%'];
+        if ($param['order_type'] != '') $where[] = ['b.order_type', '=', $param['order_type']];
 
         $data = Db::name('order_out')
             ->alias('a')
-            ->field('a.addtime 下单时间,a.orderCode 订单编号,os.cgdNo 采购单编号,bus.company 公司名称,a.apply_name 申请人,"" 部门,a.apply_id,a.status 状态,a.send_num 出库总数,"" 商品分类,b.good_code 商品编码,b.good_name 商品名称,v.companyName 客户名称,b.wsend_num 未发货数量,"" 应发货日期,b.skuCode,a.order_type')
+            ->field('a.addtime 下单时间,a.orderCode 订单编号,os.cgdNo 采购单编号,bus.company 公司名称,a.apply_name 申请人,"" 部门,a.apply_id,a.status 状态,a.send_num 出库总数,"" 商品分类,b.good_code 商品编码,b.good_name 商品名称,v.companyName 客户名称,b.wsend_num 未发货数量,"" 应发货日期,b.skuCode,b.order_type 订单类型,e.person 采购员')
             ->leftJoin("sale b", "b.orderCode=a.orderCode")
             ->leftJoin("customer_info v", "v.companyNo=b.customer_code")
             ->leftJoin("order_send os", "os.outCode=a.outCode")
             ->leftJoin("business bus", "bus.companyNo=b.supplierNo")
+            ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->leftJoin("purchease_order d", "d.cgdNo=os.cgdNo")
+            ->leftJoin("supplier e", "e.code=d.supplierNo")
             ->where($where)
             ->order("a.addtime desc")
             ->cursor();
 
-        $list = [];
+        $list = $tmp_apply = $tmp_cat = [];
         foreach ($data as $value) {
 
-            $value['部门'] = get_company_name_by_uid($value['apply_id']);
+            if (!isset($tmp_apply[$value['apply_id']])) $tmp_apply[$value['apply_id']] = get_company_name_by_uid($value['apply_id']);
+            $value['部门'] = $tmp_apply[$value['apply_id']];
 
-            if ($value['order_type'] == 3 || $value['order_type'] == 4) {
+            if ($value['订单类型'] == 3 || $value['订单类型'] == 4) {
                 $goon = Db::name("good_zixun")
                     ->field('id,cat_id,customized')
                     ->where(["spuCode" => $value['商品编码'], "is_del" => 0])
                     ->find();
+
             } else {
                 $goon = Db::name('good_platform')
                     ->alias('a')
                     ->field('a.id,b.cat_id,b.customized')
                     ->join('good b', 'b.spuCode=a.spuCode', 'left')
-                    ->where(['a.skuCode' => $value['skuCode']])
+                    ->where(['a.is_del' => 0, 'a.skuCode' => $value['skuCode']])
                     ->find();
             }
 
-            $value['商品分类'] = implode('/', array_column(made($goon['cat_id']), 'name'));
+            if (!isset($tmp_cat[$goon['cat_id']])) $tmp_cat[$goon['cat_id']] = implode('/', array_column(made($goon['cat_id']), 'name'));
+            $value['商品分类'] = $tmp_cat[$goon['cat_id']];
+
             $value['应发货日期'] = date('Y-m-d H:i:s', strtotime($value['下单时间']) + $goon['customized'] * 24 * 3600);
 
             $value['状态'] = isset($this->order_out_status[$value['状态']]) ? $this->order_out_status[$value['状态']] : '';
+            $value['订单类型'] = isset($this->all_order_type[$value['订单类型']]) ? $this->all_order_type[$value['订单类型']] : '';
 
             unset($value['apply_id']);
             unset($value['skuCode']);
-            unset($value['order_type']);
 
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
-        excelSave('无地址待发货订单' . date('YmdHis'), array_keys($list[0]), $list);
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
+        excelSave('延时发货申请单' . date('YmdHis'), array_keys($list[0]), $list);
 
     }
 
-    //【九、有地址待发货订单
+    //【九、直接发货申请单统计 
     public function orderOutAddr()
     {
-        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'start_sendtime' => '', 'end_sendtime' => '', 'status' => '', 'apply_company' => '', 'page' => 1, 'size' => 15], 'post', 'trim');
+        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'start_sendtime' => '', 'end_sendtime' => '', 'status' => '', 'apply_company' => '', 'page' => 1, 'size' => 15, 'order_type' => ''], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0], ['b.send_type', '=', 1], ['a.send_num', '>', 0], ['a.status', '<>', 4]];//send_type==1 直接发货
 
-        $where = [['b.send_type', '=', 1]];//send_type==1 直接发货
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['a.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
         if ($param['start_sendtime'] != '' && $param['end_sendtime'] != '') $where[] = ['a.sendtime', 'between', [$param['start_sendtime'] . ' 00:00:00', $param['end_sendtime'] . ' 23:59:59']];
         if ($param['status'] != '') $where[] = ['a.status', '=', $param['status']];
         if ($param['apply_company'] != '') $where[] = ['ci.name', 'like', '%' . $param['apply_company'] . '%'];
+        if ($param['order_type'] != '') $where[] = ['b.order_type', '=', $param['order_type']];
 
         $count = Db::name('order_out')
             ->alias('a')
@@ -1525,19 +1553,21 @@ class SaleReport extends Base
             ->leftJoin("order_addr oa", "oa.id=a.addrid")
             ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
             ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->leftJoin("supplier c", "c.code=po.supplierNo")
             ->where($where)
             ->order("a.addtime desc")
             ->count('a.id');
 
         $data = Db::name('order_out')
             ->alias('a')
-            ->field('a.addtime,a.orderCode,a.sendtime,a.outCode,a.status,b.good_name,b.sale_price,a.send_num,a.apply_name,ci.name apply_company,po.cgder,a.post_name,a.post_code,oa.contactor,oa.mobile,oa.addr,oa.addr_code,a.remark')
+            ->field('a.addtime,a.orderCode,a.sendtime,a.outCode,a.status,b.good_name,b.sale_price,a.send_num,a.apply_name,ci.name apply_company,c.person cgder,a.post_name,a.post_code,oa.contactor,oa.mobile,oa.addr,oa.addr_code,a.remark,b.order_type')
             ->leftJoin("sale b", "b.orderCode=a.orderCode")
             ->leftJoin("order_send os", "os.outCode=a.outCode")
             ->leftJoin("purchease_order po", "po.cgdNo=os.cgdNo")
             ->leftJoin("order_addr oa", "oa.id=a.addrid")
             ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
             ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->leftJoin("supplier c", "c.code=po.supplierNo")
             ->where($where)
             ->page($param['page'], $param['size'])
             ->order("a.addtime desc")
@@ -1565,26 +1595,29 @@ class SaleReport extends Base
 
     }
 
-    //【九、有地址待发货订单
+    //【九、直接发货申请单统计-导出
     public function orderOutAddrExport()
     {
-        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'start_sendtime' => '', 'end_sendtime' => '', 'status' => '', 'apply_company' => ''], 'post', 'trim');
+        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'start_sendtime' => '', 'end_sendtime' => '', 'status' => '', 'apply_company' => '', 'order_type' => ''], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0], ['b.send_type', '=', 1], ['a.send_num', '>', 0], ['a.status', '<>', 4]];//send_type==1 直接发货
 
-        $where = [['b.send_type', '=', 1]];//send_type==1 直接发货
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['a.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
         if ($param['start_sendtime'] != '' && $param['end_sendtime'] != '') $where[] = ['a.sendtime', 'between', [$param['start_sendtime'] . ' 00:00:00', $param['end_sendtime'] . ' 23:59:59']];
         if ($param['status'] != '') $where[] = ['a.status', '=', $param['status']];
         if ($param['apply_company'] != '') $where[] = ['ci.name', 'like', '%' . $param['apply_company'] . '%'];
+        if ($param['order_type'] != '') $where[] = ['b.order_type', '=', $param['order_type']];
 
         $data = Db::name('order_out')
             ->alias('a')
-            ->field('a.addtime 下单日期,a.orderCode 订单编号,a.sendtime 发货时间,a.outCode 发货申请单号,a.status 发货申请单状态,b.good_name 商品名称,b.sale_price 产品单价,a.send_num 发货数量,"" 发货申请单总价,a.apply_name 申请人,ci.name 部门,po.cgder 采购人,a.post_name 快递公司,a.post_code 快递单号,oa.contactor 收货人,oa.mobile 收货电话,oa.addr 收货地址,oa.addr_code,a.remark 备注')
+            ->field('a.addtime 下单日期,a.orderCode 订单编号,a.sendtime 发货时间,a.outCode 发货申请单号,a.status 发货申请单状态,b.good_name 商品名称,b.sale_price 产品单价,a.send_num 发货数量,"" 发货申请单总价,a.apply_name 申请人,ci.name 部门,c.person 采购员,a.post_name 快递公司,a.post_code 快递单号,oa.contactor 收货人,oa.mobile 收货电话,oa.addr 收货地址,oa.addr_code,a.remark 备注,b.order_type 订单类型')
             ->leftJoin("sale b", "b.orderCode=a.orderCode")
             ->leftJoin("order_send os", "os.outCode=a.outCode")
             ->leftJoin("purchease_order po", "po.cgdNo=os.cgdNo")
             ->leftJoin("order_addr oa", "oa.id=a.addrid")
             ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
             ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->leftJoin("supplier c", "c.code=po.supplierNo")
             ->where($where)
             ->order("a.addtime desc")
             ->cursor();
@@ -1592,9 +1625,10 @@ class SaleReport extends Base
         $list = [];
         foreach ($data as $value) {
 
-            $value['发货申请单总价'] = round($value['发货数量'] * $value['产品单价'], 2);
+            $value['发货申请单总价'] = round(bcmul($value['发货数量'], $value['产品单价'], 3), 2);
 
             $value['发货申请单状态'] = isset($this->order_out_status[$value['发货申请单状态']]) ? $this->order_out_status[$value['发货申请单状态']] : '';
+            $value['订单类型'] = isset($this->all_order_type[$value['订单类型']]) ? $this->all_order_type[$value['订单类型']] : '';
 
             //拼接省市区
             if (!json_decode($value['addr_code'])) {
@@ -1609,9 +1643,716 @@ class SaleReport extends Base
             $list[] = $value;
         }
 
-        if (empty($list)) $list[] = '没有相关可导出的数据';
-        excelSave('有地址待发货单列表' . date('YmdHis'), array_keys($list[0]), $list);
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
+        excelSave('直接发货申请单统计' . date('YmdHis'), array_keys($list[0]), $list);
+
+    }
+
+    //【十、无地址销售订单】
+    public function saleNotAddr()
+    {
+
+        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'status' => '', 'apply_company' => '', 'page' => 1, 'size' => 15, 'order_type' => ''], 'post', 'trim');
+
+        $where = [['a.send_type', '=', 2], ['a.is_del', '=', 0], ['a.status', '<>', 3]];//send_type==2 延迟发货
+        if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['a.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
+        if ($param['status'] != '') $where[] = ['a.status', '=', $param['status']];
+        if ($param['apply_company'] != '') $where[] = ['ci.name', 'like', '%' . $param['apply_company'] . '%'];
+        if ($param['order_type'] != '') $where[] = ['a.order_type', '=', $param['order_type']];
+
+        $count = Db::name('sale')
+            ->alias('a')
+            ->leftJoin("order_addr b", "b.orderCode=a.orderCode AND b.is_del=0")
+            ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->where($where)
+            ->group('a.id,a.orderCode,a.order_type,a.good_code,a.skuCode,good_name,a.good_num,a.send_num,a.wsend_num,a.status,u.nickname,ci.name,b.orderCode')
+            ->having('a.good_num > SUM(IFNULL(b.receipt_quantity,0)) ')
+            ->count('a.id');
+
+        $cgd_sql = Db::name('sale')
+            ->alias('a')
+            ->field('a.orderCode')
+            ->leftJoin("order_addr b", "b.orderCode=a.orderCode AND b.is_del=0")
+            ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0 AND u.status=1")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->where($where)
+            ->order("a.addtime desc")
+            ->buildSql();
+
+        $cgd = Db::name('order_num')
+            ->alias('a')
+            ->leftJoin("purchease_order d", "d.cgdNo=a.cgdNo")
+            ->leftJoin("supplier e", "e.code=d.supplierNo")
+            ->where('a.orderCode IN ' . $cgd_sql)
+            ->column('e.person', 'a.orderCode');
+
+        $data = Db::name('sale')
+            ->alias('a')
+            ->field('a.id,a.orderCode,a.order_type,a.good_code,a.skuCode,good_name,a.good_num,a.send_num,a.wsend_num,a.status,u.nickname,ci.name,(a.good_num - SUM(IFNULL(b.receipt_quantity,0)) ) as  not_addr_address_good_num,"" person')
+            ->leftJoin("order_addr b", "b.orderCode=a.orderCode AND b.is_del=0")
+            ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->withAttr('person', function ($val, $da) use ($cgd) {
+                return $cgd[$da['orderCode']] ?? '';
+            })
+            ->where($where)
+            ->group('a.id,a.orderCode,a.order_type,a.good_code,a.skuCode,good_name,a.good_num,a.send_num,a.wsend_num,a.status,u.nickname,ci.name,b.orderCode')
+            ->having('not_addr_address_good_num > 0 ')
+            ->page($param['page'], $param['size'])
+            ->order("a.addtime desc")
+            ->select()
+            ->toArray();
+
+        return app_show(0, '请求成功', ['list' => $data, 'count' => $count]);
+
+    }
+
+    //【十、无地址销售订单-导出】
+    public function saleNotAddrExport()
+    {
+
+        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'status' => '', 'apply_company' => '', 'order_type' => ''], 'post', 'trim');
+
+        $where = [['a.send_type', '=', 2], ['a.is_del', '=', 0], ['a.status', '<>', 3]];//send_type==2 延迟发货
+        if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['a.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
+        if ($param['status'] != '') $where[] = ['a.status', '=', $param['status']];
+        if ($param['apply_company'] != '') $where[] = ['ci.name', 'like', '%' . $param['apply_company'] . '%'];
+        if ($param['order_type'] != '') $where[] = ['a.order_type', '=', $param['order_type']];
+
+        $data = Db::name('sale')
+            ->alias('a')
+            ->field('a.orderCode 订单编号,a.order_type 订单类型,a.good_code 商品成本编码,a.skuCode 商品上线编码,a.good_name 商品名称,a.good_num 购买数量,a.send_num 已发货数量,a.wsend_num 未发货数量,a.status 订单状态,u.nickname 申请人名称,ci.name 申请人所属部门,(a.good_num - SUM(IFNULL(b.receipt_quantity,0)) ) as  无地址数量,"" 采购员')
+            ->leftJoin("order_addr b", "b.orderCode=a.orderCode AND b.is_del=0")->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0 AND u.status=1")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->where($where)
+            ->group('a.id,a.orderCode,a.order_type,a.good_code,a.skuCode,a.good_name,a.good_num,a.send_num,a.wsend_num,a.status,u.nickname,ci.name,b.orderCode')
+            ->having('无地址数量 > 0')
+            ->order("a.addtime desc")
+            ->cursor();
+
+        $cgd_sql = Db::name('sale')
+            ->alias('a')
+            ->field('a.orderCode')
+            ->leftJoin("order_addr b", "b.orderCode=a.orderCode AND b.is_del=0")->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0 AND u.status=1")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->where($where)
+            ->order("a.addtime desc")
+            ->buildSql();
+
+        $cgd = Db::name('order_num')
+            ->alias('a')
+            ->leftJoin("purchease_order d", "d.cgdNo=a.cgdNo")
+            ->leftJoin("supplier e", "e.code=d.supplierNo")
+            ->where('a.orderCode IN ' . $cgd_sql)
+            ->column('e.person', 'a.orderCode');
+
+        $list = [];
+        foreach ($data as $value) {
+
+            $value['订单类型'] = isset($this->all_order_type[$value['订单类型']]) ? $this->all_order_type[$value['订单类型']] : '';
+            $value['订单状态'] = isset($this->all_sale_status[$value['订单状态']]) ? $this->all_sale_status[$value['订单状态']] : '';
+            $value['采购员'] = $cgd[$value['订单编号']] ?? '';
+
+            $list[] = $value;
+        }
+
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
+        excelSave('无地址销售订单列表' . date('YmdHis'), array_keys($list[0]), $list);
+
+    }
+
+    //【十一、销售订单商品类型】
+    public function saleMonth()
+    {
+
+        $param = $this->request->only(['token', 'apply_company' => '', 'start_day' => date('Y-m-01'), 'end_day' => date('Y-m-t')], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0]];
+        if ($param['apply_company'] != '') $where[] = ['ci.name', 'like', '%' . $param['apply_company'] . '%'];
+        if ($param['start_day'] != '' && $param['end_day'] != '') $where[] = ['a.addtime', 'between', [$param['start_day'] . ' 00:00:00', $param['end_day'] . ' 23:59:59']];
+
+        $data = Db::name('sale')
+            ->alias('a')
+            ->field('a.id,a.order_type,u.itemid,ci.name')
+            ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->where($where)
+            ->cursor();
+        $list = [];
+        $total = ['name' => '总计', 'tag_1' => 0, 'tag_2' => 0, 'tag_3' => 0, 'tag_total' => 0];
+        foreach ($data as $val) {
+            if (!isset($list[$val['itemid']])) $list[$val['itemid']] = [
+                'name' => $val['name'],
+                'tag_1' => 0,
+                'tag_2' => 0,
+                'tag_3' => 0,
+                'tag_total' => 0,
+            ];
+            $list[$val['itemid']]['tag_' . $val['order_type']]++;
+            $list[$val['itemid']]['tag_total']++;
+            $total['tag_' . $val['order_type']]++;
+            $total['tag_total']++;
+
+        }
+        $list = array_merge($list);//重置下标
+        $list[] = $total;
+        return app_show(0, '请求成功', $list);
+
+    }
+
+    //【十一、销售订单商品类型-导出】
+    public function saleMonthExport()
+    {
+
+        $param = $this->request->only(['token', 'apply_company' => '', 'start_day' => date('Y-m-01'), 'end_day' => date('Y-m-t')], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0]];
+        if ($param['apply_company'] != '') $where[] = ['ci.name', 'like', '%' . $param['apply_company'] . '%'];
+        if ($param['start_day'] != '' && $param['end_day'] != '') $where[] = ['a.addtime', 'between', [$param['start_day'] . ' 00:00:00', $param['end_day'] . ' 23:59:59']];
+
+        $data = Db::name('sale')
+            ->alias('a')
+            ->field('a.id,a.order_type,u.itemid,ci.name')
+            ->leftJoin("depart_user u", "u.uid=a.apply_id AND u.is_del=0")
+            ->leftJoin("company_item ci", "ci.id=u.itemid")
+            ->where($where)
+            ->cursor();
+        $list = [];
+        $total = ['部门' => '总计', '库存品' => 0, '非库存品' => 0, '咨询采反' => 0, '总计' => 0];
+        foreach ($data as $k => $val) {
+            if (!isset($list[$val['itemid']])) $list[$val['itemid']] = ['部门' => $val['name'], '库存品' => 0, '非库存品' => 0, '咨询采反' => 0, '总计' => 0];
+
+            switch ($val['order_type']) {
+                case 1:
+                    $list[$val['itemid']]['库存品']++;
+                    $total['库存品']++;
+                    break;
+                case 2:
+                    $list[$val['itemid']]['非库存品']++;
+                    $total['非库存品']++;
+                    break;
+                case 3:
+                    $list[$val['itemid']]['咨询采反']++;
+                    $total['咨询采反']++;
+                    break;
+            }
+
+            $list[$val['itemid']]['总计']++;
+            $total['总计']++;
+
+        }
+        $list = array_merge($list);//重置下标
+        $list[] = $total;
+
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
+        excelSave('销售订单商品类型' . date('YmdHis'), array_keys($list[0]), $list);
+
+    }
+
+    //【十二、采购订单发货维度表】
+    public function orderOutMonth()
+    {
+
+        $param = $this->request->only(['token', 'start_day' => date('Y-m-01'), 'end_day' => date('Y-m-t')], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0], ['b.is_del', '=', 0]];
+        if ($param['start_day'] != '' && $param['end_day'] != '') $where[] = ['a.addtime', 'between', [$param['start_day'] . ' 00:00:00', $param['end_day'] . ' 23:59:59']];
+
+        $data = Db::name('order_out')
+            ->alias('a')
+            ->field('a.id,b.order_type,b.cat_id,d.supplierNo')
+            ->leftJoin('sale b', 'b.orderCode=a.orderCode')
+            ->leftJoin('order_send c', 'c.outCode=a.outCode')
+            ->leftJoin('purchease_order d', 'd.cgdNo=c.cgdNo')
+            ->where($where)
+            ->cursor();
+        $list = [];
+//        $total = ['cat_1' => '总计', 'cat_2' => '', 'cat_3' => '', 'tag_1' => 0, 'tag_2' => 0, 'tag_3' => 0, 'tag_supplier' => 0, 'tag_person' => 0, 'tag_logistics' => 0, 'tag_total' => 0];
+
+        $supplierNos = SupplierRelationUser::where(['is_del' => SupplierUser::$is_del_normal, 'status' => SupplierUser::$status_normal])
+            ->group('supplierNo')
+            ->column('supplierNo');
+
+        foreach ($data as $val) {
+
+            if (!isset($list[$val['cat_id']])) {
+                $cat = made($val['cat_id']);
+                $list[$val['cat_id']] = [
+                    'cat_1' => $cat[0]['name'] ?? '',
+                    'cat_2' => $cat[1]['name'] ?? '',
+                    'cat_3' => $cat[2]['name'] ?? '',
+                    'tag_1' => 0,
+                    'tag_2' => 0,
+                    'tag_3' => 0,
+                    'tag_supplier' => 0,
+                    'tag_person' => 0,
+                    'tag_logistics' => 0,
+                ];
+            }
+
+            switch ($val['order_type']) {
+                case 1:
+                    //库存品,物流岗发
+                    $list[$val['cat_id']]['tag_logistics']++;
+                    break;
+                case 2: //非库存品
+                case 3: //咨询采反
+                    if (in_array($val['supplierNo'], $supplierNos)) $list[$val['cat_id']]['tag_supplier']++;
+                    else $list[$val['cat_id']]['tag_person']++;
+                    break;
+
+            }
+
+            $list[$val['cat_id']]['tag_' . $val['order_type']]++;
+//            $list[$val['cat_id']]['tag_total']++;
+//            $total['tag_' . $val['order_type']]++;
+//            $total['tag_total']++;
+
+        }
+        $list = array_merge($list);//重置下标
+//        $list[] = $total;
+        return app_show(0, '请求成功', $list);
+
+    }
+
+    //【十二、采购订单发货维度表-导出】
+    public function orderOutMonthExport()
+    {
+        $param = $this->request->only(['token', 'start_day' => date('Y-m-01'), 'end_day' => date('Y-m-t')], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0], ['b.is_del', '=', 0]];
+        if ($param['start_day'] != '' && $param['end_day'] != '') $where[] = ['a.addtime', 'between', [$param['start_day'] . ' 00:00:00', $param['end_day'] . ' 23:59:59']];
+
+        $data = Db::name('order_out')
+            ->alias('a')
+            ->field('a.id,b.order_type,b.cat_id,d.supplierNo')
+            ->leftJoin("sale b", "b.orderCode=a.orderCode")
+            ->leftJoin('order_send c', 'c.outCode=a.outCode')
+            ->leftJoin('purchease_order d', 'd.cgdNo=c.cgdNo')
+            ->where($where)
+            ->cursor();
+
+        $supplierNos = SupplierRelationUser::where(['is_del' => SupplierUser::$is_del_normal, 'status' => SupplierUser::$status_normal])
+            ->group('supplierNo')
+            ->column('supplierNo');
+
+        $list = [];
+
+//        $total = ['一级分类' => '总计', '二级分类' => '', '三级分类' => '', '库存品' => 0, '非库存品' => 0, '咨询采反' => 0, '总计' => 0];
+        foreach ($data as $val) {
+
+            if (!isset($list[$val['cat_id']])) {
+                $cat = made($val['cat_id']);
+                $list[$val['cat_id']] = [
+                    '一级分类' => $cat[0]['name'] ?? '',
+                    '二级分类' => $cat[1]['name'] ?? '',
+                    '三级分类' => $cat[2]['name'] ?? '',
+                    '库存品' => 0,
+                    '非库存品' => 0,
+                    '咨询采反' => 0,
+                    '供应商发货' => 0,
+                    '负责人发货' => 0,
+                    '物流岗发货' => 0,
+//                    '总计' => 0,
+                ];
+            }
+
+
+            switch ($val['order_type']) {
+                case 1:
+                    $list[$val['cat_id']]['库存品']++;
+//                    $total['库存品']++;
+                    //物流岗发
+                    $list[$val['cat_id']]['物流岗发货']++;
+                    break;
+                case 2:
+                    $list[$val['cat_id']]['非库存品']++;
+//                    $total['非库存品']++;
+                    if (in_array($val['supplierNo'], $supplierNos)) $list[$val['cat_id']]['供应商发货']++;
+                    else $list[$val['cat_id']]['负责人发货']++;
+                    break;
+                case 3:
+                    $list[$val['cat_id']]['咨询采反']++;
+                    if (in_array($val['supplierNo'], $supplierNos)) $list[$val['cat_id']]['供应商发货']++;
+                    else $list[$val['cat_id']]['负责人发货']++;
+//                    $total['咨询采反']++;
+                    break;
+            }
+
+//            $list[$val['cat_id']]['总计']++;
+//            $total['总计']++;
+
+        }
+        $list = array_merge($list);//重置下标
+//        $list[] = $total;
+
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
+        excelSave('采购订单发货维度表' . date('YmdHis'), array_keys($list[0]), $list);
+
+    }
+
+    //【十三、供应商采购订单情况】
+    public function purcheaseOrderMonth()
+    {
+        $param = $this->request->only(['token', 'supplierNo' => '', 'supplier_name' => '', 'start_day' => date('Y-m-01'), 'end_day' => date('Y-m-t')], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0]];
+        if ($param['supplierNo'] != '') $where[] = ['a.supplierNo', 'like', '%' . $param['supplierNo'] . '%'];
+        if ($param['supplier_name'] != '') $where[] = ['a.supplier_name', 'like', '%' . $param['supplier_name'] . '%'];
+        if ($param['start_day'] != '' && $param['end_day'] != '') $where[] = ['a.addtime', 'between', [$param['start_day'] . ' 00:00:00', $param['end_day'] . ' 23:59:59']];
+
+        $data = Db::name('purchease_order')
+            ->alias('a')
+            ->field('a.id,a.supplierNo,a.supplier_name,a.order_type,a.order_source,p.use_type')
+            ->leftJoin("order_num b", "b.cgdNo=a.cgdNo")
+            ->leftJoin("sale s", "s.orderCode=b.orderCode AND s.is_del=0")
+            ->leftJoin("platform p", "p.id=s.platform_id AND p.is_del=0")
+            ->where($where)
+            ->cursor();
+        $list = $tmp = [];
+        $total = ['supplier_name' => '总计', 'total_cgd' => 0, 'tag_1' => 0, 'tag_2' => 0, 'tag_c' => 0, 'tag_b' => 0, 'tag_zx' => 0];
+        foreach ($data as $val) {
+
+            if (!isset($list[$val['supplierNo']])) {
+                $list[$val['supplierNo']] = [
+                    'supplier_name' => $val['supplier_name'],
+                    'total_cgd' => 0,//订单总量
+                    'tag_1' => 0,//库存品
+                    'tag_2' => 0,//非库存品
+                    'tag_c' => 0,//to C
+                    'tag_b' => 0,//to B
+                    'tag_zx' => 0,//咨询采反总数
+                ];
+            }
+
+            switch ($val['order_type']) {
+                case 1:
+                    //库存品
+                    if ($val['order_source'] == 0) {
+                        $list[$val['supplierNo']]['tag_1']++;
+                        $total['tag_1']++;
+                    }
+                    break;
+
+                case 2:
+                    //非库存品
+                    $list[$val['supplierNo']]['tag_2']++;
+                    $total['tag_2']++;
+
+                case 3:
+                    //咨询采反
+                    if ($val['order_source'] == 2) {
+                        $list[$val['supplierNo']]['tag_zx']++;
+                        $total['tag_zx']++;
+                    }
+                    break;
+            }
+
+            switch ($val['use_type']) {
+                case 1:
+                    //to B
+                    $list[$val['supplierNo']]['tag_b']++;
+                    $total['tag_b']++;
+                    break;
+
+                case 2:
+                    //to C
+                    $list[$val['supplierNo']]['tag_c']++;
+                    $total['tag_c']++;
+                    break;
+            }
+
+            $list[$val['supplierNo']]['total_cgd']++;
+            $total['total_cgd']++;
+
+        }
+
+//        $list = array_merge($list);//重置下标,关联数组,下标是字符,无法通过array_merge方法重置下标
+
+        foreach ($list as $value) {
+            $tmp[] = $value;
+        }
+        $tmp[] = $total;
+
+        return app_show(0, '请求成功', $tmp);
+
+    }
+
+    //【十三、供应商采购订单情况-导出】
+    public function purcheaseOrderMonthExport()
+    {
+        $param = $this->request->only(['token', 'supplierNo' => '', 'supplier_name' => '', 'start_day' => date('Y-m-01'), 'end_day' => date('Y-m-t')], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0]];
+
+        if ($param['supplierNo'] != '') $where[] = ['a.supplierNo', 'like', '%' . $param['supplierNo'] . '%'];
+        if ($param['supplier_name'] != '') $where[] = ['a.supplier_name', 'like', '%' . $param['supplier_name'] . '%'];
+        if ($param['start_day'] != '' && $param['end_day'] != '') $where[] = ['a.addtime', 'between', [$param['start_day'] . ' 00:00:00', $param['end_day'] . ' 23:59:59']];
+
+        $data = Db::name('purchease_order')
+            ->alias('a')
+            ->field('a.id,a.supplierNo,a.supplier_name,a.order_type,a.order_source,p.use_type')
+            ->leftJoin("order_num b", "b.cgdNo=a.cgdNo")
+            ->leftJoin("sale s", "s.orderCode=b.orderCode AND s.is_del=0")
+            ->leftJoin("platform p", "p.id=s.platform_id AND p.is_del=0")
+            ->where($where)
+            ->cursor();
+        $list = $tmp = [];
+        $total = ['采购方' => '总计', '订单总量' => 0, '库存品' => 0, '非库存品' => 0, 'toC' => 0, 'toB' => 0, '反馈单数合计' => 0];
+        foreach ($data as $val) {
+
+            if (!isset($list[$val['supplierNo']])) {
+                $list[$val['supplierNo']] = [
+                    '采购方' => $val['supplier_name'],
+                    '订单总量' => 0,//订单总量
+                    '库存品' => 0,//库存品
+                    '非库存品' => 0,//非库存品
+                    'toC' => 0,//to C
+                    'toB' => 0,//to B
+                    '反馈单数合计' => 0,//咨询采反总数
+                ];
+            }
+
+            switch ($val['order_type']) {
+                case 1:
+                    //库存品
+                    if ($val['order_source'] == 0) {
+                        $list[$val['supplierNo']]['库存品']++;
+                        $total['库存品']++;
+                    }
+                    break;
+
+                case 2:
+                    //非库存品
+                    $list[$val['supplierNo']]['非库存品']++;
+                    $total['非库存品']++;
+                    break;
+
+                case 3:
+                    //咨询采反
+                    if ($val['order_source'] == 2) {
+                        $list[$val['supplierNo']]['反馈单数合计']++;
+                        $total['反馈单数合计']++;
+                    }
+                    break;
+            }
+
+            switch ($val['use_type']) {
+                case 1:
+                    //to B
+                    $list[$val['supplierNo']]['toB']++;
+                    $total['toB']++;
+                    break;
+
+                case 2:
+                    //to C
+                    $list[$val['supplierNo']]['toC']++;
+                    $total['toC']++;
+                    break;
+            }
+
+            $list[$val['supplierNo']]['订单总量']++;
+            $total['订单总量']++;
+
+        }
+
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
+        excelSave('供应商采购订单情况' . date('YmdHis'), array_keys($total), $list);
+
+    }
+
+    //【十四、供应商负责人采购订单情况】
+    public function purcheaseOrderPersonMonth()
+    {
+        $param = $this->request->only(['token', 'supplierNo' => '', 'supplier_name' => '', 'flag' => '', 'start_day' => date('Y-m-01'), 'end_day' => date('Y-m-t')], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0]];
+
+        if ($param['supplierNo'] != '') $where[] = ['a.supplierNo', 'like', '%' . $param['supplierNo'] . '%'];
+        if ($param['supplier_name'] != '') $where[] = ['a.supplier_name', 'like', '%' . $param['supplier_name'] . '%'];
+        if ($param['start_day'] != '' && $param['end_day'] != '') $where[] = ['a.addtime', 'between', [$param['start_day'] . ' 00:00:00', $param['end_day'] . ' 23:59:59']];
+
+        if ($param['flag'] != '') {
+            $supplierNos = SupplierRelationUser::where(['is_del' => SupplierUser::$is_del_normal, 'status' => SupplierUser::$status_normal])
+                ->group('supplierNo')
+                ->column('supplierNo');
+            if ($param['flag'] == 1) $where[] = ['a.supplierNo', 'in', $supplierNos];//1.开通账号的
+            else $where[] = ['a.supplierNo', 'not in', $supplierNos];//2.未开通账号的
+        }
+
+        $data = Db::name('purchease_order')
+            ->alias('a')
+            ->field('a.id,a.supplierNo,a.supplier_name,a.order_type,a.order_source,p.use_type,c.personid,c.person')
+            ->leftJoin("order_num b", "b.cgdNo=a.cgdNo")
+            ->leftJoin("sale s", "s.orderCode=b.orderCode AND s.is_del=0")
+            ->leftJoin("platform p", "p.id=s.platform_id AND p.is_del=0")
+            ->leftJoin("supplier c", "c.code=a.supplierNo AND c.is_del=0")
+            ->where($where)
+            ->cursor();
+
+        $list = [];
+        $total = ['person' => '总计', 'total_cgd' => 0, 'tag_1' => 0, 'tag_2' => 0, 'tag_c' => 0, 'tag_b' => 0, 'tag_zx' => 0];
+        foreach ($data as $val) {
+
+            if (!isset($list[$val['personid']])) {
+                $list[$val['personid']] = [
+                    'person' => $val['person'],
+                    'total_cgd' => 0,//订单总量
+                    'tag_1' => 0,//库存品
+                    'tag_2' => 0,//非库存品
+                    'tag_c' => 0,//to C
+                    'tag_b' => 0,//to B
+                    'tag_zx' => 0,//咨询采反总数
+                ];
+            }
+
+            switch ($val['order_type']) {
+                case 1:
+                    //库存品
+                    if ($val['order_source'] == 0) {
+                        $list[$val['personid']]['tag_1']++;
+                        $total['tag_1']++;
+                    }
+                    break;
+                case 2:
+                    //非库存品
+                    $list[$val['personid']]['tag_2']++;
+                    $total['tag_2']++;
+                    break;
+
+                case 3:
+                    //咨询采反
+                    if ($val['order_source'] == 2) {
+                        $list[$val['personid']]['tag_zx']++;
+                        $total['tag_zx']++;
+                    }
+                    break;
+            }
+
+            switch ($val['use_type']) {
+                case 1:
+                    //to B
+                    $list[$val['personid']]['tag_b']++;
+                    $total['tag_b']++;
+                    break;
+
+                case 2:
+                    //to C
+                    $list[$val['personid']]['tag_c']++;
+                    $total['tag_c']++;
+                    break;
+            }
+
+            $list[$val['personid']]['total_cgd']++;
+            $total['total_cgd']++;
+
+        }
+
+        $list = array_merge($list);//重置下标,关联数组,下标是字符,无法通过array_merge方法重置下标
+
+        $list[] = $total;
+
+        return app_show(0, '请求成功', $list);
 
     }
 
+    //【十四、供应商负责人采购订单情况-导出】
+    public function purcheaseOrderPersonMonthExport()
+    {
+
+        $param = $this->request->only(['token', 'supplierNo' => '', 'supplier_name' => '', 'flag' => '', 'start_day' => date('Y-m-01'), 'end_day' => date('Y-m-t')], 'post', 'trim');
+
+        $where = [['a.is_del', '=', 0]];
+
+        if ($param['supplierNo'] != '') $where[] = ['a.supplierNo', 'like', '%' . $param['supplierNo'] . '%'];
+        if ($param['supplier_name'] != '') $where[] = ['a.supplier_name', 'like', '%' . $param['supplier_name'] . '%'];
+        if ($param['start_day'] != '' && $param['end_day'] != '') $where[] = ['a.addtime', 'between', [$param['start_day'] . ' 00:00:00', $param['end_day'] . ' 23:59:59']];
+
+        if ($param['flag'] != '') {
+            $supplierNos = SupplierRelationUser::where(['is_del' => SupplierUser::$is_del_normal, 'status' => SupplierUser::$status_normal])
+                ->group('supplierNo')
+                ->column('supplierNo');
+            if ($param['flag'] == 1) $where[] = ['a.supplierNo', 'in', $supplierNos];//1.开通账号的
+            else $where[] = ['a.supplierNo', 'not in', $supplierNos];//2.未开通账号的
+        }
+
+        $data = Db::name('purchease_order')
+            ->alias('a')
+            ->field('a.id,a.supplierNo,a.supplier_name,a.order_type,a.order_source,p.use_type,c.personid,c.person')
+            ->leftJoin("order_num b", "b.cgdNo=a.cgdNo")
+            ->leftJoin("sale s", "s.orderCode=b.orderCode AND s.is_del=0")
+            ->leftJoin("platform p", "p.id=s.platform_id AND p.is_del=0")
+            ->leftJoin("supplier c", "c.code=a.supplierNo AND c.is_del=0")
+            ->where($where)
+            ->cursor();
+        $list = [];
+        $total = ['采购方' => '总计', '订单总量' => 0, '库存品' => 0, '非库存品' => 0, 'toC' => 0, 'toB' => 0, '反馈单数合计' => 0];
+        foreach ($data as $val) {
+
+            if (!isset($list[$val['personid']])) {
+                $list[$val['personid']] = [
+                    '采购方' => $val['person'],
+                    '订单总量' => 0,//订单总量
+                    '库存品' => 0,//库存品
+                    '非库存品' => 0,//非库存品
+                    'toC' => 0,//to C
+                    'toB' => 0,//to B
+                    '反馈单数合计' => 0,//咨询采反总数
+                ];
+            }
+
+            switch ($val['order_type']) {
+                case 1:
+                    //库存品
+                    if ($val['order_source'] == 0) {
+                        $list[$val['personid']]['库存品']++;
+                        $total['库存品']++;
+                    }
+
+                    break;
+
+                case 2:
+                    //非库存品
+                    $list[$val['personid']]['非库存品']++;
+                    $total['非库存品']++;
+                    break;
+
+                case 3:
+                    //咨询采反
+                    if ($val['order_source'] == 2) {
+                        $list[$val['personid']]['反馈单数合计']++;
+                        $total['反馈单数合计']++;
+                    }
+
+                    break;
+            }
+
+            switch ($val['use_type']) {
+                case 1:
+                    //to B
+                    $list[$val['personid']]['toB']++;
+                    $total['toB']++;
+                    break;
+
+                case 2:
+                    //to C
+                    $list[$val['personid']]['toC']++;
+                    $total['toC']++;
+                    break;
+            }
+
+            $list[$val['personid']]['订单总量']++;
+            $total['订单总量']++;
+
+        }
+
+        $list[] = $total;
+
+        if (empty($list)) $list[] = ['没有相关可导出的数据'];
+        excelSave('供应商负责人采购订单情况' . date('YmdHis'), array_keys($total), $list);
+
+    }
+
+
 }

+ 1 - 1
app/admin/controller/Salezx.php

@@ -71,7 +71,7 @@ class Salezx extends \app\BaseController
         if($good_num===''){
             return error_show(1004,"参数good_num不能为空");
         }
-        $good_num =isset($this->post['p']) && $this->post['good_num'] !=="" ?intval($this->post['good_num']):"";
+        $good_num =isset($this->post['good_num']) && $this->post['good_num'] !=="" ?intval($this->post['good_num']):"";
         if($good_num===''){
             return error_show(1004,"参数good_num不能为空");
         }

+ 25 - 0
app/admin/controller/System.php

@@ -5,6 +5,7 @@ namespace app\admin\controller;
 
 use app\BaseController;
 use think\facade\Db;
+use think\facade\Validate;
 use think\Request;
 
 //系统设置
@@ -203,4 +204,28 @@ class System extends BaseController
     {
         //
     }
+
+    //添加版本信息
+    public function add()
+    {
+        $param = $this->request->only(['module', 'system', 'sys_type', 'version', 'addtime'], 'post');
+
+        $val = Validate::rule([
+            'module' => 'require|max:255',
+            'system' => 'require',
+            'sys_type' => 'require|upper|in:MSG,VER',
+            'version' => 'require|max:255',
+            'addtime' => 'require|date',
+        ]);
+
+        if (!$val->check($param)) return error_show(1004, $val->getError());
+
+
+        $rs = Db::name('system_version')
+            ->insert($param);
+
+        return $rs ? app_show(0, '添加版本信息成功') : error_show(1004, '添加版本信息失败');
+
+
+    }
 }

File diff suppressed because it is too large
+ 490 - 489
app/admin/route/app.php


+ 3 - 3
app/command/ImportOrderFromCAnalysisData.php

@@ -274,9 +274,9 @@ class ImportOrderFromCAnalysisData extends Command
             if ($rs['addr']) {
                 $p_c_a = get_address($rs['addr']);
 
-                $province = empty($p_c_a['province']) ? $p_c_a['province'] : Db::name('province')->whereLike('name', '%' . $p_c_a['province'] . '%')->value('province_code');
-                $city = empty($p_c_a['city']) ? $p_c_a['city'] : Db::name('city')->whereLike('name', '%' . $p_c_a['city'] . '%')->value('city_code');
-                $area = empty($p_c_a['district']) ? $p_c_a['district'] : Db::name('area')->whereLike('name', '%' . $p_c_a['district'] . '%')->value('area_code');
+                $province = Db::name('province')->where('name', $p_c_a['province'])->value('province_code', '');
+                $city = Db::name('city')->where(['name' => $p_c_a['city'], 'province_code' => $province])->value('city_code', '');
+                $area = Db::name('area')->where(['name' => $p_c_a['district'], 'city_code' => $city])->value('area_code', '');
 
                 $extend_insert_data['addr_code'] = implode([$province, $city, $area], ',');
 

+ 100 - 92
app/command/handleYzOrderData.php

@@ -4,7 +4,8 @@ namespace app\command;
 
 use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
-use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;
+use app\admin\model\ProcessOrder;
 use think\console\Command;
 use think\console\Input;
 use think\console\Output;
@@ -27,13 +28,13 @@ class handleYzOrderData extends Command
     //处理有赞订单数据
     protected function execute(Input $input, Output $output)
     {
-		$limit = Cache::store('redis')->get("YzTimeLimit");
-        if($limit==1){
-        	return '' ;
+        $limit = Cache::store('redis')->get("YzTimeLimit");
+        if ($limit == 1) {
+            return '';
         }
         $c_data = Cache::store('redis')->handler()->rpop(Config::get('app.handle_queue_key'));
-        Cache::store('redis')->set("YzTimeLimit",1,60);
-        if ($c_data){
+        Cache::store('redis')->set("YzTimeLimit", 1, 60);
+        if ($c_data) {
 
             $c_data = json_decode($c_data, true);
 
@@ -75,7 +76,7 @@ class handleYzOrderData extends Command
                 //企业客户
                 $ct = Db::name('platform_youzan')
                     ->alias('py')
-                    ->field('py.id,py.skuCode,py.spuCode,py.plat_code,co.id org1_id,co.name,py.sale_price,g.*,py.platform_id')
+                    ->field('py.id,py.skuCode,py.spuCode,py.plat_code,co.id org1_id,co.name,py.sale_price,g.*,py.platform_id,p.platform_name')
                     ->leftJoin('platform p', 'p.id=py.platform_id AND p.is_del=0')
                     ->leftJoin('customer_org1 co', 'co.name=p.platform_name AND co.is_del=0')
                     ->leftJoin('good g', 'g.spuCode=py.spuCode AND g.is_del=0')
@@ -90,7 +91,7 @@ class handleYzOrderData extends Command
 
                     if (!$customer_code) throw new Exception('在企业客户管理组织中找不到对应的企业');
 
-                } else throw new Exception('未找到商品数据');
+                } else throw new Exception('未找到skuCode:' . $c_data['skuCode'] . '的上线商品数据');
 
 
 //                $customer_code = $customer_code = Db::name('customer_info')
@@ -151,7 +152,7 @@ class handleYzOrderData extends Command
                         ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $supplierNo])
                         ->sum('balance_num');
                     if ($stock_num < $good_num) {
-                        throw new Exception('bn库存数量不足');
+                        throw new Exception('bn库存数量不足,库存数只有' . $stock_num);
                     }
                     $origin_price = 0;
 
@@ -161,9 +162,8 @@ class handleYzOrderData extends Command
                         ->where([["spuCode", "=", $spuCode], ["min_num", "<=", $good_num], ["is_del", "=", 0]])
                         ->order("min_num desc")
                         ->find();
-                    if ($origin == false) throw new Exception('未找到相关成本价格');
+                    if ($origin == false) throw new Exception('未找到spuCode:' . $spuCode . ',最小起订量为' . $good_num . '的相关成本价格');
                     $origin_price = $origin['nake_total'];
-
                 }
 
 
@@ -186,13 +186,13 @@ class handleYzOrderData extends Command
 //                        return $query->where('ga.start', '<=', date('Y-m-d H:i:s'))->where('ga.end', '>=', date('Y-m-d H:i:s'));
 //                    })
 //                    ->find();
-				$is_activity = 0;
+                $is_activity = 0;
                 $sale_price = $c_data['discount_price'];
-	            if (isset($c_data['coupon']) && is_discount($c_data['coupon'])) {
-		            //如果是泰行销的单子,要取原始价格(即优惠前的价格)
-		            $is_activity=2;//txx活动标识
-		            $sale_price = $c_data['price'];
-	            }
+                if (isset($c_data['coupon']) && is_discount($c_data['coupon'])) {
+                    //如果是泰行销的单子,要取原始价格(即优惠前的价格)
+                    $is_activity = 2;//txx活动标识
+                    $sale_price = $c_data['price'];
+                }
 
 
                 $act = check_activity((string)$spuCode, (string)$skuCode, (int)$platform_id, (int)$is_stock, (float)$sale_price, (int)$good_num);
@@ -202,14 +202,14 @@ class handleYzOrderData extends Command
                     $sale_price = $act['final_price'];//取活动的相关价格
 //                    if ($act['moq_num'] > $good_num) throw new Exception('商品不满足活动价起订量' . $act['moq_num']);
 //                    if ($act['activity_stock'] < $good_num) throw new Exception('商品活动库存剩余' . $act['activity_stock']);
-                }else{
+                } else {
 
-	                if ($sale_price < $ct['sale_price'] && $c_data['is_approved'] == '0') {
-		                Db::rollback();
-		                $this->callbackYz(['status' => 2, 'id' => $c_data['id'], 'reason' => '价格低于系统售价' . $ct['sale_price']]);
-		                Cache::store('redis')->set("YzTimeLimit",0);
-		                return false;//停止执行后续代码
-	                }
+                    if ($sale_price < $ct['sale_price'] && $c_data['is_approved'] == '0') {
+                        Db::rollback();
+                        $this->callbackYz(['status' => 2, 'id' => $c_data['id'], 'reason' => '价格低于系统售价' . $ct['sale_price']]);
+                        Cache::store('redis')->set("YzTimeLimit", 0);
+                        return false;//停止执行后续代码
+                    }
 
                 }
 
@@ -228,8 +228,6 @@ class handleYzOrderData extends Command
 //                }
 
 
-
-
 //                if ($goodtype == 1) {
 //                    $good = Db::name("good_ladder")
 //                        ->where(["skuCode" => $skuCode, "is_del" => 0, "status" => 1])
@@ -265,7 +263,7 @@ class handleYzOrderData extends Command
                 $user = Config::get('app.uid_platform_youzan.' . $ct['platform_id']);
                 $rm = isset($user['id']) ? $user['id'] : 0;
                 $ri = isset($user['nickname']) ? $user['nickname'] : 'youzan';
-				if($rm==0)throw new Exception('平台转单未找到对应的平台账户');
+                if ($rm == 0) throw new Exception("[平台id:{$ct['platform_id']}][平台名称:{$ct['platform_name']}]未找到对应的平台账户");
 
                 $supplier_temp_info = Db::name('supplier')
                     ->field('id,person,personid')
@@ -299,7 +297,7 @@ class handleYzOrderData extends Command
                     "remark" => $remark,
                     "is_stock" => $is_stock,
                     "is_activity" => $is_activity,
-                    'activity_code' => $is_activity==1 ? $act['activity_code'] : ($is_activity==2?"txx":""),
+                    'activity_code' => $is_activity == 1 ? $act['activity_code'] : ($is_activity == 2 ? "txx" : ""),
                     "order_type" => $order_type,
                     "order_source" => $order_source,
 //                "poNo"=>$poNo,
@@ -340,7 +338,7 @@ class handleYzOrderData extends Command
                         'skuCode' => $data['skuCode'],
                         'order_type' => $data['order_type'],
                         'order_source' => $data['order_source'],
-                        'supplierNo' => $data['supplierNo'],
+                        'supplierNo' => $ct['supplierNo'],
                         'companyNo' => $ct['companyNo'],
                         'customer_code' => $data['customer_code'],
                     ]);
@@ -368,8 +366,8 @@ class handleYzOrderData extends Command
                             "good_type" => $goodtype,
                             "order_type" => $order_type,
                             "order_source" => $order_source,
-                            "createrid" =>$supplier_temp_info['personid'],
-                             "creater" =>$supplier_temp_info['person'],
+                            "createrid" => $supplier_temp_info['personid'],
+                            "creater" => $supplier_temp_info['person'],
                             'send_way' => 2,
                             'gold_price' => $ct['cgd_gold_price'],
                             'good_createrid' => $goodinfo['createrid'],
@@ -379,7 +377,7 @@ class handleYzOrderData extends Command
 
                         //非库存品
                         $bol = $this->createCgd($cgd, $rm, $ri, $standing_book_data);
-                        if ($bol == false) throw new Exception('订单创建失败');
+                        if ($bol !== true) throw new Exception($bol);
 
                     } else {
                         //库存品
@@ -416,23 +414,33 @@ class handleYzOrderData extends Command
 //                            $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $datainfo, "type" => 1, 'stock' => $good_num, "stock_name" => "wait_out_stock"];
 //                            GoodLog::LogAdd(['id' => $rm, 'nickname' => $ri], $good_data, "XSQRD");
 //                        }
-	                    $stockid= Db::name("good_stock")->alias("a")
-			            ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
-			            ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" =>$supplierNo])
-			            ->column('a.id');
-	                        $stockinfo =GoodStockInfo::OrderBn($orderCode,$stockid,intval($good_num));
-	                        if($stockinfo==false){
-	                            throw new Exception('库存商品更新库存失败');
-	                        }
+                        $stockid = Db::name("good_stock")->alias("a")
+                            ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
+                            ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $supplierNo])
+                            ->column('a.id');
+                        $stockinfo = GoodStockInfo::OrderBn($orderCode, $stockid, intval($good_num));
+                        if ($stockinfo == false) {
+                            throw new Exception('库存商品更新库存失败');
+                        }
 
                     }
                     if ($sendtype == 1) {
 
-                        $p_c_a = get_address($c_data['delivery_province'] . $c_data['delivery_city'] . $c_data['delivery_district']);
-
-                        $province = empty($p_c_a['province']) ? $p_c_a['province'] : Db::name('province')->whereLike('name', '%' . $p_c_a['province'] . '%')->value('province_code');
-                        $city = empty($p_c_a['city']) ? $p_c_a['city'] : Db::name('city')->whereLike('name', '%' . $p_c_a['city'] . '%')->value('city_code');
-                        $area = empty($p_c_a['district']) ? $p_c_a['district'] : Db::name('area')->whereLike('name', '%' . $p_c_a['district'] . '%')->value('area_code');
+//                        $p_c_a = get_address($c_data['delivery_province'] . $c_data['delivery_city'] . $c_data['delivery_district']);
+
+                        $province = Db::name('province')
+                            ->where('name', $c_data['delivery_province'])
+                            ->value('province_code', '');
+                        //地级市可能有重复的,例如'省直辖县'
+                        $city = Db::name('city')
+                            ->where('name', $c_data['delivery_city'])
+                            ->where('province_code', $province)
+                            ->value('city_code', '');
+                        //县区名称也有可能重复,例如'桥东区'
+                        $area = Db::name('area')
+                            ->where('name', $c_data['delivery_district'])
+                            ->where('city_code', $city)
+                            ->value('area_code', '');
 
                         $addr_code = implode([$province, $city, $area], ',');
 
@@ -452,34 +460,34 @@ class handleYzOrderData extends Command
                         ];
                         $vmp = Db::name('order_addr')->insertGetId($temp);
                         if ($vmp > 0) {
-								$num = $c_data['num'];
-	                            $outCode = makeNo("DF");
-                        	if ($is_stock != 1) {
-	                            $order = Db::name("order_num")
-	                                ->where(["orderCode" => $orderCode, "status" => 1])
-	                                ->where([["wsend_num", ">=", 0]])
-	                                ->lock(true)
-	                                ->find();
-	                            if ($order == false) throw new Exception('未找到可以发货得采购单数据');
-	                            $order['wsend_num'] -= $num;
-	                            $order['send_num'] += $num;
-	                            $or = Db::name("order_num")->save($order);
-	                            if ($or == false) throw new Exception('发货地址更新失败');
-
-	                            $tep = [
-	                                "cgdNo" => $order['cgdNo'],
-	                                "outCode" => $outCode,
-	                                "send_num" => $num,
-	                                "status" => 1,
-	                                "addtime" => date("Y-m-d H:i:s"),
-	                                "updatetime" => date("Y-m-d H:i:s")
-	                            ];
-	                            $sen = Db::name("order_send")->save($tep);
-	                            if ($sen == false) throw new Exception('发货地址添加创建失败');
-
-	                            $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
-	                            if ($cgdinfo == false) throw new Exception('未匹配到采购数据');
-							}
+                            $num = $c_data['num'];
+                            $outCode = makeNo("DF");
+                            if ($is_stock != 1) {
+                                $order = Db::name("order_num")
+                                    ->where(["orderCode" => $orderCode, "status" => 1])
+                                    ->where([["wsend_num", ">=", 0]])
+                                    ->lock(true)
+                                    ->find();
+                                if ($order == false) throw new Exception('未找到可以发货的采购单数据');
+                                $order['wsend_num'] -= $num;
+                                $order['send_num'] += $num;
+                                $or = Db::name("order_num")->save($order);
+                                if ($or == false) throw new Exception('发货数量更新失败');
+
+                                $tep = [
+                                    "cgdNo" => $order['cgdNo'],
+                                    "outCode" => $outCode,
+                                    "send_num" => $num,
+                                    "status" => 1,
+                                    "addtime" => date("Y-m-d H:i:s"),
+                                    "updatetime" => date("Y-m-d H:i:s")
+                                ];
+                                $sen = Db::name("order_send")->save($tep);
+                                if ($sen == false) throw new Exception('发货地址创建失败');
+
+                                $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
+                                if ($cgdinfo == false) throw new Exception('未匹配到编码为' . $order['cgdNo'] . '采购数据');
+                            }
                             $out = [
                                 "orderCode" => $orderCode,
                                 "outCode" => $outCode,
@@ -493,14 +501,14 @@ class handleYzOrderData extends Command
                                 "send_num" => $num,
                                 "check_num" => 0,
                                 "error_num" => 0,
-                                "wsm_code" => $is_stock==1? '':$cgdinfo['wsm_code'],
+                                "wsm_code" => $is_stock == 1 ? '' : $cgdinfo['wsm_code'],
                                 "order_type" => $order_type,
                                 "status" => $is_stock == 1 ? 1 : 0,
                                 "addtime" => date("Y-m-d H:i:s"),
                                 "updatetime" => date("Y-m-d H:i:s")
                             ];
                             $ou = Db::name("order_out")->insertGetId($out);
-                            if ($ou == false) throw new Exception('发货地址添加创建失败');
+                            if ($ou == false) throw new Exception('发货创建失败');
                             else {
                                 //修改状态,添加待办
                                 ActionLog::logAdd(['id' => $rm, 'nickname' => $ri], [
@@ -544,13 +552,13 @@ class handleYzOrderData extends Command
                                     }
 
 
-                                }else ProcessOrder::AddProcess(['id' => $rm, 'nickname' => $ri], [
+                                } else ProcessOrder::AddProcess(['id' => $rm, 'nickname' => $ri], [
                                     "order_type" => 'CKD',
                                     "order_code" => $outCode,//出库单号
                                     "order_id" => $ou,
                                     "order_status" => $out['status'],
                                     "before_status" => 0,
-                                    'holder_id'=>$data['apply_id']
+                                    'holder_id' => $data['apply_id']
                                 ]);
 
 //                                $standing_book_data['outCode'] = $outCode;
@@ -602,8 +610,8 @@ class handleYzOrderData extends Command
                 }
 
                 Db::commit();
-				Cache::store('redis')->set("YzTimeLimit",0);
-                $output->writeln(date('Y-m-d H:i:s') . '|处理成功,orderCode:' . $orderCode);
+                Cache::store('redis')->set("YzTimeLimit", 0);
+//                $output->writeln(date('Y-m-d H:i:s') . '|处理成功,orderCode:' . $orderCode);
 
             } catch (\think\Exception $exception) {
                 Db::rollback();
@@ -613,12 +621,12 @@ class handleYzOrderData extends Command
                 //回调更新有赞订单数据
                 $callback_rs = $this->callbackYz(['status' => 8, 'id' => $c_data['id'], 'reason' => $exception->getMessage()]);
                 if ($callback_rs['code'] != 0) $message[] = $callback_rs['message'];
-				Cache::store('redis')->set("YzTimeLimit",0);
+                Cache::store('redis')->set("YzTimeLimit", 0);
                 $output->writeln(date('Y-m-d H:i:s') . '|处理失败,' . implode(',', $message));
             }
 
         }
-        Cache::store('redis')->set("YzTimeLimit",0,60);
+        Cache::store('redis')->set("YzTimeLimit", 0, 60);
         //没有需要处理的数据
 
     }
@@ -629,7 +637,7 @@ class handleYzOrderData extends Command
     {
         $cgdCode = makeNo("CG");
         $supplier = Db::name("supplier")->where(["code" => $data['supplierNo'], "is_del" => 0])->find();
-        if ($supplier == false) return false;
+        if ($supplier == false) return '未找到供应商';
 
         $wsm = Db::name("warehouse_info")
             ->where(["supplierNo" => $data["supplierNo"], "companyNo" => $data['companyNo'], "is_del" => 0])
@@ -654,14 +662,14 @@ class handleYzOrderData extends Command
                 "updatetime" => date("Y-m-d H:i:s")
             ];
             $in = Db::name("warehouse_info")->insert($inwsm);
-            if ($in == false) return false;
+            if ($in == false) return '仓库数据创建失败';
 
         } else {
             $wsm_code = $wsm['wsm_code'];
         }
 
         //判断该供应商是否开通了供应商账号
-        $from_tag=checkHasAccountBySupplierNos([$data['supplierNo']]);
+        $from_tag = checkHasAccountBySupplierNos([$data['supplierNo']]);
 
         $cg = [
             "cgdNo" => $cgdCode,
@@ -683,7 +691,7 @@ class handleYzOrderData extends Command
             "demo_fee" => $data['demo_fee'],
             "nake_fee" => $data['nake_fee'],
             "delivery_fee" => $data['delivery_fee'],
-            "weight"=>$data['weight'],
+            "weight" => $data['weight'],
             "diff_weight" => "0",
             "diff_fee" => "0",
             "gold_price" => $data['gold_price'],
@@ -724,9 +732,9 @@ class handleYzOrderData extends Command
                 "order_id" => $up,
                 "order_status" => $cg['status'],
                 "before_status" => 0,
-                'holder_id'=>$supplier['personid'],
-                'wait_id'=>$supplier['personid'],
-                'wait_name'=>$supplier['person'],
+                'holder_id' => $supplier['personid'],
+                'wait_id' => $supplier['personid'],
+                'wait_name' => $supplier['person'],
             ]);
 
             $standing_book_data['cgdNo'] = $cgdCode;
@@ -743,7 +751,7 @@ class handleYzOrderData extends Command
                 "source" => 2
             ];
             $re = Db::name("order_num")->save($rela);
-            if ($re == false) return false;
+            if ($re == false) return '销售订单和采购单关联失败';
             else {
                 $stokc = Db::name("good_stock")
                     ->where(['spuCode' => $data['spuCode'], "wsm_code" => $wsm_code, "is_del" => 0])
@@ -766,7 +774,7 @@ class handleYzOrderData extends Command
                     $stokc['updatetime'] = date("Y-m-d H:i:s");
                 }
                 $stoc = Db::name("good_stock")->save($stokc);
-                if ($stoc == false) return false;
+                if ($stoc == false) return '商品库存操作失败';
 
                 $good_data[] = ['good_log_code' => $cgdCode, "stock_id" => isset($stoc['id']) ? $stoc['id'] : Db::name("good_stock")->getLastInsID(), "type" => 1, 'stock' => $data['good_num'], "stock_name" => "wait_in_stock"];
                 GoodLog::LogAdd(['id' => 0, 'nickname' => 'system'], $good_data, "CGD");
@@ -775,7 +783,7 @@ class handleYzOrderData extends Command
 
                 return true;
             }
-        } else return false;
+        } else return '创建采购单失败';
 
     }
 
@@ -800,7 +808,7 @@ class handleYzOrderData extends Command
         if ($cgdinfo == false) return false;
 
         //判断该供应商是否开通了供应商账号
-        $from_tag=checkHasAccountBySupplierNos([$cgdinfo['supplierNo']]);
+        $from_tag = checkHasAccountBySupplierNos([$cgdinfo['supplierNo']]);
 
         $QrdCgd = [
             "cgdNo" => makeNo("CG"),

+ 1 - 1
app/common.php

@@ -850,7 +850,7 @@ if (!function_exists('get_address')) {
             $city = $matches[count($matches) - 2];
             $address = str_replace($city, '', $address);
         }
-        preg_match('/(.*?(区|县|镇|乡|街道|旗))/', $address, $matches);
+        preg_match('/(.*?(区|县|镇|乡|街道|旗|市))/', $address, $matches);
         if (count($matches) > 1) {
             $area = $matches[count($matches) - 2];
             $address = str_replace($area, '', $address);

+ 4 - 4
app/youzan/controller/Index.php

@@ -231,15 +231,15 @@ class Index extends Base
     {
         $param = $this->request->filter('trim')->only(['id', 'token']);
 
-        $val = Validate::rule(['id|ID' => 'require|number|gt:0', 'token' => 'require']);
+        $val = Validate::rule(['id|ID' => 'require|array|max:100', 'token' => 'require']);
 
         if ($val->check($param)) {
 
-            $user = GetUserInfo($param['token']);
+//            $user = GetUserInfo($param['token']);
 
-            $param['uid'] = isset($user['data']['id']) ? $user['data']['id'] : 0;
+            $param['uid'] = $this->uid;
 
-            $param['uname'] = isset($user['data']['nickname']) ? $user['data']['nickname'] : 0;
+            $param['uname'] = $this->uname;
 
             $res = curl_request(config('app.yz_domain') . 'api/yz_order_delete', $param);
 

Some files were not shown because too many files changed in this diff