状态机设计(任务,订单)

作者: 分类: php 时间: 2022-02-06 评论: 暂无评论

1.为什么要有状态机?状态机又是什么?
有些订单的状态,任务的状态过于复杂,状态机是为了方便我们管理整个任务,订单的状态,防止错误的状态切换。毕竟现在都是团队合作。有一个模型来管理,也好规范其它程序员代码质量。

2.订单状态机

namespace app\api\service;

class OrderService
{
    //订单状态可以考虑成int 类型,mysql检索速度快
    public static $STATUS_NEW = 'new';   //新订单
    public static $STATUS_PAYED = 'payed'; //已支付
    public static $STATUS_DELIVERY = 'delivery'; //已发货
    public static $STATUS_RECEIVED = 'received'; //收货
    public static $STATUS_COMPLETE = 'complete';  //已完成

    private static $ALLOW_CHANGE_STATUS = [
        'new' => ['payed'],
        'payed' => ['delivery'],
        'received' => ['received'],
        'delivery' => ['complete'],
    ];

    /**
     * 状态切换
     * @param $status
     * @param $data
     * @throws \Exception
     */
    public function changeStu($status, $data)
    {
        //check order status
        $order=Order::find($data['orderNo']);
        if(!in_array($status,self::$ALLOW_CHANGE_STATUS[$order['status']])){
            throw new \Exception(' order status error');
        }
        
        
    }

    /**
     *  订单管理
     * @param $status
     * @param $data
     * @return bool|void
     */
    public function dispatch($status, $data)
    {
        $result = false;
        switch ($status) {
            case self::$STATUS_NEW:
                $result = self::createNew($data);
                break;
            case self::$STATUS_PAYED:
                $result = self::payed($data);
                break;
            case self::$STATUS_DELIVERY:
                $result = self::delivery($data);
                break;
            case self::$STATUS_RECEIVED:
                $result = self::received($data);
                break;
            case self::$STATUS_COMPLETE:
                $result = self::complete($data);
                break;
            default:
                $result = false;
        }
        return $result;
    }


    //各自功能实现
    private static function createNew($data)
    {
        //create new order
    }

    private static function payed($data)
    {
        //make the order payed
    }

    private static function delivery($data)
    {
        //make the order delivery
    }

    private static function received($data)
    {
        //make the order reveived
    }

    private static function complete($data)
    {
        //make the order complete
    }


}

php输出js文件

作者: 分类: php 时间: 2021-06-25 评论: 暂无评论
header('content-type:application/octet-stream');
header('content-disposition:attachment; filename='.time().'.js');
echo $jsdata;

远程更新git项目代码

作者: 分类: git 时间: 2021-06-21 评论: 暂无评论

1.添加 hook.php 脚本,记得 检查PHP的exec函数 是否被禁用

$web_root='/www/wwwroot/xxx.com'; //服务器 项目根目录地址
$shell = "cd {$web_root}/ && pwd && git pull 2>&1";
exec($shell,$out); 
print_r($out);

2.在代码管理库(gitea ,github)添加钩子,指向上面的php地址 http://xxx.com/hook.php

3.在服务添加 www 权限

cd ~
vi .git-credentials
https://用户名:密码@gitee.com
git config --global credential.helper store
#执行成功后出现~/.gitconfig文件
cp ~/.gitconfig /home/www/
cp ~/.git-credentials /home/www/
cd /home/www
chown www.www .gitconfig
chown www.www .git-credentials

4.到你的项目下执行

chmod -R 777 .git

6.检查项目权限,如果不对

chown -R www.www  项目地址

5.用浏览器访问 http://xxx.com/hook.php
成功结果返回
Array ( [0] => /www/wwwroot/dcc.com [1] => Already up-to-date. )

mysql主从同步

作者: 分类: mysql 时间: 2021-06-18 评论: 暂无评论

主库ip 172.22.230.212
从库ip 172.22.230.213
数据库备份

mysqldump -uroot -p --databases xhjgame>xhjgame.sql

主库

>CREATE USER 'slave'@'172.22.230.213' IDENTIFIED BY '密码';
>GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.22.230.213';
>flush privileges;
> show master status

从库 注意两个值 mysql-bin.00058 和MASTER_LOG_POS

>CHANGE MASTER TO MASTER_HOST='172.22.230.212',  
MASTER_USER='slave', 
MASTER_PASSWORD='密码', 
MASTER_LOG_FILE='mysql-bin.000587',  MASTER_LOG_POS=0;

>start slave

>show slave status

51单片机常见缩写

作者: 分类: 51 时间: 2019-08-28 评论: 暂无评论
SFR special funtion register 特殊功能寄存器

ACC accumulate 累加器

PSW progammer status word 程序状态字

CY (PSW.7) carry 进位标志位

AC (PSW.6) assistant carry 辅助进位标志位

OV (PSW.2) overflow 溢出标志位

PC progammer counter 程序计数器

DPTR data point register 数据指针寄存器

SP stack point 堆栈指针

TCON timer control 定时器控制寄存器

TF1 (TCON.7) Timer1 flag T1中断标志位

TR1 (TCON.6) Timer1 Run T1运行控制位

TF0 (TCON.5) Timer0 flag T0中断标志位

TR0 (TCON.4) Timer0 Run T0运行控制位

IE1 (TCON.3) Interrupt1 exterior 外部中断1中断标志位

IT1 (TCON.2) Interrupt1 touch 外部中断1 触发方式选择位

IE0 (TCON.1) Interrupt0 exterior 外部中断0中断标志位

IT0 (TCON.0) Interrupt0 touch 0-电平触发 1-下降沿触发

IE (A8H) interrupt enable 中断允许寄存器

EA (IE.7) enable all interrupt 中断总允许位

ES (IE.4) enable serial 串行口中断允许位

ET1 (IE.3) enable timer 1 T1中断允许位

EX1 (IE.2) enable exterior 1 外部中断1中断允许位

ET0 (IE.1) enable timer 0 T0中断允许位

EX0 (IE.0) enable exterior 0 外部中断0中断允许位

IP (B8H) interrupt priority 中断优先级寄存器

PS (IP.4) priority serial 串口优先级标志位

PT1 (IP.3) priority timer 1 定时器1优先级标志位

PX1 (IP.2) priority exterior 1 外部中断1优先级标志位

PT0 (IP.1) priority timer 0 定时器0优先级标志位

PX0 (IP.0) priority exterior 0 外部中断0优先级标志位

PCON (87H) power control 电源控制和波特率选择

TMOD (89H) timer mode 定时器方式控制寄存器

MSB = most significant bit//最高有效位

LSB = last significant bit//最低有效位

OE = output enable //输出使能
Top ↑