php 生成随机数

记录:随机数抽奖

要求:每次生成3个 1 - 10 之间可重复(或不可重复)的随机数,10次为一轮,每轮要求数字5出现6次、数字4出现3次、…。

提炼需求:
1,可设置最小数、最大数、每次抽奖生成随机数的个数、是否允许重复
2,可设置每轮指定数字的出现次数
3,可设置每轮的抽奖次数

注意:设置项发生变化,则重置游戏

效果图示例:
在这里插入图片描述
在这里插入图片描述

Choujianglog 模型

<?php

namespace app\admin\model\choujiang;

use think\Model;


class Choujianglog extends Model
{

    

    

    // 表名
    protected $name = 'choujiang_log';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'integer';

    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = false;
    protected $deleteTime = false;

    // 追加属性
    protected $append = [

    ];
   

    // 获取抽奖当前轮次
    public function getLunci($choujiang_id, $yilunchoujiagcishu) {
        $lunci = $this->where(['choujiang_id'=>$choujiang_id])->max('lunci');
        if(!$lunci){
            $lunci = 1;
        }
        return $lunci;
    }

    // 获取抽奖接下来的轮次
    public function getnextLunci($choujiang_id, $yilunchoujiagcishu) {
        $lunci = $this->where(['choujiang_id'=>$choujiang_id])->max('lunci');
        if(!$lunci){
            $lunci = 1;
        }
        $choujiangcishu = $this->where(['choujiang_id'=>$choujiang_id, 'lunci'=>$lunci])->group('sign')->count();
        if($choujiangcishu >= $yilunchoujiagcishu){
            $lunci += 1;
        }
        return $lunci;
    }

    // 生成sign
    public function createSign() {
        $str = '123567890123567890123567890';//34个字符
        $str = str_shuffle($str);   //随机地打乱字符串中的所有字符
        $sign = date('YmdHis').substr($str,0,4); //截取字符串
        if($this->where(['sign'=>$sign])->value('sign')){
            $this->createSign();
        }else{
            return $sign;
        }
    }



}

Choujiang模型

<?php

namespace app\admin\model\choujiang;

use think\Model;


class Choujiang extends Model
{

    

    

    // 表名
    protected $name = 'choujiang';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'integer';

    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';
    protected $deleteTime = false;

    // 追加属性
    protected $append = [
        'state_text'
    ];
    

    
    public function getStateList()
    {
        return ['1' => __('State 1'), '2' => __('State 2')];
    }


    public function getStateTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['state']) ? $data['state'] : '');
        $list = $this->getStateList();
        return isset($list[$value]) ? $list[$value] : '';
    }




}

Choujiangset模型

<?php

namespace app\admin\model\choujiang;

use think\Model;


class Choujiangset extends Model
{

    

    

    // 表名
    protected $name = 'choujiang_set';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = false;

    // 定义时间戳字段名
    protected $createTime = false;
    protected $updateTime = false;
    protected $deleteTime = false;

    // 追加属性
    protected $append = [
        'state_text'
    ];
    

    
    public function getStateList()
    {
        return ['1' => __('State 1'), '2' => __('State 2')];
    }


    public function getStateTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['state']) ? $data['state'] : '');
        $list = $this->getStateList();
        return isset($list[$value]) ? $list[$value] : '';
    }




}

代码:

<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Exception;
use think\Validate;
use app\admin\model\choujiang\Choujiang as ChoujiangModel;
use app\admin\model\choujiang\Choujianglog as ChoujianglogModel;
use app\admin\model\choujiang\Choujiangset as ChoujiangsetModel;

/**
 * 随机数接口
 */
class Choujiang extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    protected $yilunchoujiagcishu = 10; //一轮抽奖次数
    protected $default_min_val = 1; //(默认)最小数
    protected $default_max_val = 10; //(默认)最大数
    protected $default_geshu = 3; //(默认)个数
    protected $default_state = 1; //(默认)允许重复:1=是,2=否


    public function _initialize()
    {
        parent::_initialize();

        if(!((new ChoujiangsetModel())->where(['id'=>['>', 0]])->value('id'))){
            (new ChoujiangsetModel())->save([
                'min_val'=>$this->default_min_val,
                'max_val'=>$this->default_max_val,
                'geshu'=>$this->default_geshu,
                'state'=>$this->default_state,
            ]);
        }

        if(!((new ChoujiangModel())->where(['id'=>['>', 0]])->value('id'))){
            $info = (new ChoujiangsetModel())->where(['id'=>['>', 0]])->field('min_val,max_val,geshu,state')->find();
            (new ChoujiangModel())->save([
                'min_val'=>$info['min_val'],
                'max_val'=>$info['max_val'],
                'geshu'=>$info['geshu'],
                'state'=>$info['state'],
            ]);
        }
    }


    /**
     * 生成随机数页面,获取设置
     *
     * @ApiMethod (GET)
     * @ApiHeaders  (name=token, type=string, required=false, description="请求的Token")
     */
    public function getSet()
    {
        try {  
            $info = (new ChoujiangsetModel())->where(['id'=>['>', 0]])->field('min_val,max_val,geshu,state')->find();

            $this->success("OK", [
                'info' => $info,
            ]);

        } catch (Exception $e) {
            $this->error($e->getMessage());
        }
    }

    /**
     * 生成随机数页面,修改设置
     *
     * @ApiMethod (POST)
     * @ApiHeaders  (name=token, type=string, required=false, description="请求的Token")
    //  * @param string $min_val  最小数
    //  * @param string $max_val  最大数
     * @param string $geshu  个数
    //  * @param string $state  允许重复:1=是,2=否
     */
    public function editSet()
    {
        try {  
            $min_val = $this->request->post('min_val/d',1);
            $max_val = $this->request->post('max_val/d',10);
            $geshu = $this->request->post('geshu/d',3);
            $state = $this->request->post('state',1);
            
            if(!in_array($geshu, [1,2,3])){
                $this->error('个数只能设置为1,2,3');
            }
            if($min_val >= $max_val){
                $this->error('最小数应小于最大数');
            }
            if($min_val <= 0 || $max_val <= 0){
                $this->error('最小数和最大数应>0');
            }
            if(!in_array($state, [1,2])){
                $this->error('允许重复只能设置为1,2');
            }

            $info = (new ChoujiangsetModel())->where(['id'=>['>', 0]])->field('min_val,max_val,geshu,state')->find();
            $data = [
                'min_val' => $min_val,
                'max_val' => $max_val,
                'geshu' => $geshu,
                'state' => $state,
            ];
            $info->save($data);
            
            $choujianginfo = (new ChoujiangModel())->where(['id'=>['>', 0]])->field('min_val,max_val,geshu,state')->order('id desc')->find();
            // 若配置修改则重置游戏
            if($choujianginfo['min_val'] != $data['min_val'] || $choujianginfo['max_val'] != $data['max_val'] || $choujianginfo['geshu'] != $data['geshu'] || $choujianginfo['state'] != $data['state']){
                (new ChoujiangModel())->save([
                    'min_val'=>$data['min_val'],
                    'max_val'=>$data['max_val'],
                    'geshu'=>$data['geshu'],
                    'state'=>$data['state'],
                ]);
            }
                    

            $this->success("保存成功", [
                'info' => $data,
            ]);

        } catch (Exception $e) {
            $this->error($e->getMessage());
        }
    }

    
    /**
     * 生成随机数页面,生成随机数
     *
     * @ApiMethod (POST)
     * @ApiHeaders  (name=token, type=string, required=false, description="请求的Token")
     */
    public function choujiang()
    {
        try {  
            $newchoujianginfo = (new ChoujiangModel())->where(['id'=>['>', 0]])->field('id,min_val,max_val,geshu,state,neidingcishu,content')->order('id desc')->find();
            $nextlunci = (new ChoujianglogModel)->getnextLunci($newchoujianginfo['id'], $this->yilunchoujiagcishu); //获取抽奖接下来的轮次
            $min = $newchoujianginfo['min_val'];
            $max = $newchoujianginfo['max_val'];
            $geshu = $newchoujianginfo['geshu'];
            $state = $newchoujianginfo['state'];    
            $neidingcishu = $newchoujianginfo['neidingcishu'];    
            
            // 当前轮次抽奖次数
            $choujiangcishu = (new ChoujianglogModel)->where(['choujiang_id'=>$newchoujianginfo['id'], 'lunci'=>$nextlunci])->group('sign')->count();
            if($choujiangcishu == 0){   //开始新一轮
                
                $numbers = [];   // 生成的数字
                $keyArr = [];   //内定数字

                // 优先将内定数字放入数组
                if($neidingcishu){
                    foreach(json_decode($neidingcishu, true) as $key=>$value){
                        // 生成数字$key,并确保满足条件($value次)
                        for ($i = 0; $i < $value; $i++) {
                            $numbers[] = $key;
                        }
                        $keyArr[] = $key;
                    }
                }

                // 除去内定数字之外的数字集
                $shuziArr = array_values(array_diff(range($min, $max), $keyArr));
                
                // 填补,确保没有超出条件限制
                shuffle($shuziArr); // 打乱数组顺序
                $shuziArrwhile = $shuziArr;
                while (count($numbers) < $geshu*$this->yilunchoujiagcishu) {
                    if(count($shuziArrwhile) <= 0){
                        $shuziArrwhile = $shuziArr;
                    }
                    $shuzi = array_shift($shuziArrwhile);
                    $numbers[] = $shuzi;
                }

                // 打乱数组顺序,确保随机性
                shuffle($numbers);

                // 允许重复:1=是,2=否
                if($state == 1){
                    // 分割数组
                    $newNumbers = array_chunk($numbers, $geshu);
                }else{
                    $newNumbers = [];
                    for ($i = 0; $i < count($numbers); $i += $geshu) {
                        $randomarr = array_values(array_unique(array_slice($numbers, $i, $geshu)));
                        if(count($randomarr) != $geshu){
                            $this->error('抱歉,参数配置错误');
                        }
                        $newNumbers[] = $randomarr;
                    }
                }
                
                $firstArr = array_shift($newNumbers);
            }else{
                $newNumbers = json_decode($newchoujianginfo['content'], true);
                $firstArr = array_shift($newNumbers);
            }

            // 保存抽奖记录
            $choujianglogModel = new ChoujianglogModel();
            $sign = $choujianglogModel->createSign();
            $logData = [];
            foreach($firstArr as $k=>$v){
                $logData[] = [
                    'choujiang_id'=>$newchoujianginfo['id'], 
                    'lunci'=>$nextlunci,
                    'number'=>$v,
                    'sign'=>$sign,
                ];
            }
            $choujianglogModel->allowField(true)->saveAll($logData);

            // 保存剩余待抽奖项
            $newchoujianginfo->save(['content'=>json_encode($newNumbers)]);

            $this->success("OK", [
                'data' => $firstArr,
            ]);

        } catch (Exception $e) {
            $this->error($e->getMessage());
        }
    }
   

    /**
     * 内定数字页面,获取数据
     *
     * @ApiMethod (GET)
     * @ApiHeaders  (name=token, type=string, required=false, description="请求的Token")
     */
    public function getChoujiangSet()
    {
        try {  
            $newchoujianginfo = $this->choujiangset();
            $this->success("OK", [
                'info' => $newchoujianginfo,
            ]);

        } catch (Exception $e) {
            $this->error($e->getMessage());
        }
    }
    
    private function choujiangset() {
        $newchoujianginfo = (new ChoujiangModel())->where(['id'=>['>', 0]])->field('id,min_val,max_val,geshu,state,neidingcishu')->order('id desc')->find();
        $lunci = (new ChoujianglogModel)->getLunci($newchoujianginfo['id'], $this->yilunchoujiagcishu); //获取抽奖当前轮次
        $neidingcishu_arr = [];
        if($newchoujianginfo['neidingcishu']){
            foreach(json_decode($newchoujianginfo['neidingcishu'], true) as $k=>$v){
                $neidingcishu_arr[] = [
                    'shuzi'=>$k,
                    'cishu'=>$v,
                    'chouzhongcishu'=>(new ChoujianglogModel)->where(['choujiang_id'=>$newchoujianginfo['id'], 'lunci'=>$lunci, 'number'=>$k])->count(),
                ];
            }
        }
        $newchoujianginfo['neidingcishu_arr'] = $neidingcishu_arr;
        unset($newchoujianginfo['neidingcishu']);
        $newchoujianginfo['choujiangcishu'] = (new ChoujianglogModel)->where(['choujiang_id'=>$newchoujianginfo['id'], 'lunci'=>$lunci])->group('sign')->count();

        return $newchoujianginfo;
    }


    /**
     * 内定数字页面,设置出现次数
     *
     * @ApiMethod (POST)
     * @ApiHeaders  (name=token, type=string, required=false, description="请求的Token")
     * @param json $neidingcishu  json字符串,例如{"1":"5","2":"3"}
     */
    public function editChoujiangSet()
    {
        try {  
            $neidingcishu = htmlspecialchars_decode($this->request->post('neidingcishu/s', ''));
            $neidingcishu = json_decode($neidingcishu, true);
            // $neidingcishu = $this->request->post()['neidingcishu'];

            $choujianginfo = (new ChoujiangModel())->where(['id'=>['>', 0]])->order('id desc')->find();
            if($neidingcishu){
                $arr = [];
                $max_cishu = $this->yilunchoujiagcishu * $choujianginfo['geshu'];
                $cishu = 0;
                foreach($neidingcishu as $key=>$value){
                    if($key < $choujianginfo['min_val'] || $key > $choujianginfo['max_val']){
                        $this->error('数字应在最小数与最大数之间');
                    }
                    if($choujianginfo['state']==1 && $value > $max_cishu){
                        $this->error('单个数字出现总次数应<='.$max_cishu);
                    }
                    if($choujianginfo['state']==2 && $value > $this->yilunchoujiagcishu){
                        $this->error('单个数字出现总次数应<='.$this->yilunchoujiagcishu);
                    }
                    $cishu += $value;
                    if($cishu > $max_cishu){
                        $this->error('数字出现总次数应<='.$max_cishu);
                    }
                    $arr[$key] = $value;
                }
                if($choujianginfo['min_val']+1 == $choujianginfo['max_val'] && count($arr)==2 && $cishu != $max_cishu){
                    $this->error('数字出现总次数应=='.$max_cishu);
                }
                $neidingcishu_str = json_encode($arr);
            }else{
                $neidingcishu_str = '';
            }
            if($choujianginfo['neidingcishu'] != $neidingcishu_str){
                $info = (new ChoujiangsetModel())->where(['id'=>['>', 0]])->field('min_val,max_val,geshu,state')->find();
                (new ChoujiangModel())->save([
                    'min_val'=>$info['min_val'],
                    'max_val'=>$info['max_val'],
                    'geshu'=>$info['geshu'],
                    'state'=>$info['state'],
                    'neidingcishu'=>$neidingcishu_str,
                ]);
            }
           
            $newchoujianginfo = $this->choujiangset();
            $this->success("保存成功", [
                'info' => $newchoujianginfo,
            ]);

        } catch (Exception $e) {
            $this->error($e->getMessage());
        }
    }


}

sql

CREATE TABLE `fa_choujiang_set` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `min_val` int(10) DEFAULT '0' COMMENT '最小数',
  `max_val` int(10) DEFAULT '0' COMMENT '最大数',
  `geshu` int(10) DEFAULT '0' COMMENT '个数',
  `state` enum('1','2') DEFAULT '1' COMMENT '允许重复:1=是,2=否',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='抽奖设置表';

CREATE TABLE `fa_choujiang` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `min_val` int(10) DEFAULT '0' COMMENT '最小数',
  `max_val` int(10) DEFAULT '0' COMMENT '最大数',
  `geshu` int(10) DEFAULT '0' COMMENT '个数',
  `state` enum('1','2') DEFAULT '1' COMMENT '允许重复:1=是,2=否',
  `neidingcishu` text COMMENT '内定次数',
  `content` text COMMENT '内容',
  `createtime` bigint(16) DEFAULT NULL COMMENT '创建时间',
  `updatetime` bigint(16) DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COMMENT='抽奖表';

CREATE TABLE `fa_choujiang_log` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `choujiang_id` int(10) DEFAULT '0' COMMENT '抽奖ID',
  `number` int(10) DEFAULT '0' COMMENT '数字',
  `sign` varchar(100) DEFAULT NULL COMMENT '标识',
  `lunci` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '轮次(第几轮)',
  `createtime` bigint(16) DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `choujiang_id` (`choujiang_id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8mb4 COMMENT='抽奖记录表';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/890561.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7.9 下安装 Docker

第一步&#xff1a; sudo yum install -y yum-utils \ > device-mapper-persistent-data \ > lvm2 第二步&#xff1a;安装 sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum -y install…

C语言刷题 LeetCode 删除单链表的重复节点 双指针法

题目要求 链表结构&#xff1a;题目中提到的是未排序的链表&#xff0c;链表是由一系列节点组成的&#xff0c;每个节点包含一个值&#xff08;数据&#xff09;和一个指向下一个节点的指针。去重&#xff1a;我们需要遍历链表&#xff0c;删除所有重复的节点&#xff0c;只保…

组合式API有什么好处

什么是组合式API&#xff1f; 组合式 API (Composition API) 是一系列 API &#xff08;响应式API、生命周期钩子、依赖注入&#xff09;的集合。它不是函数式编程&#xff0c;组合式 API 是以 Vue 中数据可变的、细粒度的响应性系统为基础的&#xff0c;而函数式编程通常强调…

一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景

文章目录 一、常用数据库概览1.1 关系型数据库1.2 非关系型数据库1.2.1 KV数据库1.2.2 文档型数据库1.2.3 列式存储数据库1.2.4 图数据库 1.3 SQL与NoSQL区别1.3.1 结构化与非结构化1.3.2 关联和非关联1.3.3 查询方式1.3.4 事务1.3.5 总结 二、MySQL三、PostgreSQL3.1 特点、适…

ARM base instruction -- smull

有符号乘法运算 Signed Multiply Long multiplies two 32-bit register values, and writes the result to the 64-bit destination register. 将两个32位寄存器值相乘&#xff0c;并将结果写入64位目标寄存器。 64-bit variant SMULL <Xd>, <Wn>, <Wm>…

二叉树LeetCode刷题

二叉树LeetCode刷题 1. 检查两颗树是否相同2. 另一颗树的子树3. 翻转二叉树4. 判断一颗二叉树是否是平衡二叉树5. 二叉搜索树与双向链表6. 对称二叉树7. 二叉树的构建及遍历8. 二叉树的分层遍历9. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先10. 根据一棵树的前序遍…

单片机IO电流倒灌

最近在某视频上看到了一个博主因为IO口电流倒灌导致ADC参考基准电压不准&#xff0c;致使ADC采样数据不准。抱着什么是IO电流倒灌的疑问&#xff0c;学习了一些文章&#xff0c;防止以后踩坑。并在下面做一下对IO口电流倒灌的总结。 目录 # 一、什么是IO电流倒灌 # 二、电流倒…

PHP商会招商项目系统一站式服务助力企业腾飞

商会招商项目系统——一站式服务&#xff0c;助力企业腾飞 &#x1f680;&#x1f4bc; &#x1f680; 开篇&#xff1a;企业成长的加速器&#xff0c;商会招商项目系统来袭 在竞争激烈的市场环境中&#xff0c;企业如何快速找到适合自己的发展路径&#xff0c;实现腾飞&…

电脑知识:适用于 Windows 10 的 PDF 编辑器列表

PDF 是一种流行的、多功能且安全的文件格式&#xff0c;用于在线共享文档。但是&#xff0c;如果没有合适的应用程序&#xff0c;查看和编辑 PDF 文件可能会变得复杂。 幸运的是&#xff0c;有很多 PDF 编辑器可以帮助您更正重要文档上的错误、填写表格、为合同添加签名、更改…

电脑基础知识:mfc110.dll丢失的解决方法

1.mfc110.dll 丢失常见原因 mfc110.dll 文件的丢失或损坏是Windows系统中常见的问题&#xff0c;它可能由多种原因引起&#xff0c;以下是一些主要的因素&#xff1a; 不完全的软件卸载 在卸载程序时&#xff0c;如果相关的 DLL 文件没有被正确移除&#xff0c;可能会导致文件…

linux 环境运行 jenkins.war包,有可能会出现字体问题,jdk版本:11 jenkins 版本:2.420

jenkins的目录&#xff1a; /usr/jenkins 启动命令 java -Djava.awt.headlesstrue sudo timedatectl set-timezone Asia/Shanghai-Xmx1024m -jar jenkins.war --httpPort8090 任意目录启动&#xff1a; nohup java -Djava.awt.headlesstrue -Xms1024m -Xmx1024m -jar /usr/j…

【C++笔试强训】如何成为算法糕手Day7

学习编程就得循环渐进&#xff0c;扎实基础&#xff0c;勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 字符串中找出连续最长的数字串 思路&#xff1a; 岛屿数量 思路&#xff1a; 深度优先遍历DFS 广度优先遍历 BFS 并查集 拼三角 思路…

学成在线——关于nacos配置优先级的坑

出错&#xff1a; 本地要起两个微服务&#xff0c;一个是content-api&#xff0c;另一个是gateway网关服务。 发现通过网关服务请求content微服务时&#xff0c;怎么请求都请求不到。 配置如下&#xff1a; content-api-dev.yaml的配置&#xff1a; server:servlet:context-p…

【华为】配置BGP协议

边界网关协议BGP是一种实现自治系统AS之间的路由可达&#xff0c;并选择最佳路由的距离矢量路由协议。BGP在不同自治系统之间进行路由转发&#xff0c;分为EBGP&#xff08;外部边界网关协议&#xff09;和IBGP&#xff08;内部边界网关协议&#xff09;两种情况。 [A]in g0/0/…

HTML(七)表格

在HTML中&#xff0c;表格的标准形式如下&#xff1a; <table></table> 使用上面的语言&#xff0c;就已经生成了一个表格&#xff0c;只不过这个表格什么都没有 那么&#xff0c;该如何让表格存在东西呢&#xff1f; 首先&#xff0c;我们需要使用到<tr> …

C++ 匿名对象(没有名字的对象,类似于临时对象)

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 用类型(实参)定义出来的对象叫做匿名对象&#xff0c;相比之前我们定义的类型…

【Windows】【DevOps】Windows Server 2022 安装ansible,基于powershell实现远程自动化运维部署 入门到放弃!

目标服务器安装openssh server参考 【Windows】【DevOps】Windows Server 2022 在线/离线 安装openssh实现ssh远程登陆powershell、scp文件拷贝-CSDN博客 注意&#xff1a;Ansible不支持Windows操作系统部署 根据官方说明&#xff1a; Windows Frequently Asked Questions —…

如何使用IntelliJ IDEA生成UML图

&#x1f3dd;️ 博主介绍 大家好&#xff0c;我是一个搬砖的农民工&#xff0c;很高兴认识大家 &#x1f60a; ~ &#x1f468;‍&#x1f393; 个人介绍&#xff1a;本人是一名后端Java开发工程师&#xff0c;坐标北京 ~ &#x1f389; 感谢关注 &#x1f4d6; 一起学习 &…

WPF 为button动态设置不同的模板

有时候需要动态的设置一些按钮的状态模板。使一个button显示不同的内容&#xff0c;比如Button未点击安装显示&#xff1a; 安装后显示&#xff1a; 可以通过设置button的content&#xff0c;通过content来设置不同的模板来实现功能&#xff0c;以下是代码&#xff1a; MainWi…

QD1-P5 HTML 段落标签(p)换行标签(br)

本节视频 www.bilibili.com/video/BV1n64y1U7oj?p5 ‍ 本节学习 HTML 标签&#xff1a; p标签 段落br标签 换行 ‍ 一、p 标签-段落 1.1 使用 p 标签划分段落 <p>段落文本</p>示例 <!DOCTYPE html> <html><head><meta charset"…