diff --git a/app/admin/controller/inventory_transfer_order/InventoryTransferOrderController.php b/app/admin/controller/inventory_transfer_order/InventoryTransferOrderController.php index 765e0680c..fbd5a03e6 100644 --- a/app/admin/controller/inventory_transfer_order/InventoryTransferOrderController.php +++ b/app/admin/controller/inventory_transfer_order/InventoryTransferOrderController.php @@ -7,7 +7,8 @@ use app\admin\controller\BaseAdminController; use app\admin\lists\inventory_transfer_order\InventoryTransferOrderLists; use app\admin\logic\inventory_transfer_order\InventoryTransferOrderLogic; use app\admin\validate\inventory_transfer_order\InventoryTransferOrderValidate; - +use app\common\service\xlsx\InventoryTransferXlsx; +use app\common\model\inventory_transfer\InventoryTransfer; /** * 商品调拨订单控制器 @@ -39,7 +40,7 @@ class InventoryTransferOrderController extends BaseAdminController public function add() { $params = $this->request->post(); - $result = InventoryTransferOrderLogic::add($params,$this->adminId); + $result = InventoryTransferOrderLogic::add($params, $this->adminId); if (true === $result) { return $this->success('添加成功', [], 1, 1); } @@ -104,4 +105,32 @@ class InventoryTransferOrderController extends BaseAdminController return $this->success('删除成功', [], 1, 1); } -} \ No newline at end of file + + /** + * @notes 审核商品调拨订单 + * @author admin + * @date 2025/01/24 09:59 + */ + public function insert() + { + $params = $this->request->post(); + $result = InventoryTransferOrderLogic::insert($params); + if (true == $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(InventoryTransferOrderLogic::getError()); + } + + + /** + * 导出调拨表格 + */ + public function export() + { + $params = $this->request->post(); + $xlsx = new InventoryTransferXlsx(); + $order = InventoryTransferOrderLogic::detail($params); + $file_path = $xlsx->export($order['product_list'], $order); + return $this->success('导出成功', ['url' => $file_path]); + } +} diff --git a/app/admin/logic/inventory_transfer_order/InventoryTransferOrderLogic.php b/app/admin/logic/inventory_transfer_order/InventoryTransferOrderLogic.php index 7d9c42ebd..b796c5fc9 100644 --- a/app/admin/logic/inventory_transfer_order/InventoryTransferOrderLogic.php +++ b/app/admin/logic/inventory_transfer_order/InventoryTransferOrderLogic.php @@ -32,9 +32,9 @@ class InventoryTransferOrderLogic extends BaseLogic * @author admin * @date 2025/01/24 09:59 */ - public static function add(array $params,$admin_id): bool + public static function add(array $params, $admin_id): bool { - $types=$params['types']??0; + $types = $params['types'] ?? 0; if (empty($params['product_arr'])) { throw new BusinessException('请选择商品'); } @@ -76,21 +76,21 @@ class InventoryTransferOrderLogic extends BaseLogic 'create_time' => time(), ]; } - $order=InventoryTransferOrder::create([ + $order = InventoryTransferOrder::create([ 'order_id' => getNewOrderId('DB'), 'one_type' => $params['one_type'], 'two_type' => $params['two_type'], 'one_id' => $params['one_id'], 'two_id' => $params['two_id'], 'types' => $types, - 'mark' => $params['mark']??'', + 'mark' => $params['mark'] ?? '', 'status' => ($params['two_type'] == 2 && $types == 0) ? 0 : 1, ]); foreach ($insert as $k => $v) { $insert[$k]['oid'] = $order['id']; } InventoryTransfer::insertAll($insert); - if($types==0 && $params['two_type']==1){ + if ($types == 0 && $params['two_type'] == 1) { self::audit($params, $insert, $admin_id); } @@ -108,17 +108,17 @@ class InventoryTransferOrderLogic extends BaseLogic $products = InventoryTransfer::where('oid', $order['id'])->select()->toArray(); } foreach ($products as $v) { - if($order['one_type']==1){ - $find=StoreBranchProduct::where('product_id', $v['product_id'])->where('store_id', $order['one_id'])->find(); - $find->save(['stock' =>bcsub( $find['stock'],$v['nums'],2)]); - SqlChannelLog('StoreBranchProduct', $find['id'], $v['nums'], -1, Request()->url(),$admin_id); + if ($order['one_type'] == 1) { + $find = StoreBranchProduct::where('product_id', $v['product_id'])->where('store_id', $order['one_id'])->find(); + $find->save(['stock' => bcsub($find['stock'], $v['nums'], 2)]); + SqlChannelLog('StoreBranchProduct', $find['id'], $v['nums'], -1, Request()->url(), $admin_id); } elseif ($order['one_type'] == 2) { - $find=WarehouseProductStorege::where('product_id', $v['product_id'])->where('warehouse_id', $order['one_id'])->find(); - $find->save(['nums' =>bcsub( $find['nums'],$v['nums'],2)]); - SqlChannelLog('WarehouseProductStorege', $find['id'], $v['nums'], -1, Request()->url(),$admin_id); + $find = WarehouseProductStorege::where('product_id', $v['product_id'])->where('warehouse_id', $order['one_id'])->find(); + $find->save(['nums' => bcsub($find['nums'], $v['nums'], 2)]); + SqlChannelLog('WarehouseProductStorege', $find['id'], $v['nums'], -1, Request()->url(), $admin_id); } - if($order['two_type']==1){ - $find=StoreBranchProduct::where('product_id', $v['product_id'])->where('store_id', $order['two_id'])->find(); + if ($order['two_type'] == 1) { + $find = StoreBranchProduct::where('product_id', $v['product_id'])->where('store_id', $order['two_id'])->find(); if (empty($find)) { $storeProduct = StoreProduct::field('top_cate_id,two_cate_id,cate_id,store_name,image,price,vip_price,cost,purchase,keyword,bar_code,store_info,rose,product_type,unit,batch,store_batch,label_id,is_lack,manufacturer_information')->where('id', $v['product_id'])->find()->toArray(); $find = new StoreBranchProduct(); @@ -128,11 +128,11 @@ class InventoryTransferOrderLogic extends BaseLogic $find->setAttrs($storeProduct); $find->save(); } else { - $find->save(['stock' =>bcadd( $find['stock'],$v['nums'],2)]); + $find->save(['stock' => bcadd($find['stock'], $v['nums'], 2)]); } - SqlChannelLog('StoreBranchProduct', $find['id'], $v['nums'], 1, Request()->url(),$admin_id); + SqlChannelLog('StoreBranchProduct', $find['id'], $v['nums'], 1, Request()->url(), $admin_id); } elseif ($order['two_type'] == 2) { - $find=WarehouseProductStorege::where('product_id', $v['product_id'])->where('warehouse_id', $order['two_id'])->find(); + $find = WarehouseProductStorege::where('product_id', $v['product_id'])->where('warehouse_id', $order['two_id'])->find(); if (empty($find)) { $find = new WarehouseProductStorege(); $find->warehouse_id = $order['two_id']; @@ -140,9 +140,9 @@ class InventoryTransferOrderLogic extends BaseLogic $find->nums = $v['nums']; $find->save(); } else { - $find->save(['nums' =>bcadd( $find['nums'],$v['nums'],2)]); + $find->save(['nums' => bcadd($find['nums'], $v['nums'], 2)]); } - SqlChannelLog('WarehouseProductStorege', $find['id'], $v['nums'], 1, Request()->url(),$admin_id); + SqlChannelLog('WarehouseProductStorege', $find['id'], $v['nums'], 1, Request()->url(), $admin_id); } InventoryTransferOrder::where('id', $order['id'])->update(['status' => 1]); @@ -209,28 +209,49 @@ class InventoryTransferOrderLogic extends BaseLogic */ public static function detail($params): array { - $data= InventoryTransferOrder::findOrEmpty($params['id']); - $type_name=''; - if($data->one_type==1){ - $data->one_name=SystemStore::where('id',$data->one_id)->value('name'); - $type_name='门店转'; - }else{ - $data->one_name=Warehouse::where('id',$data->one_id)->value('name'); - $type_name='仓库转'; + $data = InventoryTransferOrder::findOrEmpty($params['id']); + $type_name = ''; + if ($data->one_type == 1) { + $data->one_name = SystemStore::where('id', $data->one_id)->value('name'); + $type_name = '门店转'; + } else { + $data->one_name = Warehouse::where('id', $data->one_id)->value('name'); + $type_name = '仓库转'; } - if($data->two_type==1){ - $type_name.='门店'; - $data->two_name=SystemStore::where('id',$data->two_id)->value('name'); - }else{ - $type_name.='仓库'; - $data->two_name=Warehouse::where('id',$data->two_id)->value('name'); + if ($data->two_type == 1) { + $type_name .= '门店'; + $data->two_name = SystemStore::where('id', $data->two_id)->value('name'); + } else { + $type_name .= '仓库'; + $data->two_name = Warehouse::where('id', $data->two_id)->value('name'); } - $data->type_name=$type_name; - $data['product_list']=InventoryTransfer::where('oid',$params['id'])->select()->each(function ($item) { - $find= StoreProduct::where('id',$item->product_id)->withTrashed()->field('store_name')->find(); - $item->store_name=$find['store_name']; + $data->type_name = $type_name; + $data['product_list'] = InventoryTransfer::where('oid', $params['id'])->select()->each(function ($item) { + $find = StoreProduct::where('id', $item->product_id)->withTrashed()->field('store_name')->find(); + $item->store_name = $find['store_name'] ?? ''; }) - ->toArray(); + ->toArray(); return $data->toArray(); } -} \ No newline at end of file + /** + * 插入调拨订单 + */ + public static function insert($params) + { + Db::startTrans(); + try { + $find = InventoryTransfer::where('product_id', $params['product_id'])->where('oid', $params['id'])->find()->toArray(); + if ($find) { + unset($find['id']); + $find['nums'] = $params['nums']; + $find['create_time'] = time(); + } + InventoryTransfer::insert($find); + Db::commit(); + return true; + } catch (\Throwable $e) { + Db::rollback(); + throw new BusinessException($e->getMessage()); + } + } +} diff --git a/app/common/service/xlsx/InventoryTransferXlsx.php b/app/common/service/xlsx/InventoryTransferXlsx.php new file mode 100644 index 000000000..898422a31 --- /dev/null +++ b/app/common/service/xlsx/InventoryTransferXlsx.php @@ -0,0 +1,123 @@ +getActiveSheet(); + $sheet->setTitle('调拨订单'); // 设置列宽 + $sheet->getDefaultRowDimension()->setRowHeight(20); // 设置行高 + $sheet->getDefaultColumnDimension()->setWidth(20); // 设置列宽 + $sheet->getPageSetup()->setFitToPage(true); // 自动适应页面大小 + + $sheet->getPageSetup()->setHorizontalCentered(true); // 页面水平居中 + $sheet->getPageSetup()->setVerticalCentered(true); // 页面垂直居中 + $sheet->getPageMargins()->setTop(0.5); // 上边距 + $sheet->getPageMargins()->setBottom(0.5); // 下边距 + $sheet->getPageMargins()->setLeft(0.5); // 左边距 + $sheet->getPageMargins()->setRight(0.5); // 右边距 + $sheet->getPageMargins()->setHeader(0.5); // 页眉边距 + $sheet->getPageMargins()->setFooter(0.5); // 页脚边距 + $sheet->getStyle('A1:G1')->getFont()->setBold(true); // 设置标题字体加粗 + $sheet->getStyle('A1:G1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); // 设置标题水平居中 + $sheet->getStyle('A1:G1')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); // 设置标题垂直居中 + $sheet->getStyle('A2:G2')->getFont()->setBold(true); // 设置标题字体加粗 + $sheet->getStyle('A2:G2')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); // 设置标题水平居中 + // 合并单元格并设置标题 + $sheet->mergeCells('A1:G1')->setCellValue('A1', '调拨订单'); + $sheet->setCellValue('A2', '订单编号'); + $sheet->setCellValue('B2', '转出方'); + $sheet->setCellValue('C2', '方式'); + $sheet->setCellValue('D2', '转入方'); + $sheet->setCellValue('E2', '商品'); + $sheet->setCellValue('F2', '数量'); + $sheet->setCellValue('G2', '创建时间'); + + // 设置列宽 + $sheet->getColumnDimension('A')->setAutoSize(true); + $sheet->getColumnDimension('B')->setAutoSize(true); + $sheet->getColumnDimension('C')->setWidth(20); + $sheet->getColumnDimension('D')->setWidth(20); + $sheet->getColumnDimension('E')->setAutoSize(true); + $sheet->getColumnDimension('F')->setAutoSize(true); + $sheet->getColumnDimension('G')->setAutoSize(true); + // 设置默认的单元格样式 + $defaultStyle = [ + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_CENTER, + 'vertical' => Alignment::VERTICAL_CENTER, + ], + ]; + + $spreadsheet->getDefaultStyle()->applyFromArray($defaultStyle); + + // 写入数据 + $row = 3; + foreach ($data as $item) { + $sheet->setCellValue('A' . $row, $order['order_id']) + ->setCellValue('B' . $row, $order['one_name']) + ->setCellValue('C' . $row, $order['type_name']) + ->setCellValue('D' . $row, $order['two_name']) + ->setCellValue('E' . $row, $item['store_name']) + ->setCellValue('F' . $row, $item['nums']) + ->setCellValue('G' . $row, $item['create_time']); + $row++; + } + + $count = count($data); + // 应用默认样式到整个工作表 + // 设置单元格的样式 + $styleArray = [ + 'font' => [ + 'bold' => true, + 'size' => 16, + ], + ]; + $sheet->getStyle('A1')->applyFromArray($styleArray); + // 定义线框样式 + $styleArray = [ + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => Border::BORDER_THIN, // 线框样式 + 'color' => ['argb' => '000000'], // 线框颜色 + ], + ], + ]; + $sheet->getStyle('A1:G' . ($count + 2))->applyFromArray($styleArray); + // 保存文件到 public 下 + $writer = new Xlsx($spreadsheet); + $url = '/export/' . "调拨订单-" . date('YmdHi') . '.xlsx'; + $file_path = public_path() . $url; + if (!is_dir(dirname($file_path))) { + mkdir(dirname($file_path), 0777, true); + } + $writer->save($file_path); + return getenv('APP_URL') . $url; + + // $writer = new Xlsx($spreadsheet); + // $dir = public_path() . '/export/' . date('Y-m'); + // if (!file_exists($dir)) { + // // 尝试创建目录 + // if (!mkdir($dir)) { + // throw new BusinessException('创建目录失败:/export/' . date('Y-m')); + // } + // } + // $url = $dir . '/' . "调拨订单 " . date('YmdHi') . '.xlsx'; + // $file_path = public_path() . $url; + // if (!is_dir(dirname($file_path))) { + // mkdir(dirname($file_path), 0777, true); + // } + // $writer->save($file_path); + // return getenv('APP_URL') . $url; + } +}