cqp 2 сар өмнө
parent
commit
f205fbdee7

+ 13 - 0
app/Http/Controllers/Api/ProductController.php

@@ -231,6 +231,19 @@ class ProductController extends BaseController
         }
     }
 
+    public function batchUnitInfo(Request $request)
+    {
+        $service = new ProductService();
+        $user = $request->userData->toArray();
+        list($status,$data) = $service->batchUnitInfo($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
     public function productList(Request $request)
     {
         $service = new ProductService();

+ 1 - 0
app/Model/BasicType.php

@@ -10,6 +10,7 @@ class BasicType extends UseScopeBaseModel
     protected $dateFormat = 'U';
 
     const type_22 = 22;
+    const type_20 = 20;
     public static $type = [
         1 => '客户意向类型',
         2 => '客户来源类型',

+ 2 - 0
app/Model/Product.php

@@ -60,4 +60,6 @@ class Product extends UseScopeBaseModel
         self::is_use_zero => '停用',
         self::is_use_one => '启用',
     ];
+
+    public static $field = ['title','id','product_category_id','code','size','unit','bar_code','retail_price','cost','state','crt_id','crt_time','mark','depart_id','top_depart_id','install_time','product_attribute','is_use','build_fee','item_code','unit_2','main_number','second_number'];
 }

+ 33 - 17
app/Service/CheckService.php

@@ -248,8 +248,8 @@ class CheckService extends Service
         }
 
         //比较库存
-        list($status,$msg) = (new ProductInventoryService())->compareStock($user,$product_id, $product_submit, []);
-        if(! $status) return [false, $msg];
+//        list($status,$msg) = (new ProductInventoryService())->compareStock($user,$product_id, $product_submit, []);
+//        if(! $status) return [false, $msg];
 
         //锁定库存
 //        ProductInventoryService::changeLockNumber($user,$product_submit);
@@ -1029,9 +1029,9 @@ class CheckService extends Service
                 ->get()->toArray();
             foreach ($purchase as $value){
                 $key = $value['data_id'] . $value['product_id'];
-                $num = bcsub($value['number'],$value['return_number'],2);
+                $num = bcsub($value['number'],$value['return_number'],4);
                 if(isset($outbound[$key])){
-                    $tmp = bcadd($num, $outbound[$key]['number'],2);
+                    $tmp = bcadd($num, $outbound[$key]['number'],4);
                     $outbound[$key]['number'] = $tmp;
                 }else{
                     $outbound[$key] = [
@@ -1065,20 +1065,20 @@ class CheckService extends Service
                             if($value['number'] <= 0) continue;
 
                             //剩余能退数量
-                            $out_number = bcsub($out['number'], $out['return_number'],2);
+                            $out_number = bcsub($out['number'], $out['return_number'],4);
                             if($out_number >= $value['number']) {
-                                $number = bcadd($value['number'], $number,2);
+                                $number = bcadd($value['number'], $number,4);
                                 $t = $value['number'];
                                 $value['number'] = 0;
                             }else{
-                                $number = bcadd($out_number, $number,2);
-                                $value['number'] = bcsub($value['number'], $out_number,2);
+                                $number = bcadd($out_number, $number,4);
+                                $value['number'] = bcsub($value['number'], $out_number,4);
                                 $t = $out_number;
                             }
                             //更新数据
                             $update[] = [
                                 'id' => $out['id'],
-                                'return_number' => bcadd($out['return_number'], $t,2),
+                                'return_number' => bcadd($out['return_number'], $t,4),
                             ];
 
                             $insert2[] = [
@@ -1098,7 +1098,7 @@ class CheckService extends Service
                                     $update2_num = $t;
                                 }
                                 if(isset($update2[$id])){
-                                    $update2[$id] = bcadd($update2_num, $update2[$id],2);
+                                    $update2[$id] = bcadd($update2_num, $update2[$id],4);
                                 }else{
                                     $update2[$id] = $update2_num;
                                 }
@@ -1234,7 +1234,8 @@ class CheckService extends Service
 
             $number = $value['final_num'];
             if(isset($insert[$key])){
-                $insert[$key]['number'] += $number;
+                $tmp = bcadd($insert[$key], $number,4);
+                $insert[$key]['number'] = $tmp;
             }else{
                 $insert[$key] = [
                     'product_id' => $value['product_id'],
@@ -1272,7 +1273,8 @@ class CheckService extends Service
 
             $number = -($value['number']);
             if(isset($insert[$key])){
-                $insert[$key]['number'] += $number;
+                $tmp = bcadd($insert[$key]['number'], $number,4);
+                $insert[$key]['number'] = $tmp;
             }else{
                 $insert[$key] = [
                     'product_id' => $value['product_id'],
@@ -1925,7 +1927,8 @@ class CheckService extends Service
         foreach ($record as $value){
             $key = $value['product_id'] . $value['storehouse_id'];
             if(isset($result[$key])){
-                $result[$key]['number'] += $value['number'];
+                $tmp = bcadd($result[$key]['number'], $value['number'],4);
+                $result[$key]['number'] = $tmp;
             }else{
                 $result[$key] = [
                     'product_id' => $value['product_id'],
@@ -1937,7 +1940,8 @@ class CheckService extends Service
             }
             if($value['number'] < 0){
                 if(isset($lock_number[$key])){
-                    $lock_number[$key] += $value['number'];
+                    $tmp1 = bcadd($lock_number[$key], $value['number'],4);
+                    $lock_number[$key] = $tmp1;
                 }else{
                     $lock_number[$key] = $value['number'];
                 }
@@ -2022,7 +2026,8 @@ class CheckService extends Service
         foreach ($record as $value){
             $key = $value['product_id'] . $value['storehouse_id'];
             if(isset($result[$key])){
-                $result[$key]['number'] += $value['number'];
+                $tmp = bcadd($result[$key]['number'], $value['number'],4);
+                $result[$key]['number'] = $tmp;
             }else{
                 $result[$key] = [
                     'product_id' => $value['product_id'],
@@ -2034,7 +2039,8 @@ class CheckService extends Service
             }
             if($value['number'] > 0){
                 if(isset($lock_number[$key])){
-                    $lock_number[$key] += $value['number'];
+                    $tmp1 = bcadd($lock_number[$key], $value['number'],4);
+                    $lock_number[$key] = $tmp1;
                 }else{
                     $lock_number[$key] = $value['number'];
                 }
@@ -2042,7 +2048,17 @@ class CheckService extends Service
         }
 
         //是否校验库存 是的话锁定数量要更新(根据当前操作人所在门店是否校验库存)
-        $lock = $user['is_check_stock'];
+//        $lock = $user['is_check_stock'];
+
+        $lock = ProductInventorySet::type_one;
+        $for_lock = OrderInventoryStock::where('order_number',$order['order_number'])
+            ->where('del_time',0)
+            ->orderBy('id','desc')
+            ->first();
+        if(! empty($for_lock)) {
+            $for_lock = $for_lock->toArray();
+            $lock = $for_lock['is_check_stock'];
+        }
 
         $result = array_values($result);
         foreach ($result as $key => $value){

+ 15 - 8
app/Service/ConstructionService.php

@@ -900,12 +900,13 @@ class ConstructionService extends Service
         $product_submit = $product_id = [];
         foreach ($data['product'] as $value){
             if(empty($value['number'])) return [false,'产品数量不能为空'];
-            $res = $this->checkNumber($value['number']);
-            if(! $res) return [false,'请输入正确的产品数量'];
+            $res = $this->checkNumber($value['number'],4);
+            if(! $res) return [false,'产品数量请输入不超过四位小数并且大于0的数值'];
 
             $key = $value['product_id'] . ',' .$data['storehouse_id'];
             if(isset($product_submit[$key])){
-                $product_submit[$key] += $value['number'];
+                $tmp = bcadd($value['number'], $product_submit[$key],4);
+                $product_submit[$key] = $tmp;
             }else{
                 $product_submit[$key] = $value['number'];
             }
@@ -1180,7 +1181,8 @@ class ConstructionService extends Service
         foreach ($sub as $value){
             $key = $value['product_id'] . ',' . $value['storehouse_id'];
             if(isset($product_save[$key])){
-                $product_save[$key] += $value['number'];
+                $tmp = bcadd($value['number'], $product_save[$key],4);
+                $product_save[$key] = $tmp;
             }else{
                 $product_save[$key] = $value['number'];
             }
@@ -1204,7 +1206,8 @@ class ConstructionService extends Service
             ->get()->toArray();
         foreach ($sub as $value){
             if(isset($product_save[$value['product_id']])){
-                $product_save[$value['product_id']] += $value['number'];
+                $tmp = bcadd($value['number'], $product_save[$value['product_id']],4);
+                $product_save[$value['product_id']] = $tmp;
             }else{
                 $product_save[$value['product_id']] = $value['number'];
             }
@@ -1221,7 +1224,8 @@ class ConstructionService extends Service
             ->get()->toArray();
         foreach ($sub1_array as $value){
             if(isset($product_save2[$value['product_id']])){
-                $product_save2[$value['product_id']] += $value['number'];
+                $tmp = bcadd($value['number'], $product_save2[$value['product_id']],4);
+                $product_save2[$value['product_id']] = $tmp;
             }else{
                 $product_save2[$value['product_id']] = $value['number'];
             }
@@ -1235,9 +1239,12 @@ class ConstructionService extends Service
             $product_save_tmp = $product_save[$value['product_id']] ?? 0;
             $product_save_tmp2 = $product_save2[$value['product_id']] ?? 0;
             if(isset($sales_order_product[$value['product_id']])){
-                $sales_order_product[$value['product_id']] += $value['number'];
+                $tmp = bcadd($value['number'], $sales_order_product[$value['product_id']],4);
+                $sales_order_product[$value['product_id']] = $tmp;
             }else{
-                $sales_order_product[$value['product_id']] = $value['number'] - $product_save_tmp - $product_save_tmp2;
+                $tmp1 = bcsub($value['number'],$product_save_tmp,4);
+                $tmp1 = bcsub($tmp1, $product_save_tmp2,4);
+                $sales_order_product[$value['product_id']] = $tmp1;
             }
         }
 

+ 5 - 1
app/Service/ExportFileService.php

@@ -1438,6 +1438,8 @@ class ExportFileService extends Service
             'top_depart_title' => "",
             'unit_title' => "",
             'number' => 0,
+            'unit_2_title' => "",
+            'number_' => 0,
             'crt_time' => "",
         ];
 
@@ -1457,6 +1459,8 @@ class ExportFileService extends Service
                         'top_depart_title' => $value['top_depart_title'],
                         'unit_title' => $value['unit_title'],
                         'number' => $value['number'],
+                        'unit_2_title' => $value['unit_2_title'],
+                        'number_2' => $value['number_2'],
                         'crt_time' => $value['crt_time'],
                     ];
 
@@ -1465,7 +1469,7 @@ class ExportFileService extends Service
             });
 
         $header = [
-            ['产品编码','产品名称','产品分类','产品条码','仓库','计量单位','现存数量','入库时间'],
+            ['产品编码','产品名称','产品分类','产品条码','仓库','计量单位','现存数量','副计量单位','现存数量(副)','入库时间'],
         ];
 
         $return[] = $total;

+ 1 - 1
app/Service/ImportService.php

@@ -1772,7 +1772,7 @@ class ImportService extends Service
             $keys = $value['product_id'] . ',' . $value['storehouse_id'];
             if(isset($inventory_map[$keys])){
                 $sub[$key]['book_num'] = $inventory_map[$keys];
-                $num = bcsub($value['counted_num'], $inventory_map[$keys],2);
+                $num = bcsub($value['counted_num'], $inventory_map[$keys],4);
                 $sub[$key]['final_num'] = $num;
             }else{
                 $sub[$key]['final_num'] = $value['counted_num'];

+ 13 - 11
app/Service/InventoryService.php

@@ -292,7 +292,7 @@ class InventoryService extends Service
             $bool = $this->checkNumber($value['counted_num']);
             if(! $bool) return [false, '盘点数量不合法,请输入大于等于0的两位数值'];
             if(! is_numeric($value['final_num'])) return [false, '盈亏数量不合法'];
-            $num = bcsub($value['counted_num'],$value['book_num'],2);
+            $num = bcsub($value['counted_num'],$value['book_num'],4);
             $num = floatval($num);
             $final_num = floatval($value['final_num']);
             if($num != $final_num) return [false,'盈亏数量计算错误'];
@@ -312,7 +312,8 @@ class InventoryService extends Service
 
             if($value['final_num'] < 0){
                 if(isset($product_submit_reduce[$key])){
-                    $product_submit_reduce[$key] += $value['final_num'];
+                    $tmp = bcadd($product_submit_reduce[$key], $value['final_num'],4);
+                    $product_submit_reduce[$key] = $tmp;
                 }else{
                     $product_submit_reduce[$key] = $value['final_num'];
                 }
@@ -377,7 +378,8 @@ class InventoryService extends Service
             $key = $value['product_id'] . ',' . $value['storehouse_id'];
             if($value['final_num'] < 0){//盘亏
                 if(isset($product_save[$key])){
-                    $product_save[$key] += $value['final_num'];
+                    $tmp = bcadd($product_save[$key], $value['final_num'],4);
+                    $product_save[$key] = $tmp;
                 }else{
                     $product_save[$key] = $value['final_num'];
                 }
@@ -455,10 +457,10 @@ class InventoryService extends Service
         $purchase_product_outbound_map = [];
         foreach ($purchase_product_outbound as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
-            $tmp = bcsub($value['number'],$value['return_number'],2);
+            $tmp = bcsub($value['number'],$value['return_number'],4);
             if($tmp <= 0) continue;
             if(isset($purchase_product_outbound_map[$key])){
-                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,2);
+                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,4);
                 $purchase_product_outbound_map[$key] = $total_number;
             }else{
                 $purchase_product_outbound_map[$key] = $tmp;
@@ -471,7 +473,7 @@ class InventoryService extends Service
             $purchase_number_lock_tmp = $purchase_product_outbound_map[$key] ?? 0; //盘点单产品锁定未释放的数量
 
             //最终盘点单下某个产品的实际数量
-            $number = bcsub($value['number'], $purchase_number_lock_tmp,2);
+            $number = bcsub($value['number'], $purchase_number_lock_tmp,4);
 
             if($number <= 0) continue;
 
@@ -507,7 +509,7 @@ class InventoryService extends Service
         foreach ($purchase_product as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
             if(isset($purchase_product_map[$key])){
-                $total_number = bcadd($purchase_product_map[$key], $value['number'],2);
+                $total_number = bcadd($purchase_product_map[$key], $value['number'],4);
                 $purchase_product_map[$key] = $total_number;
             }else{
                 $purchase_product_map[$key] = $value['number'];
@@ -528,10 +530,10 @@ class InventoryService extends Service
         $purchase_product_outbound_map = [];
         foreach ($purchase_product_outbound as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
-            $tmp = bcsub($value['number'],$value['return_number'],2);
+            $tmp = bcsub($value['number'],$value['return_number'],4);
             if($tmp <= 0) continue;
             if(isset($purchase_product_outbound_map[$key])){
-                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,2);
+                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,4);
                 $purchase_product_outbound_map[$key] = $total_number;
             }else{
                 $purchase_product_outbound_map[$key] = $tmp;
@@ -552,13 +554,13 @@ class InventoryService extends Service
 
                 //最终采购单下某个产品的实际数量
 //                $number = bcsub($value['number'], $value['outbound_number'],2);
-                $number = bcsub($total_tmp, $purchase_number_lock_tmp,2);
+                $number = bcsub($total_tmp, $purchase_number_lock_tmp,4);
 
                 //比较
                 if($number < $f_v['number']) return [false, "盘点单:" . $f_v['order_number'] . "实际可以出库的数量" . $number];
 
                 if(isset($count[$value['product_id']])){
-                    $num_tmp = bcadd($count[$value['product_id']], $f_v['number'],2);
+                    $num_tmp = bcadd($count[$value['product_id']], $f_v['number'],4);
                     $count[$value['product_id']] = $num_tmp;
                 }else{
                     $count[$value['product_id']] = $f_v['number'];

+ 60 - 23
app/Service/OutBoundOrderService.php

@@ -2,6 +2,7 @@
 
 namespace App\Service;
 
+use App\Model\BasicType;
 use App\Model\Employee;
 use App\Model\OrderInventoryStock;
 use App\Model\OutBoundOrder;
@@ -51,6 +52,7 @@ class OutBoundOrderService extends Service
                         'final_amount' => $value['final_amount'] ?? 0,
                         'data_id' => $data['data_id'],
                         'type' => $data['type'],
+                        'number_2' => $value['number_2'] ?? 0,
                     ];
                 }
                 OutBoundOrderInfo::insert($sub);
@@ -127,6 +129,7 @@ class OutBoundOrderService extends Service
                         'final_amount' => $value['final_amount'] ?? 0,
                         'data_id' => $data['data_id'],
                         'type' => $data['type'],
+                        'number_2' => $value['number_2'] ?? 0,
                     ];
                 }
                 OutBoundOrderInfo::insert($sub);
@@ -321,7 +324,11 @@ class OutBoundOrderService extends Service
         foreach ($data['product'] as $value){
             if(empty($value['product_id'])) return [false, '出库产品不能为空'];
             if(empty($value['number'])) return [false, '出库产品数量不能为空'];
-            $res = $this->checkNumber($value['number']);
+            if(! empty($value['number_2'])){
+                $res = $this->checkNumber($value['number_2'],1);
+                if(! $res) return [false,'副单位产品数量请输入不超过一位小数并且大于0的数值'];
+            }
+            $res = $this->checkNumber($value['number'],4);
             if(! $res) return [false,'请输入正确的产品数量'];
 
             if(! isset($value['price'])) return [false, '出库产品单价不能为空'];
@@ -329,7 +336,8 @@ class OutBoundOrderService extends Service
 
             $key = $value['product_id'] . ',' .$data['storehouse_id'];
             if(isset($product_submit[$key])){
-                $product_submit[$key] += $value['number'];
+                $tmp = bcadd($value['number'], $product_submit[$key],4);
+                $product_submit[$key] = $tmp;
             }else{
                 $product_submit[$key] = $value['number'];
             }
@@ -423,10 +431,11 @@ class OutBoundOrderService extends Service
 
         $product = SalesOrderProductInfo::where('del_time',0)
             ->where('sales_order_id', $data_id)
-            ->select('product_id', 'number', 'final_amount','price')
+            ->select('product_id', 'number', 'final_amount','price','number_2')
             ->get()->toArray();
         $product_id = array_column($product,'product_id');
         $map = (new ProductService())->getProductDetail($product_id);
+        $basic_price = BasicType::where('type',20)->pluck('title','id')->toArray();
 
         //采购单产品
         $service = new PurchaseOrderService();
@@ -459,22 +468,25 @@ class OutBoundOrderService extends Service
             ->when(! empty($out_bound_id), function ($query) use ($out_bound_id) {
                 return $query->where('out_bound_id', '<>', $out_bound_id);
             })
-            ->select('product_id', 'number', 'final_amount','return_number')
+            ->select('product_id', 'number', 'final_amount','return_number','number_2')
             ->get()->toArray();
         foreach ($save as $value){
             if(isset($product_map[$value['product_id']])){
-                $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],2);
-                $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],2);
+                $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],4);
+                $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],4);
+                $number_2 = bcadd($value['number_2'], $product_map[$value['product_id']]['number_2'],4);
                 $product_map[$value['product_id']]['number'] = $number;
                 $product_map[$value['product_id']]['return_number'] = $return_number;
+                $product_map[$value['product_id']]['number_2'] = $number_2;
             }else{
                 $product_map[$value['product_id']]['number'] = $value['number'];
                 $product_map[$value['product_id']]['return_number'] = $value['return_number'];
+                $product_map[$value['product_id']]['number_2'] = $value['number_2'];
             }
         }
 
         //合同退货产品
-        $product_map2 = [];
+        $product_map2 = $product_map3 = [];
         $return_id = ReturnExchangeOrder::where('del_time',0)
             ->where('type', ReturnExchangeOrder::Order_type)
             ->where('model_type', ReturnExchangeOrder::Model_type_one)
@@ -484,32 +496,52 @@ class OutBoundOrderService extends Service
         $save2 = ReturnExchangeOrderProductInfo::where('del_time',0)
             ->whereIn('return_exchange_id', array_column($return_id,'id'))
             ->where('return_or_exchange',ReturnExchangeOrderProductInfo::type_one)
-            ->select('product_id', 'number', 'final_amount')
+            ->select('product_id', 'number', 'final_amount','number_2')
             ->get()->toArray();
         foreach ($save2 as $value){
             if(isset($product_map2[$value['product_id']])){
-                $number = bcadd($value['number'], $product_map2[$value['product_id']],2);
+                $number = bcadd($value['number'], $product_map2[$value['product_id']],4);
                 $product_map2[$value['product_id']] = $number;
             }else{
                 $product_map2[$value['product_id']] = $value['number'];
             }
+
+            if(isset($product_map3[$value['product_id']])){
+                $number = bcadd($value['number_2'], $product_map3[$value['product_id']],4);
+                $product_map3[$value['product_id']] = $number;
+            }else{
+                $product_map3[$value['product_id']] = $value['number_2'];
+            }
         }
 
         foreach ($product as $value){
+            $tmp = $map[$value['product_id']] ?? [];
+
             //合同出库产品明细
             $p1 = $product_map[$value['product_id']] ?? [];
+            //出库的副单位
+            $p1_number_2 = $p1['number_2'] ?? 0;
             //合同出库产品数量
             $p1_number = $p1['number'] ?? 0;
             //合同出库后退货产品数量
             $p1_return_number = $p1['return_number'] ?? 0;
             //出库数量 - 退货数量 = 已出数量
-            $p_re = bcsub($p1_number,$p1_return_number,2);
+            $p_re = bcsub($p1_number,$p1_return_number,4);
 
             //合同退货产品
             $p2 = $product_map2[$value['product_id']] ?? 0;
-            $p2_re = bcsub($p2,$p1_return_number,2);
+            $p2_re = bcsub($p2,$p1_return_number,4);
             //合同 - 已出 - 退货 = 剩余能出
-            $number = bcsub(bcsub($value['number'], $p_re,2), $p2_re,2);
+            $number = bcsub(bcsub($value['number'], $p_re,4), $p2_re,4);
+
+            //合同退货副单位
+            $p3 = $product_map3[$value['product_id']] ?? 0;
+
+            $number_2 = 0;
+            if(! empty($tmp['main_number']) && ! empty($tmp['second_number']) && ! empty($tmp['unit_2'])){
+                $number_2 = bcsub(bcsub($value['number_2'], $p1_number_2,1), $p3,1);
+                if(floatval($number_2) <= 0.0) $number_2 = 0;
+            }
 
             // 1 2 不能出 0 能  0 黄色 1 红色 2灰色
             if($p_re > 0) {
@@ -553,12 +585,11 @@ class OutBoundOrderService extends Service
 //                }
 //            }
 
-            $tmp = $map[$value['product_id']] ?? [];
-
             $return[] = [
                 'number' => $number, //可出数量
                 'out_number' => $p_re, //已出库数量
                 'return_number' => $p2, //已退货数量
+                'number_2' => $number_2, //可以出的数量对应的副单位
                 'state' => $state,
                 'state_title' => $state_title,
                 'price' => $value['price'],
@@ -568,6 +599,11 @@ class OutBoundOrderService extends Service
                 'code' => $tmp['code'] ?? "",
                 'size' => $tmp['size'] ?? "",
                 'unit' => $tmp['unit'] ?? "",
+                'unit_title' => $basic_price[$tmp['unit']] ?? "",
+                'unit_2' => $tmp['unit'] ?? "",
+                'unit_2_title' => $basic_price[$tmp['unit_2']] ?? "",
+                'main_number' => $tmp['main_number'] ?? "",
+                'second_number' => $tmp['second_number'] ?? "",
                 'purchase_product' => $return_product[$value['product_id']] ?? [],
             ];
         }
@@ -609,8 +645,8 @@ class OutBoundOrderService extends Service
             ->get()->toArray();
         foreach ($save as $value){
             if(isset($product_map[$value['product_id']])){
-                $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],2);
-                $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],2);
+                $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],4);
+                $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],4);
                 $product_map[$value['product_id']]['number'] = $number;
                 $product_map[$value['product_id']]['return_number'] = $return_number;
             }else{
@@ -634,7 +670,7 @@ class OutBoundOrderService extends Service
             ->get()->toArray();
         foreach ($save2 as $value){
             if(isset($product_map2[$value['product_id']])){
-                $number = bcadd($value['number'], $product_map2[$value['product_id']],2);
+                $number = bcadd($value['number'], $product_map2[$value['product_id']],4);
                 $product_map2[$value['product_id']] = $number;
             }else{
                 $product_map2[$value['product_id']] = $value['number'];
@@ -648,11 +684,11 @@ class OutBoundOrderService extends Service
             //合同出库后退货产品数量
             $p1_return_number = $p1['return_number'] ?? 0;
             //可再出数量
-            $p_re = bcsub($p1_number,$p1_return_number,2);
+            $p_re = bcsub($p1_number,$p1_return_number,4);
 
             $p2 = $product_map2[$value['product_id']] ?? 0;
-            $p2_re = bcsub($p2,$p1_return_number,2);
-            $number = bcsub(bcsub($value['number'], $p_re,2), $p2_re,2);
+            $p2_re = bcsub($p2,$p1_return_number,4);
+            $number = bcsub(bcsub($value['number'], $p_re,4), $p2_re,4);
 
             if($number <= 0) continue;
 
@@ -682,7 +718,8 @@ class OutBoundOrderService extends Service
         foreach ($sub as $value){
             $key = $value['product_id'] . ',' . $value['storehouse_id'];
             if(isset($product_save[$key])){
-                $product_save[$key] += $value['number'];
+                $tmp = bcadd($value['number'], $product_save[$key],4);
+                $product_save[$key] = $tmp;
             }else{
                 $product_save[$key] = $value['number'];
             }
@@ -710,7 +747,7 @@ class OutBoundOrderService extends Service
             foreach ($purchase as $p_v){
                 //必须校验的内容
                 if(empty($p_v['number'])) return [false, '订单产品数量不能为空'];
-                $res = $this->checkNumber($p_v['number']);
+                $res = $this->checkNumber($p_v['number'],4);
                 if(! $res) return [false,'请输入正确的订单产品数量'];
                 if(empty($p_v['product_id'])) return [false, '订单产品ID不能为空'];
                 if(! isset($p_v['from_order_type']) || ! in_array($p_v['from_order_type'], PurchaseOrderInfoForOutBound::from_type)) return [false, '来源单据类型不存在或不正确'];
@@ -789,7 +826,7 @@ class OutBoundOrderService extends Service
             $total = $value['total'];
             $p_tmp = $purchase_count[$product_id] ?? 0;
             $i_tmp = $inventory_count[$product_id] ?? 0;
-            $count_tmp = bcadd($p_tmp, $i_tmp, 2);
+            $count_tmp = bcadd($p_tmp, $i_tmp, 4);
 
             if(floatval($total) != floatval($count_tmp)) return [false, '出库数量需等于来源单据选择产品数量'];
         }

+ 16 - 7
app/Service/ProductInventoryService.php

@@ -38,7 +38,7 @@ class ProductInventoryService extends Service
         $return = [];
         if(! empty($array)){
             foreach ($array as $value){
-                $num = bcsub($value['number'], $value['lock_number'],2);
+                $num = bcsub($value['number'], $value['lock_number'],4);
 
                 $return[] = [
                     'id' => $value['id'],
@@ -150,8 +150,10 @@ class ProductInventoryService extends Service
 
             //校验 =》 锁定库存
             $save_data = $product_save[$key] ?? 0;//已保存数量
-            $tmp_lock = ($stock_product['lock_number'] > 0 ? $stock_product['lock_number'] : 0) - $save_data;
-            $number = $stock_product['number'] - ($tmp_lock > 0 ? $tmp_lock : 0);
+            $tmp_lock = $stock_product['lock_number'] > 0 ? $stock_product['lock_number'] : 0;
+            $tmp_lock = bcsub($tmp_lock, $save_data, 4);
+            if($tmp_lock <= 0) $tmp_lock = 0;
+            $number = bcsub($stock_product['number'], $tmp_lock,4);
             if($value > $number) return [false, $pro_title. '数量不足,当前仓库:'. $storehouse_title . '的有效库存数量:' . $number];
         }
 
@@ -161,7 +163,7 @@ class ProductInventoryService extends Service
     //现存量
     public function productInventoryListCommon($data,$user, $field = []){
         if(empty($field)){
-            $field = ['a.product_id','a.id','a.number','b.title','b.code','b.product_category_id','b.unit','b.bar_code','a.crt_time','a.storehouse_id','a.top_depart_id'];
+            $field = ['a.product_id','a.id','a.number','b.title','b.code','b.product_category_id','b.unit','b.bar_code','a.crt_time','a.storehouse_id','a.top_depart_id','b.unit_2','b.main_number','b.second_number'];
         }
 
         $model = ProductInventory::ATopClear($user,$data);
@@ -221,7 +223,7 @@ class ProductInventoryService extends Service
         $category = ProductCategory::whereIn('id',array_column($data['data'],'product_category_id'))
             ->pluck('title','id')
             ->toArray();
-        $basic_map = BasicType::whereIn('id',array_unique(array_column($data['data'],'unit')))
+        $basic_map = BasicType::where('type',BasicType::type_20)
             ->pluck('title','id')
             ->toArray();
         $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
@@ -230,6 +232,13 @@ class ProductInventoryService extends Service
         $depart_map = Depart::whereIn('id',array_unique(array_column($data['data'],'top_depart_id')))->pluck('title','id')->toArray();
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['unit_title'] = $basic_map[$value['unit']] ?? '';
+            $data['data'][$key]['unit_2_title'] = $basic_map[$value['unit_2']] ?? '';
+            $tmp = 0;
+            if(! empty(floatval($value['main_number'])) && ! empty(floatval($value['second_number']))){
+                $result = $value['number'] / $value['main_number'] * $value['second_number'];
+                $tmp = round($result, 1); // 四舍五入保留1位
+            }
+            $data['data'][$key]['number_2'] = $tmp;
             $data['data'][$key]['product_category_title'] = $category[$value['product_category_id']] ?? '';
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']):'';
             $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
@@ -329,12 +338,12 @@ class ProductInventoryService extends Service
                     $data[$key]['start_number'] = 0;
                 }
                 $tmp = $data[$key]['start_number'] + $value['in_number'] + $value['out_number'];
-                $data[$key]['end_number'] = round($tmp,2);
+                $data[$key]['end_number'] = round($tmp,4);
                 $roll_tmp[$keys] = $data[$key]['end_number'];
             }else{
                 $data[$key]['start_number'] = $roll_tmp[$keys];
                 $tmp = $data[$key]['start_number'] + $value['in_number'] + $value['out_number'];
-                $data[$key]['end_number'] = round($tmp,2);
+                $data[$key]['end_number'] = round($tmp,4);
                 $roll_tmp[$keys] = $data[$key]['end_number'];
             }
 

+ 41 - 6
app/Service/ProductService.php

@@ -609,9 +609,7 @@ class ProductService extends Service
     }
 
     public function productCommon($data,$user, $field = []){
-        if(empty($field)){
-            $field = ['title','id','product_category_id','code','size','unit','bar_code','retail_price','cost','state','crt_id','crt_time','mark','depart_id','top_depart_id','install_time','product_attribute','is_use','build_fee','item_code'];
-        }
+        if(empty($field)) $field = Product::$field;
 
         $model = Product::ProductClear($user,$data);
         $model = $model->where('del_time',0)
@@ -688,9 +686,10 @@ class ProductService extends Service
     }
 
     public function productList($data,$user){
+        $field = Product::$field;
         $model = Product::ProductClear($user,$data);
         $model = $model->where('del_time',0)
-            ->select('title','id','product_category_id','code','size','unit','bar_code','retail_price','cost','state','crt_id','crt_time','mark','depart_id','top_depart_id','install_time','product_attribute','is_use','build_fee','item_code')
+            ->select($field)
             ->where('is_use', Product::is_use_one)
             ->orderby('product_attribute', 'desc')
             ->orderby('id', 'desc');
@@ -853,7 +852,8 @@ class ProductService extends Service
             ->get()
             ->toArray();
         $category = array_column($category,null,'id');
-        $basic_map = BasicType::whereIn('id',array_unique(array_column($data['data'],'unit')))
+        $array = array_unique(array_merge_recursive(array_column($data['data'],'unit'),array_column($data['data'],'unit_2')));
+        $basic_map = BasicType::whereIn('id',$array)
             ->orWhere('type',BasicType::type_22)
             ->pluck('title','id')
             ->toArray();
@@ -920,7 +920,11 @@ class ProductService extends Service
             $data['data'][$key]['product_category_name'] = $category_tmp['title'] ?? '';
             $data['data'][$key]['is_edit_unit_price'] = $category_tmp['is_edit_unit_price'] ?? 0;
             $data['data'][$key]['state_name'] = Product::$state[$value['state']] ?? '';
-            $data['data'][$key]['unit_name'] = $basic_map[$value['unit']] ?? '';
+            $data['data'][$key]['unit_title'] = $basic_map[$value['unit']] ?? '';
+            $data['data'][$key]['unit_2_title'] = $basic_map[$value['unit_2']] ?? '';
+            $str = "";
+            if(! empty(floatval($value['main_number']))) $str = $value['main_number'] . " : " . $value['second_number'];
+            $data['data'][$key]['change_number'] = $str;
             $data['data'][$key]['belong_to'] = $depart_map[$value['top_depart_id']] ?? '';
             $data['data'][$key]['product_attribute_title'] = Product::$product_attribute[$value['product_attribute']] ?? "";
             $data['data'][$key]['color'] = Product::$product_attribute_color[$value['product_attribute']] ?? [];
@@ -1062,6 +1066,37 @@ class ProductService extends Service
         return [true, ''];
     }
 
+    public function batchUnitInfo($data){
+        if(empty($data['product_id'])) return [false, '请选择产品'];
+        if(! isset($data['main_number'])) return [false, '请填写主单位转换数字'];
+        $res = $this->checkNumber($data['main_number'],1);
+        if(! $res) return [false,'主单位转换数字请输入不超过一位小数并且大于等于0的数值'];
+
+        $unit_2 = $data['unit_2'] ?? 0;
+        if(! isset($data['second_number'])) return [false, '请填写副单位转换数字'];
+        $res = $this->checkNumber($data['second_number'],1);
+        if(! $res) return [false,'副单位转换数字请输入不超过一位小数并且大于等于0的数值'];
+
+        try {
+            DB::beginTransaction();
+
+            Product::where('del_time',0)
+                ->whereIn('id', $data['product_id'])
+                ->update([
+                    'unit_2' => $unit_2,
+                    'main_number' => $data['main_number'],
+                    'second_number' => $data['second_number'],
+                ]);
+
+            DB::commit();
+        }catch (\Throwable $exception){
+            DB::rollBack();
+            return [false, $exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
     //获取产品字典
     public function getProductDetail($product_id = []){
         if(empty($product_id)) return [];

+ 12 - 12
app/Service/PurchaseOrderService.php

@@ -868,10 +868,10 @@ class PurchaseOrderService extends Service
         $purchase_product_outbound_map = [];
         foreach ($purchase_product_outbound as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
-            $tmp = bcsub($value['number'],$value['return_number'],2);
+            $tmp = bcsub($value['number'],$value['return_number'],4);
             if($tmp <= 0) continue;
             if(isset($purchase_product_outbound_map[$key])){
-                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,2);
+                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,4);
                 $purchase_product_outbound_map[$key] = $total_number;
             }else{
                 $purchase_product_outbound_map[$key] = $tmp;
@@ -902,7 +902,7 @@ class PurchaseOrderService extends Service
 
                 $key = $purchase_tmp_id . $value['product_id'];
                 if(isset($product_save[$key])){
-                    $tmp = bcadd($product_save[$key], $value['number'],2);
+                    $tmp = bcadd($product_save[$key], $value['number'],4);
                     $product_save[$key] = $tmp;
                 }else{
                     $product_save[$key] = $value['number'];
@@ -918,8 +918,8 @@ class PurchaseOrderService extends Service
 
             //最终采购单下某个产品的实际数量
 //            $number = bcsub($value['number'], $value['outbound_number'],2);
-            $number = bcsub($value['number'], $purchase_number_lock_tmp,2);
-            $number = bcsub($number,$return_number_tmp,2);
+            $number = bcsub($value['number'], $purchase_number_lock_tmp,4);
+            $number = bcsub($number,$return_number_tmp,4);
 
             if($number <= 0) continue;
 //            $tmp = $map[$value['product_id']] ?? [];
@@ -960,7 +960,7 @@ class PurchaseOrderService extends Service
         foreach ($purchase_product as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
             if(isset($purchase_product_map[$key])){
-                $total_number = bcadd($purchase_product_map[$key], $value['number'],2);
+                $total_number = bcadd($purchase_product_map[$key], $value['number'],4);
                 $purchase_product_map[$key] = $total_number;
             }else{
                 $purchase_product_map[$key] = $value['number'];
@@ -981,10 +981,10 @@ class PurchaseOrderService extends Service
         $purchase_product_outbound_map = [];
         foreach ($purchase_product_outbound as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
-            $tmp = bcsub($value['number'],$value['return_number'],2);
+            $tmp = bcsub($value['number'],$value['return_number'],4);
             if($tmp <= 0) continue;
             if(isset($purchase_product_outbound_map[$key])){
-                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,2);
+                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,4);
                 $purchase_product_outbound_map[$key] = $total_number;
             }else{
                 $purchase_product_outbound_map[$key] = $tmp;
@@ -1014,7 +1014,7 @@ class PurchaseOrderService extends Service
 
                 $key = $purchase_tmp_id . $value['product_id'];
                 if(isset($product_save[$key])){
-                    $tmp = bcadd($product_save[$key], $value['number'],2);
+                    $tmp = bcadd($product_save[$key], $value['number'],4);
                     $product_save[$key] = $tmp;
                 }else{
                     $product_save[$key] = $value['number'];
@@ -1037,14 +1037,14 @@ class PurchaseOrderService extends Service
 
                 //最终采购单下某个产品的实际数量
 //                $number = bcsub($value['number'], $value['outbound_number'],2);
-                $number = bcsub($total_tmp, $purchase_number_lock_tmp,2);
-                $number = bcsub($number,$return_number_tmp,2);
+                $number = bcsub($total_tmp, $purchase_number_lock_tmp,4);
+                $number = bcsub($number,$return_number_tmp,4);
 
                 //比较
                 if($number < $f_v['number']) return [false, "采购单:" . $f_v['order_number'] . "实际可以出库的数量" . $number];
 
                 if(isset($count[$value['product_id']])){
-                    $num_tmp = bcadd($count[$value['product_id']], $f_v['number'],2);
+                    $num_tmp = bcadd($count[$value['product_id']], $f_v['number'],4);
                     $count[$value['product_id']] = $num_tmp;
                 }else{
                     $count[$value['product_id']] = $f_v['number'];

+ 32 - 12
app/Service/ReturnExchangeOrderService.php

@@ -59,6 +59,7 @@ class ReturnExchangeOrderService extends Service
                             'price' => $value['price'],
                             'final_amount' => $value['final_amount'] ?? 0,
                             'return_exchange_price' => $value['return_exchange_price'],
+                            'number_2' => $value['number_2'] ?? 0,
                         ];
                     }
                     ReturnExchangeOrderProductInfo::insert($sub);
@@ -151,6 +152,7 @@ class ReturnExchangeOrderService extends Service
                             'price' => $value['price'],
                             'final_amount' => $value['final_amount'] ?? 0,
                             'return_exchange_price' => $value['return_exchange_price'],
+                            'number_2' => $value['number_2'] ?? 0,
                         ];
                     }
                     ReturnExchangeOrderProductInfo::insert($sub);
@@ -233,16 +235,23 @@ class ReturnExchangeOrderService extends Service
         $info = ReturnExchangeOrderProductInfo::where('del_time',0)
             ->where('return_exchange_id',$data['id'])
             ->get()->toArray();
-        $basic_price = BasicType::whereIn('id',array_unique(array_column($info,'basic_type_id')))->pluck('title','id')->toArray();
+        $basic_price = BasicType::whereIn('id',array_unique(array_column($info,'basic_type_id')))
+            ->orWhere('type',BasicType::type_20)
+            ->pluck('title','id')->toArray();
         $map = (new ProductService())->getProductDetail(array_column($info,'product_id'));
         foreach ($info as $value){
             $tmp = $map[$value['product_id']] ?? [];
             $value['title'] = $tmp['title'] ?? "";
             $value['code'] = $tmp['code'] ?? "";
             $value['size'] = $tmp['size'] ?? "";
-            $value['unit'] = $tmp['unit'] ?? "";
+            $value['unit'] = $tmp['unit'] ?? 0;
+            $value['unit_2'] = $tmp['unit_2'] ?? 0;
+            $value['unit_title'] = $basic_price[$value['unit']] ?? "";
+            $value['unit_2_title'] = $basic_price[$value['unit_2']] ?? "";
             $value['bar_code'] = $tmp['bar_code'] ?? "";
             $value['basic_type_title'] = $basic_price[$value['basic_type_id']] ?? "";
+            $value['main_number'] = $tmp['main_number'] ?? 0;
+            $value['second_number'] = $tmp['second_number'] ?? 0;
             if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
                 $order['product_one'][] = $value;
             }else{
@@ -590,10 +599,15 @@ class ReturnExchangeOrderService extends Service
             if(empty($data['product_one'])) return [false,'退货产品不能为空'];
             foreach ($data['product_one'] as $value){
                 if(empty($value['number'])) return [false,'退货产品数量不能为空'];
-                $res = $this->checkNumber($value['number']);
+                if(! empty($value['number_2'])){
+                    $res = $this->checkNumber($value['number_2'],1);
+                    if(! $res) return [false,'副单位产品数量请输入不超过一位小数并且大于0的数值'];
+                }
+                $res = $this->checkNumber($value['number'],4);
                 if(! $res) return [false,'请输入正确的退货产品数量'];
                 if(isset($return_submit_add[$value['product_id']])){
-                    $return_submit_add[$value['product_id']] += $value['number'];
+                    $tmp = bcadd($value['number'], $return_submit_add[$value['product_id']],4);
+                    $return_submit_add[$value['product_id']] = $tmp;
                 }else{
                     $return_submit_add[$value['product_id']] = $value['number'];
                 }
@@ -709,7 +723,8 @@ class ReturnExchangeOrderService extends Service
         foreach ($sub as $value){
             $key = $value['product_id'] . ',' . $value['storehouse_id'];
             if(isset($product_save[$key])){
-                $product_save[$key] += $value['number'];
+                $tmp = bcadd($value['number'], $product_save[$key],4);
+                $product_save[$key] = $tmp;
             }else{
                 $product_save[$key] = $value['number'];
             }
@@ -788,7 +803,8 @@ class ReturnExchangeOrderService extends Service
             ->get()->toArray();
         foreach ($sub as $value){
             if(isset($product_save[$value['product_id']])){
-                $product_save[$value['product_id']] += $value['number'];
+                $tmp = bcadd($value['number'], $product_save[$value['product_id']],4);
+                $product_save[$value['product_id']] = $tmp;
             }else{
                 $product_save[$value['product_id']] = $value['number'];
             }
@@ -801,9 +817,11 @@ class ReturnExchangeOrderService extends Service
         foreach ($sales_product as $value){
             $product_save_tmp = $product_save[$value['product_id']] ?? 0;
             if(isset($sales_order_product[$value['product_id']])){
-                $sales_order_product[$value['product_id']] += $value['number'];
+                $tmp = bcadd($value['number'], $sales_order_product[$value['product_id']],4);
+                $sales_order_product[$value['product_id']] = $tmp;
             }else{
-                $sales_order_product[$value['product_id']] = $value['number'] - $product_save_tmp;
+                $tmp1 = bcsub($value['number'], $product_save_tmp,4);
+                $sales_order_product[$value['product_id']] = $tmp1;
             }
         }
 
@@ -837,7 +855,8 @@ class ReturnExchangeOrderService extends Service
             ->get()->toArray();
         foreach ($sub as $value){
             if(isset($product_save[$value['product_id']])){
-                $product_save[$value['product_id']] += $value['number'];
+                $tmp = bcadd($value['number'], $product_save[$value['product_id']],4);
+                $product_save[$value['product_id']] = $tmp;
             }else{
                 $product_save[$value['product_id']] = $value['number'];
             }
@@ -852,7 +871,8 @@ class ReturnExchangeOrderService extends Service
         $out_bound_map = [];
         foreach ($out_bound as $value){
             if(isset($out_bound_map[$value['product_id']])){
-                $out_bound_map[$value['product_id']] += $value['number'];
+                $tmp = bcadd($value['number'], $out_bound_map[$value['product_id']],4);
+                $out_bound_map[$value['product_id']] = $tmp;
             }else{
                 $out_bound_map[$value['product_id']] = $value['number'];
             }
@@ -868,8 +888,8 @@ class ReturnExchangeOrderService extends Service
             if(isset($sales_order_product[$value['product_id']])){
                 $sales_order_product[$value['product_id']] += $value['number'];
             }else{
-                $number = bcsub($value['number'], $product_save_tmp,2);
-                $number = bcsub($number, $out_bound_tmp,2);
+                $number = bcsub($value['number'], $product_save_tmp,4);
+                $number = bcsub($number, $out_bound_tmp,4);
                 $sales_order_product[$value['product_id']] = $number;
             }
         }

+ 28 - 6
app/Service/SalesOrderService.php

@@ -167,6 +167,7 @@ class SalesOrderService extends Service
                         'sports_bag_id' => $value['sports_bag_id'] ?? 0,
                         'sports_bag_product_info_id' => $sports_bag_product_info_id,
                         'rate' => $value['rate'] ?? 0,
+                        'number_2' => $value['number_2'] ?? 0,
                     ];
                 }
                 SalesOrderProductInfo::insert($insert);
@@ -360,6 +361,7 @@ class SalesOrderService extends Service
                         'sports_bag_id' => $value['sports_bag_id'] ?? 0,
                         'sports_bag_product_info_id' => $sports_bag_product_info_id,
                         'rate' => $value['rate'] ?? 0,
+                        'number_2' => $value['number_2'] ?? 0,
                     ];
                 }
                 SalesOrderProductInfo::insert($insert);
@@ -761,7 +763,7 @@ class SalesOrderService extends Service
         }
 
         $basic_price = BasicType::whereIn('id',array_unique(array_column($sales_p_info,'basic_type_id')))
-            ->orWhere('type',20)
+            ->orWhere('type',BasicType::type_20)
             ->pluck('title','id')
             ->toArray();
         $map = (new ProductService())->getProductDetail(array_column($sales_p_info,'product_id'));
@@ -792,7 +794,11 @@ class SalesOrderService extends Service
                     $bag_pro_tmp[$k]['code'] = $tmp['code'] ?? "";
                     $bag_pro_tmp[$k]['size'] = $tmp['size'] ?? "";
                     $bag_pro_tmp[$k]['unit'] = $tmp['unit'] ?? "";
-                    $bag_pro_tmp[$k]['unit'] = $basic_price[$value['unit']] ?? "";
+                    $bag_pro_tmp[$k]['unit_title'] = $basic_price[$value['unit']] ?? "";
+                    $bag_pro_tmp[$k]['unit_2'] = $tmp['unit_2'] ?? "";
+                    $bag_pro_tmp[$k]['unit_2_title'] = $basic_price[$value['unit_2']] ?? "";
+                    $bag_pro_tmp[$k]['main_number'] = $tmp['main_number'] ?? 0;
+                    $bag_pro_tmp[$k]['second_number'] = $tmp['second_number'] ?? 0;
                     $bag_pro_tmp[$k]['bar_code'] = $tmp['bar_code'] ?? "";
                     $bag_pro_tmp[$k]['mark'] = $mark ?? "";
                     $sports_bag_pro[$value['sports_bag_id']][] = $bag_pro_tmp[$k];
@@ -803,6 +809,10 @@ class SalesOrderService extends Service
                 $value['size'] = $tmp['size'] ?? "";
                 $value['unit'] = $tmp['unit'] ?? "";
                 $value['unit_title'] = $basic_price[$value['unit']] ?? "";
+                $value['unit_2'] = $tmp['unit_2'] ?? "";
+                $value['unit_2_title'] = $basic_price[$value['unit_2']] ?? "";
+                $value['main_number'] = $tmp['main_number'] ?? 0;
+                $value['second_number'] = $tmp['second_number'] ?? 0;
                 $value['bar_code'] = $tmp['bar_code'] ?? "";
                 $value['basic_type_title'] = $basic_price[$value['basic_type_id']] ?? "";
                 $product[] = $value;
@@ -1174,8 +1184,13 @@ class SalesOrderService extends Service
         if(! empty($data['product'])){
             foreach ($data['product'] as $value){
                 if(empty($value['number'])) return [false,'产品数量不能为空'];
-                $res = $this->checkNumber($value['number']);
-                if(! $res) return [false,'请输入正确的产品数量'];
+                if(! empty($value['number_2'])){
+                    $res = $this->checkNumber($value['number_2'],1);
+                    if(! $res) return [false,'副单位产品数量请输入不超过一位小数并且大于0的数值'];
+                }
+                $res = $this->checkNumber($value['number'],4);
+                if(! $res) return [false,'产品数量请输入不超过四位小数并且大于0的数值'];
+
                 if(! empty($value['sports_bag_id']) && ! in_array($value['sports_bag_id'], $sports_bag_id)) $sports_bag_id[] = $value['sports_bag_id'];
             }
         }
@@ -1499,7 +1514,6 @@ class SalesOrderService extends Service
     public function countData($column = "", $data, $user){
         if(empty($column) || empty($data['from_wx'])) return [0, 0];
 
-
         // 获取今天的开始和结束时间戳
         $todayStart = Carbon::today()->startOfDay()->timestamp;
         $todayEnd = Carbon::today()->endOfDay()->timestamp;
@@ -1528,7 +1542,10 @@ class SalesOrderService extends Service
         $sales_p_info = SalesOrderProductInfo::where('del_time',0)
             ->whereIn('sales_order_id',$data_id)
             ->get()->toArray();
-        $basic_price = BasicType::whereIn('id',array_unique(array_column($sales_p_info,'basic_type_id')))->pluck('title','id')->toArray();
+        $basic_price = BasicType::whereIn('id',array_unique(array_column($sales_p_info,'basic_type_id')))
+            ->orWhere('type',BasicType::type_20)
+            ->pluck('title','id')
+            ->toArray();
         $map = (new ProductService())->getProductDetail(array_column($sales_p_info,'product_id'));
 
         foreach ($sales_p_info as $value){
@@ -1538,6 +1555,11 @@ class SalesOrderService extends Service
             $value['code'] = $tmp['code'] ?? "";
             $value['size'] = $tmp['size'] ?? "";
             $value['unit'] = $tmp['unit'] ?? "";
+            $value['unit_title'] = $basic_price[$value['unit']] ?? "";
+            $value['unit_2'] = $tmp['unit_2'] ?? "";
+            $value['unit_2_title'] = $basic_price[$value['unit_2']] ?? "";
+            $value['main_number'] = $tmp['main_number'] ?? 0;
+            $value['second_number'] = $tmp['second_number'] ?? 0;
             $value['bar_code'] = $tmp['bar_code'] ?? "";
             $value['basic_type_title'] = $basic_price[$value['basic_type_id']] ?? "";
             $value['install_time'] = $tmp['install_time'] ?? 0;

+ 9 - 1
config/header/17.php

@@ -43,9 +43,17 @@ return [
         'value' => '规格',
     ],
     [
-        'key' => 'unit_name',
+        'key' => 'unit_title',
         'value' => '单位',
     ],
+    [
+        'key' => 'unit_2_title',
+        'value' => '副单位',
+    ],
+    [
+        'key' => 'change_number',
+        'value' => '单位转换比例',
+    ],
     [
         'key' => 'retail_price',
         'value' => '零售价',

+ 1 - 0
routes/api.php

@@ -181,6 +181,7 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('productList2', 'Api\ProductController@productList2');
     $route->any('batchUploadImg', 'Api\ProductController@batchUploadImg')->middleware('OssFileDeal');
     $route->any('batchBuildFee', 'Api\ProductController@batchBuildFee');
+    $route->any('batchUnitInfo', 'Api\ProductController@batchUnitInfo');
     $route->any('updateTopStock', 'Api\ProductController@updateTopStock');
     $route->any('productUpdateByItemCode', 'Api\ProductController@productUpdateByItemCode');
     $route->any('productUpdateProductBasicInfo', 'Api\ProductController@productUpdateProductBasicInfo');