1 Star 0 Fork 0

无心love / zetmay

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

[MENU]

#act-framework

包含功能

  1. 权限(菜单、角色、用户、用户角色、角色菜单、用户登录历史)
  2. 消息发送
  3. 微信支付(支付对象缓存机制)
  4. 定时任务记录、后台异常记录
  5. 文章
  6. 文件管理

外部依赖

  1. mysql
  2. redis(用户、支付对象、其他分别占用一个通道)

开始

启动时要初始化 接口文档、微信、redis

-1. 后台用idea,前台用(vs-code)[https://code.visualstudio.com/], 0. 在idea中通过Mark Directory as Excludedauxi node doc目录 排除索引

  1. 全局搜索 demo ,替换为自己的项目名称
  2. 修改数据库、redis、微信配置
  3. 修改http端口

文档

java项目结构

  1. domain存放实体类,同时实体类包含内部类:mapper
  2. service = controller ,service 分为后台管理和前端呈现两部分,其主要区别是继承自不同的父类BasePlatformServiceBaseWebService,代表顶级路由入口plwb
  3. 后台service声明路由示例:
@Controller("cpComplain")
@Api(group = "pl", title = "投诉建议", path = "/cpComplain")
@SuppressWarnings("unused")
public class CpComplainService extends BasePlatformService {

    // 该方法路由为 /pl/cpComplain/oprate.json
    // 注意:在类和方法上声明路由时,不要以/开头,否则将忽略BasePlatformService中定义的pl
    @With(ILogin.class)
    @PostAction("oprate.json")
    // api文档则反之,声明path时必须以/开头 -_-
    @ApiMethod(title = "处理投诉", path = "/oprate.json", method = ApiHttpMethod.POST)
    @ApiParam(name = "cpid", title = "主键", type = String.class)
    @ApiParam(name = "opcontent", title = "处理意见", type = String.class)
    @ApiReturn(description = "", type = CpComplain.class)
    
    public CpComplain oprate(@NotNull String cpid, String opcontent) {
        return new CpComplain();
    }
}
  1. 在vue项目中,开发模式和生产模式都要自动将pl或者wb添加,请参照部署一节

消息发送

微信消息示例:声明

public interface MsWxNewTeam extends MsWx {
    
    // 模版id
    @Override default String tempid() {
        return WechatMsgTemplete.KNIFE_PAY_OK;
    }
    // 首字
    @Override default String first() {
        return S.concat("尊敬的主人,您的\"", activename(), "\"有一笔收入到账");
    }
    // 备注
    @Override default String remark() {
        return "祝老板财源广进,生意旺旺旺!";
    }
    // 关键字
    @Override default List<String> keywords() {
        return C.listOf(amount(), "用户消费", time());
    }
    // 链接
    @Override default String link() {
        return "mine-wallet";
    }
    // 以下是发送消息时需要传递的参数
    /**
     * 活动标题
     */
    String activename();

    /**
     * 支付金额
     */
    String amount();

    /**
     * 成团时间
     */
    String time();
}

微信消息示例:使用

public class Demo {
    public void test(){
        M.excute(new MsWxNewTeam() {
            @Override public String activename() {
                return null;
            }
    
            @Override public String amount() {
                return null;
            }
    
            @Override public String time() {
                return null;
            }
    
            @Override public List<String> userid() {
                return null;
            }
        });
    }
}

短信消息示例:声明

public interface MsSmsValidatePwd extends MsSms {
    // 是否将记录存储到数据库
    @Override default  boolean save(){return false ;}
    // 模版id
    @Override default String smsCode() {
        return SmsCode.SMS_VALIDATE_PWD.value();
    }
    // 发送参数
    @Override default Map<String, String> param() {
        return C.newMap("code", code(), "product", product());
    }
    // 以下是发送消息时需要传递的参数
    /**
     * 系统名称
     */
    String product();
    /**
     * 验证码
     */
    String code();
    /**
     * 目标电话
     */
    String phone();
}

短信消息发送示例

public class Demo {
    public void test(){
        M.excute(new MsSmsValidatePwd() {
            @Override public String product() {
                return null;
            }
    
            @Override public String code() {
                return null;
            }
    
            @Override public String phone() {
                return null;
            }
        });
    }
}

缓存

缓存全部采用redis,并使用不同的通道将不同数据物理隔离 项目使用redissonredis通信,具体api可见文档

直接操作

public class Demo {
    public void test(){
        // 获取redis数据
        String cachedCodeImg = Redis.otherDb.getBucket(CacheKey.PICCODE.value(), String.class).get();
        // 设置数据
        Redis.userDb.getBucket(user.getDevid(), CpUser.class).set(user);
        // 异步删除
        Redis.userDb.getBucket(me.getDevid(), CpUser.class).deleteAsync();
    }
}

service的封装

通过继承自不同的父类BasePlatformServiceBaseWebService,可直接对用户对象进行存入、取出、删除 每次登陆时,服务会生成一个devid(token)返回给客户端,客户端将devid缓存,并在每次请求时都在header中携带此参数. 后台在com.mk.interceptor.header.HeaderLoginUserFinder 中通过header中的devid查找用户对象

public class Demo extends BasePlatformService {
    
    // 此注解将过滤掉没有用户信息的请求
    @With(ILogin.class)
    public void test(){
        // 存入
        login(user);
        // 获取用户对象
        me.getUserId();
        // 删除
        logout();
    }
}

工具类

采用hutoolact自己的工具类,并做了一些简单的封装

hutool 功能十分丰富,几乎涵盖了所有使用场景,一般不要自己搞轮子了

文件管理

全部传至112.74.133.37,需要指定项目专用目录

  1. com.mk.util.UploadToken中生成自己的token,然后配置到vue项目的config/index.js

后台界面

包含功能

  1. 权限(菜单、角色、用户、用户角色、角色菜单、用户登录历史)
  2. 投诉
  3. 消息
  4. 文章

开始

  1. 全局搜索 demo ,替换为自己的项目名称
  2. config/index.js 修改开发端口、服务端口
  3. config/index.js 修改文件token,在com.mk.util.UploadToken中生成自己的token,然后配置到 vue 项目的config/index.js

路由

路由按照以下格式声明即可,启动时会自动加载

export default [
  {
    path: "/cp-user/user",
    name: "cp-user-user",
    title: "标题",
    component: () => import("@/views/cp-user/user")
  }
]

需要登录的路由在modules-login,不需要登录的在modules-un-login

组件

文档

上传组件

默认情况下使用的mk-upload组件,是口袋仓学院使用的版本,上传到本 java 服务,如果要上传到公用服务,需要专门引入import MkUpload from 'sbin/upload'

辅助

准备

  1. 确保node版本在8.x以上,兼容10.x
  2. 安装 (yarn)[https://yarnpkg.com/zh-Hans/docs/install#windows-stable]
  3. 执行npm install del-cli -g

代码生成

  1. 修改auxi目录中package.json
{
  "db": {
    "host": "123.56.48.38",
    "port": "3306",
    "user": "root",
    "pwd": "eMj9090123123_mysql",
    "database": "sbin",
    "domain_package": "com.mk.sbin.domain",
    "service_pakcage": "com.mk.sbin.service"
  },
  "base": {
    // 生产部署时,nginx静态目录
    "baseDirPro": "E:/dist",
    // 测试部署时,nginx静态目录
    "baseDirTest": "D:/dist",
    // vue项目需要的cdn访问路径(可不管)
    "baseUriPro": "",
    // pc后台项目名称,该项目必须位于 node 目录中
    "pc": "pc",
    // 移动端项目名称,该项目必须位于 node 目录中
    "mobile": "sbin-mobile"
  }
}
  1. 运行help.bat,执行code-pl 表名,最好将表的注释写完整,代码生成时的注释主要来自表的注释

注意:help中功能可输入.help命令查看

前端依赖安装

准备:需要依赖(python2.x)[https://www.python.org/downloads/]

  1. 运行help.bat,执行.install,可安装pc依赖,因为pc比较特殊,安装了非官方的element-ui,所以需要这样安装
  2. 为pc添加新的依赖时,也需要执行 .add xxx
  3. 其他前端(例如移动端)可以按照标准做法执行 yarn

开发启动

  1. java直接启动com.mk.Starter,注意:act不能作为mvn的子项目
  2. 在pc、移动端目录执行yarn dev

部署

  1. 运行help.bat,执行.build-test系列命令即可

nginx配置

使用最新的1.15.x

	server {
	    # 端口监听:443(https)、ssl(其他https端口)、http2
        listen 443 ssl http2;
        # 域名
        server_name kll.meidp.cn;
        # http主动推送
	    http2_push_preload on;
	    # ssl配置
        ssl_certificate   E:/tool/nginx-1.15.3/conf/cert/kll.meidp.cn/214973212610654.pem;
        ssl_certificate_key  E:/tool/nginx-1.15.3/conf/cert/kll.meidp.cn/214973212610654.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
        ssl_prefer_server_ciphers on;
        # 项目静态文件
        location / {
            index  index.html;
            root E:/dist/kll-mobile/dist;
            try_files $uri $uri/ /index.html;
        }
        # 服务接口,注意rewrite,和pl\wb对应
        location /api {
            proxy_pass http://127.0.0.1:3100;
            rewrite /api/(.+)$ /wb/$1 break; 
            proxy_redirect   off;
            proxy_set_header Host 127.0.0.1;
            proxy_set_header X-Forwarded-Host 127.0.0.1;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_max_temp_file_size    0;
            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;
        }
		# socket
        location ^~ /ws/msg {
            proxy_pass  http://127.0.0.1:3100;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_max_temp_file_size 0;
            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;
        }
    }

空文件

简介

姿肽美平台 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/wuxinlove/zetmay.git
git@gitee.com:wuxinlove/zetmay.git
wuxinlove
zetmay
zetmay
master

搜索帮助