diff --git a/README.md b/README.md index e69de29..2e28de7 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,90 @@ +## 平台简介 + +一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 + +性别男,若依是给还没有出生女儿取的名字(寓意:你若不离不弃,我必生死相依) + +若依参考后台模板。有需要可自行到群内下载。 + +> 如需单应用,请移步 [RuoYi-fast](https://gitee.com/y_project/RuoYi-fast) `(保持同步更新)`,如需其他版本,请移步 [项目扩展](http://doc.ruoyi.vip/#/standard/xmkz) `(不定时更新)` + +> 阿里云通用云产品1888优惠券 :[点我领取](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof)    腾讯云通用云产品2860优惠券 :[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)  `(仅限新用户)` + +> 阿里云Hi拼购 限量爆款 低至199元/年 [点我进入](https://www.aliyun.com/acts/hi-group-buying?userCode=brki8iof)  `(仅限新用户)` + +## 内置功能 + +1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 +2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 +3. 岗位管理:配置系统用户所属担任职务。 +4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 +5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 +6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 +7. 参数管理:对系统动态配置常用参数。 +8. 通知公告:系统通知公告信息发布维护。 +9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 +10. 登录日志:系统登录日志记录查询包含登录异常。 +11. 在线用户:当前系统中活跃用户状态监控。 +12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 +13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 +14. 系统接口:根据业务代码自动生成相关的api接口文档。 +15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 +16. 在线构建器:拖动表单元素生成相应的HTML代码。 +17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 +## 在线体验 +> admin/admin123 +> 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 + +演示地址:http://ruoyi.vip + +文档地址:http://doc.ruoyi.vip + +## 演示图 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +## 若依交流群 + +QQ群: [![加入QQ群](https://img.shields.io/badge/已满-1389287-blue.svg)](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [![加入QQ群](https://img.shields.io/badge/已满-1679294-blue.svg)](https://jq.qq.com/?_wv=1027&k=5cHeRVW) [![加入QQ群](https://img.shields.io/badge/已满-1529866-blue.svg)](https://jq.qq.com/?_wv=1027&k=53R0L5Z) [![加入QQ群](https://img.shields.io/badge/已满-1772718-blue.svg)](https://jq.qq.com/?_wv=1027&k=5g75dCU) [![加入QQ群](https://img.shields.io/badge/已满-1366522-blue.svg)](https://jq.qq.com/?_wv=1027&k=58cPoHA) [![加入QQ群](https://img.shields.io/badge/已满-1382251-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb) [![加入QQ群](https://img.shields.io/badge/1145125-blue.svg)](https://jq.qq.com/?_wv=1027&k=5yugASz) 点击按钮入群。 \ No newline at end of file diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/model/StoreMember.java b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/model/StoreMember.java index ad9c05d..07aad18 100644 --- a/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/model/StoreMember.java +++ b/ruoyi-api/src/main/java/com/ruoyi/app/common/persistence/model/StoreMember.java @@ -26,11 +26,7 @@ public class StoreMember extends Model { @TableId(value = "id", type = IdType.AUTO) private Long id; - /** - * 店铺ID - */ - @TableField("store_id") - private Integer storeId; + /** * vip编号 */ @@ -40,20 +36,8 @@ public class StoreMember extends Model { * 会员微信OPENID */ private String openid; - /** - * 商家版小程序openid - */ - @TableField("seller_openid") - private String sellerOpenid; - /** - * 公众号openid - */ - @TableField("wx_openid") - private String wxOpenid; - /** - * unionid唯一标识 - */ - private String unionid; + + /** * 会员手机号 */ @@ -62,11 +46,7 @@ public class StoreMember extends Model { * 登录密码 */ private String password; - /** - * 余额支付密码 - */ - @TableField("pay_password") - private String payPassword; + /** * 会员昵称 */ @@ -75,11 +55,7 @@ public class StoreMember extends Model { * 会员头像 */ private String headimg; - /** - * 用户类型 1-普通用户 2-商家用户 - */ - @TableField("user_type") - private Integer userType; + /** * 性别 */ @@ -118,11 +94,7 @@ public class StoreMember extends Model { */ @TableField("pay_points") private Integer payPoints; - /** - * 冻结积分 - */ - @TableField("frozen_points") - private Integer frozenPoints; + /** * 默认收货地址 */ @@ -136,8 +108,9 @@ public class StoreMember extends Model { * 会员状态0待审核 1-已审核 2-已拒绝 */ private Integer status; + @TableField("create_time") - private Long createTime; + private Date createTime; /** * 创建时间 */ @@ -148,43 +121,7 @@ public class StoreMember extends Model { */ @TableField("status_time") private Long statusTime; - @TableField("login_at") - private Date loginAt; - /** - * 登录次数 - */ - @TableField("login_num") - private Integer loginNum; - /** - * 是否为分销商 0 否 1 是 - */ - @TableField("is_distribut") - private Integer isDistribut; - /** - * 第一个上级 - */ - @TableField("first_leader") - private Long firstLeader; - /** - * 第二个上级 - */ - @TableField("second_leader") - private Long secondLeader; - /** - * 第三个上级 - */ - @TableField("third_leader") - private Long thirdLeader; - /** - * 是否是超管 1-是 0不是 - */ - @TableField("is_super") - private Integer isSuper; - /** - * 分销推广二维码图片 - */ - @TableField("spread_qrcode") - private String spreadQrcode; + public Long getId() { @@ -195,13 +132,6 @@ public class StoreMember extends Model { this.id = id; } - public Integer getStoreId() { - return storeId; - } - - public void setStoreId(Integer storeId) { - this.storeId = storeId; - } public String getVipNo() { return vipNo; @@ -219,30 +149,6 @@ public class StoreMember extends Model { this.openid = openid; } - public String getSellerOpenid() { - return sellerOpenid; - } - - public void setSellerOpenid(String sellerOpenid) { - this.sellerOpenid = sellerOpenid; - } - - public String getWxOpenid() { - return wxOpenid; - } - - public void setWxOpenid(String wxOpenid) { - this.wxOpenid = wxOpenid; - } - - public String getUnionid() { - return unionid; - } - - public void setUnionid(String unionid) { - this.unionid = unionid; - } - public String getPhone() { return phone; } @@ -259,13 +165,6 @@ public class StoreMember extends Model { this.password = password; } - public String getPayPassword() { - return payPassword; - } - - public void setPayPassword(String payPassword) { - this.payPassword = payPassword; - } public String getNickname() { return nickname; @@ -283,13 +182,6 @@ public class StoreMember extends Model { this.headimg = headimg; } - public Integer getUserType() { - return userType; - } - - public void setUserType(Integer userType) { - this.userType = userType; - } public String getSex() { return sex; @@ -355,13 +247,6 @@ public class StoreMember extends Model { this.payPoints = payPoints; } - public Integer getFrozenPoints() { - return frozenPoints; - } - - public void setFrozenPoints(Integer frozenPoints) { - this.frozenPoints = frozenPoints; - } public Integer getAddressId() { return addressId; @@ -387,11 +272,11 @@ public class StoreMember extends Model { this.status = status; } - public Long getCreateTime() { + public Date getCreateTime() { return createTime; } - public void setCreateTime(Long createTime) { + public void setCreateTime(Date createTime) { this.createTime = createTime; } @@ -411,69 +296,7 @@ public class StoreMember extends Model { this.statusTime = statusTime; } - public Date getLoginAt() { - return loginAt; - } - public void setLoginAt(Date loginAt) { - this.loginAt = loginAt; - } - - public Integer getLoginNum() { - return loginNum; - } - - public void setLoginNum(Integer loginNum) { - this.loginNum = loginNum; - } - - public Integer getIsDistribut() { - return isDistribut; - } - - public void setIsDistribut(Integer isDistribut) { - this.isDistribut = isDistribut; - } - - public Long getFirstLeader() { - return firstLeader; - } - - public void setFirstLeader(Long firstLeader) { - this.firstLeader = firstLeader; - } - - public Long getSecondLeader() { - return secondLeader; - } - - public void setSecondLeader(Long secondLeader) { - this.secondLeader = secondLeader; - } - - public Long getThirdLeader() { - return thirdLeader; - } - - public void setThirdLeader(Long thirdLeader) { - this.thirdLeader = thirdLeader; - } - - public Integer getIsSuper() { - return isSuper; - } - - public void setIsSuper(Integer isSuper) { - this.isSuper = isSuper; - } - - public String getSpreadQrcode() { - return spreadQrcode; - } - - public void setSpreadQrcode(String spreadQrcode) { - this.spreadQrcode = spreadQrcode; - } @Override protected Serializable pkVal() { @@ -484,18 +307,12 @@ public class StoreMember extends Model { public String toString() { return "StoreMember{" + "id=" + id + - ", storeId=" + storeId + ", vipNo=" + vipNo + ", openid=" + openid + - ", sellerOpenid=" + sellerOpenid + - ", wxOpenid=" + wxOpenid + - ", unionid=" + unionid + ", phone=" + phone + ", password=" + password + - ", payPassword=" + payPassword + ", nickname=" + nickname + ", headimg=" + headimg + - ", userType=" + userType + ", sex=" + sex + ", level=" + level + ", totalAmount=" + totalAmount + @@ -504,21 +321,12 @@ public class StoreMember extends Model { ", frozenMoney=" + frozenMoney + ", underlingNumber=" + underlingNumber + ", payPoints=" + payPoints + - ", frozenPoints=" + frozenPoints + ", addressId=" + addressId + ", remark=" + remark + ", status=" + status + ", createTime=" + createTime + ", createAt=" + createAt + ", statusTime=" + statusTime + - ", loginAt=" + loginAt + - ", loginNum=" + loginNum + - ", isDistribut=" + isDistribut + - ", firstLeader=" + firstLeader + - ", secondLeader=" + secondLeader + - ", thirdLeader=" + thirdLeader + - ", isSuper=" + isSuper + - ", spreadQrcode=" + spreadQrcode + "}"; } } diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/auth/controller/AuthController.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/auth/controller/AuthController.java index 8300de6..e63f6e6 100644 --- a/ruoyi-api/src/main/java/com/ruoyi/app/modular/auth/controller/AuthController.java +++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/auth/controller/AuthController.java @@ -22,7 +22,7 @@ import java.util.HashMap; * @Author hupeng <610796224@qq.com> * @Date 2019/6/27 **/ -@RequestMapping(value = "/auth") +//@RequestMapping(value = "/") @RestController @RequiredArgsConstructor(onConstructor = @__(@Autowired)) //@Api(value = "认证授权模块", tags = "认证授权模块", description = "认证授权模块") @@ -36,7 +36,7 @@ public class AuthController { * * @return 用户信息 */ - @GetMapping("/user") + @GetMapping("/get/user") //@ApiOperation(value = "获取用户信息",notes = "获取用户信息") public User user() { return userOperator.getUser(); @@ -44,14 +44,20 @@ public class AuthController { /** - * 模拟登录,颁发token + * 小程序登陆,颁发token,暂时模拟openid * * @return token字符串 */ - @PostMapping("/login") + @PostMapping("/oauth/access_token") // @ApiOperation(value = "获取token",notes = "获取token") public R loginReturnToken(@Validated @RequestBody LoginVO loginVO) { - String openid = "oqwKL5Zm8oINt29qiXdbtgYA9EDo"; + Boolean isProduct = false; + String openid = null; + if(isProduct){ + //todo 此处结合小程序API + }else{ + openid = "orIMY4xGhMmipwFZoSL1vOhUNFZ0"; + } StoreMember member = memberService.login(openid); if(member == null){ R.error(401,"用户登陆失败"); @@ -59,11 +65,11 @@ public class AuthController { User user = User.builder() .id(member.getId().intValue()) .username(member.getNickname()) - .roles(Arrays.asList("user", "admin")) + //.roles(Arrays.asList("user", "admin")) .build(); String token = operator.generateToken(user); HashMap map = new HashMap<>(); - map.put("token",token); + map.put("access_token",token); return R.success(map); } } \ No newline at end of file diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/member/service/vo/LoginVO.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/member/service/vo/LoginVO.java index eadbf52..dc0c213 100644 --- a/ruoyi-api/src/main/java/com/ruoyi/app/modular/member/service/vo/LoginVO.java +++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/member/service/vo/LoginVO.java @@ -6,14 +6,13 @@ import javax.validation.constraints.NotBlank; @Data public class LoginVO { - @NotBlank(message = "code必传") + //@NotBlank(message = "code必传") private String code; private String encrypted_data; private String iv; - private String share_user_id; diff --git a/ruoyi-api/src/main/resources/application.yml b/ruoyi-api/src/main/resources/application.yml index 90548db..f43178a 100644 --- a/ruoyi-api/src/main/resources/application.yml +++ b/ruoyi-api/src/main/resources/application.yml @@ -4,7 +4,7 @@ light-security: # 权限规则配置:表示用{http-method}方法请求的{path}路径必须具备什么{expression} spec-list: - http-method: ANY - path: /auth/login + path: /oauth/access_token expression: "anon()" - http-method: get path: /doc.html @@ -15,9 +15,9 @@ light-security: - http-method: get path: /swagger-resources/** expression: "anon()" - - http-method: GET - path: /user/info - expression: "hasAnyRoles('user')" +# - http-method: GET +# path: /user/info +# expression: "hasAnyRoles('user')" - http-method: ANY path: /user/super expression: "hasAllRoles('user','admin')" @@ -53,7 +53,7 @@ spring: driver-class-name: com.mysql.jdbc.Driver username: root password: root - url: jdbc:mysql://localhost:3306/tours?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=UTC + url: jdbc:mysql://localhost:3306/ruoyi?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=UTC type: com.alibaba.druid.pool.DruidDataSource #这里是配置druid连接池,以下都是druid的配置信息 filters: stat,wall,log4j maxActive: 20 diff --git a/ruoyi-api/src/test/java/com/ruoyi/generator/EntityGenerator.java b/ruoyi-api/src/test/java/com/ruoyi/generator/EntityGenerator.java new file mode 100644 index 0000000..770b24c --- /dev/null +++ b/ruoyi-api/src/test/java/com/ruoyi/generator/EntityGenerator.java @@ -0,0 +1,91 @@ +package com.ruoyi.generator; + + +import com.baomidou.mybatisplus.generator.AutoGenerator; +import com.baomidou.mybatisplus.generator.InjectionConfig; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.GlobalConfig; +import com.baomidou.mybatisplus.generator.config.PackageConfig; +import com.baomidou.mybatisplus.generator.config.StrategyConfig; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; + +import com.baomidou.mybatisplus.generator.config.rules.DbType; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * 自动生成 + */ +public class EntityGenerator { + + @Test + public void entityGenerator() { + AutoGenerator mpg = new AutoGenerator(); + + // 全局配置 + GlobalConfig gc = new GlobalConfig(); + gc.setOutputDir("E:\\java\\Supply\\src\\main\\java");//这里写你自己的java目录 + gc.setFileOverride(true);//是否覆盖 + gc.setActiveRecord(true); + gc.setEnableCache(false);// XML 二级缓存 + gc.setBaseResultMap(true);// XML ResultMap + gc.setBaseColumnList(false);// XML columList + gc.setAuthor("hupeng"); + mpg.setGlobalConfig(gc); + + // 数据源配置 + DataSourceConfig dsc = new DataSourceConfig(); + dsc.setDbType(DbType.MYSQL); + dsc.setTypeConvert(new MySqlTypeConvert() { + // 自定义数据库表字段类型转换【可选】 + @Override + public DbColumnType processTypeConvert(String fieldType) { + return super.processTypeConvert(fieldType); + } + }); + dsc.setDriverName("com.mysql.jdbc.Driver"); + dsc.setUsername("root"); + dsc.setPassword("root"); + dsc.setUrl("jdbc:mysql://127.0.0.1:3306/ruoyi?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"); + mpg.setDataSource(dsc); + + // 策略配置 + StrategyConfig strategy = new StrategyConfig(); + //strategy.setTablePrefix(new String[]{"_"});// 此处可以修改为您的表前缀 + strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 + strategy.setInclude(new String[]{"store_ads"}); + mpg.setStrategy(strategy); + + // 包配置 + PackageConfig pc = new PackageConfig(); + pc.setParent(null); + pc.setEntity("com.ruoyi.app.common.persistence.model"); + pc.setMapper("com.ruoyi.app.common.persistence.dao"); + pc.setXml("com.ruoyi.app.common.persistence.dao.mapping"); + pc.setService("TTT"); //本项目没用,生成之后删掉 + pc.setServiceImpl("TTT"); //本项目没用,生成之后删掉 + pc.setController("TTT"); //本项目没用,生成之后删掉 + mpg.setPackageInfo(pc); + + // 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值 + InjectionConfig cfg = new InjectionConfig() { + @Override + public void initMap() { + Map map = new HashMap<>(); + map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp"); + this.setMap(map); + } + }; + mpg.setCfg(cfg); + + // 执行生成 + mpg.execute(); + + // 打印注入设置 + System.err.println(mpg.getCfg().getMap().get("abc")); + } +}