commit 30fdb672739f620376ace70dd27da18ae0b4a8d9 Author: seg_yinzy Date: Fri May 13 23:42:45 2022 +0800 修改了微信sdk包的引用方式 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..095aa77 --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +###################################################################### +# Build Tools + +.gradle +/build/ +!gradle/wrapper/gradle-wrapper.jar + +target/ +!.mvn/wrapper/maven-wrapper.jar + +###################################################################### +# IDE + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/* +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ + +###################################################################### +# Others +*.log +*.xml.versionsBackup +*.swp + +!*/build/*.java +!*/build/*.html +!*/build/*.xml +/logs/ diff --git a/.run/test#1.run.xml b/.run/test#1.run.xml new file mode 100644 index 0000000..67e0c24 --- /dev/null +++ b/.run/test#1.run.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8564f29 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2018 RuoYi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f1ec311 --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +## 平台简介 + +若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。 + +* 前端采用Vue、Element UI。 +* 后端采用Spring Boot、Spring Security、Redis & Jwt。 +* 权限认证使用Jwt,支持多终端认证系统。 +* 支持加载动态权限菜单,多方式轻松权限控制。 +* 高效率开发,使用代码生成器可以一键生成前后端代码。 +* 提供了单应用版本[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://github.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。 +* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud) +* 特别鸣谢:[element](https://github.com/ElemeFE/element),[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin),[eladmin-web](https://github.com/elunez/eladmin-web)。 +* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)   +* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)   + +## 内置功能 + +1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 +2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 +3. 岗位管理:配置系统用户所属担任职务。 +4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 +5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 +6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 +7. 参数管理:对系统动态配置常用参数。 +8. 通知公告:系统通知公告信息发布维护。 +9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 +10. 登录日志:系统登录日志记录查询包含登录异常。 +11. 在线用户:当前系统中活跃用户状态监控。 +12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 +13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 +14. 系统接口:根据业务代码自动生成相关的api接口文档。 +15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 +16. 缓存监控:对系统的缓存信息查询,命令统计等。 +17. 在线构建器:拖动表单元素生成相应的HTML代码。 +18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 + +## 在线体验 + +- admin/admin123 +- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 + +演示地址:http://vue.ruoyi.vip +文档地址:http://doc.ruoyi.vip + +## 演示图 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +## 若依前后端分离交流群 + +QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) 点击按钮入群。 \ No newline at end of file diff --git a/bin/clean.bat b/bin/clean.bat new file mode 100644 index 0000000..24c0974 --- /dev/null +++ b/bin/clean.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] target· +echo. + +%~d0 +cd %~dp0 + +cd .. +call mvn clean + +pause \ No newline at end of file diff --git a/bin/package.bat b/bin/package.bat new file mode 100644 index 0000000..c693ec0 --- /dev/null +++ b/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅwar/jarļ +echo. + +%~d0 +cd %~dp0 + +cd .. +call mvn clean package -Dmaven.test.skip=true + +pause \ No newline at end of file diff --git a/bin/run.bat b/bin/run.bat new file mode 100644 index 0000000..41efbd0 --- /dev/null +++ b/bin/run.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [Ϣ] ʹJarWeb̡ +echo. + +cd %~dp0 +cd ../ruoyi-admin/target + +set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -jar %JAVA_OPTS% ruoyi-admin.jar + +cd bin +pause \ No newline at end of file diff --git a/doc/若依环境使用手册.docx b/doc/若依环境使用手册.docx new file mode 100644 index 0000000..9e4daef Binary files /dev/null and b/doc/若依环境使用手册.docx differ diff --git a/java_sdk_v3.0.9/README.md b/java_sdk_v3.0.9/README.md new file mode 100644 index 0000000..38d4c0f --- /dev/null +++ b/java_sdk_v3.0.9/README.md @@ -0,0 +1,298 @@ +微信支付 Java SDK +------ + +对[微信支付开发者文档](https://pay.weixin.qq.com/wiki/doc/api/index.html)中给出的API进行了封装。 + +com.github.wxpay.sdk.WXPay类下提供了对应的方法: + +|方法名 | 说明 | +|--------|--------| +|microPay| 刷卡支付 | +|unifiedOrder | 统一下单| +|orderQuery | 查询订单 | +|reverse | 撤销订单 | +|closeOrder|关闭订单| +|refund|申请退款| +|refundQuery|查询退款| +|downloadBill|下载对账单| +|report|交易保障| +|shortUrl|转换短链接| +|authCodeToOpenid|授权码查询openid| + +* 注意: +* 证书文件不能放在web服务器虚拟目录,应放在有访问权限控制的目录中,防止被他人下载 +* 建议将证书文件名改为复杂且不容易猜测的文件名 +* 商户服务器要做好病毒和木马防护工作,不被非法侵入者窃取证书文件 +* 请妥善保管商户支付密钥、公众帐号SECRET,避免密钥泄露 +* 参数为`Map`对象,返回类型也是`Map` +* 方法内部会将参数会转换成含有`appid`、`mch_id`、`nonce_str`、`sign\_type`和`sign`的XML +* 可选HMAC-SHA256算法和MD5算法签名 +* 通过HTTPS请求得到返回数据后会对其做必要的处理(例如验证签名,签名错误则抛出异常) +* 对于downloadBill,无论是否成功都返回Map,且都含有`return_code`和`return_msg`,若成功,其中`return_code`为`SUCCESS`,另外`data`对应对账单数据 + + +## 示例 +配置类MyConfig: +```java +import com.github.wxpay.sdk.WXPayConfig; +import java.io.*; + +public class MyConfig implements WXPayConfig{ + + private byte[] certData; + + public MyConfig() throws Exception { + String certPath = "/path/to/apiclient_cert.p12"; + File file = new File(certPath); + InputStream certStream = new FileInputStream(file); + this.certData = new byte[(int) file.length()]; + certStream.read(this.certData); + certStream.close(); + } + + public String getAppID() { + return "wx8888888888888888"; + } + + public String getMchID() { + return "12888888"; + } + + public String getKey() { + return "88888888888888888888888888888888"; + } + + public InputStream getCertStream() { + ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData); + return certBis; + } + + public int getHttpConnectTimeoutMs() { + return 8000; + } + + public int getHttpReadTimeoutMs() { + return 10000; + } +} +``` + +统一下单: + +```java +import com.github.wxpay.sdk.WXPay; + +import java.util.HashMap; +import java.util.Map; + +public class WXPayExample { + + public static void main(String[] args) throws Exception { + + MyConfig config = new MyConfig(); + WXPay wxpay = new WXPay(config); + + Map data = new HashMap(); + data.put("body", "腾讯充值中心-QQ会员充值"); + data.put("out_trade_no", "2016090910595900000012"); + data.put("device_info", ""); + data.put("fee_type", "CNY"); + data.put("total_fee", "1"); + data.put("spbill_create_ip", "123.12.12.123"); + data.put("notify_url", "http://www.example.com/wxpay/notify"); + data.put("trade_type", "NATIVE"); // 此处指定为扫码支付 + data.put("product_id", "12"); + + try { + Map resp = wxpay.unifiedOrder(data); + System.out.println(resp); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} +``` + +订单查询: +```java +import com.github.wxpay.sdk.WXPay; + +import java.util.HashMap; +import java.util.Map; + +public class WXPayExample { + + public static void main(String[] args) throws Exception { + + MyConfig config = new MyConfig(); + WXPay wxpay = new WXPay(config); + + Map data = new HashMap(); + data.put("out_trade_no", "2016090910595900000012"); + + try { + Map resp = wxpay.orderQuery(data); + System.out.println(resp); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} +``` + +退款查询: + +```java +import com.github.wxpay.sdk.WXPay; + +import java.util.HashMap; +import java.util.Map; + +public class WXPayExample { + + public static void main(String[] args) throws Exception { + + MyConfig config = new MyConfig(); + WXPay wxpay = new WXPay(config); + + Map data = new HashMap(); + data.put("out_trade_no", "2016090910595900000012"); + + try { + Map resp = wxpay.refundQuery(data); + System.out.println(resp); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} +``` + +下载对账单: + +```java +import com.github.wxpay.sdk.WXPay; + +import java.util.HashMap; +import java.util.Map; + +public class WXPayExample { + + public static void main(String[] args) throws Exception { + + MyConfig config = new MyConfig(); + WXPay wxpay = new WXPay(config); + + Map data = new HashMap(); + data.put("bill_date", "20140603"); + data.put("bill_type", "ALL"); + + try { + Map resp = wxpay.downloadBill(data); + System.out.println(resp); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} +``` + +其他API的使用和上面类似。 + +暂时不支持下载压缩格式的对账单,但可以使用该SDK生成请求用的XML数据: +```java +import com.github.wxpay.sdk.WXPay; +import com.github.wxpay.sdk.WXPayUtil; + +import java.util.HashMap; +import java.util.Map; + +public class WXPayExample { + + public static void main(String[] args) throws Exception { + + MyConfig config = new MyConfig(); + WXPay wxpay = new WXPay(config); + + Map data = new HashMap(); + data.put("bill_date", "20140603"); + data.put("bill_type", "ALL"); + data.put("tar_type", "GZIP"); + + try { + data = wxpay.fillRequestData(data); + System.out.println(WXPayUtil.mapToXml(data)); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} +``` + +收到支付结果通知时,需要验证签名,可以这样做: +```java + +import com.github.wxpay.sdk.WXPay; +import com.github.wxpay.sdk.WXPayUtil; + +import java.util.Map; + +public class WXPayExample { + + public static void main(String[] args) throws Exception { + + String notifyData = "...."; // 支付结果通知的xml格式数据 + + MyConfig config = new MyConfig(); + WXPay wxpay = new WXPay(config); + + Map notifyMap = WXPayUtil.xmlToMap(notifyData); // 转换成map + + if (wxpay.isPayResultNotifySignatureValid(notifyMap)) { + // 签名正确 + // 进行处理。 + // 注意特殊情况:订单已经退款,但收到了支付结果成功的通知,不应把商户侧订单状态从退款改成支付成功 + } + else { + // 签名错误,如果数据里没有sign字段,也认为是签名错误 + } + } + +} +``` + +HTTPS请求可选HMAC-SHA256算法和MD5算法签名: +``` +import com.github.wxpay.sdk.WXPay; +import com.github.wxpay.sdk.WXPayConstants; + +public class WXPayExample { + + public static void main(String[] args) throws Exception { + MyConfig config = new MyConfig(); + WXPay wxpay = new WXPay(config, WXPayConstants.SignType.HMACSHA256); + // ...... + } +} +``` + +若需要使用sandbox环境: +``` +import com.github.wxpay.sdk.WXPay; +import com.github.wxpay.sdk.WXPayConstants; + +public class WXPayExample { + + public static void main(String[] args) throws Exception { + MyConfig config = new MyConfig(); + WXPay wxpay = new WXPay(config, WXPayConstants.SignType.MD5, true); + // ...... + } + +} +``` \ No newline at end of file diff --git a/java_sdk_v3.0.9/pom.xml b/java_sdk_v3.0.9/pom.xml new file mode 100644 index 0000000..0c1c352 --- /dev/null +++ b/java_sdk_v3.0.9/pom.xml @@ -0,0 +1,127 @@ + + + + 4.0.0 + + com.github.wxpay + wxpay-sdk + 3.0.9 + wxpay-sdk + wxpay sdk + + + + utf-8 + utf-8 + + + + + + org.apache.httpcomponents + httpclient + 4.5.3 + + + + org.slf4j + slf4j-api + 1.7.21 + + + + org.slf4j + slf4j-simple + 1.7.21 + + + + + + + + + release + + + oss + https://oss.sonatype.org/content/repositories/snapshots/ + + + oss + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + package + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.4 + + + package + + jar + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + + + + + \ No newline at end of file diff --git a/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/IWXPayDomain.java b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/IWXPayDomain.java new file mode 100644 index 0000000..b693aad --- /dev/null +++ b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/IWXPayDomain.java @@ -0,0 +1,42 @@ +package com.github.wxpay.sdk; + +/** + * 域名管理,实现主备域名自动切换 + */ +public abstract interface IWXPayDomain { + /** + * 上报域名网络状况 + * @param domain 域名。 比如:api.mch.weixin.qq.com + * @param elapsedTimeMillis 耗时 + * @param ex 网络请求中出现的异常。 + * null表示没有异常 + * ConnectTimeoutException,表示建立网络连接异常 + * UnknownHostException, 表示dns解析异常 + */ + abstract void report(final String domain, long elapsedTimeMillis, final Exception ex); + + /** + * 获取域名 + * @param config 配置 + * @return 域名 + */ + abstract DomainInfo getDomain(final WXPayConfig config); + + static class DomainInfo{ + public String domain; //域名 + public boolean primaryDomain; //该域名是否为主域名。例如:api.mch.weixin.qq.com为主域名 + public DomainInfo(String domain, boolean primaryDomain) { + this.domain = domain; + this.primaryDomain = primaryDomain; + } + + @Override + public String toString() { + return "DomainInfo{" + + "domain='" + domain + '\'' + + ", primaryDomain=" + primaryDomain + + '}'; + } + } + +} \ No newline at end of file diff --git a/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPay.java b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPay.java new file mode 100644 index 0000000..5c9e3fa --- /dev/null +++ b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPay.java @@ -0,0 +1,689 @@ +package com.github.wxpay.sdk; + +import com.github.wxpay.sdk.WXPayConstants.SignType; + +import java.util.HashMap; +import java.util.Map; + +public class WXPay { + + private WXPayConfig config; + private SignType signType; + private boolean autoReport; + private boolean useSandbox; + private String notifyUrl; + private WXPayRequest wxPayRequest; + + public WXPay(final WXPayConfig config) throws Exception { + this(config, null, true, false); + } + + public WXPay(final WXPayConfig config, final boolean autoReport) throws Exception { + this(config, null, autoReport, false); + } + + + public WXPay(final WXPayConfig config, final boolean autoReport, final boolean useSandbox) throws Exception{ + this(config, null, autoReport, useSandbox); + } + + public WXPay(final WXPayConfig config, final String notifyUrl) throws Exception { + this(config, notifyUrl, true, false); + } + + public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport) throws Exception { + this(config, notifyUrl, autoReport, false); + } + + public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception { + this.config = config; + this.notifyUrl = notifyUrl; + this.autoReport = autoReport; + this.useSandbox = useSandbox; + if (useSandbox) { + this.signType = SignType.MD5; // 沙箱环境 + } + else { + this.signType = SignType.HMACSHA256; + } + this.wxPayRequest = new WXPayRequest(config); + } + + private void checkWXPayConfig() throws Exception { + if (this.config == null) { + throw new Exception("config is null"); + } + if (this.config.getAppID() == null || this.config.getAppID().trim().length() == 0) { + throw new Exception("appid in config is empty"); + } + if (this.config.getMchID() == null || this.config.getMchID().trim().length() == 0) { + throw new Exception("appid in config is empty"); + } + if (this.config.getCertStream() == null) { + throw new Exception("cert stream in config is empty"); + } + if (this.config.getWXPayDomain() == null){ + throw new Exception("config.getWXPayDomain() is null"); + } + + if (this.config.getHttpConnectTimeoutMs() < 10) { + throw new Exception("http connect timeout is too small"); + } + if (this.config.getHttpReadTimeoutMs() < 10) { + throw new Exception("http read timeout is too small"); + } + + } + + /** + * 向 Map 中添加 appid、mch_id、nonce_str、sign_type、sign
+ * 该函数适用于商户适用于统一下单等接口,不适用于红包、代金券接口 + * + * @param reqData + * @return + * @throws Exception + */ + public Map fillRequestData(Map reqData) throws Exception { + reqData.put("appid", config.getAppID()); + reqData.put("mch_id", config.getMchID()); + reqData.put("nonce_str", WXPayUtil.generateNonceStr()); + if (SignType.MD5.equals(this.signType)) { + reqData.put("sign_type", WXPayConstants.MD5); + } + else if (SignType.HMACSHA256.equals(this.signType)) { + reqData.put("sign_type", WXPayConstants.HMACSHA256); + } + reqData.put("sign", WXPayUtil.generateSignature(reqData, config.getKey(), this.signType)); + return reqData; + } + + /** + * 判断xml数据的sign是否有效,必须包含sign字段,否则返回false。 + * + * @param reqData 向wxpay post的请求数据 + * @return 签名是否有效 + * @throws Exception + */ + public boolean isResponseSignatureValid(Map reqData) throws Exception { + // 返回数据的签名方式和请求中给定的签名方式是一致的 + return WXPayUtil.isSignatureValid(reqData, this.config.getKey(), this.signType); + } + + /** + * 判断支付结果通知中的sign是否有效 + * + * @param reqData 向wxpay post的请求数据 + * @return 签名是否有效 + * @throws Exception + */ + public boolean isPayResultNotifySignatureValid(Map reqData) throws Exception { + String signTypeInData = reqData.get(WXPayConstants.FIELD_SIGN_TYPE); + SignType signType; + if (signTypeInData == null) { + signType = SignType.MD5; + } + else { + signTypeInData = signTypeInData.trim(); + if (signTypeInData.length() == 0) { + signType = SignType.MD5; + } + else if (WXPayConstants.MD5.equals(signTypeInData)) { + signType = SignType.MD5; + } + else if (WXPayConstants.HMACSHA256.equals(signTypeInData)) { + signType = SignType.HMACSHA256; + } + else { + throw new Exception(String.format("Unsupported sign_type: %s", signTypeInData)); + } + } + return WXPayUtil.isSignatureValid(reqData, this.config.getKey(), signType); + } + + + /** + * 不需要证书的请求 + * @param urlSuffix String + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 超时时间,单位是毫秒 + * @param readTimeoutMs 超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public String requestWithoutCert(String urlSuffix, Map reqData, + int connectTimeoutMs, int readTimeoutMs) throws Exception { + String msgUUID = reqData.get("nonce_str"); + String reqBody = WXPayUtil.mapToXml(reqData); + + String resp = this.wxPayRequest.requestWithoutCert(urlSuffix, msgUUID, reqBody, connectTimeoutMs, readTimeoutMs, autoReport); + return resp; + } + + + /** + * 需要证书的请求 + * @param urlSuffix String + * @param reqData 向wxpay post的请求数据 Map + * @param connectTimeoutMs 超时时间,单位是毫秒 + * @param readTimeoutMs 超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public String requestWithCert(String urlSuffix, Map reqData, + int connectTimeoutMs, int readTimeoutMs) throws Exception { + String msgUUID= reqData.get("nonce_str"); + String reqBody = WXPayUtil.mapToXml(reqData); + + String resp = this.wxPayRequest.requestWithCert(urlSuffix, msgUUID, reqBody, connectTimeoutMs, readTimeoutMs, this.autoReport); + return resp; + } + + /** + * 处理 HTTPS API返回数据,转换成Map对象。return_code为SUCCESS时,验证签名。 + * @param xmlStr API返回的XML格式数据 + * @return Map类型数据 + * @throws Exception + */ + public Map processResponseXml(String xmlStr) throws Exception { + String RETURN_CODE = "return_code"; + String return_code; + Map respData = WXPayUtil.xmlToMap(xmlStr); + if (respData.containsKey(RETURN_CODE)) { + return_code = respData.get(RETURN_CODE); + } + else { + throw new Exception(String.format("No `return_code` in XML: %s", xmlStr)); + } + + if (return_code.equals(WXPayConstants.FAIL)) { + return respData; + } + else if (return_code.equals(WXPayConstants.SUCCESS)) { + if (this.isResponseSignatureValid(respData)) { + return respData; + } + else { + throw new Exception(String.format("Invalid sign value in XML: %s", xmlStr)); + } + } + else { + throw new Exception(String.format("return_code value %s is invalid in XML: %s", return_code, xmlStr)); + } + } + + /** + * 作用:提交刷卡支付
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map microPay(Map reqData) throws Exception { + return this.microPay(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:提交刷卡支付
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map microPay(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_MICROPAY_URL_SUFFIX; + } + else { + url = WXPayConstants.MICROPAY_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + /** + * 提交刷卡支付,针对软POS,尽可能做成功 + * 内置重试机制,最多60s + * @param reqData + * @return + * @throws Exception + */ + public Map microPayWithPos(Map reqData) throws Exception { + return this.microPayWithPos(reqData, this.config.getHttpConnectTimeoutMs()); + } + + /** + * 提交刷卡支付,针对软POS,尽可能做成功 + * 内置重试机制,最多60s + * @param reqData + * @param connectTimeoutMs + * @return + * @throws Exception + */ + public Map microPayWithPos(Map reqData, int connectTimeoutMs) throws Exception { + int remainingTimeMs = 60*1000; + long startTimestampMs = 0; + Map lastResult = null; + Exception lastException = null; + + while (true) { + startTimestampMs = WXPayUtil.getCurrentTimestampMs(); + int readTimeoutMs = remainingTimeMs - connectTimeoutMs; + if (readTimeoutMs > 1000) { + try { + lastResult = this.microPay(reqData, connectTimeoutMs, readTimeoutMs); + String returnCode = lastResult.get("return_code"); + if (returnCode.equals("SUCCESS")) { + String resultCode = lastResult.get("result_code"); + String errCode = lastResult.get("err_code"); + if (resultCode.equals("SUCCESS")) { + break; + } + else { + // 看错误码,若支付结果未知,则重试提交刷卡支付 + if (errCode.equals("SYSTEMERROR") || errCode.equals("BANKERROR") || errCode.equals("USERPAYING")) { + remainingTimeMs = remainingTimeMs - (int)(WXPayUtil.getCurrentTimestampMs() - startTimestampMs); + if (remainingTimeMs <= 100) { + break; + } + else { + WXPayUtil.getLogger().info("microPayWithPos: try micropay again"); + if (remainingTimeMs > 5*1000) { + Thread.sleep(5*1000); + } + else { + Thread.sleep(1*1000); + } + continue; + } + } + else { + break; + } + } + } + else { + break; + } + } + catch (Exception ex) { + lastResult = null; + lastException = ex; + } + } + else { + break; + } + } + + if (lastResult == null) { + throw lastException; + } + else { + return lastResult; + } + } + + + + /** + * 作用:统一下单
+ * 场景:公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map unifiedOrder(Map reqData) throws Exception { + return this.unifiedOrder(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:统一下单
+ * 场景:公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map unifiedOrder(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_UNIFIEDORDER_URL_SUFFIX; + } + else { + url = WXPayConstants.UNIFIEDORDER_URL_SUFFIX; + } + if(this.notifyUrl != null) { + reqData.put("notify_url", this.notifyUrl); + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:查询订单
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map orderQuery(Map reqData) throws Exception { + return this.orderQuery(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:查询订单
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 int + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map orderQuery(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_ORDERQUERY_URL_SUFFIX; + } + else { + url = WXPayConstants.ORDERQUERY_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:撤销订单
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map reverse(Map reqData) throws Exception { + return this.reverse(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:撤销订单
+ * 场景:刷卡支付
+ * 其他:需要证书 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map reverse(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_REVERSE_URL_SUFFIX; + } + else { + url = WXPayConstants.REVERSE_URL_SUFFIX; + } + String respXml = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:关闭订单
+ * 场景:公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map closeOrder(Map reqData) throws Exception { + return this.closeOrder(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:关闭订单
+ * 场景:公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map closeOrder(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_CLOSEORDER_URL_SUFFIX; + } + else { + url = WXPayConstants.CLOSEORDER_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:申请退款
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map refund(Map reqData) throws Exception { + return this.refund(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:申请退款
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付
+ * 其他:需要证书 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map refund(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_REFUND_URL_SUFFIX; + } + else { + url = WXPayConstants.REFUND_URL_SUFFIX; + } + String respXml = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:退款查询
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map refundQuery(Map reqData) throws Exception { + return this.refundQuery(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:退款查询
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map refundQuery(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_REFUNDQUERY_URL_SUFFIX; + } + else { + url = WXPayConstants.REFUNDQUERY_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:对账单下载(成功时返回对账单数据,失败时返回XML格式数据)
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map downloadBill(Map reqData) throws Exception { + return this.downloadBill(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:对账单下载
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付
+ * 其他:无论是否成功都返回Map。若成功,返回的Map中含有return_code、return_msg、data, + * 其中return_code为`SUCCESS`,data为对账单数据。 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return 经过封装的API返回数据 + * @throws Exception + */ + public Map downloadBill(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_DOWNLOADBILL_URL_SUFFIX; + } + else { + url = WXPayConstants.DOWNLOADBILL_URL_SUFFIX; + } + String respStr = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs).trim(); + Map ret; + // 出现错误,返回XML数据 + if (respStr.indexOf("<") == 0) { + ret = WXPayUtil.xmlToMap(respStr); + } + else { + // 正常返回csv数据 + ret = new HashMap(); + ret.put("return_code", WXPayConstants.SUCCESS); + ret.put("return_msg", "ok"); + ret.put("data", respStr); + } + return ret; + } + + + /** + * 作用:交易保障
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map report(Map reqData) throws Exception { + return this.report(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:交易保障
+ * 场景:刷卡支付、公共号支付、扫码支付、APP支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map report(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_REPORT_URL_SUFFIX; + } + else { + url = WXPayConstants.REPORT_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return WXPayUtil.xmlToMap(respXml); + } + + + /** + * 作用:转换短链接
+ * 场景:刷卡支付、扫码支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map shortUrl(Map reqData) throws Exception { + return this.shortUrl(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:转换短链接
+ * 场景:刷卡支付、扫码支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map shortUrl(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_SHORTURL_URL_SUFFIX; + } + else { + url = WXPayConstants.SHORTURL_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + + /** + * 作用:授权码查询OPENID接口
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @return API返回数据 + * @throws Exception + */ + public Map authCodeToOpenid(Map reqData) throws Exception { + return this.authCodeToOpenid(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs()); + } + + + /** + * 作用:授权码查询OPENID接口
+ * 场景:刷卡支付 + * @param reqData 向wxpay post的请求数据 + * @param connectTimeoutMs 连接超时时间,单位是毫秒 + * @param readTimeoutMs 读超时时间,单位是毫秒 + * @return API返回数据 + * @throws Exception + */ + public Map authCodeToOpenid(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception { + String url; + if (this.useSandbox) { + url = WXPayConstants.SANDBOX_AUTHCODETOOPENID_URL_SUFFIX; + } + else { + url = WXPayConstants.AUTHCODETOOPENID_URL_SUFFIX; + } + String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs); + return this.processResponseXml(respXml); + } + + +} // end class diff --git a/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayConfig.java b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayConfig.java new file mode 100644 index 0000000..ed1acf2 --- /dev/null +++ b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayConfig.java @@ -0,0 +1,103 @@ +package com.github.wxpay.sdk; + +import java.io.InputStream; + +public abstract class WXPayConfig { + + + + /** + * 获取 App ID + * + * @return App ID + */ + abstract String getAppID(); + + + /** + * 获取 Mch ID + * + * @return Mch ID + */ + abstract String getMchID(); + + + /** + * 获取 API 密钥 + * + * @return API密钥 + */ + abstract String getKey(); + + + /** + * 获取商户证书内容 + * + * @return 商户证书内容 + */ + abstract InputStream getCertStream(); + + /** + * HTTP(S) 连接超时时间,单位毫秒 + * + * @return + */ + public int getHttpConnectTimeoutMs() { + return 6*1000; + } + + /** + * HTTP(S) 读数据超时时间,单位毫秒 + * + * @return + */ + public int getHttpReadTimeoutMs() { + return 8*1000; + } + + /** + * 获取WXPayDomain, 用于多域名容灾自动切换 + * @return + */ + abstract IWXPayDomain getWXPayDomain(); + + /** + * 是否自动上报。 + * 若要关闭自动上报,子类中实现该函数返回 false 即可。 + * + * @return + */ + public boolean shouldAutoReport() { + return true; + } + + /** + * 进行健康上报的线程的数量 + * + * @return + */ + public int getReportWorkerNum() { + return 6; + } + + + /** + * 健康上报缓存消息的最大数量。会有线程去独立上报 + * 粗略计算:加入一条消息200B,10000消息占用空间 2000 KB,约为2MB,可以接受 + * + * @return + */ + public int getReportQueueMaxSize() { + return 10000; + } + + /** + * 批量上报,一次最多上报多个数据 + * + * @return + */ + public int getReportBatchSize() { + return 10; + } + +} diff --git a/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayConstants.java b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayConstants.java new file mode 100644 index 0000000..8419859 --- /dev/null +++ b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayConstants.java @@ -0,0 +1,59 @@ +package com.github.wxpay.sdk; + +import org.apache.http.client.HttpClient; + +/** + * 常量 + */ +public class WXPayConstants { + + public enum SignType { + MD5, HMACSHA256 + } + + public static final String DOMAIN_API = "api.mch.weixin.qq.com"; + public static final String DOMAIN_API2 = "api2.mch.weixin.qq.com"; + public static final String DOMAIN_APIHK = "apihk.mch.weixin.qq.com"; + public static final String DOMAIN_APIUS = "apius.mch.weixin.qq.com"; + + + public static final String FAIL = "FAIL"; + public static final String SUCCESS = "SUCCESS"; + public static final String HMACSHA256 = "HMAC-SHA256"; + public static final String MD5 = "MD5"; + + public static final String FIELD_SIGN = "sign"; + public static final String FIELD_SIGN_TYPE = "sign_type"; + + public static final String WXPAYSDK_VERSION = "WXPaySDK/3.0.9"; + public static final String USER_AGENT = WXPAYSDK_VERSION + + " (" + System.getProperty("os.arch") + " " + System.getProperty("os.name") + " " + System.getProperty("os.version") + + ") Java/" + System.getProperty("java.version") + " HttpClient/" + HttpClient.class.getPackage().getImplementationVersion(); + + public static final String MICROPAY_URL_SUFFIX = "/pay/micropay"; + public static final String UNIFIEDORDER_URL_SUFFIX = "/pay/unifiedorder"; + public static final String ORDERQUERY_URL_SUFFIX = "/pay/orderquery"; + public static final String REVERSE_URL_SUFFIX = "/secapi/pay/reverse"; + public static final String CLOSEORDER_URL_SUFFIX = "/pay/closeorder"; + public static final String REFUND_URL_SUFFIX = "/secapi/pay/refund"; + public static final String REFUNDQUERY_URL_SUFFIX = "/pay/refundquery"; + public static final String DOWNLOADBILL_URL_SUFFIX = "/pay/downloadbill"; + public static final String REPORT_URL_SUFFIX = "/payitil/report"; + public static final String SHORTURL_URL_SUFFIX = "/tools/shorturl"; + public static final String AUTHCODETOOPENID_URL_SUFFIX = "/tools/authcodetoopenid"; + + // sandbox + public static final String SANDBOX_MICROPAY_URL_SUFFIX = "/sandboxnew/pay/micropay"; + public static final String SANDBOX_UNIFIEDORDER_URL_SUFFIX = "/sandboxnew/pay/unifiedorder"; + public static final String SANDBOX_ORDERQUERY_URL_SUFFIX = "/sandboxnew/pay/orderquery"; + public static final String SANDBOX_REVERSE_URL_SUFFIX = "/sandboxnew/secapi/pay/reverse"; + public static final String SANDBOX_CLOSEORDER_URL_SUFFIX = "/sandboxnew/pay/closeorder"; + public static final String SANDBOX_REFUND_URL_SUFFIX = "/sandboxnew/secapi/pay/refund"; + public static final String SANDBOX_REFUNDQUERY_URL_SUFFIX = "/sandboxnew/pay/refundquery"; + public static final String SANDBOX_DOWNLOADBILL_URL_SUFFIX = "/sandboxnew/pay/downloadbill"; + public static final String SANDBOX_REPORT_URL_SUFFIX = "/sandboxnew/payitil/report"; + public static final String SANDBOX_SHORTURL_URL_SUFFIX = "/sandboxnew/tools/shorturl"; + public static final String SANDBOX_AUTHCODETOOPENID_URL_SUFFIX = "/sandboxnew/tools/authcodetoopenid"; + +} + diff --git a/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayReport.java b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayReport.java new file mode 100644 index 0000000..a6a2e22 --- /dev/null +++ b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayReport.java @@ -0,0 +1,265 @@ +package com.github.wxpay.sdk; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadFactory; + +/** + * 交易保障 + */ +public class WXPayReport { + + public static class ReportInfo { + + /** + * 布尔变量使用int。0为false, 1为true。 + */ + + // 基本信息 + private String version = "v1"; + private String sdk = WXPayConstants.WXPAYSDK_VERSION; + private String uuid; // 交易的标识 + private long timestamp; // 上报时的时间戳,单位秒 + private long elapsedTimeMillis; // 耗时,单位 毫秒 + + // 针对主域名 + private String firstDomain; // 第1次请求的域名 + private boolean primaryDomain; //是否主域名 + private int firstConnectTimeoutMillis; // 第1次请求设置的连接超时时间,单位 毫秒 + private int firstReadTimeoutMillis; // 第1次请求设置的读写超时时间,单位 毫秒 + private int firstHasDnsError; // 第1次请求是否出现dns问题 + private int firstHasConnectTimeout; // 第1次请求是否出现连接超时 + private int firstHasReadTimeout; // 第1次请求是否出现连接超时 + + public ReportInfo(String uuid, long timestamp, long elapsedTimeMillis, String firstDomain, boolean primaryDomain, int firstConnectTimeoutMillis, int firstReadTimeoutMillis, boolean firstHasDnsError, boolean firstHasConnectTimeout, boolean firstHasReadTimeout) { + this.uuid = uuid; + this.timestamp = timestamp; + this.elapsedTimeMillis = elapsedTimeMillis; + this.firstDomain = firstDomain; + this.primaryDomain = primaryDomain; + this.firstConnectTimeoutMillis = firstConnectTimeoutMillis; + this.firstReadTimeoutMillis = firstReadTimeoutMillis; + this.firstHasDnsError = firstHasDnsError?1:0; + this.firstHasConnectTimeout = firstHasConnectTimeout?1:0; + this.firstHasReadTimeout = firstHasReadTimeout?1:0; + } + + @Override + public String toString() { + return "ReportInfo{" + + "version='" + version + '\'' + + ", sdk='" + sdk + '\'' + + ", uuid='" + uuid + '\'' + + ", timestamp=" + timestamp + + ", elapsedTimeMillis=" + elapsedTimeMillis + + ", firstDomain='" + firstDomain + '\'' + + ", primaryDomain=" + primaryDomain + + ", firstConnectTimeoutMillis=" + firstConnectTimeoutMillis + + ", firstReadTimeoutMillis=" + firstReadTimeoutMillis + + ", firstHasDnsError=" + firstHasDnsError + + ", firstHasConnectTimeout=" + firstHasConnectTimeout + + ", firstHasReadTimeout=" + firstHasReadTimeout + + '}'; + } + + /** + * 转换成 csv 格式 + * + * @return + */ + public String toLineString(String key) { + String separator = ","; + Object[] objects = new Object[] { + version, sdk, uuid, timestamp, elapsedTimeMillis, + firstDomain, primaryDomain, firstConnectTimeoutMillis, firstReadTimeoutMillis, + firstHasDnsError, firstHasConnectTimeout, firstHasReadTimeout + }; + StringBuffer sb = new StringBuffer(); + for(Object obj: objects) { + sb.append(obj).append(separator); + } + try { + String sign = WXPayUtil.HMACSHA256(sb.toString(), key); + sb.append(sign); + return sb.toString(); + } + catch (Exception ex) { + return null; + } + + } + + } + + private static final String REPORT_URL = "http://report.mch.weixin.qq.com/wxpay/report/default"; + // private static final String REPORT_URL = "http://127.0.0.1:5000/test"; + + + private static final int DEFAULT_CONNECT_TIMEOUT_MS = 6*1000; + private static final int DEFAULT_READ_TIMEOUT_MS = 8*1000; + + private LinkedBlockingQueue reportMsgQueue = null; + private WXPayConfig config; + private ExecutorService executorService; + + private volatile static WXPayReport INSTANCE; + + private WXPayReport(final WXPayConfig config) { + this.config = config; + reportMsgQueue = new LinkedBlockingQueue(config.getReportQueueMaxSize()); + + // 添加处理线程 + executorService = Executors.newFixedThreadPool(config.getReportWorkerNum(), new ThreadFactory() { + public Thread newThread(Runnable r) { + Thread t = Executors.defaultThreadFactory().newThread(r); + t.setDaemon(true); + return t; + } + }); + + if (config.shouldAutoReport()) { + WXPayUtil.getLogger().info("report worker num: {}", config.getReportWorkerNum()); + for (int i = 0; i < config.getReportWorkerNum(); ++i) { + executorService.execute(new Runnable() { + public void run() { + while (true) { + // 先用 take 获取数据 + try { + StringBuffer sb = new StringBuffer(); + String firstMsg = reportMsgQueue.take(); + WXPayUtil.getLogger().info("get first report msg: {}", firstMsg); + String msg = null; + sb.append(firstMsg); //会阻塞至有消息 + int remainNum = config.getReportBatchSize() - 1; + for (int j=0; jcreate() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(), + null, + null, + null + ); + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(connManager) + .build(); + + HttpPost httpPost = new HttpPost(REPORT_URL); + + RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeoutMs).setConnectTimeout(connectTimeoutMs).build(); + httpPost.setConfig(requestConfig); + + StringEntity postEntity = new StringEntity(data, "UTF-8"); + httpPost.addHeader("Content-Type", "text/xml"); + httpPost.addHeader("User-Agent", WXPayConstants.USER_AGENT); + httpPost.setEntity(postEntity); + + HttpResponse httpResponse = httpClient.execute(httpPost); + HttpEntity httpEntity = httpResponse.getEntity(); + return EntityUtils.toString(httpEntity, "UTF-8"); + } + +} diff --git a/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayRequest.java b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayRequest.java new file mode 100644 index 0000000..83dd05a --- /dev/null +++ b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayRequest.java @@ -0,0 +1,258 @@ +package com.github.wxpay.sdk; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.ConnectTimeoutException; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.DefaultHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; + +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import java.io.InputStream; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.security.KeyStore; +import java.security.SecureRandom; + +import static com.github.wxpay.sdk.WXPayConstants.USER_AGENT; + +public class WXPayRequest { + private WXPayConfig config; + public WXPayRequest(WXPayConfig config) throws Exception{ + + this.config = config; + } + + /** + * 请求,只请求一次,不做重试 + * @param domain + * @param urlSuffix + * @param uuid + * @param data + * @param connectTimeoutMs + * @param readTimeoutMs + * @param useCert 是否使用证书,针对退款、撤销等操作 + * @return + * @throws Exception + */ + private String requestOnce(final String domain, String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean useCert) throws Exception { + BasicHttpClientConnectionManager connManager; + if (useCert) { + // 证书 + char[] password = config.getMchID().toCharArray(); + InputStream certStream = config.getCertStream(); + KeyStore ks = KeyStore.getInstance("PKCS12"); + ks.load(certStream, password); + + // 实例化密钥库 & 初始化密钥工厂 + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(ks, password); + + // 创建 SSLContext + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(kmf.getKeyManagers(), null, new SecureRandom()); + + SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory( + sslContext, + new String[]{"TLSv1"}, + null, + new DefaultHostnameVerifier()); + + connManager = new BasicHttpClientConnectionManager( + RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", sslConnectionSocketFactory) + .build(), + null, + null, + null + ); + } + else { + connManager = new BasicHttpClientConnectionManager( + RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(), + null, + null, + null + ); + } + + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(connManager) + .build(); + + String url = "https://" + domain + urlSuffix; + HttpPost httpPost = new HttpPost(url); + + RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeoutMs).setConnectTimeout(connectTimeoutMs).build(); + httpPost.setConfig(requestConfig); + + StringEntity postEntity = new StringEntity(data, "UTF-8"); + httpPost.addHeader("Content-Type", "text/xml"); + httpPost.addHeader("User-Agent", USER_AGENT + " " + config.getMchID()); + httpPost.setEntity(postEntity); + + HttpResponse httpResponse = httpClient.execute(httpPost); + HttpEntity httpEntity = httpResponse.getEntity(); + return EntityUtils.toString(httpEntity, "UTF-8"); + + } + + + private String request(String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean useCert, boolean autoReport) throws Exception { + Exception exception = null; + long elapsedTimeMillis = 0; + long startTimestampMs = WXPayUtil.getCurrentTimestampMs(); + boolean firstHasDnsErr = false; + boolean firstHasConnectTimeout = false; + boolean firstHasReadTimeout = false; + IWXPayDomain.DomainInfo domainInfo = config.getWXPayDomain().getDomain(config); + if(domainInfo == null){ + throw new Exception("WXPayConfig.getWXPayDomain().getDomain() is empty or null"); + } + try { + String result = requestOnce(domainInfo.domain, urlSuffix, uuid, data, connectTimeoutMs, readTimeoutMs, useCert); + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + config.getWXPayDomain().report(domainInfo.domain, elapsedTimeMillis, null); + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout); + return result; + } + catch (UnknownHostException ex) { // dns 解析错误,或域名不存在 + exception = ex; + firstHasDnsErr = true; + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + WXPayUtil.getLogger().warn("UnknownHostException for domainInfo {}", domainInfo); + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout + ); + } + catch (ConnectTimeoutException ex) { + exception = ex; + firstHasConnectTimeout = true; + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + WXPayUtil.getLogger().warn("connect timeout happened for domainInfo {}", domainInfo); + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout + ); + } + catch (SocketTimeoutException ex) { + exception = ex; + firstHasReadTimeout = true; + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + WXPayUtil.getLogger().warn("timeout happened for domainInfo {}", domainInfo); + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout); + } + catch (Exception ex) { + exception = ex; + elapsedTimeMillis = WXPayUtil.getCurrentTimestampMs()-startTimestampMs; + WXPayReport.getInstance(config).report( + uuid, + elapsedTimeMillis, + domainInfo.domain, + domainInfo.primaryDomain, + connectTimeoutMs, + readTimeoutMs, + firstHasDnsErr, + firstHasConnectTimeout, + firstHasReadTimeout); + } + config.getWXPayDomain().report(domainInfo.domain, elapsedTimeMillis, exception); + throw exception; + } + + + /** + * 可重试的,非双向认证的请求 + * @param urlSuffix + * @param uuid + * @param data + * @return + */ + public String requestWithoutCert(String urlSuffix, String uuid, String data, boolean autoReport) throws Exception { + return this.request(urlSuffix, uuid, data, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs(), false, autoReport); + } + + /** + * 可重试的,非双向认证的请求 + * @param urlSuffix + * @param uuid + * @param data + * @param connectTimeoutMs + * @param readTimeoutMs + * @return + */ + public String requestWithoutCert(String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean autoReport) throws Exception { + return this.request(urlSuffix, uuid, data, connectTimeoutMs, readTimeoutMs, false, autoReport); + } + + /** + * 可重试的,双向认证的请求 + * @param urlSuffix + * @param uuid + * @param data + * @return + */ + public String requestWithCert(String urlSuffix, String uuid, String data, boolean autoReport) throws Exception { + return this.request(urlSuffix, uuid, data, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs(), true, autoReport); + } + + /** + * 可重试的,双向认证的请求 + * @param urlSuffix + * @param uuid + * @param data + * @param connectTimeoutMs + * @param readTimeoutMs + * @return + */ + public String requestWithCert(String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean autoReport) throws Exception { + return this.request(urlSuffix, uuid, data, connectTimeoutMs, readTimeoutMs, true, autoReport); + } +} diff --git a/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayUtil.java b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayUtil.java new file mode 100644 index 0000000..8f6948a --- /dev/null +++ b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayUtil.java @@ -0,0 +1,295 @@ +package com.github.wxpay.sdk; + +import com.github.wxpay.sdk.WXPayConstants.SignType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.StringWriter; +import java.security.MessageDigest; +import java.security.SecureRandom; +import java.util.*; + + +public class WXPayUtil { + + private static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + private static final Random RANDOM = new SecureRandom(); + + /** + * XML格式字符串转换为Map + * + * @param strXML XML字符串 + * @return XML数据转换后的Map + * @throws Exception + */ + public static Map xmlToMap(String strXML) throws Exception { + try { + Map data = new HashMap(); + DocumentBuilder documentBuilder = WXPayXmlUtil.newDocumentBuilder(); + InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8")); + org.w3c.dom.Document doc = documentBuilder.parse(stream); + doc.getDocumentElement().normalize(); + NodeList nodeList = doc.getDocumentElement().getChildNodes(); + for (int idx = 0; idx < nodeList.getLength(); ++idx) { + Node node = nodeList.item(idx); + if (node.getNodeType() == Node.ELEMENT_NODE) { + org.w3c.dom.Element element = (org.w3c.dom.Element) node; + data.put(element.getNodeName(), element.getTextContent()); + } + } + try { + stream.close(); + } catch (Exception ex) { + // do nothing + } + return data; + } catch (Exception ex) { + WXPayUtil.getLogger().warn("Invalid XML, can not convert to map. Error message: {}. XML content: {}", ex.getMessage(), strXML); + throw ex; + } + + } + + /** + * 将Map转换为XML格式的字符串 + * + * @param data Map类型数据 + * @return XML格式的字符串 + * @throws Exception + */ + public static String mapToXml(Map data) throws Exception { + org.w3c.dom.Document document = WXPayXmlUtil.newDocument(); + org.w3c.dom.Element root = document.createElement("xml"); + document.appendChild(root); + for (String key: data.keySet()) { + String value = data.get(key); + if (value == null) { + value = ""; + } + value = value.trim(); + org.w3c.dom.Element filed = document.createElement(key); + filed.appendChild(document.createTextNode(value)); + root.appendChild(filed); + } + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + DOMSource source = new DOMSource(document); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + transformer.transform(source, result); + String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", ""); + try { + writer.close(); + } + catch (Exception ex) { + } + return output; + } + + + /** + * 生成带有 sign 的 XML 格式字符串 + * + * @param data Map类型数据 + * @param key API密钥 + * @return 含有sign字段的XML + */ + public static String generateSignedXml(final Map data, String key) throws Exception { + return generateSignedXml(data, key, SignType.MD5); + } + + /** + * 生成带有 sign 的 XML 格式字符串 + * + * @param data Map类型数据 + * @param key API密钥 + * @param signType 签名类型 + * @return 含有sign字段的XML + */ + public static String generateSignedXml(final Map data, String key, SignType signType) throws Exception { + String sign = generateSignature(data, key, signType); + data.put(WXPayConstants.FIELD_SIGN, sign); + return mapToXml(data); + } + + + /** + * 判断签名是否正确 + * + * @param xmlStr XML格式数据 + * @param key API密钥 + * @return 签名是否正确 + * @throws Exception + */ + public static boolean isSignatureValid(String xmlStr, String key) throws Exception { + Map data = xmlToMap(xmlStr); + if (!data.containsKey(WXPayConstants.FIELD_SIGN) ) { + return false; + } + String sign = data.get(WXPayConstants.FIELD_SIGN); + return generateSignature(data, key).equals(sign); + } + + /** + * 判断签名是否正确,必须包含sign字段,否则返回false。使用MD5签名。 + * + * @param data Map类型数据 + * @param key API密钥 + * @return 签名是否正确 + * @throws Exception + */ + public static boolean isSignatureValid(Map data, String key) throws Exception { + return isSignatureValid(data, key, SignType.MD5); + } + + /** + * 判断签名是否正确,必须包含sign字段,否则返回false。 + * + * @param data Map类型数据 + * @param key API密钥 + * @param signType 签名方式 + * @return 签名是否正确 + * @throws Exception + */ + public static boolean isSignatureValid(Map data, String key, SignType signType) throws Exception { + if (!data.containsKey(WXPayConstants.FIELD_SIGN) ) { + return false; + } + String sign = data.get(WXPayConstants.FIELD_SIGN); + return generateSignature(data, key, signType).equals(sign); + } + + /** + * 生成签名 + * + * @param data 待签名数据 + * @param key API密钥 + * @return 签名 + */ + public static String generateSignature(final Map data, String key) throws Exception { + return generateSignature(data, key, SignType.MD5); + } + + /** + * 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。 + * + * @param data 待签名数据 + * @param key API密钥 + * @param signType 签名方式 + * @return 签名 + */ + public static String generateSignature(final Map data, String key, SignType signType) throws Exception { + Set keySet = data.keySet(); + String[] keyArray = keySet.toArray(new String[keySet.size()]); + Arrays.sort(keyArray); + StringBuilder sb = new StringBuilder(); + for (String k : keyArray) { + if (k.equals(WXPayConstants.FIELD_SIGN)) { + continue; + } + if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名 + sb.append(k).append("=").append(data.get(k).trim()).append("&"); + } + sb.append("key=").append(key); + if (SignType.MD5.equals(signType)) { + return MD5(sb.toString()).toUpperCase(); + } + else if (SignType.HMACSHA256.equals(signType)) { + return HMACSHA256(sb.toString(), key); + } + else { + throw new Exception(String.format("Invalid sign_type: %s", signType)); + } + } + + + /** + * 获取随机字符串 Nonce Str + * + * @return String 随机字符串 + */ + public static String generateNonceStr() { + char[] nonceChars = new char[32]; + for (int index = 0; index < nonceChars.length; ++index) { + nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length())); + } + return new String(nonceChars); + } + + + /** + * 生成 MD5 + * + * @param data 待处理数据 + * @return MD5结果 + */ + public static String MD5(String data) throws Exception { + java.security.MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] array = md.digest(data.getBytes("UTF-8")); + StringBuilder sb = new StringBuilder(); + for (byte item : array) { + sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString().toUpperCase(); + } + + /** + * 生成 HMACSHA256 + * @param data 待处理数据 + * @param key 密钥 + * @return 加密结果 + * @throws Exception + */ + public static String HMACSHA256(String data, String key) throws Exception { + Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); + SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256"); + sha256_HMAC.init(secret_key); + byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8")); + StringBuilder sb = new StringBuilder(); + for (byte item : array) { + sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString().toUpperCase(); + } + + /** + * 日志 + * @return + */ + public static Logger getLogger() { + Logger logger = LoggerFactory.getLogger("wxpay java sdk"); + return logger; + } + + /** + * 获取当前时间戳,单位秒 + * @return + */ + public static long getCurrentTimestamp() { + return System.currentTimeMillis()/1000; + } + + /** + * 获取当前时间戳,单位毫秒 + * @return + */ + public static long getCurrentTimestampMs() { + return System.currentTimeMillis(); + } + +} diff --git a/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayXmlUtil.java b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayXmlUtil.java new file mode 100644 index 0000000..5988840 --- /dev/null +++ b/java_sdk_v3.0.9/src/main/java/com/github/wxpay/sdk/WXPayXmlUtil.java @@ -0,0 +1,30 @@ +package com.github.wxpay.sdk; + +import org.w3c.dom.Document; + +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +/** + * 2018/7/3 + */ +public final class WXPayXmlUtil { + public static DocumentBuilder newDocumentBuilder() throws ParserConfigurationException { + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities", false); + documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + documentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + documentBuilderFactory.setXIncludeAware(false); + documentBuilderFactory.setExpandEntityReferences(false); + + return documentBuilderFactory.newDocumentBuilder(); + } + + public static Document newDocument() throws ParserConfigurationException { + return newDocumentBuilder().newDocument(); + } +} diff --git a/libs/wxpay-sdk-0.0.1.jar b/libs/wxpay-sdk-0.0.1.jar new file mode 100644 index 0000000..a153876 Binary files /dev/null and b/libs/wxpay-sdk-0.0.1.jar differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e98f899 --- /dev/null +++ b/pom.xml @@ -0,0 +1,363 @@ + + + 4.0.0 + + com.ruoyi + ruoyi + pom + 3.6.0 + + ruoyi + http://www.ruoyi.vip + 若依管理系统 + + + 3.6.0 + 3.0.9 + UTF-8 + UTF-8 + 1.8 + 3.1.1 + 1.2.6 + 1.21 + 3.0.0 + 2.3.2 + 2.1.4 + 1.3.1 + 1.2.76 + 5.8.0 + 5.8.0 + 2.11.0 + 1.4 + 3.2.2 + 4.1.2 + 1.7 + 0.9.1 + 4.8.10.ALL + + + + + + + + + com.google.zxing + core + 3.4.0 + + + + com.alipay.sdk + alipay-sdk-java + ${alipay.version} + + + fastjson + com.alibaba + + + + + org.bouncycastle + bcprov-jdk16 + 1.46 + + + + dom4j + dom4j + 1.6.1 + + + + + com.github.qcloudsms + qcloudsms + 1.0.6 + + + com.aliyun + aliyun-java-sdk-core + 4.0.6 + + + + com.aliyun + aliyun-java-sdk-dysmsapi + 1.1.0 + + + + com.qcloud + cos_api + 5.6.8 + + + + com.aliyun.oss + aliyun-sdk-oss + 2.5.0 + + + + + + + + + + + org.springframework.boot + spring-boot-dependencies + 2.2.13.RELEASE + pom + import + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + eu.bitwalker + UserAgentUtils + ${bitwalker.version} + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis-spring-boot.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + + + com.github.oshi + oshi-core + ${oshi.version} + + + + net.java.dev.jna + jna + ${jna.version} + + + + net.java.dev.jna + jna-platform + ${jna.version} + + + + + io.springfox + springfox-boot-starter + ${swagger.version} + + + io.swagger + swagger-models + + + + + + + commons-io + commons-io + ${commons.io.version} + + + + + commons-fileupload + commons-fileupload + ${commons.fileupload.version} + + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + org.apache.velocity + velocity + ${velocity.version} + + + commons-collections + commons-collections + + + + + + + commons-collections + commons-collections + ${commons.collections.version} + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + io.jsonwebtoken + jjwt + ${jwt.version} + + + + + com.github.penggle + kaptcha + ${kaptcha.version} + + + + + com.ruoyi + ruoyi-quartz + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-generator + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-framework + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-system + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-common + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-segchk + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-segchk-web + ${ruoyi.version} + + + + com.github.wxpay + wxpay-sdk + ${wxsdk.version} + + + + + + ruoyi-segchk + ruoyi-segchk-web + ruoyi-admin + ruoyi-framework + ruoyi-system + ruoyi-quartz + ruoyi-generator + ruoyi-common + + + wxpay-sdk + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + 512m + 1048m + + + + + + + + + public + aliyun nexus + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + + + + + public + aliyun nexus + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + false + + + + + + \ No newline at end of file diff --git a/pom.xmlbak b/pom.xmlbak new file mode 100644 index 0000000..56ac15a --- /dev/null +++ b/pom.xmlbak @@ -0,0 +1,281 @@ + + + 4.0.0 + + com.ruoyi + ruoyi + 3.6.0 + + ruoyi + http://www.ruoyi.vip + 若依管理系统 + + + 3.6.0 + UTF-8 + UTF-8 + 1.8 + 3.1.1 + 1.2.6 + 1.21 + 3.0.0 + 2.3.2 + 2.1.4 + 1.3.1 + 1.2.76 + 5.8.0 + 5.8.0 + 2.11.0 + 1.4 + 3.2.2 + 4.1.2 + 1.7 + 0.9.1 + + + + + + + + + org.springframework.boot + spring-boot-dependencies + 2.2.13.RELEASE + pom + import + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + eu.bitwalker + UserAgentUtils + ${bitwalker.version} + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis-spring-boot.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + + + com.github.oshi + oshi-core + ${oshi.version} + + + + net.java.dev.jna + jna + ${jna.version} + + + + net.java.dev.jna + jna-platform + ${jna.version} + + + + + io.springfox + springfox-boot-starter + ${swagger.version} + + + io.swagger + swagger-models + + + + + + + commons-io + commons-io + ${commons.io.version} + + + + + commons-fileupload + commons-fileupload + ${commons.fileupload.version} + + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + org.apache.velocity + velocity + ${velocity.version} + + + commons-collections + commons-collections + + + + + + + commons-collections + commons-collections + ${commons.collections.version} + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + io.jsonwebtoken + jjwt + ${jwt.version} + + + + + com.github.penggle + kaptcha + ${kaptcha.version} + + + + + com.ruoyi + ruoyi-quartz + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-generator + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-framework + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-system + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-common + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-segchk + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-segchk-web + ${ruoyi.version} + + + + + + ruoyi-segchk + ruoyi-segchk-web + ruoyi-admin + ruoyi-framework + ruoyi-system + ruoyi-quartz + ruoyi-generator + ruoyi-common + + pom + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + + + + + public + aliyun nexus + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + + + + + public + aliyun nexus + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + false + + + + + \ No newline at end of file diff --git a/pom1.xml b/pom1.xml new file mode 100644 index 0000000..f5bc269 --- /dev/null +++ b/pom1.xml @@ -0,0 +1,320 @@ + + + 4.0.0 + + com.ruoyi + ruoyi + 3.0.0 + + ruoyi + http://www.ruoyi.vip + 魔金商城平台管理 + + + 3.0.0 + UTF-8 + UTF-8 + 1.8 + 1.3.2 + 1.1.14 + 1.19 + 2.9.2 + 1.2.5 + 1.2.70 + 3.9.1 + 2.5 + 1.3.3 + 3.17 + 1.7 + 0.9.0 + 4.8.10.ALL + + + + + + + + + com.google.zxing + core + 3.4.0 + + + + com.alipay.sdk + alipay-sdk-java + ${alipay.version} + + + fastjson + com.alibaba + + + + + org.bouncycastle + bcprov-jdk16 + 1.46 + + + + dom4j + dom4j + 1.6.1 + + + + com.github.qcloudsms + qcloudsms + 1.0.6 + + + com.aliyun + aliyun-java-sdk-core + 4.0.6 + + + + com.aliyun + aliyun-java-sdk-dysmsapi + 1.1.0 + + + + com.qcloud + cos_api + 5.6.8 + + + + com.aliyun.oss + aliyun-sdk-oss + 2.5.0 + + + + org.projectlombok + lombok + 1.18.12 + + + + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + + org.springframework.boot + spring-boot-dependencies + 2.1.1.RELEASE + pom + import + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + eu.bitwalker + UserAgentUtils + ${bitwalker.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + + + com.github.oshi + oshi-core + ${oshi.version} + + + + + io.springfox + springfox-swagger2 + ${swagger.version} + + + io.swagger + swagger-annotations + + + io.swagger + swagger-models + + + + + + + io.springfox + springfox-swagger-ui + ${swagger.version} + + + + + commons-io + commons-io + ${commons.io.version} + + + + + commons-fileupload + commons-fileupload + ${commons.fileupload.version} + + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + org.apache.velocity + velocity + ${velocity.version} + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + io.jsonwebtoken + jjwt + ${jwt.version} + + + + + com.ruoyi + ruoyi-quartz + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-generator + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-framework + ${ruoyi.version} + + + + + com.ruoyi + ruoyi-system + ${ruoyi.version} + + + + com.ruoyi + ruoyi-mall + ${ruoyi.version} + + + + com.ruoyi + ruoyi-common + ${ruoyi.version} + + + + + + + ruoyi-store + + ruoyi-web + ruoyi-admin + ruoyi-framework + + ruoyi-system + ruoyi-mall + ruoyi-quartz + ruoyi-generator + ruoyi-common + + pom + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + + + + + public + aliyun nexus + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + + + + + public + aliyun nexus + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + false + + + + + \ No newline at end of file diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml new file mode 100644 index 0000000..93af423 --- /dev/null +++ b/ruoyi-admin/pom.xml @@ -0,0 +1,98 @@ + + + + ruoyi + com.ruoyi + 3.6.0 + + + + 4.0.0 + jar + ruoyi-admin + + + web服务入口 + + + + + + + org.springframework.boot + spring-boot-devtools + true + + + + + io.springfox + springfox-boot-starter + + + + + io.swagger + swagger-models + 1.6.2 + + + + + mysql + mysql-connector-java + + + + + com.ruoyi + ruoyi-framework + + + + + com.ruoyi + ruoyi-quartz + + + + + com.ruoyi + ruoyi-generator + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.1.RELEASE + + true + + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 3.1.0 + + false + ${project.artifactId} + + + + ${project.artifactId} + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java new file mode 100644 index 0000000..390b435 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -0,0 +1,32 @@ +package com.ruoyi; + +import com.ruoyi.common.utils.SecurityUtils; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +/** + * 启动程序 + * + * @author ruoyi + */ +@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) +public class RuoYiApplication +{ + public static void main(String[] args) + { + // 第一个参数为账户名 第二个参数为密码 第三个参数为盐对应用户表salt(如果没有可以不用填) + // System.setProperty("spring.devtools.restart.enabled", "false"); + SpringApplication.run(RuoYiApplication.class, args); + System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" + + " .-------. ____ __ \n" + + " | _ _ \\ \\ \\ / / \n" + + " | ( ' ) | \\ _. / ' \n" + + " |(_ o _) / _( )_ .' \n" + + " | (_,_).' __ ___(_ o _)' \n" + + " | |\\ \\ | || |(_,_)' \n" + + " | | \\ `' /| `-' / \n" + + " | | \\ / \\ / \n" + + " ''-' `'-' `-..-' "); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java new file mode 100644 index 0000000..6de67dc --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java @@ -0,0 +1,18 @@ +package com.ruoyi; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * web容器中进行部署 + * + * @author ruoyi + */ +public class RuoYiServletInitializer extends SpringBootServletInitializer +{ + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) + { + return application.sources(RuoYiApplication.class); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/SecurityConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/security/SecurityConfig.java new file mode 100644 index 0000000..f6592ef --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/SecurityConfig.java @@ -0,0 +1,131 @@ +package com.ruoyi.security; + +import com.ruoyi.security.filter.JwtAuthenticationTokenFilter; +import com.ruoyi.security.handle.AuthenticationEntryPointImpl; +import com.ruoyi.security.handle.LogoutSuccessHandlerImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +/** + * spring security配置 + * + * @author ruoyi + */ +@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) +public class SecurityConfig extends WebSecurityConfigurerAdapter { + /** + * 自定义用户认证逻辑 + */ + @Autowired + private UserDetailsService userDetailsService; + + /** + * 认证失败处理类 + */ + @Autowired + private AuthenticationEntryPointImpl unauthorizedHandler; + + /** + * 退出处理类 + */ + @Autowired + private LogoutSuccessHandlerImpl logoutSuccessHandler; + + /** + * token认证过滤器 + */ + @Autowired + private JwtAuthenticationTokenFilter authenticationTokenFilter; + + /** + * 解决 无法直接注入 AuthenticationManager + * + * @return + * @throws Exception + */ + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + /** + * anyRequest | 匹配所有请求路径 + * access | SpringEl表达式结果为true时可以访问 + * anonymous | 匿名可以访问 + * denyAll | 用户不能访问 + * fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录) + * hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问 + * hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问 + * + * @ss.hasPermi | 如果有参数,参数表示权限,则其权限可以访问 + * hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问 + * hasRole | 如果有参数,参数表示角色,则其角色可以访问 + * permitAll | 用户可以任意访问 + * rememberMe | 允许通过remember-me登录的用户访问 + * authenticated | 用户登录后可访问 + */ + @Override + protected void configure(HttpSecurity httpSecurity) throws Exception { + httpSecurity + // CRSF禁用,因为不使用session + .csrf().disable() + // 认证失败处理类 + .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() + // 基于token,所以不需要session + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() + // 过滤请求 + .authorizeRequests() + // 对于登录login 验证码captchaImage 允许匿名访问 + .antMatchers("/login", "/captchaImage").anonymous() + .antMatchers( + HttpMethod.GET, + "/*.html", + "/**/*.html", + "/**/*.css", + "/**/*.js" + ).permitAll() + .antMatchers("/profile/**").anonymous() + .antMatchers("/common/download**").anonymous() + .antMatchers("/common/download/resource**").anonymous() + .antMatchers("/swagger-ui.html").anonymous() + .antMatchers("/swagger-resources/**").anonymous() + .antMatchers("/webjars/**").anonymous() + .antMatchers("/*/api-docs").anonymous() + .antMatchers("/druid/**").anonymous() + // 除上面外的所有请求全部需要鉴权认证 + .anyRequest().authenticated() + .and() + .headers().frameOptions().disable(); + httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler); + // 添加JWT filter + httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); + } + + + /** + * 强散列哈希加密实现 + */ + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } + + /** + * 身份认证接口 + */ + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder()); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/filter/JwtAuthenticationTokenFilter.java b/ruoyi-admin/src/main/java/com/ruoyi/security/filter/JwtAuthenticationTokenFilter.java new file mode 100644 index 0000000..6254c51 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/filter/JwtAuthenticationTokenFilter.java @@ -0,0 +1,43 @@ +package com.ruoyi.security.filter; + +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.web.service.TokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * token过滤器 验证token有效性 + * + * @author ruoyi + */ +@Component +public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { + @Autowired + private TokenService tokenService; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + logger.debug(request.getRequestURI()); + LoginUser loginUser = tokenService.getLoginUser(request); + if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) { + tokenService.verifyToken(loginUser); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authenticationToken); + } + chain.doFilter(request, response); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/handle/AuthenticationEntryPointImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/security/handle/AuthenticationEntryPointImpl.java new file mode 100644 index 0000000..7112571 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/handle/AuthenticationEntryPointImpl.java @@ -0,0 +1,33 @@ +package com.ruoyi.security.handle; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Serializable; + +/** + * 认证失败处理类 返回未授权 + * + * @author ruoyi + */ +@Component +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable { + private static final long serialVersionUID = -8970718410437077606L; + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) + throws IOException { + int code = HttpStatus.UNAUTHORIZED; + String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI()); + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg))); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/handle/LogoutSuccessHandlerImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/security/handle/LogoutSuccessHandlerImpl.java new file mode 100644 index 0000000..95c16dd --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/handle/LogoutSuccessHandlerImpl.java @@ -0,0 +1,51 @@ +package com.ruoyi.security.handle; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.framework.web.service.TokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 自定义退出处理类 返回成功 + * + * @author ruoyi + */ +@Configuration +public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler { + @Autowired + private TokenService tokenService; + + /** + * 退出处理 + * + * @return + */ + @Override + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException, ServletException { + LoginUser loginUser = tokenService.getLoginUser(request); + if (StringUtils.isNotNull(loginUser)) { + String userName = loginUser.getUsername(); + // 删除用户缓存记录 + tokenService.delLoginUser(loginUser.getToken()); + // 记录用户退出日志 + AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功")); + } + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.SUCCESS, "退出成功"))); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/Server.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/Server.java new file mode 100644 index 0000000..db3c8ab --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/Server.java @@ -0,0 +1,211 @@ +package com.ruoyi.security.web.domain; + +import com.ruoyi.common.utils.Arith; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.security.web.domain.server.*; +import oshi.SystemInfo; +import oshi.hardware.CentralProcessor; +import oshi.hardware.CentralProcessor.TickType; +import oshi.hardware.GlobalMemory; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.software.os.FileSystem; +import oshi.software.os.OSFileStore; +import oshi.software.os.OperatingSystem; +import oshi.util.Util; + +import java.net.UnknownHostException; +import java.util.LinkedList; +import java.util.List; +import java.util.Properties; + +/** + * 服务器相关信息 + * + * @author ruoyi + */ +public class Server { + private static final int OSHI_WAIT_SECOND = 1000; + + /** + * CPU相关信息 + */ + private Cpu cpu = new Cpu(); + + /** + * 內存相关信息 + */ + private Mem mem = new Mem(); + + /** + * JVM相关信息 + */ + private Jvm jvm = new Jvm(); + + /** + * 服务器相关信息 + */ + private Sys sys = new Sys(); + + /** + * 磁盘相关信息 + */ + private List sysFiles = new LinkedList(); + + public Cpu getCpu() { + return cpu; + } + + public void setCpu(Cpu cpu) { + this.cpu = cpu; + } + + public Mem getMem() { + return mem; + } + + public void setMem(Mem mem) { + this.mem = mem; + } + + public Jvm getJvm() { + return jvm; + } + + public void setJvm(Jvm jvm) { + this.jvm = jvm; + } + + public Sys getSys() { + return sys; + } + + public void setSys(Sys sys) { + this.sys = sys; + } + + public List getSysFiles() { + return sysFiles; + } + + public void setSysFiles(List sysFiles) { + this.sysFiles = sysFiles; + } + + /** + * 设置磁盘信息 + */ + private void setSysFiles(OperatingSystem os) { + FileSystem fileSystem = os.getFileSystem(); + OSFileStore[] fsArray = fileSystem.getFileStores().toArray(new OSFileStore[0]); + for (OSFileStore fs : fsArray) { + long free = fs.getUsableSpace(); + long total = fs.getTotalSpace(); + long used = total - free; + SysFile sysFile = new SysFile(); + sysFile.setDirName(fs.getMount()); + sysFile.setSysTypeName(fs.getType()); + sysFile.setTypeName(fs.getName()); + sysFile.setTotal(convertFileSize(total)); + sysFile.setFree(convertFileSize(free)); + sysFile.setUsed(convertFileSize(used)); + sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100)); + sysFiles.add(sysFile); + } + } + + public void copyTo() throws Exception { + SystemInfo si = new SystemInfo(); + HardwareAbstractionLayer hal = si.getHardware(); + + setCpuInfo(hal.getProcessor()); + + setMemInfo(hal.getMemory()); + + setSysInfo(); + + setJvmInfo(); + + setSysFiles(si.getOperatingSystem()); + } + + /** + * 设置CPU信息 + */ + private void setCpuInfo(CentralProcessor processor) { + // CPU信息 + long[] prevTicks = processor.getSystemCpuLoadTicks(); + Util.sleep(OSHI_WAIT_SECOND); + long[] ticks = processor.getSystemCpuLoadTicks(); + long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()]; + long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()]; + long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()]; + long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()]; + long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()]; + long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()]; + long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()]; + long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()]; + long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal; + cpu.setCpuNum(processor.getLogicalProcessorCount()); + cpu.setTotal(totalCpu); + cpu.setSys(cSys); + cpu.setUsed(user); + cpu.setWait(iowait); + cpu.setFree(idle); + } + + /** + * 设置内存信息 + */ + private void setMemInfo(GlobalMemory memory) { + mem.setTotal(memory.getTotal()); + mem.setUsed(memory.getTotal() - memory.getAvailable()); + mem.setFree(memory.getAvailable()); + } + + /** + * 设置服务器信息 + */ + private void setSysInfo() { + Properties props = System.getProperties(); + sys.setComputerName(IpUtils.getHostName()); + sys.setComputerIp(IpUtils.getHostIp()); + sys.setOsName(props.getProperty("os.name")); + sys.setOsArch(props.getProperty("os.arch")); + sys.setUserDir(props.getProperty("user.dir")); + } + + /** + * 设置Java虚拟机 + */ + private void setJvmInfo() throws UnknownHostException { + Properties props = System.getProperties(); + jvm.setTotal(Runtime.getRuntime().totalMemory()); + jvm.setMax(Runtime.getRuntime().maxMemory()); + jvm.setFree(Runtime.getRuntime().freeMemory()); + jvm.setVersion(props.getProperty("java.version")); + jvm.setHome(props.getProperty("java.home")); + } + + /** + * 字节转换 + * + * @param size 字节大小 + * @return 转换后值 + */ + public String convertFileSize(long size) { + long kb = 1024; + long mb = kb * 1024; + long gb = mb * 1024; + if (size >= gb) { + return String.format("%.1f GB", (float) size / gb); + } else if (size >= mb) { + float f = (float) size / mb; + return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f); + } else if (size >= kb) { + float f = (float) size / kb; + return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f); + } else { + return String.format("%d B", size); + } + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Cpu.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Cpu.java new file mode 100644 index 0000000..37dcf3c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Cpu.java @@ -0,0 +1,88 @@ +package com.ruoyi.security.web.domain.server; + +import com.ruoyi.common.utils.Arith; + +/** + * CPU相关信息 + * + * @author ruoyi + */ +public class Cpu { + /** + * 核心数 + */ + private int cpuNum; + + /** + * CPU总的使用率 + */ + private double total; + + /** + * CPU系统使用率 + */ + private double sys; + + /** + * CPU用户使用率 + */ + private double used; + + /** + * CPU当前等待率 + */ + private double wait; + + /** + * CPU当前空闲率 + */ + private double free; + + public int getCpuNum() { + return cpuNum; + } + + public void setCpuNum(int cpuNum) { + this.cpuNum = cpuNum; + } + + public double getTotal() { + return Arith.round(Arith.mul(total, 100), 2); + } + + public void setTotal(double total) { + this.total = total; + } + + public double getSys() { + return Arith.round(Arith.mul(sys / total, 100), 2); + } + + public void setSys(double sys) { + this.sys = sys; + } + + public double getUsed() { + return Arith.round(Arith.mul(used / total, 100), 2); + } + + public void setUsed(double used) { + this.used = used; + } + + public double getWait() { + return Arith.round(Arith.mul(wait / total, 100), 2); + } + + public void setWait(double wait) { + this.wait = wait; + } + + public double getFree() { + return Arith.round(Arith.mul(free / total, 100), 2); + } + + public void setFree(double free) { + this.free = free; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Jvm.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Jvm.java new file mode 100644 index 0000000..c44f437 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Jvm.java @@ -0,0 +1,107 @@ +package com.ruoyi.security.web.domain.server; + +import com.ruoyi.common.utils.Arith; +import com.ruoyi.common.utils.DateUtils; + +import java.lang.management.ManagementFactory; + +/** + * JVM相关信息 + * + * @author ruoyi + */ +public class Jvm { + /** + * 当前JVM占用的内存总数(M) + */ + private double total; + + /** + * JVM最大可用内存总数(M) + */ + private double max; + + /** + * JVM空闲内存(M) + */ + private double free; + + /** + * JDK版本 + */ + private String version; + + /** + * JDK路径 + */ + private String home; + + public double getTotal() { + return Arith.div(total, (1024 * 1024), 2); + } + + public void setTotal(double total) { + this.total = total; + } + + public double getMax() { + return Arith.div(max, (1024 * 1024), 2); + } + + public void setMax(double max) { + this.max = max; + } + + public double getFree() { + return Arith.div(free, (1024 * 1024), 2); + } + + public void setFree(double free) { + this.free = free; + } + + public double getUsed() { + return Arith.div(total - free, (1024 * 1024), 2); + } + + public double getUsage() { + return Arith.mul(Arith.div(total - free, total, 4), 100); + } + + /** + * 获取JDK名称 + */ + public String getName() { + return ManagementFactory.getRuntimeMXBean().getVmName(); + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getHome() { + return home; + } + + public void setHome(String home) { + this.home = home; + } + + /** + * JDK启动时间 + */ + public String getStartTime() { + return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getServerStartDate()); + } + + /** + * JDK运行时间 + */ + public String getRunTime() { + return DateUtils.getDatePoor(DateUtils.getNowDate(), DateUtils.getServerStartDate()); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Mem.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Mem.java new file mode 100644 index 0000000..d98a29e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Mem.java @@ -0,0 +1,53 @@ +package com.ruoyi.security.web.domain.server; + +import com.ruoyi.common.utils.Arith; + +/** + * 內存相关信息 + * + * @author ruoyi + */ +public class Mem { + /** + * 内存总量 + */ + private double total; + + /** + * 已用内存 + */ + private double used; + + /** + * 剩余内存 + */ + private double free; + + public double getTotal() { + return Arith.div(total, (1024 * 1024 * 1024), 2); + } + + public void setTotal(long total) { + this.total = total; + } + + public double getUsed() { + return Arith.div(used, (1024 * 1024 * 1024), 2); + } + + public void setUsed(long used) { + this.used = used; + } + + public double getFree() { + return Arith.div(free, (1024 * 1024 * 1024), 2); + } + + public void setFree(long free) { + this.free = free; + } + + public double getUsage() { + return Arith.mul(Arith.div(used, total, 4), 100); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Sys.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Sys.java new file mode 100644 index 0000000..014a138 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/Sys.java @@ -0,0 +1,73 @@ +package com.ruoyi.security.web.domain.server; + +/** + * 系统相关信息 + * + * @author ruoyi + */ +public class Sys { + /** + * 服务器名称 + */ + private String computerName; + + /** + * 服务器Ip + */ + private String computerIp; + + /** + * 项目路径 + */ + private String userDir; + + /** + * 操作系统 + */ + private String osName; + + /** + * 系统架构 + */ + private String osArch; + + public String getComputerName() { + return computerName; + } + + public void setComputerName(String computerName) { + this.computerName = computerName; + } + + public String getComputerIp() { + return computerIp; + } + + public void setComputerIp(String computerIp) { + this.computerIp = computerIp; + } + + public String getUserDir() { + return userDir; + } + + public void setUserDir(String userDir) { + this.userDir = userDir; + } + + public String getOsName() { + return osName; + } + + public void setOsName(String osName) { + this.osName = osName; + } + + public String getOsArch() { + return osArch; + } + + public void setOsArch(String osArch) { + this.osArch = osArch; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/SysFile.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/SysFile.java new file mode 100644 index 0000000..9f7ddb1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/domain/server/SysFile.java @@ -0,0 +1,99 @@ +package com.ruoyi.security.web.domain.server; + +/** + * 系统文件相关信息 + * + * @author ruoyi + */ +public class SysFile { + /** + * 盘符路径 + */ + private String dirName; + + /** + * 盘符类型 + */ + private String sysTypeName; + + /** + * 文件类型 + */ + private String typeName; + + /** + * 总大小 + */ + private String total; + + /** + * 剩余大小 + */ + private String free; + + /** + * 已经使用量 + */ + private String used; + + /** + * 资源的使用率 + */ + private double usage; + + public String getDirName() { + return dirName; + } + + public void setDirName(String dirName) { + this.dirName = dirName; + } + + public String getSysTypeName() { + return sysTypeName; + } + + public void setSysTypeName(String sysTypeName) { + this.sysTypeName = sysTypeName; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public String getTotal() { + return total; + } + + public void setTotal(String total) { + this.total = total; + } + + public String getFree() { + return free; + } + + public void setFree(String free) { + this.free = free; + } + + public String getUsed() { + return used; + } + + public void setUsed(String used) { + this.used = used; + } + + public double getUsage() { + return usage; + } + + public void setUsage(double usage) { + this.usage = usage; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/exception/GlobalExceptionHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..554ab27 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/exception/GlobalExceptionHandler.java @@ -0,0 +1,105 @@ +package com.ruoyi.security.web.exception; + +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.exception.CustomException; +import com.ruoyi.common.exception.DemoModeException; +import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.authentication.AccountExpiredException; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.validation.BindException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.NoHandlerFoundException; + +/** + * 全局异常处理器 + * + * @author ruoyi + */ +@RestControllerAdvice +public class GlobalExceptionHandler { + private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + /** + * 基础异常 + */ + @ExceptionHandler(BaseException.class) + public AjaxResult baseException(BaseException e) { + return AjaxResult.error(e.getMessage()); + } + + /** + * 业务异常 + */ + @ExceptionHandler(CustomException.class) + public AjaxResult businessException(CustomException e) { + if (StringUtils.isNull(e.getCode())) { + return AjaxResult.error(e.getMessage()); + } + return AjaxResult.error(e.getCode(), e.getMessage()); + } + + @ExceptionHandler(NoHandlerFoundException.class) + public AjaxResult handlerNoFoundException(Exception e) { + log.error(e.getMessage(), e); + return AjaxResult.error(HttpStatus.NOT_FOUND, "路径不存在,请检查路径是否正确"); + } + + @ExceptionHandler(AccessDeniedException.class) + public AjaxResult handleAuthorizationException(AccessDeniedException e) { + log.error(e.getMessage()); + return AjaxResult.error(HttpStatus.FORBIDDEN, "没有权限,请联系管理员授权"); + } + + @ExceptionHandler(AccountExpiredException.class) + public AjaxResult handleAccountExpiredException(AccountExpiredException e) { + log.error(e.getMessage(), e); + return AjaxResult.error(e.getMessage()); + } + + @ExceptionHandler(UsernameNotFoundException.class) + public AjaxResult handleUsernameNotFoundException(UsernameNotFoundException e) { + log.error(e.getMessage(), e); + return AjaxResult.error(e.getMessage()); + } + + @ExceptionHandler(Exception.class) + public AjaxResult handleException(Exception e) { + log.error(e.getMessage(), e); + return AjaxResult.error(e.getMessage()); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(BindException.class) + public AjaxResult validatedBindException(BindException e) { + log.error(e.getMessage(), e); + String message = e.getAllErrors().get(0).getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public Object validExceptionHandler(MethodArgumentNotValidException e) { + log.error(e.getMessage(), e); + String message = e.getBindingResult().getFieldError().getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 演示模式异常 + */ + @ExceptionHandler(DemoModeException.class) + public AjaxResult demoModeException(DemoModeException e) { + return AjaxResult.error("演示模式,不允许操作"); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/PermissionService.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/PermissionService.java new file mode 100644 index 0000000..6e1127b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/PermissionService.java @@ -0,0 +1,153 @@ +package com.ruoyi.security.web.service; + +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.web.service.TokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Set; + +/** + * RuoYi首创 自定义权限实现,ss取自SpringSecurity首字母 + * + * @author ruoyi + */ +@Service("ss") +public class PermissionService { + /** + * 所有权限标识 + */ + private static final String ALL_PERMISSION = "*:*:*"; + + /** + * 管理员角色权限标识 + */ + private static final String SUPER_ADMIN = "admin"; + + private static final String ROLE_DELIMETER = ","; + + private static final String PERMISSION_DELIMETER = ","; + + @Autowired + private TokenService tokenService; + + /** + * 验证用户是否具备某权限 + * + * @param permission 权限字符串 + * @return 用户是否具备某权限 + */ + public boolean hasPermi(String permission) { + if (StringUtils.isEmpty(permission)) { + return false; + } + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) { + return false; + } + return hasPermissions(loginUser.getPermissions(), permission); + } + + /** + * 验证用户是否不具备某权限,与 hasPermi逻辑相反 + * + * @param permission 权限字符串 + * @return 用户是否不具备某权限 + */ + public boolean lacksPermi(String permission) { + return hasPermi(permission) != true; + } + + /** + * 验证用户是否具有以下任意一个权限 + * + * @param permissions 以 PERMISSION_NAMES_DELIMETER 为分隔符的权限列表 + * @return 用户是否具有以下任意一个权限 + */ + public boolean hasAnyPermi(String permissions) { + if (StringUtils.isEmpty(permissions)) { + return false; + } + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) { + return false; + } + Set authorities = loginUser.getPermissions(); + for (String permission : permissions.split(PERMISSION_DELIMETER)) { + if (permission != null && hasPermissions(authorities, permission)) { + return true; + } + } + return false; + } + + /** + * 判断用户是否拥有某个角色 + * + * @param role 角色字符串 + * @return 用户是否具备某角色 + */ + public boolean hasRole(String role) { + if (StringUtils.isEmpty(role)) { + return false; + } + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) { + return false; + } + for (SysRole sysRole : loginUser.getUser().getRoles()) { + String roleKey = sysRole.getRoleKey(); + if (SUPER_ADMIN.contains(roleKey) || roleKey.contains(StringUtils.trim(role))) { + return true; + } + } + return false; + } + + /** + * 验证用户是否不具备某角色,与 isRole逻辑相反。 + * + * @param role 角色名称 + * @return 用户是否不具备某角色 + */ + public boolean lacksRole(String role) { + return hasRole(role) != true; + } + + /** + * 验证用户是否具有以下任意一个角色 + * + * @param roles 以 ROLE_NAMES_DELIMETER 为分隔符的角色列表 + * @return 用户是否具有以下任意一个角色 + */ + public boolean hasAnyRoles(String roles) { + if (StringUtils.isEmpty(roles)) { + return false; + } + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) { + return false; + } + for (String role : roles.split(ROLE_DELIMETER)) { + if (hasRole(role)) { + return true; + } + } + return false; + } + + /** + * 判断是否包含权限 + * + * @param permissions 权限列表 + * @param permission 权限字符串 + * @return 用户是否具备某权限 + */ + private boolean hasPermissions(Set permissions, String permission) { + return permissions.contains(ALL_PERMISSION) || permissions.contains(StringUtils.trim(permission)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/SysLoginService.java new file mode 100644 index 0000000..bf586d0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/SysLoginService.java @@ -0,0 +1,80 @@ +package com.ruoyi.security.web.service; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.CustomException; +import com.ruoyi.common.exception.user.CaptchaException; +import com.ruoyi.common.exception.user.CaptchaExpireException; +import com.ruoyi.common.exception.user.UserPasswordNotMatchException; +import com.ruoyi.common.utils.MessageUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.framework.web.service.TokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 登录校验方法 + * + * @author ruoyi + */ +@Component +public class SysLoginService { + @Autowired + private TokenService tokenService; + + @Resource + private AuthenticationManager authenticationManager; + + @Autowired + private RedisCache redisCache; + + /** + * 登录验证 + * + * @param username 用户名 + * @param password 密码 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public String login(String username, String password, String code, String uuid) { + String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; + String captcha = redisCache.getCacheObject(verifyKey); + redisCache.deleteObject(verifyKey); + if (captcha == null) { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"))); + throw new CaptchaExpireException(); + } + if (!code.equalsIgnoreCase(captcha)) { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); + throw new CaptchaException(); + } + // 用户验证 + Authentication authentication = null; + try { + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager + .authenticate(new UsernamePasswordAuthenticationToken(username, password)); + } catch (Exception e) { + if (e instanceof BadCredentialsException) { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } else { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new CustomException(e.getMessage()); + } + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + // 生成token + return tokenService.createToken(loginUser); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/SysPermissionService.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/SysPermissionService.java new file mode 100644 index 0000000..443afb7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/SysPermissionService.java @@ -0,0 +1,58 @@ +package com.ruoyi.security.web.service; + +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.segchk.service.ISegchkProviderMgtService; +import com.ruoyi.system.service.ISysMenuService; +import com.ruoyi.system.service.ISysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashSet; +import java.util.Set; + +/** + * 用户权限处理 + * + * @author ruoyi + */ +@Component +public class SysPermissionService { + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysMenuService menuService; + /** + * 获取角色数据权限 + * + * @param user 用户信息 + * @return 角色权限信息 + */ + public Set getRolePermission(SysUser user) { + Set roles = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) { + roles.add("admin"); + } else { + roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId())); + } + return roles; + } + + /** + * 获取菜单数据权限 + * + * @param user 用户信息 + * @return 菜单权限信息 + */ + public Set getMenuPermission(SysUser user) { + Set perms = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) { + perms.add("*:*:*"); + } else { + perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); + } + return perms; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/UserDetailsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/UserDetailsServiceImpl.java new file mode 100644 index 0000000..db42920 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/security/web/service/UserDetailsServiceImpl.java @@ -0,0 +1,52 @@ +package com.ruoyi.security.web.service; + +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.UserStatus; +import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.service.ISysUserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +/** + * 用户验证处理 + * + * @author ruoyi + */ +@Service +public class UserDetailsServiceImpl implements UserDetailsService { + private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class); + + @Autowired + private ISysUserService userService; + + @Autowired + private SysPermissionService permissionService; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + SysUser user = userService.selectUserByUserName(username); + if (StringUtils.isNull(user)) { + log.info("登录用户:{} 不存在.", username); + throw new UsernameNotFoundException("登录用户:" + username + " 不存在"); + } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { + log.info("登录用户:{} 已被删除.", username); + throw new BaseException("对不起,您的账号:" + username + " 已被删除"); + } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { + log.info("登录用户:{} 已被停用.", username); + throw new BaseException("对不起,您的账号:" + username + " 已停用"); + } + + return createLoginUser(user); + } + + public UserDetails createLoginUser(SysUser user) { + return new LoginUser(user, permissionService.getMenuPermission(user)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java new file mode 100644 index 0000000..0aad226 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java @@ -0,0 +1,96 @@ +package com.ruoyi.web.controller.common; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.FastByteArrayOutputStream; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import com.google.code.kaptcha.Producer; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.sign.Base64; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.system.service.ISysConfigService; + +/** + * 验证码操作处理 + * + * @author ruoyi + */ +@RestController +public class CaptchaController +{ + @Resource(name = "captchaProducer") + private Producer captchaProducer; + + @Resource(name = "captchaProducerMath") + private Producer captchaProducerMath; + + @Autowired + private RedisCache redisCache; + + // 验证码类型 + @Value("${ruoyi.captchaType}") + private String captchaType; + + @Autowired + private ISysConfigService configService; + /** + * 生成验证码 + */ + @GetMapping("/captchaImage") + public AjaxResult getCode(HttpServletResponse response) throws IOException + { + AjaxResult ajax = AjaxResult.success(); + boolean captchaOnOff = configService.selectCaptchaOnOff(); + ajax.put("captchaOnOff", captchaOnOff); + if (!captchaOnOff) + { + return ajax; + } + + // 保存验证码信息 + String uuid = IdUtils.simpleUUID(); + String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; + + String capStr = null, code = null; + BufferedImage image = null; + + // 生成验证码 + if ("math".equals(captchaType)) + { + String capText = captchaProducerMath.createText(); + capStr = capText.substring(0, capText.lastIndexOf("@")); + code = capText.substring(capText.lastIndexOf("@") + 1); + image = captchaProducerMath.createImage(capStr); + } + else if ("char".equals(captchaType)) + { + capStr = code = captchaProducer.createText(); + image = captchaProducer.createImage(capStr); + } + + redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + // 转换流信息写出 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try + { + ImageIO.write(image, "jpg", os); + } + catch (IOException e) + { + return AjaxResult.error(e.getMessage()); + } + + ajax.put("uuid", uuid); + ajax.put("img", Base64.encode(os.toByteArray())); + return ajax; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java new file mode 100644 index 0000000..bf5b910 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java @@ -0,0 +1,334 @@ +package com.ruoyi.web.controller.common; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.file.FileUploadUtils; +import com.ruoyi.common.utils.file.FileUtils; +import com.ruoyi.framework.config.ServerConfig; + +/** + * 通用请求处理 + * + * @author ruoyi + */ +@RestController +public class CommonController +{ + private static final Logger log = LoggerFactory.getLogger(CommonController.class); + + @Autowired + private ServerConfig serverConfig; + + /** + * 通用下载请求 + * + * @param fileName 文件名称 + * @param delete 是否删除 + */ + @GetMapping("common/download") + public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) + { + try + { + if (!FileUtils.checkAllowDownload(fileName)) + { + throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); + } + String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); + String filePath = RuoYiConfig.getDownloadPath() + fileName; + + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, realFileName); + FileUtils.writeBytes(filePath, response.getOutputStream()); + if (delete) + { + FileUtils.deleteFile(filePath); + } + } + catch (Exception e) + { + log.error("下载文件失败", e); + } + } + + /** + * 通用上传请求 + */ + @PostMapping("/common/upload") + public AjaxResult uploadFile(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + String url = serverConfig.getUrl() + fileName; + log.debug("/common/upload with url: {{}}, filename: {{}}", url, fileName ); + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + + /** + * 上传商家执照 + */ + @PostMapping("/common/store_cert") + public AjaxResult storeCert(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getProfile() + "/store_cert"; + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + String url = serverConfig.getUrl() + fileName; + log.debug("/common/store_cert with url: {{}}, filename: {{}}", url, fileName ); + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + + /** + * 上传商家小图标 + */ + @PostMapping("/common/store_smallicon") + public AjaxResult storeSmallicon(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getProfile() + "/store_smallicon"; + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + String url = serverConfig.getUrl() + fileName; + log.debug("/common/store_smallicon with url: {{}}, filename: {{}}", url, fileName ); + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + + /** + * 上传商家大图标 + */ + @PostMapping("/common/store_bigicon") + public AjaxResult storeBigicon(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getProfile() + "/store_bigicon"; + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + String url = serverConfig.getUrl() + fileName; + log.debug("/common/store_bigicon with url: {{}}, filename: {{}}", url, fileName ); + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 上传商家轮播图 + */ + @PostMapping("/common/store_banner") + public AjaxResult storeBanner(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getProfile() + "/store_banner"; + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + String url = serverConfig.getUrl() + fileName; + log.debug("/common/store_banner with url: {{}}, filename: {{}}", url, fileName ); + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + + /** + * 上传商家环境 + */ + @PostMapping("/common/store_env") + public AjaxResult storeEnv(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getProfile() + "/store_env"; + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + String url = serverConfig.getUrl() + fileName; + log.debug("/common/store_env with url: {{}}, filename: {{}}", url, fileName ); + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 上传商家详情 + */ + @PostMapping("/common/store_details") + public AjaxResult storeDetails(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getProfile() + "/store_details"; + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + String url = serverConfig.getUrl() + fileName; + log.debug("/common/store_details with url: {{}}, filename: {{}}", url, fileName ); + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + + /** + * 上传行业标签 + */ + @PostMapping("/common/keyword") + public AjaxResult keyword(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getProfile() + "/keyword"; + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + String url = serverConfig.getUrl() + fileName; + log.debug("/common/keyword with url: {{}}, filename: {{}}", url, fileName ); + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + + /** + * 上传优惠券 + */ + @PostMapping("/common/preference") + public AjaxResult preference(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getProfile() + "/preference"; + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + String url = serverConfig.getUrl() + fileName; + log.debug("/common/preference with url: {{}}, filename: {{}}", url, fileName ); + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 本地资源通用下载 + */ + @GetMapping("/common/download/resource") + public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) + throws Exception + { + try + { + if (!FileUtils.checkAllowDownload(resource)) + { + throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource)); + } + // 本地资源路径 + String localPath = RuoYiConfig.getProfile(); + // 数据库资源地址 + String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); + // 下载名称 + String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, downloadName); + FileUtils.writeBytes(downloadPath, response.getOutputStream()); + } + catch (Exception e) + { + log.error("下载文件失败", e); + } + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java new file mode 100644 index 0000000..7b97de2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java @@ -0,0 +1,53 @@ +package com.ruoyi.web.controller.monitor; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.StringUtils; + +/** + * 缓存监控 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/cache") +public class CacheController +{ + @Autowired + private RedisTemplate redisTemplate; + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping() + public AjaxResult getInfo() throws Exception + { + Properties info = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info()); + Properties commandStats = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info("commandstats")); + Object dbSize = redisTemplate.execute((RedisCallback) connection -> connection.dbSize()); + + Map result = new HashMap<>(3); + result.put("info", info); + result.put("dbSize", dbSize); + + List> pieList = new ArrayList<>(); + commandStats.stringPropertyNames().forEach(key -> { + Map data = new HashMap<>(2); + String property = commandStats.getProperty(key); + data.put("name", StringUtils.removeStart(key, "cmdstat_")); + data.put("value", StringUtils.substringBetween(property, "calls=", ",usec")); + pieList.add(data); + }); + result.put("commandStats", pieList); + return AjaxResult.success(result); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java new file mode 100644 index 0000000..7c3c812 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java @@ -0,0 +1,27 @@ +package com.ruoyi.web.controller.monitor; + +import com.ruoyi.security.web.domain.Server; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.AjaxResult; + +/** + * 服务器监控 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/server") +public class ServerController +{ + @PreAuthorize("@ss.hasPermi('monitor:server:list')") + @GetMapping() + public AjaxResult getInfo() throws Exception + { + Server server = new Server(); + server.copyTo(); + return AjaxResult.success(server); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java new file mode 100644 index 0000000..339f242 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java @@ -0,0 +1,67 @@ +package com.ruoyi.web.controller.monitor; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.SysLogininfor; +import com.ruoyi.system.service.ISysLogininforService; + +/** + * 系统访问记录 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/logininfor") +public class SysLogininforController extends BaseController +{ + @Autowired + private ISysLogininforService logininforService; + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") + @GetMapping("/list") + public TableDataInfo list(SysLogininfor logininfor) + { + startPage(); + List list = logininforService.selectLogininforList(logininfor); + return getDataTable(list); + } + + @Log(title = "登录日志", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") + @GetMapping("/export") + public AjaxResult export(SysLogininfor logininfor) + { + List list = logininforService.selectLogininforList(logininfor); + ExcelUtil util = new ExcelUtil(SysLogininfor.class); + return util.exportExcel(list, "登录日志"); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "登录日志", businessType = BusinessType.DELETE) + @DeleteMapping("/{infoIds}") + public AjaxResult remove(@PathVariable Long[] infoIds) + { + return toAjax(logininforService.deleteLogininforByIds(infoIds)); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "登录日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public AjaxResult clean() + { + logininforService.cleanLogininfor(); + return AjaxResult.success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java new file mode 100644 index 0000000..1d7eb02 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java @@ -0,0 +1,67 @@ +package com.ruoyi.web.controller.monitor; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.SysOperLog; +import com.ruoyi.system.service.ISysOperLogService; + +/** + * 操作日志记录 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/operlog") +public class SysOperlogController extends BaseController +{ + @Autowired + private ISysOperLogService operLogService; + + @PreAuthorize("@ss.hasPermi('monitor:operlog:list')") + @GetMapping("/list") + public TableDataInfo list(SysOperLog operLog) + { + startPage(); + List list = operLogService.selectOperLogList(operLog); + return getDataTable(list); + } + + @Log(title = "操作日志", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:operlog:export')") + @GetMapping("/export") + public AjaxResult export(SysOperLog operLog) + { + List list = operLogService.selectOperLogList(operLog); + ExcelUtil util = new ExcelUtil(SysOperLog.class); + return util.exportExcel(list, "操作日志"); + } + + @Log(title = "操作日志", businessType = BusinessType.DELETE) + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/{operIds}") + public AjaxResult remove(@PathVariable Long[] operIds) + { + return toAjax(operLogService.deleteOperLogByIds(operIds)); + } + + @Log(title = "操作日志", businessType = BusinessType.CLEAN) + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/clean") + public AjaxResult clean() + { + operLogService.cleanOperLog(); + return AjaxResult.success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java new file mode 100644 index 0000000..9b157ea --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java @@ -0,0 +1,92 @@ +package com.ruoyi.web.controller.monitor; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysUserOnline; +import com.ruoyi.system.service.ISysUserOnlineService; + +/** + * 在线用户监控 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/online") +public class SysUserOnlineController extends BaseController +{ + @Autowired + private ISysUserOnlineService userOnlineService; + + @Autowired + private RedisCache redisCache; + + @PreAuthorize("@ss.hasPermi('monitor:online:list')") + @GetMapping("/list") + public TableDataInfo list(String ipaddr, String userName) + { + Collection keys = redisCache.keys(Constants.LOGIN_TOKEN_KEY + "*"); + List userOnlineList = new ArrayList(); + for (String key : keys) + { + LoginUser user = redisCache.getCacheObject(key); + if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) + { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) + { + userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); + } + } + else if (StringUtils.isNotEmpty(ipaddr)) + { + if (StringUtils.equals(ipaddr, user.getIpaddr())) + { + userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); + } + } + else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) + { + if (StringUtils.equals(userName, user.getUsername())) + { + userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); + } + } + else + { + userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); + } + } + Collections.reverse(userOnlineList); + userOnlineList.removeAll(Collections.singleton(null)); + return getDataTable(userOnlineList); + } + + /** + * 强退用户 + */ + @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')") + @Log(title = "在线用户", businessType = BusinessType.FORCE) + @DeleteMapping("/{tokenId}") + public AjaxResult forceLogout(@PathVariable String tokenId) + { + redisCache.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId); + return AjaxResult.success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkCarouseMgtController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkCarouseMgtController.java new file mode 100644 index 0000000..c766f54 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkCarouseMgtController.java @@ -0,0 +1,183 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkCarouseMgt; +import com.ruoyi.segchk.service.ISegchkCarouseMgtService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg首页轮播图管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_carouse_mgt") +public class SegchkCarouseMgtController extends BaseController +{ + @Autowired + private ISegchkCarouseMgtService segchkCarouseMgtService; + + /** + * 查询seg首页轮播图管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkCarouseMgt segchkCarouseMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkCarouseMgt.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkCarouseMgtService.selectSegchkCarouseMgtList(segchkCarouseMgt); + return getDataTable(list); + } + + /** + * 导出seg首页轮播图管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:export')") + @Log(title = "seg首页轮播图管理", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkCarouseMgt segchkCarouseMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkCarouseMgt.setProviderId(sysUser.getProviderId()); + } + List list = segchkCarouseMgtService.selectSegchkCarouseMgtList(segchkCarouseMgt); + ExcelUtil util = new ExcelUtil(SegchkCarouseMgt.class); + return util.exportExcel(list, "seg首页轮播图管理数据"); + } + + /** + * 获取seg首页轮播图管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:query')") + @GetMapping(value = "/{carouseId}") + public AjaxResult getInfo(@PathVariable("carouseId") Long carouseId) + { + return AjaxResult.success(segchkCarouseMgtService.selectSegchkCarouseMgtByCarouseId(carouseId)); + } + + /** + * 新增seg首页轮播图管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:add')") + @Log(title = "seg首页轮播图管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkCarouseMgt segchkCarouseMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkCarouseMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkCarouseMgtService.insertSegchkCarouseMgt(segchkCarouseMgt)); + } + + /** + * 修改seg首页轮播图管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:edit')") + @Log(title = "seg首页轮播图管理", businessType = BusinessType.UPDATE) + @PutMapping("edit_info") + public AjaxResult edit(@RequestBody SegchkCarouseMgt segchkCarouseMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkCarouseMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkCarouseMgtService.updateSegchkCarouseMgt(segchkCarouseMgt)); + } + + /** + * 修改seg首页轮播图管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:edit')") + @Log(title = "seg首页轮播图管理", businessType = BusinessType.UPDATE) + @PutMapping("/mgt_state") + public AjaxResult mgt_state(@RequestBody SegchkCarouseMgt segchkCarouseMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkCarouseMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkCarouseMgtService.updateSegchkCarouseMgt(segchkCarouseMgt)); + } + + + /** + * 修改seg首页轮播图管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:edit')") + @Log(title = "seg首页轮播图管理", businessType = BusinessType.UPDATE) + @PutMapping("/sort_update") + public AjaxResult sort_update(@RequestBody String[] sortInfos) + { + logger.debug("sort_update with {}", sortInfos); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + ; + } + return toAjax(segchkCarouseMgtService.updateSegchkCarouseMgtSort(sortInfos)); + } + + /** + * 删除seg首页轮播图管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:remove')") + @Log(title = "seg首页轮播图管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{carouseIds}") + public AjaxResult remove(@PathVariable Long[] carouseIds) + { + return toAjax(segchkCarouseMgtService.deleteSegchkCarouseMgtByCarouseIds(carouseIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkChargeCardController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkChargeCardController.java new file mode 100644 index 0000000..6bc002e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkChargeCardController.java @@ -0,0 +1,154 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkChargeCard; +import com.ruoyi.segchk.service.ISegchkChargeCardService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg充值卡管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_charge_card") +public class SegchkChargeCardController extends BaseController +{ + @Autowired + private ISegchkChargeCardService segchkChargeCardService; + + /** + * 查询seg充值卡管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_charge_card:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkChargeCard segchkChargeCard) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkChargeCard.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkChargeCardService.selectSegchkChargeCardList(segchkChargeCard); + return getDataTable(list); + } + + /** + * 导出seg充值卡管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_charge_card:export')") + @Log(title = "seg充值卡管理", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkChargeCard segchkChargeCard) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkChargeCard.setProviderId(sysUser.getProviderId()); + } + List list = segchkChargeCardService.selectSegchkChargeCardList(segchkChargeCard); + ExcelUtil util = new ExcelUtil(SegchkChargeCard.class); + return util.exportExcel(list, "seg充值卡管理数据"); + } + + /** + * 获取seg充值卡管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_charge_card:query')") + @GetMapping(value = "/{cardTypeId}") + public AjaxResult getInfo(@PathVariable("cardTypeId") Long cardTypeId) + { + SegchkChargeCard segchkChargeCard = new SegchkChargeCard(); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkChargeCard.setProviderId(sysUser.getProviderId()); + } + return AjaxResult.success(segchkChargeCardService.selectSegchkChargeCardByCardTypeId(cardTypeId)); + } + + /** + * 新增seg充值卡管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_charge_card:add')") + @Log(title = "seg充值卡管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkChargeCard segchkChargeCard) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + if(ObjectUtils.isEmpty(segchkChargeCard.getProviderId())){ + return AjaxResult.error("500", "请输入运营商id"); + } + } + else{ + segchkChargeCard.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkChargeCardService.insertSegchkChargeCard(segchkChargeCard)); + } + + /** + * 修改seg充值卡管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_charge_card:edit')") + @Log(title = "seg充值卡管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkChargeCard segchkChargeCard) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkChargeCard.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkChargeCardService.updateSegchkChargeCard(segchkChargeCard)); + } + + /** + * 删除seg充值卡管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_charge_card:remove')") + @Log(title = "seg充值卡管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{cardTypeIds}") + public AjaxResult remove(@PathVariable String[] cardTypeIds) + { + return toAjax(segchkChargeCardService.deleteSegchkChargeCardByCardTypeIds(cardTypeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkCommentAccController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkCommentAccController.java new file mode 100644 index 0000000..a0705ca --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkCommentAccController.java @@ -0,0 +1,145 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkCommentAcc; +import com.ruoyi.segchk.service.ISegchkCommentAccService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商家累积评价Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_comment_acc") +public class SegchkCommentAccController extends BaseController +{ + @Autowired + private ISegchkCommentAccService segchkCommentAccService; + + /** + * 查询seg商家累积评价列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_comment_acc:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkCommentAcc segchkCommentAcc) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkCommentAcc.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkCommentAccService.selectSegchkCommentAccList(segchkCommentAcc); + return getDataTable(list); + } + + /** + * 导出seg商家累积评价列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_comment_acc:export')") + @Log(title = "seg商家累积评价", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkCommentAcc segchkCommentAcc) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkCommentAcc.setProviderId(sysUser.getProviderId()); + } + List list = segchkCommentAccService.selectSegchkCommentAccList(segchkCommentAcc); + ExcelUtil util = new ExcelUtil(SegchkCommentAcc.class); + return util.exportExcel(list, "seg商家累积评价数据"); + } + + /** + * 获取seg商家累积评价详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_comment_acc:query')") + @GetMapping(value = "/{updateId}") + public AjaxResult getInfo(@PathVariable("updateId") Long updateId) + { + return AjaxResult.success(segchkCommentAccService.selectSegchkCommentAccByUpdateId(updateId)); + } + + /** + * 新增seg商家累积评价 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_comment_acc:add')") + @Log(title = "seg商家累积评价", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkCommentAcc segchkCommentAcc) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkCommentAcc.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkCommentAccService.insertSegchkCommentAcc(segchkCommentAcc)); + } + + /** + * 修改seg商家累积评价 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_comment_acc:edit')") + @Log(title = "seg商家累积评价", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkCommentAcc segchkCommentAcc) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkCommentAcc.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkCommentAccService.updateSegchkCommentAcc(segchkCommentAcc)); + } + + /** + * 删除seg商家累积评价 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_comment_acc:remove')") + @Log(title = "seg商家累积评价", businessType = BusinessType.DELETE) + @DeleteMapping("/{updateIds}") + public AjaxResult remove(@PathVariable Long[] updateIds) + { + return toAjax(segchkCommentAccService.deleteSegchkCommentAccByUpdateIds(updateIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkDistrictInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkDistrictInfoController.java new file mode 100644 index 0000000..20d1b84 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkDistrictInfoController.java @@ -0,0 +1,105 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkDistrictInfo; +import com.ruoyi.segchk.service.ISegchkDistrictInfoService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg行政区域代码Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_district_info") +public class SegchkDistrictInfoController extends BaseController +{ + @Autowired + private ISegchkDistrictInfoService segchkDistrictInfoService; + + /** + * 查询seg行政区域代码列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_district_info:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkDistrictInfo segchkDistrictInfo) + { + startPage(); + List list = segchkDistrictInfoService.selectSegchkDistrictInfoList(segchkDistrictInfo); + return getDataTable(list); + } + + /** + * 导出seg行政区域代码列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_district_info:export')") + @Log(title = "seg行政区域代码", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkDistrictInfo segchkDistrictInfo) + { + List list = segchkDistrictInfoService.selectSegchkDistrictInfoList(segchkDistrictInfo); + ExcelUtil util = new ExcelUtil(SegchkDistrictInfo.class); + return util.exportExcel(list, "seg行政区域代码数据"); + } + + /** + * 获取seg行政区域代码详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_district_info:query')") + @GetMapping(value = "/{districtId}") + public AjaxResult getInfo(@PathVariable("districtId") Integer districtId) + { + return AjaxResult.success(segchkDistrictInfoService.selectSegchkDistrictInfoByDistrictId(districtId)); + } + + /** + * 新增seg行政区域代码 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_district_info:add')") + @Log(title = "seg行政区域代码", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkDistrictInfo segchkDistrictInfo) + { + return toAjax(segchkDistrictInfoService.insertSegchkDistrictInfo(segchkDistrictInfo)); + } + + /** + * 修改seg行政区域代码 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_district_info:edit')") + @Log(title = "seg行政区域代码", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkDistrictInfo segchkDistrictInfo) + { + return toAjax(segchkDistrictInfoService.updateSegchkDistrictInfo(segchkDistrictInfo)); + } + + /** + * 删除seg行政区域代码 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_district_info:remove')") + @Log(title = "seg行政区域代码", businessType = BusinessType.DELETE) + @DeleteMapping("/{districtIds}") + public AjaxResult remove(@PathVariable Integer[] districtIds) + { + return toAjax(segchkDistrictInfoService.deleteSegchkDistrictInfoByDistrictIds(districtIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkKeywordLableController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkKeywordLableController.java new file mode 100644 index 0000000..60cba6b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkKeywordLableController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkKeywordLable; +import com.ruoyi.segchk.service.ISegchkKeywordLableService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg关键字管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_keyword_lable") +public class SegchkKeywordLableController extends BaseController +{ + @Autowired + private ISegchkKeywordLableService segchkKeywordLableService; + + /** + * 查询seg关键字管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_keyword_lable:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkKeywordLable segchkKeywordLable) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkKeywordLable.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkKeywordLableService.selectSegchkKeywordLableList(segchkKeywordLable); + return getDataTable(list); + } + + /** + * 导出seg关键字管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_keyword_lable:export')") + @Log(title = "seg关键字管理", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkKeywordLable segchkKeywordLable) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkKeywordLable.setProviderId(sysUser.getProviderId()); + } + List list = segchkKeywordLableService.selectSegchkKeywordLableList(segchkKeywordLable); + ExcelUtil util = new ExcelUtil(SegchkKeywordLable.class); + return util.exportExcel(list, "seg关键字管理数据"); + } + + /** + * 获取seg关键字管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_keyword_lable:query')") + @GetMapping(value = "/{keywordId}") + public AjaxResult getInfo(@PathVariable("keywordId") Long keywordId) + { + return AjaxResult.success(segchkKeywordLableService.selectSegchkKeywordLableByKeywordId(keywordId)); + } + + /** + * 新增seg关键字管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_keyword_lable:add')") + @Log(title = "seg关键字管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkKeywordLable segchkKeywordLable) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkKeywordLable.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkKeywordLableService.insertSegchkKeywordLable(segchkKeywordLable)); + } + + /** + * 修改seg关键字管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_keyword_lable:edit')") + @Log(title = "seg关键字管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkKeywordLable segchkKeywordLable) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkKeywordLable.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkKeywordLableService.updateSegchkKeywordLable(segchkKeywordLable)); + } + + /** + * 删除seg关键字管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_keyword_lable:remove')") + @Log(title = "seg关键字管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{keywordIds}") + public AjaxResult remove(@PathVariable Long[] keywordIds) + { + return toAjax(segchkKeywordLableService.deleteSegchkKeywordLableByKeywordIds(keywordIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkLableMgtController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkLableMgtController.java new file mode 100644 index 0000000..fb2ccbf --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkLableMgtController.java @@ -0,0 +1,165 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkLableMgt; +import com.ruoyi.segchk.service.ISegchkLableMgtService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg首页标签管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_lable_mgt") +public class SegchkLableMgtController extends BaseController +{ + @Autowired + private ISegchkLableMgtService segchkLableMgtService; + + /** + * 查询seg首页标签管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_lable_mgt:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkLableMgt segchkLableMgt) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + logger.debug("segchk:segchk_lable_mgt:list get with---user: {}",sysUser.toString()); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkLableMgt.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkLableMgtService.selectSegchkLableMgtList(segchkLableMgt); + return getDataTable(list); + } + + /** + * 导出seg首页标签管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_lable_mgt:export')") + @Log(title = "seg首页标签管理", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkLableMgt segchkLableMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkLableMgt.setProviderId(sysUser.getProviderId()); + } + List list = segchkLableMgtService.selectSegchkLableMgtList(segchkLableMgt); + ExcelUtil util = new ExcelUtil(SegchkLableMgt.class); + return util.exportExcel(list, "seg首页标签管理数据"); + } + + /** + * 获取seg首页标签管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_lable_mgt:query')") + @GetMapping(value = "/{mgtId}") + public AjaxResult getInfo(@PathVariable("mgtId") Long mgtId) + { + return AjaxResult.success(segchkLableMgtService.selectSegchkLableMgtByMgtId(mgtId)); + } + + /** + * 新增seg首页标签管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_lable_mgt:add')") + @Log(title = "seg首页标签管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkLableMgt segchkLableMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkLableMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkLableMgtService.insertSegchkLableMgt(segchkLableMgt)); + } + + /** + * 修改seg首页标签管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_lable_mgt:edit')") + @Log(title = "seg首页标签管理", businessType = BusinessType.UPDATE) + @PutMapping("/edit_info") + public AjaxResult edit(@RequestBody SegchkLableMgt segchkLableMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkLableMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkLableMgtService.updateSegchkLableMgt(segchkLableMgt)); + } + + + /** + * 修改seg首页标签管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_lable_mgt:edit')") + @Log(title = "seg首页标签管理", businessType = BusinessType.UPDATE) + @PutMapping("/mgt_state") + public AjaxResult mgt_state(@RequestBody SegchkLableMgt segchkLableMgt) + { + logger.debug("mgt_state with --- {}", segchkLableMgt.toString()); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkLableMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkLableMgtService.updateSegchkLableMgt(segchkLableMgt)); + } + + /** + * 删除seg首页标签管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_lable_mgt:remove')") + @Log(title = "seg首页标签管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{mgtIds}") + public AjaxResult remove(@PathVariable Long[] mgtIds) + { + return toAjax(segchkLableMgtService.deleteSegchkLableMgtByProviderIds(mgtIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkLogionDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkLogionDetailController.java new file mode 100644 index 0000000..5eb65e1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkLogionDetailController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkLogionDetail; +import com.ruoyi.segchk.service.ISegchkLogionDetailService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg登录记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_logion_detail") +public class SegchkLogionDetailController extends BaseController +{ + @Autowired + private ISegchkLogionDetailService segchkLogionDetailService; + + /** + * 查询seg登录记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_logion_detail:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkLogionDetail segchkLogionDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkLogionDetail.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkLogionDetailService.selectSegchkLogionDetailList(segchkLogionDetail); + return getDataTable(list); + } + + /** + * 导出seg登录记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_logion_detail:export')") + @Log(title = "seg登录记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkLogionDetail segchkLogionDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkLogionDetail.setProviderId(sysUser.getProviderId()); + } + List list = segchkLogionDetailService.selectSegchkLogionDetailList(segchkLogionDetail); + ExcelUtil util = new ExcelUtil(SegchkLogionDetail.class); + return util.exportExcel(list, "seg登录记录数据"); + } + + /** + * 获取seg登录记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_logion_detail:query')") + @GetMapping(value = "/{loginId}") + public AjaxResult getInfo(@PathVariable("loginId") Long loginId) + { + return AjaxResult.success(segchkLogionDetailService.selectSegchkLogionDetailByLoginId(loginId)); + } + + /** + * 新增seg登录记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_logion_detail:add')") + @Log(title = "seg登录记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkLogionDetail segchkLogionDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkLogionDetail.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkLogionDetailService.insertSegchkLogionDetail(segchkLogionDetail)); + } + + /** + * 修改seg登录记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_logion_detail:edit')") + @Log(title = "seg登录记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkLogionDetail segchkLogionDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkLogionDetail.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkLogionDetailService.updateSegchkLogionDetail(segchkLogionDetail)); + } + + /** + * 删除seg登录记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_logion_detail:remove')") + @Log(title = "seg登录记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{loginIds}") + public AjaxResult remove(@PathVariable Long[] loginIds) + { + return toAjax(segchkLogionDetailService.deleteSegchkLogionDetailByLoginIds(loginIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkMsgDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkMsgDetailController.java new file mode 100644 index 0000000..40eb032 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkMsgDetailController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkMsgDetail; +import com.ruoyi.segchk.service.ISegchkMsgDetailService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg消息记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_msg_detail") +public class SegchkMsgDetailController extends BaseController +{ + @Autowired + private ISegchkMsgDetailService segchkMsgDetailService; + + /** + * 查询seg消息记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_msg_detail:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkMsgDetail segchkMsgDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkMsgDetail.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkMsgDetailService.selectSegchkMsgDetailList(segchkMsgDetail); + return getDataTable(list); + } + + /** + * 导出seg消息记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_msg_detail:export')") + @Log(title = "seg消息记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkMsgDetail segchkMsgDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkMsgDetail.setProviderId(sysUser.getProviderId()); + } + List list = segchkMsgDetailService.selectSegchkMsgDetailList(segchkMsgDetail); + ExcelUtil util = new ExcelUtil(SegchkMsgDetail.class); + return util.exportExcel(list, "seg消息记录数据"); + } + + /** + * 获取seg消息记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_msg_detail:query')") + @GetMapping(value = "/{msgId}") + public AjaxResult getInfo(@PathVariable("msgId") Long msgId) + { + return AjaxResult.success(segchkMsgDetailService.selectSegchkMsgDetailByMsgId(msgId)); + } + + /** + * 新增seg消息记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_msg_detail:add')") + @Log(title = "seg消息记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkMsgDetail segchkMsgDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkMsgDetail.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkMsgDetailService.insertSegchkMsgDetail(segchkMsgDetail)); + } + + /** + * 修改seg消息记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_msg_detail:edit')") + @Log(title = "seg消息记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkMsgDetail segchkMsgDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkMsgDetail.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkMsgDetailService.updateSegchkMsgDetail(segchkMsgDetail)); + } + + /** + * 删除seg消息记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_msg_detail:remove')") + @Log(title = "seg消息记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{msgIds}") + public AjaxResult remove(@PathVariable Long[] msgIds) + { + return toAjax(segchkMsgDetailService.deleteSegchkMsgDetailByMsgIds(msgIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkPreferenceLableController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkPreferenceLableController.java new file mode 100644 index 0000000..2e84908 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkPreferenceLableController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkPreferenceLable; +import com.ruoyi.segchk.service.ISegchkPreferenceLableService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg优惠管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_preference_lable") +public class SegchkPreferenceLableController extends BaseController +{ + @Autowired + private ISegchkPreferenceLableService segchkPreferenceLableService; + + /** + * 查询seg优惠管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_preference_lable:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkPreferenceLable segchkPreferenceLable) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkPreferenceLable.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkPreferenceLableService.selectSegchkPreferenceLableList(segchkPreferenceLable); + return getDataTable(list); + } + + /** + * 导出seg优惠管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_preference_lable:export')") + @Log(title = "seg优惠管理", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkPreferenceLable segchkPreferenceLable) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkPreferenceLable.setProviderId(sysUser.getProviderId()); + } + List list = segchkPreferenceLableService.selectSegchkPreferenceLableList(segchkPreferenceLable); + ExcelUtil util = new ExcelUtil(SegchkPreferenceLable.class); + return util.exportExcel(list, "seg优惠管理数据"); + } + + /** + * 获取seg优惠管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_preference_lable:query')") + @GetMapping(value = "/{preferenceId}") + public AjaxResult getInfo(@PathVariable("preferenceId") Long preferenceId) + { + return AjaxResult.success(segchkPreferenceLableService.selectSegchkPreferenceLableByPreferenceId(preferenceId)); + } + + /** + * 新增seg优惠管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_preference_lable:add')") + @Log(title = "seg优惠管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkPreferenceLable segchkPreferenceLable) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkPreferenceLable.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkPreferenceLableService.insertSegchkPreferenceLable(segchkPreferenceLable)); + } + + /** + * 修改seg优惠管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_preference_lable:edit')") + @Log(title = "seg优惠管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkPreferenceLable segchkPreferenceLable) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkPreferenceLable.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkPreferenceLableService.updateSegchkPreferenceLable(segchkPreferenceLable)); + } + + /** + * 删除seg优惠管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_preference_lable:remove')") + @Log(title = "seg优惠管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{preferenceIds}") + public AjaxResult remove(@PathVariable Long[] preferenceIds) + { + return toAjax(segchkPreferenceLableService.deleteSegchkPreferenceLableByPreferenceIds(preferenceIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkProviderMgtController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkProviderMgtController.java new file mode 100644 index 0000000..dba1e4a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkProviderMgtController.java @@ -0,0 +1,161 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkProviderMgt; +import com.ruoyi.segchk.service.ISegchkProviderMgtService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg运营商管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_provider_mgt") +public class SegchkProviderMgtController extends BaseController +{ + @Autowired + private ISegchkProviderMgtService segchkProviderMgtService; + + /** + * 查询seg运营商管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_mgt:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkProviderMgt segchkProviderMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkProviderMgt.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkProviderMgtService.selectSegchkProviderMgtList(segchkProviderMgt); + return getDataTable(list); + } + + /** + * 导出seg运营商管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_mgt:export')") + @Log(title = "seg运营商管理", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkProviderMgt segchkProviderMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkProviderMgt.setProviderId(sysUser.getProviderId()); + } + List list = segchkProviderMgtService.selectSegchkProviderMgtList(segchkProviderMgt); + ExcelUtil util = new ExcelUtil(SegchkProviderMgt.class); + return util.exportExcel(list, "seg运营商管理数据"); + } + + /** + * 获取seg运营商管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_mgt:query')") + @GetMapping(value = "/{providerId}") + public AjaxResult getInfo(@PathVariable("providerId") Long providerId) + { + return AjaxResult.success(segchkProviderMgtService.selectSegchkProviderMgtByProviderId(providerId)); + } + + /** + * 新增seg运营商管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_mgt:add')") + @Log(title = "seg运营商管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkProviderMgt segchkProviderMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkProviderMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkProviderMgtService.insertSegchkProviderMgt(segchkProviderMgt)); + } + + /** + * 修改seg运营商管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_mgt:edit')") + @Log(title = "seg运营商管理", businessType = BusinessType.UPDATE) + @PutMapping("/edit") + public AjaxResult edit(@RequestBody SegchkProviderMgt segchkProviderMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkProviderMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkProviderMgtService.updateSegchkProviderMgt(segchkProviderMgt)); + } + + /** + * 修改seg运营商管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_mgt:edit')") + @Log(title = "seg运营商管理", businessType = BusinessType.UPDATE) + @PutMapping("/status") + public AjaxResult status(@RequestBody SegchkProviderMgt segchkProviderMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkProviderMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkProviderMgtService.updateSegchkProviderMgt(segchkProviderMgt)); + } + + /** + * 删除seg运营商管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_provider_mgt:remove')") + @Log(title = "seg运营商管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{providerIds}") + public AjaxResult remove(@PathVariable Long[] providerIds) + { + return toAjax(segchkProviderMgtService.deleteSegchkProviderMgtByProviderIds(providerIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkRecommenderStoreController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkRecommenderStoreController.java new file mode 100644 index 0000000..cfb3d2a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkRecommenderStoreController.java @@ -0,0 +1,161 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkRecommenderStore; +import com.ruoyi.segchk.service.ISegchkRecommenderStoreService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg首页推荐商户Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_recommender_store") +public class SegchkRecommenderStoreController extends BaseController +{ + @Autowired + private ISegchkRecommenderStoreService segchkRecommenderStoreService; + + /** + * 查询seg首页推荐商户列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_recommender_store:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkRecommenderStore segchkRecommenderStore) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkRecommenderStore.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkRecommenderStoreService.selectSegchkRecommenderStoreList(segchkRecommenderStore); + return getDataTable(list); + } + + /** + * 导出seg首页推荐商户列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_recommender_store:export')") + @Log(title = "seg首页推荐商户", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkRecommenderStore segchkRecommenderStore) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkRecommenderStore.setProviderId(sysUser.getProviderId()); + } + List list = segchkRecommenderStoreService.selectSegchkRecommenderStoreList(segchkRecommenderStore); + ExcelUtil util = new ExcelUtil(SegchkRecommenderStore.class); + return util.exportExcel(list, "seg首页推荐商户数据"); + } + + /** + * 获取seg首页推荐商户详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_recommender_store:query')") + @GetMapping(value = "/{recommenderId}") + public AjaxResult getInfo(@PathVariable("recommenderId") Long recommenderId) + { + return AjaxResult.success(segchkRecommenderStoreService.selectSegchkRecommenderStoreByRecommenderId(recommenderId)); + } + + /** + * 新增seg首页推荐商户 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_recommender_store:add')") + @Log(title = "seg首页推荐商户", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkRecommenderStore segchkRecommenderStore) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkRecommenderStore.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkRecommenderStoreService.insertSegchkRecommenderStore(segchkRecommenderStore)); + } + + /** + * 修改seg首页推荐商户 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_recommender_store:edit')") + @Log(title = "seg首页推荐商户", businessType = BusinessType.UPDATE) + @PutMapping("/edit_info") + public AjaxResult edit(@RequestBody SegchkRecommenderStore segchkRecommenderStore) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkRecommenderStore.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkRecommenderStoreService.updateSegchkRecommenderStore(segchkRecommenderStore)); + } + + /** + * 修改seg首页推荐商户 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_recommender_store:edit')") + @Log(title = "seg首页推荐商户", businessType = BusinessType.UPDATE) + @PutMapping("/mgt_state") + public AjaxResult mgt_state(@RequestBody SegchkRecommenderStore segchkRecommenderStore) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkRecommenderStore.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkRecommenderStoreService.updateSegchkRecommenderStore(segchkRecommenderStore)); + } + + /** + * 删除seg首页推荐商户 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_recommender_store:remove')") + @Log(title = "seg首页推荐商户", businessType = BusinessType.DELETE) + @DeleteMapping("/{recommenderIds}") + public AjaxResult remove(@PathVariable Long[] recommenderIds) + { + return toAjax(segchkRecommenderStoreService.deleteSegchkRecommenderStoreByRecommenderIds(recommenderIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSalerInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSalerInfoController.java new file mode 100644 index 0000000..b8a51ff --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSalerInfoController.java @@ -0,0 +1,161 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkSalerInfo; +import com.ruoyi.segchk.service.ISegchkSalerInfoService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg销售人员信息Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_saler_info") +public class SegchkSalerInfoController extends BaseController +{ + @Autowired + private ISegchkSalerInfoService segchkSalerInfoService; + + /** + * 查询seg销售人员信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_saler_info:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkSalerInfo segchkSalerInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSalerInfo.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkSalerInfoService.selectSegchkSalerInfoList(segchkSalerInfo); + return getDataTable(list); + } + + /** + * 导出seg销售人员信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_saler_info:export')") + @Log(title = "seg销售人员信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkSalerInfo segchkSalerInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSalerInfo.setProviderId(sysUser.getProviderId()); + } + List list = segchkSalerInfoService.selectSegchkSalerInfoList(segchkSalerInfo); + ExcelUtil util = new ExcelUtil(SegchkSalerInfo.class); + return util.exportExcel(list, "seg销售人员信息数据"); + } + + /** + * 获取seg销售人员信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_saler_info:query')") + @GetMapping(value = "/{salerId}") + public AjaxResult getInfo(@PathVariable("salerId") Integer salerId) + { + return AjaxResult.success(segchkSalerInfoService.selectSegchkSalerInfoBySalerId(salerId)); + } + + /** + * 新增seg销售人员信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_saler_info:add')") + @Log(title = "seg销售人员信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkSalerInfo segchkSalerInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSalerInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkSalerInfoService.insertSegchkSalerInfo(segchkSalerInfo)); + } + + /** + * 修改seg销售人员信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_saler_info:edit')") + @Log(title = "seg销售人员信息", businessType = BusinessType.UPDATE) + @PutMapping("/edit") + public AjaxResult edit(@RequestBody SegchkSalerInfo segchkSalerInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSalerInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkSalerInfoService.updateSegchkSalerInfo(segchkSalerInfo)); + } + + /** + * 修改seg销售人员信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_saler_info:edit')") + @Log(title = "seg销售人员信息", businessType = BusinessType.UPDATE) + @PutMapping("/update_status") + public AjaxResult update_status(@RequestBody SegchkSalerInfo segchkSalerInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSalerInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkSalerInfoService.updateSegchkSalerInfo(segchkSalerInfo)); + } + + /** + * 删除seg销售人员信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_saler_info:remove')") + @Log(title = "seg销售人员信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{salerIds}") + public AjaxResult remove(@PathVariable Integer[] salerIds) + { + return toAjax(segchkSalerInfoService.deleteSegchkSalerInfoBySalerIds(salerIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSelfServiceChkController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSelfServiceChkController.java new file mode 100644 index 0000000..777d5c0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSelfServiceChkController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkSelfServiceChk; +import com.ruoyi.segchk.service.ISegchkSelfServiceChkService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg自定义卡核消记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_self_service_chk") +public class SegchkSelfServiceChkController extends BaseController +{ + @Autowired + private ISegchkSelfServiceChkService segchkSelfServiceChkService; + + /** + * 查询seg自定义卡核消记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk: segchk_self_service_chk:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkSelfServiceChk segchkSelfServiceChk) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSelfServiceChk.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkSelfServiceChkService.selectSegchkSelfServiceChkList(segchkSelfServiceChk); + return getDataTable(list); + } + + /** + * 导出seg自定义卡核消记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk: segchk_self_service_chk:export')") + @Log(title = "seg自定义卡核消记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkSelfServiceChk segchkSelfServiceChk) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSelfServiceChk.setProviderId(sysUser.getProviderId()); + } + List list = segchkSelfServiceChkService.selectSegchkSelfServiceChkList(segchkSelfServiceChk); + ExcelUtil util = new ExcelUtil(SegchkSelfServiceChk.class); + return util.exportExcel(list, "seg自定义卡核消记录数据"); + } + + /** + * 获取seg自定义卡核消记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk: segchk_self_service_chk:query')") + @GetMapping(value = "/{chkServiceId}") + public AjaxResult getInfo(@PathVariable("chkServiceId") Long chkServiceId) + { + return AjaxResult.success(segchkSelfServiceChkService.selectSegchkSelfServiceChkByChkServiceId(chkServiceId)); + } + + /** + * 新增seg自定义卡核消记录 + */ + @PreAuthorize("@ss.hasPermi('segchk: segchk_self_service_chk:add')") + @Log(title = "seg自定义卡核消记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkSelfServiceChk segchkSelfServiceChk) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSelfServiceChk.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkSelfServiceChkService.insertSegchkSelfServiceChk(segchkSelfServiceChk)); + } + + /** + * 修改seg自定义卡核消记录 + */ + @PreAuthorize("@ss.hasPermi('segchk: segchk_self_service_chk:edit')") + @Log(title = "seg自定义卡核消记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkSelfServiceChk segchkSelfServiceChk) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSelfServiceChk.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkSelfServiceChkService.updateSegchkSelfServiceChk(segchkSelfServiceChk)); + } + + /** + * 删除seg自定义卡核消记录 + */ + @PreAuthorize("@ss.hasPermi('segchk: segchk_self_service_chk:remove')") + @Log(title = "seg自定义卡核消记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{chkServiceIds}") + public AjaxResult remove(@PathVariable Long[] chkServiceIds) + { + return toAjax(segchkSelfServiceChkService.deleteSegchkSelfServiceChkByChkServiceIds(chkServiceIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkServiceChkController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkServiceChkController.java new file mode 100644 index 0000000..ee57936 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkServiceChkController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkServiceChk; +import com.ruoyi.segchk.service.ISegchkServiceChkService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg核消记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_service_chk") +public class SegchkServiceChkController extends BaseController +{ + @Autowired + private ISegchkServiceChkService segchkServiceChkService; + + /** + * 查询seg核消记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_chk:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkServiceChk segchkServiceChk) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkServiceChk.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkServiceChkService.selectSegchkServiceChkList(segchkServiceChk); + return getDataTable(list); + } + + /** + * 导出seg核消记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_chk:export')") + @Log(title = "seg核消记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkServiceChk segchkServiceChk) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkServiceChk.setProviderId(sysUser.getProviderId()); + } + List list = segchkServiceChkService.selectSegchkServiceChkList(segchkServiceChk); + ExcelUtil util = new ExcelUtil(SegchkServiceChk.class); + return util.exportExcel(list, "seg核消记录数据"); + } + + /** + * 获取seg核消记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_chk:query')") + @GetMapping(value = "/{chkServiceId}") + public AjaxResult getInfo(@PathVariable("chkServiceId") Long chkServiceId) + { + return AjaxResult.success(segchkServiceChkService.selectSegchkServiceChkByChkServiceId(chkServiceId)); + } + + /** + * 新增seg核消记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_chk:add')") + @Log(title = "seg核消记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkServiceChk segchkServiceChk) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkServiceChk.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkServiceChkService.insertSegchkServiceChk(segchkServiceChk)); + } + + /** + * 修改seg核消记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_chk:edit')") + @Log(title = "seg核消记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkServiceChk segchkServiceChk) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkServiceChk.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkServiceChkService.updateSegchkServiceChk(segchkServiceChk)); + } + + /** + * 删除seg核消记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_chk:remove')") + @Log(title = "seg核消记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{chkServiceIds}") + public AjaxResult remove(@PathVariable Long[] chkServiceIds) + { + return toAjax(segchkServiceChkService.deleteSegchkServiceChkByChkServiceIds(chkServiceIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkServiceCommentController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkServiceCommentController.java new file mode 100644 index 0000000..d67feb3 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkServiceCommentController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkServiceComment; +import com.ruoyi.segchk.service.ISegchkServiceCommentService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg评价记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_service_comment") +public class SegchkServiceCommentController extends BaseController +{ + @Autowired + private ISegchkServiceCommentService segchkServiceCommentService; + + /** + * 查询seg评价记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_comment:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkServiceComment segchkServiceComment) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkServiceComment.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkServiceCommentService.selectSegchkServiceCommentList(segchkServiceComment); + return getDataTable(list); + } + + /** + * 导出seg评价记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_comment:export')") + @Log(title = "seg评价记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkServiceComment segchkServiceComment) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkServiceComment.setProviderId(sysUser.getProviderId()); + } + List list = segchkServiceCommentService.selectSegchkServiceCommentList(segchkServiceComment); + ExcelUtil util = new ExcelUtil(SegchkServiceComment.class); + return util.exportExcel(list, "seg评价记录数据"); + } + + /** + * 获取seg评价记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_comment:query')") + @GetMapping(value = "/{commentId}") + public AjaxResult getInfo(@PathVariable("commentId") Long commentId) + { + return AjaxResult.success(segchkServiceCommentService.selectSegchkServiceCommentByCommentId(commentId)); + } + + /** + * 新增seg评价记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_comment:add')") + @Log(title = "seg评价记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkServiceComment segchkServiceComment) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkServiceComment.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkServiceCommentService.insertSegchkServiceComment(segchkServiceComment)); + } + + /** + * 修改seg评价记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_comment:edit')") + @Log(title = "seg评价记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkServiceComment segchkServiceComment) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkServiceComment.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkServiceCommentService.updateSegchkServiceComment(segchkServiceComment)); + } + + /** + * 删除seg评价记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_service_comment:remove')") + @Log(title = "seg评价记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{commentIds}") + public AjaxResult remove(@PathVariable Long[] commentIds) + { + return toAjax(segchkServiceCommentService.deleteSegchkServiceCommentByCommentIds(commentIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSimpleListController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSimpleListController.java new file mode 100644 index 0000000..3a0651b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSimpleListController.java @@ -0,0 +1,304 @@ +package com.ruoyi.web.controller.segchk; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.UnAuth; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.service.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * seg首页轮播图管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/simple_list") +public class SegchkSimpleListController extends BaseController +{ + @Autowired + private ISegchkProviderMgtService segchkProviderMgtService; + @Autowired + private ISegchkSalerInfoService segchkSalerInfoService; + @Autowired + private ISegchkStoreBasicInfoService segchkStoreBasicInfoService; + + @Autowired + private ISegchkChargeCardService segchkChargeCardService; + + @Autowired + private ISegchkKeywordLableService segchkKeywordLableService; + + + @Autowired + private ISegchkPreferenceLableService segchkPreferenceLableService; + + @Autowired + private ISegchkDistrictInfoService segchkDistrictInfoService; + + + /** + * 查询seg首页轮播图管理列表 + */ + @UnAuth +// @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:list')") + @GetMapping("/salerList") + public TableDataInfo saler_list() + { + logger.debug("salerList is call"); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); +// sysUser.getNickName(); + Long providerId = sysUser.getUserId() == 1 ? null : sysUser.getProviderId(); + startPage(); + SegchkSalerInfo segchkSalerInfo = new SegchkSalerInfo(); + segchkSalerInfo.setProviderId(providerId); + List list = segchkSalerInfoService.selectSegchkSalerInfoList(segchkSalerInfo); + List collect = list.parallelStream().filter(v -> v.getSalerState() == 0).map(v -> { + SimpleListObj simpleListObj1 = new SimpleListObj(); + simpleListObj1.setProviderId(String.valueOf(v.getProviderId())); + simpleListObj1.setKey(String.valueOf(v.getSalerId())); + simpleListObj1.setValue(String.valueOf(v.getSalerName())); + return simpleListObj1; + }).collect(Collectors.toList()); + return getDataTable(collect); + } + + /** + * 查询seg首页轮播图管理列表 + */ + @UnAuth +// @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:list')") + @GetMapping("/providerList") + public TableDataInfo provider_list() + { + logger.debug("providerList is call"); + SimpleListObj simpleListObj = new SimpleListObj(); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); +// sysUser.getNickName(); + Long providerId = sysUser.getUserId() == 1 ? null : sysUser.getProviderId(); + startPage(); + SegchkProviderMgt segchkProviderMgt = new SegchkProviderMgt(); + segchkProviderMgt.setProviderId(providerId); + List list = segchkProviderMgtService.selectSegchkProviderMgtList(segchkProviderMgt); + List collect = list.parallelStream().map(v -> { + SimpleListObj simpleListObj1 = new SimpleListObj(); + simpleListObj1.setProviderId(String.valueOf(v.getProviderId())); + simpleListObj1.setKey(String.valueOf(v.getProviderId())); + simpleListObj1.setValue(String.valueOf(v.getNickName())); + return simpleListObj1; + }).collect(Collectors.toList()); + collect.forEach(v -> logger.debug("providerList ret : {}", v.toString())); + return getDataTable(collect); + } + /** + * 查询seg首页轮播图管理列表 + */ + @UnAuth +// @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:list')") + @GetMapping("/storeList") + public TableDataInfo store_list() + { + logger.debug("storeList is call"); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); +// sysUser.getNickName(); + Long providerId = sysUser.getUserId() == 1 ? null : sysUser.getProviderId(); + startPage(); + SegchkStoreBasicInfo segchkStoreBasicInfo = new SegchkStoreBasicInfo(); + segchkStoreBasicInfo.setProviderId(providerId); + List list = segchkStoreBasicInfoService.selectSegchkStoreBasicInfoList(segchkStoreBasicInfo); + List collect = list.parallelStream().map(v -> { + SimpleListObj simpleListObj1 = new SimpleListObj(); + simpleListObj1.setProviderId(String.valueOf(v.getProviderId())); + simpleListObj1.setKey(String.valueOf(v.getStoreId())); + simpleListObj1.setValue(String.valueOf(v.getStoreName())); + return simpleListObj1; + }).collect(Collectors.toList()); + collect.forEach(v -> logger.debug("providerList ret : {}", v.toString())); + return getDataTable(collect); + } + + + /** + * 查询seg首页轮播图管理列表 + */ + @UnAuth +// @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:list')") + @GetMapping("/ChargeCardList") + public TableDataInfo charge_card_list() + { + logger.debug("ChargeCardList is call"); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); +// sysUser.getNickName(); + Long providerId = sysUser.getUserId() == 1 ? null : sysUser.getProviderId(); + startPage(); + SegchkChargeCard segchkChargeCard = new SegchkChargeCard(); + segchkChargeCard.setProviderId(providerId); + List list = segchkChargeCardService.selectSegchkChargeCardList(segchkChargeCard); + List collect = list.parallelStream().map(v -> { + SimpleListObj simpleListObj1 = new SimpleListObj(); + simpleListObj1.setProviderId(String.valueOf(v.getProviderId())); + simpleListObj1.setKey(String.valueOf(v.getCardTypeId())); + simpleListObj1.setValue(String.valueOf(v.getCardTypeName())); + return simpleListObj1; + }).collect(Collectors.toList()); + collect.forEach(v -> logger.debug("ChargeCardList ret : {}", v.toString())); + return getDataTable(collect); + } + + + /** + * 查询seg首页轮播图管理列表 + */ + @UnAuth +// @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:list')") + @GetMapping("/KerwordList") + public TableDataInfo kerword_list() + { + logger.debug("KerwordList is call"); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); +// sysUser.getNickName(); + Long providerId = sysUser.getUserId() == 1 ? null : sysUser.getProviderId(); + startPage(); + SegchkKeywordLable segchkKeywordLable = new SegchkKeywordLable(); + segchkKeywordLable.setProviderId(providerId); + List list = segchkKeywordLableService.selectSegchkKeywordLableList(segchkKeywordLable); + List collect = list.parallelStream().map(v -> { + SimpleListObj simpleListObj1 = new SimpleListObj(); + simpleListObj1.setProviderId(String.valueOf(v.getProviderId())); + simpleListObj1.setKey(String.valueOf(v.getKeywordId())); + simpleListObj1.setValue(String.valueOf(v.getKeywordName())); + simpleListObj1.setImgUrl(String.valueOf(v.getKeywordUrl())); + return simpleListObj1; + }).collect(Collectors.toList()); + collect.forEach(v -> logger.debug("KerwordList ret : {}", v.toString())); + return getDataTable(collect); + } + + + + /** + * 查询seg首页轮播图管理列表 + */ + @UnAuth +// @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:list')") + @GetMapping("/PreferenceLableList") + public TableDataInfo preference_lable_list() + { + logger.debug("PreferenceLableList is call"); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); +// sysUser.getNickName(); + Long providerId = sysUser.getUserId() == 1 ? null : sysUser.getProviderId(); + startPage(); + SegchkPreferenceLable segchkPreferenceLable = new SegchkPreferenceLable(); + segchkPreferenceLable.setProviderId(providerId); + List list = segchkPreferenceLableService.selectSegchkPreferenceLableList(segchkPreferenceLable); + List collect = list.parallelStream().map(v -> { + SimpleListObj simpleListObj1 = new SimpleListObj(); + simpleListObj1.setProviderId(String.valueOf(v.getProviderId())); + simpleListObj1.setKey(String.valueOf(v.getPreferenceId())); + simpleListObj1.setValue(String.valueOf(v.getPreferenceName())); + simpleListObj1.setImgUrl(String.valueOf(v.getPreferenceUrl())); + return simpleListObj1; + }).collect(Collectors.toList()); + collect.forEach(v -> logger.debug("PreferenceLableList ret : {}", v.toString())); + return getDataTable(collect); + } + + /** + * 查询seg首页轮播图管理列表 + */ + @UnAuth +// @PreAuthorize("@ss.hasPermi('segchk:segchk_carouse_mgt:list')") + @GetMapping("/DistictList") + public TableDataInfo distict_list() + { + logger.debug("DistictList is call"); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); +// sysUser.getNickName(); + Long providerId = sysUser.getUserId() == 1 ? null : sysUser.getProviderId(); + startPage(); + + SegchkDistrictInfo segchkDistrictInfo = new SegchkDistrictInfo(); + List list = segchkDistrictInfoService.selectSegchkDistrictInfoList(segchkDistrictInfo); + List collect = list.parallelStream().filter(v -> v.getDistrictLevel() == 0 || v.getDistrictLevel() == 1).map(v -> { + SimpleListObj simpleListObj1 = new SimpleListObj(); + simpleListObj1.setProviderId(String.valueOf(providerId)); + simpleListObj1.setKey(String.valueOf(v.getDistrictId())); + simpleListObj1.setValue(String.valueOf(v.getDistrictName())); + return simpleListObj1; + }).collect(Collectors.toList()); + collect.forEach(v -> logger.debug("PreferenceLableList ret : {}", v.toString())); + return getDataTable(collect); + } + + + private class SimpleListObj extends BaseEntity { + private String providerId; + private String key; + private String value; + private String imgUrl; + + public String getProviderId() { + return providerId; + } + + public void setProviderId(String providerId) { + this.providerId = providerId; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } + + @Override + public String toString() { + return "SimpleListObj{" + + "providerId='" + providerId + '\'' + + ", key='" + key + '\'' + + ", value='" + value + '\'' + + ", imgUrl='" + imgUrl + '\'' + + '}'; + } + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSmsDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSmsDetailController.java new file mode 100644 index 0000000..dd056a6 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSmsDetailController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkSmsDetail; +import com.ruoyi.segchk.service.ISegchkSmsDetailService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg短信记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_sms_detail") +public class SegchkSmsDetailController extends BaseController +{ + @Autowired + private ISegchkSmsDetailService segchkSmsDetailService; + + /** + * 查询seg短信记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_sms_detail:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkSmsDetail segchkSmsDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSmsDetail.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkSmsDetailService.selectSegchkSmsDetailList(segchkSmsDetail); + return getDataTable(list); + } + + /** + * 导出seg短信记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_sms_detail:export')") + @Log(title = "seg短信记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkSmsDetail segchkSmsDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSmsDetail.setProviderId(sysUser.getProviderId()); + } + List list = segchkSmsDetailService.selectSegchkSmsDetailList(segchkSmsDetail); + ExcelUtil util = new ExcelUtil(SegchkSmsDetail.class); + return util.exportExcel(list, "seg短信记录数据"); + } + + /** + * 获取seg短信记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_sms_detail:query')") + @GetMapping(value = "/{shortMsgId}") + public AjaxResult getInfo(@PathVariable("shortMsgId") Long shortMsgId) + { + return AjaxResult.success(segchkSmsDetailService.selectSegchkSmsDetailByShortMsgId(shortMsgId)); + } + + /** + * 新增seg短信记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_sms_detail:add')") + @Log(title = "seg短信记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkSmsDetail segchkSmsDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSmsDetail.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkSmsDetailService.insertSegchkSmsDetail(segchkSmsDetail)); + } + + /** + * 修改seg短信记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_sms_detail:edit')") + @Log(title = "seg短信记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkSmsDetail segchkSmsDetail) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkSmsDetail.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkSmsDetailService.updateSegchkSmsDetail(segchkSmsDetail)); + } + + /** + * 删除seg短信记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_sms_detail:remove')") + @Log(title = "seg短信记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{shortMsgIds}") + public AjaxResult remove(@PathVariable Long[] shortMsgIds) + { + return toAjax(segchkSmsDetailService.deleteSegchkSmsDetailByShortMsgIds(shortMsgIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreAccountController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreAccountController.java new file mode 100644 index 0000000..9bd80f1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreAccountController.java @@ -0,0 +1,142 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreAccount; +import com.ruoyi.segchk.service.ISegchkStoreAccountService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商户余额信息Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_account") +public class SegchkStoreAccountController extends BaseController +{ + @Autowired + private ISegchkStoreAccountService segchkStoreAccountService; + + /** + * 查询seg商户余额信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_account:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreAccount segchkStoreAccount) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreAccount.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkStoreAccountService.selectSegchkStoreAccountList(segchkStoreAccount); + return getDataTable(list); + } + + /** + * 导出seg商户余额信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_account:export')") + @Log(title = "seg商户余额信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreAccount segchkStoreAccount) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreAccount.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreAccountService.selectSegchkStoreAccountList(segchkStoreAccount); + ExcelUtil util = new ExcelUtil(SegchkStoreAccount.class); + return util.exportExcel(list, "seg商户余额信息数据"); + } + + /** + * 获取seg商户余额信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_account:query')") + @GetMapping(value = "/{accountId}") + public AjaxResult getInfo(@PathVariable("accountId") Long accountId) + { + return AjaxResult.success(segchkStoreAccountService.selectSegchkStoreAccountByAccountId(accountId)); + } + + /** + * 新增seg商户余额信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_account:add')") + @Log(title = "seg商户余额信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreAccount segchkStoreAccount) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreAccount.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreAccountService.insertSegchkStoreAccount(segchkStoreAccount)); + } + + /** + * 修改seg商户余额信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_account:edit')") + @Log(title = "seg商户余额信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkStoreAccount segchkStoreAccount) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreAccount.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreAccountService.updateSegchkStoreAccount(segchkStoreAccount)); + } + + /** + * 删除seg商户余额信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_account:remove')") + @Log(title = "seg商户余额信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{accountIds}") + public AjaxResult remove(@PathVariable Long[] accountIds) + { + return toAjax(segchkStoreAccountService.deleteSegchkStoreAccountByAccountIds(accountIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreBasicInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreBasicInfoController.java new file mode 100644 index 0000000..bd89d10 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreBasicInfoController.java @@ -0,0 +1,213 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreBasicInfo; +import com.ruoyi.segchk.service.ISegchkStoreBasicInfoService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商家基础信息Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_basic_info") +public class SegchkStoreBasicInfoController extends BaseController +{ + @Autowired + private ISegchkStoreBasicInfoService segchkStoreBasicInfoService; + + /** + * 查询seg商家基础信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreBasicInfo segchkStoreBasicInfo) + { +// 获取当前登录用户信息 + LoginUser loginUser = getLoginUser(); + SysUser sysUser = loginUser.getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreBasicInfo.setProviderId(sysUser.getProviderId()); + } + System.out.println("segchk:segchk_store_basic_info:list userinfo:" + loginUser.toString()); + System.out.println("segchk:segchk_store_basic_info:list userinfo:" + sysUser.getRoleId()); + sysUser.getRoles().forEach(it -> System.out.println(it.toString())); + startPage(); + List list = segchkStoreBasicInfoService.selectSegchkStoreBasicInfoList(segchkStoreBasicInfo); + return getDataTable(list); + } + + /** + * 导出seg商家基础信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:export')") + @Log(title = "seg商家基础信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreBasicInfo segchkStoreBasicInfo) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreBasicInfo.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreBasicInfoService.selectSegchkStoreBasicInfoList(segchkStoreBasicInfo); + ExcelUtil util = new ExcelUtil(SegchkStoreBasicInfo.class); + return util.exportExcel(list, "seg商家基础信息数据"); + } + + /** + * 获取seg商家基础信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:query')") + @GetMapping(value = "/{storeId}") + public AjaxResult getInfo(@PathVariable("storeId") Long storeId) + { + return AjaxResult.success(segchkStoreBasicInfoService.selectSegchkStoreBasicInfoByStoreId(storeId)); + } + + /** + * 新增seg商家基础信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:add')") + @Log(title = "seg商家基础信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreBasicInfo segchkStoreBasicInfo) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreBasicInfo.setProviderId(sysUser.getProviderId()); + } + int i = segchkStoreBasicInfoService.insertSegchkStoreBasicInfo(segchkStoreBasicInfo); + if(i < 0){ + return AjaxResult.error(500, "手机号码已绑定商户"); + } + else { + return toAjax(i); + } + } + + /** + * 修改seg商家基础信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:edit')") + @Log(title = "seg商家基础信息", businessType = BusinessType.UPDATE) + @PutMapping("edit_info") + public AjaxResult edit(@RequestBody SegchkStoreBasicInfo segchkStoreBasicInfo) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreBasicInfo.setProviderId(sysUser.getProviderId()); + } + logger.debug("edit_info with ---> {}", segchkStoreBasicInfo.toString()); + int i = segchkStoreBasicInfoService.updateSegchkStoreBasicInfo(segchkStoreBasicInfo); + if(i < 0){ + return AjaxResult.error(500, "手机号码已绑定商户"); + } + else { + return toAjax(i); + } + } + + /** + * 修改seg商家基础信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:edit')") + @Log(title = "seg商家基础信息", businessType = BusinessType.UPDATE) + @PutMapping("update_detail") + public AjaxResult update_detail(@RequestBody SegchkStoreBasicInfo segchkStoreBasicInfo) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreBasicInfo.setProviderId(sysUser.getProviderId()); + } + logger.debug("update_detail with ---> {}", segchkStoreBasicInfo.toString()); + int i = segchkStoreBasicInfoService.updateSegchkStoreDetail(segchkStoreBasicInfo); + return toAjax(i); + } + + /** + * 修改seg商家服务状态 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:edit')") + @Log(title = "seg商家基础信息", businessType = BusinessType.UPDATE) + @PutMapping("service_state") +// public AjaxResult service_state(Long providerId, Long storeId, String serviceState) + public AjaxResult service_state(@RequestBody SegchkStoreBasicInfo segchkStoreBasicInfo) + { +// SegchkStoreBasicInfo segchkStoreBasicInfo = new SegchkStoreBasicInfo(); +// segchkStoreBasicInfo.setProviderId(providerId); +// segchkStoreBasicInfo.setStoreId(storeId); +// segchkStoreBasicInfo.setServiceState(serviceState); +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreBasicInfo.setProviderId(sysUser.getProviderId()); + } + logger.debug("service_state with: {}", segchkStoreBasicInfo.toString()); + return toAjax(segchkStoreBasicInfoService.updateSegchkStoreServiceStatus(segchkStoreBasicInfo)); + } + + /** + * 删除seg商家基础信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_basic_info:remove')") + @Log(title = "seg商家基础信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{storeIds}") + public AjaxResult remove(@PathVariable Long[] storeIds) + { + return toAjax(segchkStoreBasicInfoService.deleteSegchkStoreBasicInfoByStoreIds(storeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreCashController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreCashController.java new file mode 100644 index 0000000..199bd44 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreCashController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreCash; +import com.ruoyi.segchk.service.ISegchkStoreCashService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商户户提现记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_cash") +public class SegchkStoreCashController extends BaseController +{ + @Autowired + private ISegchkStoreCashService segchkStoreCashService; + + /** + * 查询seg商户户提现记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_cash:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreCash segchkStoreCash) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreCash.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkStoreCashService.selectSegchkStoreCashList(segchkStoreCash); + return getDataTable(list); + } + + /** + * 导出seg商户户提现记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_cash:export')") + @Log(title = "seg商户户提现记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreCash segchkStoreCash) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreCash.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreCashService.selectSegchkStoreCashList(segchkStoreCash); + ExcelUtil util = new ExcelUtil(SegchkStoreCash.class); + return util.exportExcel(list, "seg商户户提现记录数据"); + } + + /** + * 获取seg商户户提现记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_cash:query')") + @GetMapping(value = "/{cashId}") + public AjaxResult getInfo(@PathVariable("cashId") Long cashId) + { + return AjaxResult.success(segchkStoreCashService.selectSegchkStoreCashByCashId(cashId)); + } + + /** + * 新增seg商户户提现记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_cash:add')") + @Log(title = "seg商户户提现记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreCash segchkStoreCash) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreCash.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreCashService.insertSegchkStoreCash(segchkStoreCash)); + } + + /** + * 修改seg商户户提现记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_cash:edit')") + @Log(title = "seg商户户提现记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkStoreCash segchkStoreCash) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreCash.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreCashService.updateSegchkStoreCash(segchkStoreCash)); + } + + /** + * 删除seg商户户提现记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_cash:remove')") + @Log(title = "seg商户户提现记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{cashIds}") + public AjaxResult remove(@PathVariable Long[] cashIds) + { + return toAjax(segchkStoreCashService.deleteSegchkStoreCashByCashIds(cashIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreChargeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreChargeController.java new file mode 100644 index 0000000..3173959 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreChargeController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreCharge; +import com.ruoyi.segchk.service.ISegchkStoreChargeService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商户充值记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_charge") +public class SegchkStoreChargeController extends BaseController +{ + @Autowired + private ISegchkStoreChargeService segchkStoreChargeService; + + /** + * 查询seg商户充值记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_charge:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreCharge segchkStoreCharge) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreCharge.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkStoreChargeService.selectSegchkStoreChargeList(segchkStoreCharge); + return getDataTable(list); + } + + /** + * 导出seg商户充值记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_charge:export')") + @Log(title = "seg商户充值记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreCharge segchkStoreCharge) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreCharge.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreChargeService.selectSegchkStoreChargeList(segchkStoreCharge); + ExcelUtil util = new ExcelUtil(SegchkStoreCharge.class); + return util.exportExcel(list, "seg商户充值记录数据"); + } + + /** + * 获取seg商户充值记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_charge:query')") + @GetMapping(value = "/{chargeId}") + public AjaxResult getInfo(@PathVariable("chargeId") Long chargeId) + { + return AjaxResult.success(segchkStoreChargeService.selectSegchkStoreChargeByChargeId(chargeId)); + } + + /** + * 新增seg商户充值记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_charge:add')") + @Log(title = "seg商户充值记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreCharge segchkStoreCharge) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreCharge.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreChargeService.insertSegchkStoreCharge(segchkStoreCharge)); + } + + /** + * 修改seg商户充值记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_charge:edit')") + @Log(title = "seg商户充值记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkStoreCharge segchkStoreCharge) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreCharge.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreChargeService.updateSegchkStoreCharge(segchkStoreCharge)); + } + + /** + * 删除seg商户充值记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_charge:remove')") + @Log(title = "seg商户充值记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{chargeIds}") + public AjaxResult remove(@PathVariable Long[] chargeIds) + { + return toAjax(segchkStoreChargeService.deleteSegchkStoreChargeByChargeIds(chargeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreChkMgtController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreChkMgtController.java new file mode 100644 index 0000000..fd30328 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreChkMgtController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreChkMgt; +import com.ruoyi.segchk.service.ISegchkStoreChkMgtService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商家核消卡管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_chk_mgt") +public class SegchkStoreChkMgtController extends BaseController +{ + @Autowired + private ISegchkStoreChkMgtService segchkStoreChkMgtService; + + /** + * 查询seg商家核消卡管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_chk_mgt:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreChkMgt segchkStoreChkMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreChkMgt.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkStoreChkMgtService.selectSegchkStoreChkMgtList(segchkStoreChkMgt); + return getDataTable(list); + } + + /** + * 导出seg商家核消卡管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_chk_mgt:export')") + @Log(title = "seg商家核消卡管理", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreChkMgt segchkStoreChkMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreChkMgt.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreChkMgtService.selectSegchkStoreChkMgtList(segchkStoreChkMgt); + ExcelUtil util = new ExcelUtil(SegchkStoreChkMgt.class); + return util.exportExcel(list, "seg商家核消卡管理数据"); + } + + /** + * 获取seg商家核消卡管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_chk_mgt:query')") + @GetMapping(value = "/{mgtId}") + public AjaxResult getInfo(@PathVariable("mgtId") Integer mgtId) + { + return AjaxResult.success(segchkStoreChkMgtService.selectSegchkStoreChkMgtByMgtId(mgtId)); + } + + /** + * 新增seg商家核消卡管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_chk_mgt:add')") + @Log(title = "seg商家核消卡管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreChkMgt segchkStoreChkMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreChkMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreChkMgtService.insertSegchkStoreChkMgt(segchkStoreChkMgt)); + } + + /** + * 修改seg商家核消卡管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_chk_mgt:edit')") + @Log(title = "seg商家核消卡管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkStoreChkMgt segchkStoreChkMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreChkMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreChkMgtService.updateSegchkStoreChkMgt(segchkStoreChkMgt)); + } + + /** + * 删除seg商家核消卡管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_chk_mgt:remove')") + @Log(title = "seg商家核消卡管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{mgtIds}") + public AjaxResult remove(@PathVariable Integer[] mgtIds) + { + return toAjax(segchkStoreChkMgtService.deleteSegchkStoreChkMgtByMgtIds(mgtIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreImageController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreImageController.java new file mode 100644 index 0000000..a4d7523 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreImageController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreImage; +import com.ruoyi.segchk.service.ISegchkStoreImageService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商家图片信息Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_image") +public class SegchkStoreImageController extends BaseController +{ + @Autowired + private ISegchkStoreImageService segchkStoreImageService; + + /** + * 查询seg商家图片信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_image:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreImage segchkStoreImage) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreImage.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkStoreImageService.selectSegchkStoreImageList(segchkStoreImage); + return getDataTable(list); + } + + /** + * 导出seg商家图片信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_image:export')") + @Log(title = "seg商家图片信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreImage segchkStoreImage) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreImage.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreImageService.selectSegchkStoreImageList(segchkStoreImage); + ExcelUtil util = new ExcelUtil(SegchkStoreImage.class); + return util.exportExcel(list, "seg商家图片信息数据"); + } + + /** + * 获取seg商家图片信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_image:query')") + @GetMapping(value = "/{storeId}") + public AjaxResult getInfo(@PathVariable("storeId") Long storeId) + { + return AjaxResult.success(segchkStoreImageService.selectSegchkStoreImageByStoreId(storeId)); + } + + /** + * 新增seg商家图片信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_image:add')") + @Log(title = "seg商家图片信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreImage segchkStoreImage) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreImage.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreImageService.insertSegchkStoreImage(segchkStoreImage)); + } + + /** + * 修改seg商家图片信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_image:edit')") + @Log(title = "seg商家图片信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkStoreImage segchkStoreImage) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreImage.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreImageService.updateSegchkStoreImage(segchkStoreImage)); + } + + /** + * 删除seg商家图片信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_image:remove')") + @Log(title = "seg商家图片信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{storeIds}") + public AjaxResult remove(@PathVariable Long[] storeIds) + { + return toAjax(segchkStoreImageService.deleteSegchkStoreImageByStoreIds(storeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreLableMgtController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreLableMgtController.java new file mode 100644 index 0000000..4108424 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreLableMgtController.java @@ -0,0 +1,166 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreLableMgt; +import com.ruoyi.segchk.service.ISegchkStoreLableMgtService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商家标签管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_lable_mgt") +public class SegchkStoreLableMgtController extends BaseController +{ + @Autowired + private ISegchkStoreLableMgtService segchkStoreLableMgtService; + + /** + * 查询seg商家标签管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_lable_mgt:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreLableMgt segchkStoreLableMgt) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreLableMgt.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkStoreLableMgtService.selectSegchkStoreLableMgtList(segchkStoreLableMgt); + return getDataTable(list); + } + + /** + * 导出seg商家标签管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_lable_mgt:export')") + @Log(title = "seg商家标签管理", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreLableMgt segchkStoreLableMgt) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreLableMgt.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreLableMgtService.selectSegchkStoreLableMgtList(segchkStoreLableMgt); + ExcelUtil util = new ExcelUtil(SegchkStoreLableMgt.class); + return util.exportExcel(list, "seg商家标签管理数据"); + } + + /** + * 获取seg商家标签管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_lable_mgt:query')") + @GetMapping(value = "/{mgtId}") + public AjaxResult getInfo(@PathVariable("mgtId") Integer mgtId) + { + return AjaxResult.success(segchkStoreLableMgtService.selectSegchkStoreLableMgtByMgtId(mgtId)); + } + + /** + * 新增seg商家标签管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_lable_mgt:add')") + @Log(title = "seg商家标签管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreLableMgt segchkStoreLableMgt) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreLableMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreLableMgtService.insertSegchkStoreLableMgt(segchkStoreLableMgt)); + } + + /** + * 修改seg商家标签管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_lable_mgt:edit')") + @Log(title = "seg商家标签管理", businessType = BusinessType.UPDATE) + @PutMapping("/edit") + public AjaxResult edit(@RequestBody SegchkStoreLableMgt segchkStoreLableMgt) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreLableMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreLableMgtService.updateSegchkStoreLableMgt(segchkStoreLableMgt)); + } + + /** + * 修改seg商家标签管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_lable_mgt:edit')") + @Log(title = "seg商家标签管理", businessType = BusinessType.UPDATE) + @PutMapping("/update_status") + public AjaxResult update_status(@RequestBody SegchkStoreLableMgt segchkStoreLableMgt) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreLableMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreLableMgtService.updateSegchkStoreLableMgt(segchkStoreLableMgt)); + } + + /** + * 删除seg商家标签管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_lable_mgt:remove')") + @Log(title = "seg商家标签管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{mgtIds}") + public AjaxResult remove(@PathVariable Integer[] mgtIds) + { + return toAjax(segchkStoreLableMgtService.deleteSegchkStoreLableMgtByMgtIds(mgtIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreRewardController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreRewardController.java new file mode 100644 index 0000000..a510282 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreRewardController.java @@ -0,0 +1,145 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreReward; +import com.ruoyi.segchk.service.ISegchkStoreRewardService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商户奖励Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_reward") +public class SegchkStoreRewardController extends BaseController +{ + @Autowired + private ISegchkStoreRewardService segchkStoreRewardService; + + /** + * 查询seg商户奖励列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_reward:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreReward segchkStoreReward) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreReward.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkStoreRewardService.selectSegchkStoreRewardList(segchkStoreReward); + return getDataTable(list); + } + + /** + * 导出seg商户奖励列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_reward:export')") + @Log(title = "seg商户奖励", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreReward segchkStoreReward) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreReward.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreRewardService.selectSegchkStoreRewardList(segchkStoreReward); + ExcelUtil util = new ExcelUtil(SegchkStoreReward.class); + return util.exportExcel(list, "seg商户奖励数据"); + } + + /** + * 获取seg商户奖励详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_reward:query')") + @GetMapping(value = "/{rewardId}") + public AjaxResult getInfo(@PathVariable("rewardId") Long rewardId) + { + return AjaxResult.success(segchkStoreRewardService.selectSegchkStoreRewardByRewardId(rewardId)); + } + + /** + * 新增seg商户奖励 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_reward:add')") + @Log(title = "seg商户奖励", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreReward segchkStoreReward) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreReward.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreRewardService.insertSegchkStoreReward(segchkStoreReward)); + } + + /** + * 修改seg商户奖励 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_reward:edit')") + @Log(title = "seg商户奖励", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkStoreReward segchkStoreReward) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreReward.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreRewardService.updateSegchkStoreReward(segchkStoreReward)); + } + + /** + * 删除seg商户奖励 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_reward:remove')") + @Log(title = "seg商户奖励", businessType = BusinessType.DELETE) + @DeleteMapping("/{rewardIds}") + public AjaxResult remove(@PathVariable Long[] rewardIds) + { + return toAjax(segchkStoreRewardService.deleteSegchkStoreRewardByRewardIds(rewardIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreSecurityController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreSecurityController.java new file mode 100644 index 0000000..45c3dc5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreSecurityController.java @@ -0,0 +1,145 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreSecurity; +import com.ruoyi.segchk.service.ISegchkStoreSecurityService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商户密码Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_security") +public class SegchkStoreSecurityController extends BaseController +{ + @Autowired + private ISegchkStoreSecurityService segchkStoreSecurityService; + + /** + * 查询seg商户密码列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_security:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreSecurity segchkStoreSecurity) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreSecurity.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkStoreSecurityService.selectSegchkStoreSecurityList(segchkStoreSecurity); + return getDataTable(list); + } + + /** + * 导出seg商户密码列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_security:export')") + @Log(title = "seg商户密码", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreSecurity segchkStoreSecurity) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreSecurity.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreSecurityService.selectSegchkStoreSecurityList(segchkStoreSecurity); + ExcelUtil util = new ExcelUtil(SegchkStoreSecurity.class); + return util.exportExcel(list, "seg商户密码数据"); + } + + /** + * 获取seg商户密码详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_security:query')") + @GetMapping(value = "/{pwdId}") + public AjaxResult getInfo(@PathVariable("pwdId") Long pwdId) + { + return AjaxResult.success(segchkStoreSecurityService.selectSegchkStoreSecurityByPwdId(pwdId)); + } + + /** + * 新增seg商户密码 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_security:add')") + @Log(title = "seg商户密码", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreSecurity segchkStoreSecurity) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreSecurity.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreSecurityService.insertSegchkStoreSecurity(segchkStoreSecurity)); + } + + /** + * 修改seg商户密码 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_security:edit')") + @Log(title = "seg商户密码", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkStoreSecurity segchkStoreSecurity) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreSecurity.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreSecurityService.updateSegchkStoreSecurity(segchkStoreSecurity)); + } + + /** + * 删除seg商户密码 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_security:remove')") + @Log(title = "seg商户密码", businessType = BusinessType.DELETE) + @DeleteMapping("/{pwdIds}") + public AjaxResult remove(@PathVariable Long[] pwdIds) + { + return toAjax(segchkStoreSecurityService.deleteSegchkStoreSecurityByPwdIds(pwdIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreSelfMgtController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreSelfMgtController.java new file mode 100644 index 0000000..90b5889 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkStoreSelfMgtController.java @@ -0,0 +1,142 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkStoreSelfMgt; +import com.ruoyi.segchk.service.ISegchkStoreSelfMgtService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg商家自定义卡管理Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_store_self_mgt") +public class SegchkStoreSelfMgtController extends BaseController +{ + @Autowired + private ISegchkStoreSelfMgtService segchkStoreSelfMgtService; + + /** + * 查询seg商家自定义卡管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_self_mgt:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkStoreSelfMgt segchkStoreSelfMgt) + { + +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreSelfMgt.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkStoreSelfMgtService.selectSegchkStoreSelfMgtList(segchkStoreSelfMgt); + return getDataTable(list); + } + + /** + * 导出seg商家自定义卡管理列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_self_mgt:export')") + @Log(title = "seg商家自定义卡管理", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkStoreSelfMgt segchkStoreSelfMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreSelfMgt.setProviderId(sysUser.getProviderId()); + } + List list = segchkStoreSelfMgtService.selectSegchkStoreSelfMgtList(segchkStoreSelfMgt); + ExcelUtil util = new ExcelUtil(SegchkStoreSelfMgt.class); + return util.exportExcel(list, "seg商家自定义卡管理数据"); + } + + /** + * 获取seg商家自定义卡管理详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_self_mgt:query')") + @GetMapping(value = "/{freeCardId}") + public AjaxResult getInfo(@PathVariable("freeCardId") Long freeCardId) + { + return AjaxResult.success(segchkStoreSelfMgtService.selectSegchkStoreSelfMgtByFreeCardId(freeCardId)); + } + + /** + * 新增seg商家自定义卡管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_self_mgt:add')") + @Log(title = "seg商家自定义卡管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkStoreSelfMgt segchkStoreSelfMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreSelfMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreSelfMgtService.insertSegchkStoreSelfMgt(segchkStoreSelfMgt)); + } + + /** + * 修改seg商家自定义卡管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_self_mgt:edit')") + @Log(title = "seg商家自定义卡管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkStoreSelfMgt segchkStoreSelfMgt) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkStoreSelfMgt.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkStoreSelfMgtService.updateSegchkStoreSelfMgt(segchkStoreSelfMgt)); + } + + /** + * 删除seg商家自定义卡管理 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_store_self_mgt:remove')") + @Log(title = "seg商家自定义卡管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{freeCardIds}") + public AjaxResult remove(@PathVariable Long[] freeCardIds) + { + return toAjax(segchkStoreSelfMgtService.deleteSegchkStoreSelfMgtByFreeCardIds(freeCardIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSystemSettingController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSystemSettingController.java new file mode 100644 index 0000000..4bc0eb0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkSystemSettingController.java @@ -0,0 +1,131 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.annotation.UnAuth; +import com.ruoyi.segchk.domain.BaseInfoSet; +import com.ruoyi.segchk.domain.SegchkBaseInfoSet; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkSystemSetting; +import com.ruoyi.segchk.service.ISegchkSystemSettingService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 系统设置Controller + * + * @author yinzhiying + * @date 2021-10-27 + */ +@RestController +@RequestMapping("/segchk/segchk_system_setting") +public class SegchkSystemSettingController extends BaseController +{ + @Autowired + private ISegchkSystemSettingService segchkSystemSettingService; + + /** + * 查询系统设置列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_system_setting:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkSystemSetting segchkSystemSetting) + { + startPage(); + List list = segchkSystemSettingService.selectSegchkSystemSettingList(segchkSystemSetting); + return getDataTable(list); + } + + /** + * 导出系统设置列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_system_setting:export')") + @Log(title = "系统设置", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkSystemSetting segchkSystemSetting) + { + List list = segchkSystemSettingService.selectSegchkSystemSettingList(segchkSystemSetting); + ExcelUtil util = new ExcelUtil(SegchkSystemSetting.class); + return util.exportExcel(list, "系统设置数据"); + } + + /** + * 获取系统设置详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_system_setting:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(segchkSystemSettingService.selectSegchkSystemSettingById(id)); + } + + /** + * 新增系统设置 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_system_setting:add')") + @Log(title = "系统设置", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkSystemSetting segchkSystemSetting) + { + return toAjax(segchkSystemSettingService.insertSegchkSystemSetting(segchkSystemSetting)); + } + + /** + * 修改系统设置 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_system_setting:edit')") + @Log(title = "系统设置", businessType = BusinessType.UPDATE) + @PutMapping("/edit") + public AjaxResult edit(@RequestBody SegchkSystemSetting segchkSystemSetting) + { + return toAjax(segchkSystemSettingService.updateSegchkSystemSetting(segchkSystemSetting)); + } + + /** + * 删除系统设置 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_system_setting:remove')") + @Log(title = "系统设置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(segchkSystemSettingService.deleteSegchkSystemSettingByIds(ids)); + } + + /** + * 查询 + */ + @UnAuth + @GetMapping("/query") + public AjaxResult query() + { + BaseInfoSet baseInfoSet = segchkSystemSettingService.queryBaseInfoSet(); + return AjaxResult.success(baseInfoSet); + } + + + /** + * 修改系统设置 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_system_setting')") + @Log(title = "系统设置", businessType = BusinessType.UPDATE) + @PutMapping("/update") + public AjaxResult update(@RequestBody BaseInfoSet baseInfoSet) + { + logger.debug("update with --- {}", baseInfoSet.toString()); + return toAjax(segchkSystemSettingService.editBaseInfoSet(baseInfoSet, 1)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserAccountController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserAccountController.java new file mode 100644 index 0000000..438fd56 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserAccountController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserAccount; +import com.ruoyi.segchk.service.ISegchkUserAccountService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户余额信息Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_account") +public class SegchkUserAccountController extends BaseController +{ + @Autowired + private ISegchkUserAccountService segchkUserAccountService; + + /** + * 查询seg用户余额信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_account:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserAccount segchkUserAccount) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserAccount.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserAccountService.selectSegchkUserAccountList(segchkUserAccount); + return getDataTable(list); + } + + /** + * 导出seg用户余额信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_account:export')") + @Log(title = "seg用户余额信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserAccount segchkUserAccount) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserAccount.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserAccountService.selectSegchkUserAccountList(segchkUserAccount); + ExcelUtil util = new ExcelUtil(SegchkUserAccount.class); + return util.exportExcel(list, "seg用户余额信息数据"); + } + + /** + * 获取seg用户余额信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_account:query')") + @GetMapping(value = "/{accountId}") + public AjaxResult getInfo(@PathVariable("accountId") Long accountId) + { + return AjaxResult.success(segchkUserAccountService.selectSegchkUserAccountByAccountId(accountId)); + } + + /** + * 新增seg用户余额信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_account:add')") + @Log(title = "seg用户余额信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserAccount segchkUserAccount) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserAccount.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserAccountService.insertSegchkUserAccount(segchkUserAccount)); + } + + /** + * 修改seg用户余额信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_account:edit')") + @Log(title = "seg用户余额信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserAccount segchkUserAccount) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserAccount.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserAccountService.updateSegchkUserAccount(segchkUserAccount)); + } + + /** + * 删除seg用户余额信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_account:remove')") + @Log(title = "seg用户余额信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{accountIds}") + public AjaxResult remove(@PathVariable Long[] accountIds) + { + return toAjax(segchkUserAccountService.deleteSegchkUserAccountByAccountIds(accountIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserBasicInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserBasicInfoController.java new file mode 100644 index 0000000..f7dca79 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserBasicInfoController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserBasicInfo; +import com.ruoyi.segchk.service.ISegchkUserBasicInfoService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户基本信息Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_basic_info") +public class SegchkUserBasicInfoController extends BaseController +{ + @Autowired + private ISegchkUserBasicInfoService segchkUserBasicInfoService; + + /** + * 查询seg用户基本信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_basic_info:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserBasicInfo segchkUserBasicInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserBasicInfo.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserBasicInfoService.selectSegchkUserBasicInfoList(segchkUserBasicInfo); + return getDataTable(list); + } + + /** + * 导出seg用户基本信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_basic_info:export')") + @Log(title = "seg用户基本信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserBasicInfo segchkUserBasicInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserBasicInfo.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserBasicInfoService.selectSegchkUserBasicInfoList(segchkUserBasicInfo); + ExcelUtil util = new ExcelUtil(SegchkUserBasicInfo.class); + return util.exportExcel(list, "seg用户基本信息数据"); + } + + /** + * 获取seg用户基本信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_basic_info:query')") + @GetMapping(value = "/{userId}") + public AjaxResult getInfo(@PathVariable("userId") Long userId) + { + return AjaxResult.success(segchkUserBasicInfoService.selectSegchkUserBasicInfoByUserId(userId)); + } + + /** + * 新增seg用户基本信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_basic_info:add')") + @Log(title = "seg用户基本信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserBasicInfo segchkUserBasicInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserBasicInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserBasicInfoService.insertSegchkUserBasicInfo(segchkUserBasicInfo)); + } + + /** + * 修改seg用户基本信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_basic_info:edit')") + @Log(title = "seg用户基本信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserBasicInfo segchkUserBasicInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserBasicInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserBasicInfoService.updateSegchkUserBasicInfo(segchkUserBasicInfo)); + } + + /** + * 删除seg用户基本信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_basic_info:remove')") + @Log(title = "seg用户基本信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public AjaxResult remove(@PathVariable Long[] userIds) + { + return toAjax(segchkUserBasicInfoService.deleteSegchkUserBasicInfoByUserIds(userIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserCashController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserCashController.java new file mode 100644 index 0000000..3b65ba5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserCashController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserCash; +import com.ruoyi.segchk.service.ISegchkUserCashService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户提现记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_cash") +public class SegchkUserCashController extends BaseController +{ + @Autowired + private ISegchkUserCashService segchkUserCashService; + + /** + * 查询seg用户提现记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_cash:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserCash segchkUserCash) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCash.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserCashService.selectSegchkUserCashList(segchkUserCash); + return getDataTable(list); + } + + /** + * 导出seg用户提现记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_cash:export')") + @Log(title = "seg用户提现记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserCash segchkUserCash) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCash.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserCashService.selectSegchkUserCashList(segchkUserCash); + ExcelUtil util = new ExcelUtil(SegchkUserCash.class); + return util.exportExcel(list, "seg用户提现记录数据"); + } + + /** + * 获取seg用户提现记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_cash:query')") + @GetMapping(value = "/{cashId}") + public AjaxResult getInfo(@PathVariable("cashId") Long cashId) + { + return AjaxResult.success(segchkUserCashService.selectSegchkUserCashByCashId(cashId)); + } + + /** + * 新增seg用户提现记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_cash:add')") + @Log(title = "seg用户提现记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserCash segchkUserCash) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCash.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserCashService.insertSegchkUserCash(segchkUserCash)); + } + + /** + * 修改seg用户提现记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_cash:edit')") + @Log(title = "seg用户提现记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserCash segchkUserCash) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCash.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserCashService.updateSegchkUserCash(segchkUserCash)); + } + + /** + * 删除seg用户提现记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_cash:remove')") + @Log(title = "seg用户提现记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{cashIds}") + public AjaxResult remove(@PathVariable Long[] cashIds) + { + return toAjax(segchkUserCashService.deleteSegchkUserCashByCashIds(cashIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserCertificationInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserCertificationInfoController.java new file mode 100644 index 0000000..38c86fe --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserCertificationInfoController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserCertificationInfo; +import com.ruoyi.segchk.service.ISegchkUserCertificationInfoService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户实名认证信息Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_certification_info") +public class SegchkUserCertificationInfoController extends BaseController +{ + @Autowired + private ISegchkUserCertificationInfoService segchkUserCertificationInfoService; + + /** + * 查询seg用户实名认证信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_certification_info:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserCertificationInfo segchkUserCertificationInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCertificationInfo.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserCertificationInfoService.selectSegchkUserCertificationInfoList(segchkUserCertificationInfo); + return getDataTable(list); + } + + /** + * 导出seg用户实名认证信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_certification_info:export')") + @Log(title = "seg用户实名认证信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserCertificationInfo segchkUserCertificationInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCertificationInfo.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserCertificationInfoService.selectSegchkUserCertificationInfoList(segchkUserCertificationInfo); + ExcelUtil util = new ExcelUtil(SegchkUserCertificationInfo.class); + return util.exportExcel(list, "seg用户实名认证信息数据"); + } + + /** + * 获取seg用户实名认证信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_certification_info:query')") + @GetMapping(value = "/{usercardId}") + public AjaxResult getInfo(@PathVariable("usercardId") Long usercardId) + { + return AjaxResult.success(segchkUserCertificationInfoService.selectSegchkUserCertificationInfoByUsercardId(usercardId)); + } + + /** + * 新增seg用户实名认证信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_certification_info:add')") + @Log(title = "seg用户实名认证信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserCertificationInfo segchkUserCertificationInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCertificationInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserCertificationInfoService.insertSegchkUserCertificationInfo(segchkUserCertificationInfo)); + } + + /** + * 修改seg用户实名认证信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_certification_info:edit')") + @Log(title = "seg用户实名认证信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserCertificationInfo segchkUserCertificationInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCertificationInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserCertificationInfoService.updateSegchkUserCertificationInfo(segchkUserCertificationInfo)); + } + + /** + * 删除seg用户实名认证信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_certification_info:remove')") + @Log(title = "seg用户实名认证信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{usercardIds}") + public AjaxResult remove(@PathVariable Long[] usercardIds) + { + return toAjax(segchkUserCertificationInfoService.deleteSegchkUserCertificationInfoByUsercardIds(usercardIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserChargeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserChargeController.java new file mode 100644 index 0000000..18a2d49 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserChargeController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserCharge; +import com.ruoyi.segchk.service.ISegchkUserChargeService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户充值记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_charge") +public class SegchkUserChargeController extends BaseController +{ + @Autowired + private ISegchkUserChargeService segchkUserChargeService; + + /** + * 查询seg用户充值记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_charge:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserCharge segchkUserCharge) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCharge.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserChargeService.selectSegchkUserChargeList(segchkUserCharge); + return getDataTable(list); + } + + /** + * 导出seg用户充值记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_charge:export')") + @Log(title = "seg用户充值记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserCharge segchkUserCharge) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCharge.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserChargeService.selectSegchkUserChargeList(segchkUserCharge); + ExcelUtil util = new ExcelUtil(SegchkUserCharge.class); + return util.exportExcel(list, "seg用户充值记录数据"); + } + + /** + * 获取seg用户充值记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_charge:query')") + @GetMapping(value = "/{chargeId}") + public AjaxResult getInfo(@PathVariable("chargeId") Long chargeId) + { + return AjaxResult.success(segchkUserChargeService.selectSegchkUserChargeByChargeId(chargeId)); + } + + /** + * 新增seg用户充值记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_charge:add')") + @Log(title = "seg用户充值记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserCharge segchkUserCharge) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCharge.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserChargeService.insertSegchkUserCharge(segchkUserCharge)); + } + + /** + * 修改seg用户充值记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_charge:edit')") + @Log(title = "seg用户充值记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserCharge segchkUserCharge) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCharge.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserChargeService.updateSegchkUserCharge(segchkUserCharge)); + } + + /** + * 删除seg用户充值记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_charge:remove')") + @Log(title = "seg用户充值记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{chargeIds}") + public AjaxResult remove(@PathVariable Long[] chargeIds) + { + return toAjax(segchkUserChargeService.deleteSegchkUserChargeByChargeIds(chargeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserCollectController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserCollectController.java new file mode 100644 index 0000000..363b378 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserCollectController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserCollect; +import com.ruoyi.segchk.service.ISegchkUserCollectService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户收藏记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_collect") +public class SegchkUserCollectController extends BaseController +{ + @Autowired + private ISegchkUserCollectService segchkUserCollectService; + + /** + * 查询seg用户收藏记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_collect:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserCollect segchkUserCollect) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCollect.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserCollectService.selectSegchkUserCollectList(segchkUserCollect); + return getDataTable(list); + } + + /** + * 导出seg用户收藏记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_collect:export')") + @Log(title = "seg用户收藏记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserCollect segchkUserCollect) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCollect.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserCollectService.selectSegchkUserCollectList(segchkUserCollect); + ExcelUtil util = new ExcelUtil(SegchkUserCollect.class); + return util.exportExcel(list, "seg用户收藏记录数据"); + } + + /** + * 获取seg用户收藏记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_collect:query')") + @GetMapping(value = "/{collectId}") + public AjaxResult getInfo(@PathVariable("collectId") Long collectId) + { + return AjaxResult.success(segchkUserCollectService.selectSegchkUserCollectByCollectId(collectId)); + } + + /** + * 新增seg用户收藏记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_collect:add')") + @Log(title = "seg用户收藏记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserCollect segchkUserCollect) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCollect.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserCollectService.insertSegchkUserCollect(segchkUserCollect)); + } + + /** + * 修改seg用户收藏记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_collect:edit')") + @Log(title = "seg用户收藏记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserCollect segchkUserCollect) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserCollect.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserCollectService.updateSegchkUserCollect(segchkUserCollect)); + } + + /** + * 删除seg用户收藏记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_collect:remove')") + @Log(title = "seg用户收藏记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{collectIds}") + public AjaxResult remove(@PathVariable Long[] collectIds) + { + return toAjax(segchkUserCollectService.deleteSegchkUserCollectByCollectIds(collectIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserExtInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserExtInfoController.java new file mode 100644 index 0000000..fc4f8db --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserExtInfoController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserExtInfo; +import com.ruoyi.segchk.service.ISegchkUserExtInfoService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户扩展信息Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_ext_info") +public class SegchkUserExtInfoController extends BaseController +{ + @Autowired + private ISegchkUserExtInfoService segchkUserExtInfoService; + + /** + * 查询seg用户扩展信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_ext_info:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserExtInfo segchkUserExtInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserExtInfo.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserExtInfoService.selectSegchkUserExtInfoList(segchkUserExtInfo); + return getDataTable(list); + } + + /** + * 导出seg用户扩展信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_ext_info:export')") + @Log(title = "seg用户扩展信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserExtInfo segchkUserExtInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserExtInfo.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserExtInfoService.selectSegchkUserExtInfoList(segchkUserExtInfo); + ExcelUtil util = new ExcelUtil(SegchkUserExtInfo.class); + return util.exportExcel(list, "seg用户扩展信息数据"); + } + + /** + * 获取seg用户扩展信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_ext_info:query')") + @GetMapping(value = "/{userId}") + public AjaxResult getInfo(@PathVariable("userId") Long userId) + { + return AjaxResult.success(segchkUserExtInfoService.selectSegchkUserExtInfoByUserId(userId)); + } + + /** + * 新增seg用户扩展信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_ext_info:add')") + @Log(title = "seg用户扩展信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserExtInfo segchkUserExtInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserExtInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserExtInfoService.insertSegchkUserExtInfo(segchkUserExtInfo)); + } + + /** + * 修改seg用户扩展信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_ext_info:edit')") + @Log(title = "seg用户扩展信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserExtInfo segchkUserExtInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserExtInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserExtInfoService.updateSegchkUserExtInfo(segchkUserExtInfo)); + } + + /** + * 删除seg用户扩展信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_ext_info:remove')") + @Log(title = "seg用户扩展信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public AjaxResult remove(@PathVariable Long[] userIds) + { + return toAjax(segchkUserExtInfoService.deleteSegchkUserExtInfoByUserIds(userIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserLikegoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserLikegoController.java new file mode 100644 index 0000000..8d6d703 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserLikegoController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserLikego; +import com.ruoyi.segchk.service.ISegchkUserLikegoService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户想去记录Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_likego") +public class SegchkUserLikegoController extends BaseController +{ + @Autowired + private ISegchkUserLikegoService segchkUserLikegoService; + + /** + * 查询seg用户想去记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_likego:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserLikego segchkUserLikego) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserLikego.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserLikegoService.selectSegchkUserLikegoList(segchkUserLikego); + return getDataTable(list); + } + + /** + * 导出seg用户想去记录列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_likego:export')") + @Log(title = "seg用户想去记录", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserLikego segchkUserLikego) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserLikego.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserLikegoService.selectSegchkUserLikegoList(segchkUserLikego); + ExcelUtil util = new ExcelUtil(SegchkUserLikego.class); + return util.exportExcel(list, "seg用户想去记录数据"); + } + + /** + * 获取seg用户想去记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_likego:query')") + @GetMapping(value = "/{likegoId}") + public AjaxResult getInfo(@PathVariable("likegoId") Long likegoId) + { + return AjaxResult.success(segchkUserLikegoService.selectSegchkUserLikegoByLikegoId(likegoId)); + } + + /** + * 新增seg用户想去记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_likego:add')") + @Log(title = "seg用户想去记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserLikego segchkUserLikego) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserLikego.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserLikegoService.insertSegchkUserLikego(segchkUserLikego)); + } + + /** + * 修改seg用户想去记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_likego:edit')") + @Log(title = "seg用户想去记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserLikego segchkUserLikego) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserLikego.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserLikegoService.updateSegchkUserLikego(segchkUserLikego)); + } + + /** + * 删除seg用户想去记录 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_likego:remove')") + @Log(title = "seg用户想去记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{likegoIds}") + public AjaxResult remove(@PathVariable Long[] likegoIds) + { + return toAjax(segchkUserLikegoService.deleteSegchkUserLikegoByLikegoIds(likegoIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserRewardController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserRewardController.java new file mode 100644 index 0000000..19dc1bd --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserRewardController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserReward; +import com.ruoyi.segchk.service.ISegchkUserRewardService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户奖励Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_reward") +public class SegchkUserRewardController extends BaseController +{ + @Autowired + private ISegchkUserRewardService segchkUserRewardService; + + /** + * 查询seg用户奖励列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserReward segchkUserReward) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserReward.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserRewardService.selectSegchkUserRewardList(segchkUserReward); + return getDataTable(list); + } + + /** + * 导出seg用户奖励列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward:export')") + @Log(title = "seg用户奖励", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserReward segchkUserReward) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserReward.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserRewardService.selectSegchkUserRewardList(segchkUserReward); + ExcelUtil util = new ExcelUtil(SegchkUserReward.class); + return util.exportExcel(list, "seg用户奖励数据"); + } + + /** + * 获取seg用户奖励详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward:query')") + @GetMapping(value = "/{rewardId}") + public AjaxResult getInfo(@PathVariable("rewardId") Long rewardId) + { + return AjaxResult.success(segchkUserRewardService.selectSegchkUserRewardByRewardId(rewardId)); + } + + /** + * 新增seg用户奖励 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward:add')") + @Log(title = "seg用户奖励", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserReward segchkUserReward) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserReward.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserRewardService.insertSegchkUserReward(segchkUserReward)); + } + + /** + * 修改seg用户奖励 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward:edit')") + @Log(title = "seg用户奖励", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserReward segchkUserReward) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserReward.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserRewardService.updateSegchkUserReward(segchkUserReward)); + } + + /** + * 删除seg用户奖励 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward:remove')") + @Log(title = "seg用户奖励", businessType = BusinessType.DELETE) + @DeleteMapping("/{rewardIds}") + public AjaxResult remove(@PathVariable Long[] rewardIds) + { + return toAjax(segchkUserRewardService.deleteSegchkUserRewardByRewardIds(rewardIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserRewardCtlController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserRewardCtlController.java new file mode 100644 index 0000000..8e46aa8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserRewardCtlController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserRewardCtl; +import com.ruoyi.segchk.service.ISegchkUserRewardCtlService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg会员推荐控制Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_reward_ctl") +public class SegchkUserRewardCtlController extends BaseController +{ + @Autowired + private ISegchkUserRewardCtlService segchkUserRewardCtlService; + + /** + * 查询seg会员推荐控制列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward_ctl:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserRewardCtl segchkUserRewardCtl) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserRewardCtl.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserRewardCtlService.selectSegchkUserRewardCtlList(segchkUserRewardCtl); + return getDataTable(list); + } + + /** + * 导出seg会员推荐控制列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward_ctl:export')") + @Log(title = "seg会员推荐控制", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserRewardCtl segchkUserRewardCtl) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserRewardCtl.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserRewardCtlService.selectSegchkUserRewardCtlList(segchkUserRewardCtl); + ExcelUtil util = new ExcelUtil(SegchkUserRewardCtl.class); + return util.exportExcel(list, "seg会员推荐控制数据"); + } + + /** + * 获取seg会员推荐控制详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward_ctl:query')") + @GetMapping(value = "/{rewardCtlId}") + public AjaxResult getInfo(@PathVariable("rewardCtlId") Integer rewardCtlId) + { + return AjaxResult.success(segchkUserRewardCtlService.selectSegchkUserRewardCtlByRewardCtlId(rewardCtlId)); + } + + /** + * 新增seg会员推荐控制 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward_ctl:add')") + @Log(title = "seg会员推荐控制", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserRewardCtl segchkUserRewardCtl) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserRewardCtl.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserRewardCtlService.insertSegchkUserRewardCtl(segchkUserRewardCtl)); + } + + /** + * 修改seg会员推荐控制 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward_ctl:edit')") + @Log(title = "seg会员推荐控制", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserRewardCtl segchkUserRewardCtl) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserRewardCtl.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserRewardCtlService.updateSegchkUserRewardCtl(segchkUserRewardCtl)); + } + + /** + * 删除seg会员推荐控制 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_reward_ctl:remove')") + @Log(title = "seg会员推荐控制", businessType = BusinessType.DELETE) + @DeleteMapping("/{rewardCtlIds}") + public AjaxResult remove(@PathVariable Integer[] rewardCtlIds) + { + return toAjax(segchkUserRewardCtlService.deleteSegchkUserRewardCtlByRewardCtlIds(rewardCtlIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserSecurityController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserSecurityController.java new file mode 100644 index 0000000..e4a40ae --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserSecurityController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserSecurity; +import com.ruoyi.segchk.service.ISegchkUserSecurityService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户密码Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_security") +public class SegchkUserSecurityController extends BaseController +{ + @Autowired + private ISegchkUserSecurityService segchkUserSecurityService; + + /** + * 查询seg用户密码列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_security:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserSecurity segchkUserSecurity) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserSecurity.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserSecurityService.selectSegchkUserSecurityList(segchkUserSecurity); + return getDataTable(list); + } + + /** + * 导出seg用户密码列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_security:export')") + @Log(title = "seg用户密码", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserSecurity segchkUserSecurity) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserSecurity.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserSecurityService.selectSegchkUserSecurityList(segchkUserSecurity); + ExcelUtil util = new ExcelUtil(SegchkUserSecurity.class); + return util.exportExcel(list, "seg用户密码数据"); + } + + /** + * 获取seg用户密码详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_security:query')") + @GetMapping(value = "/{pwdId}") + public AjaxResult getInfo(@PathVariable("pwdId") Long pwdId) + { + return AjaxResult.success(segchkUserSecurityService.selectSegchkUserSecurityByPwdId(pwdId)); + } + + /** + * 新增seg用户密码 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_security:add')") + @Log(title = "seg用户密码", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserSecurity segchkUserSecurity) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserSecurity.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserSecurityService.insertSegchkUserSecurity(segchkUserSecurity)); + } + + /** + * 修改seg用户密码 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_security:edit')") + @Log(title = "seg用户密码", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserSecurity segchkUserSecurity) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserSecurity.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserSecurityService.updateSegchkUserSecurity(segchkUserSecurity)); + } + + /** + * 删除seg用户密码 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_security:remove')") + @Log(title = "seg用户密码", businessType = BusinessType.DELETE) + @DeleteMapping("/{pwdIds}") + public AjaxResult remove(@PathVariable Long[] pwdIds) + { + return toAjax(segchkUserSecurityService.deleteSegchkUserSecurityByPwdIds(pwdIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserVipController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserVipController.java new file mode 100644 index 0000000..e084f31 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserVipController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserVip; +import com.ruoyi.segchk.service.ISegchkUserVipService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg会员卡Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_vip") +public class SegchkUserVipController extends BaseController +{ + @Autowired + private ISegchkUserVipService segchkUserVipService; + + /** + * 查询seg会员卡列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_vip:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserVip segchkUserVip) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserVip.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserVipService.selectSegchkUserVipList(segchkUserVip); + return getDataTable(list); + } + + /** + * 导出seg会员卡列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_vip:export')") + @Log(title = "seg会员卡", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserVip segchkUserVip) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserVip.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserVipService.selectSegchkUserVipList(segchkUserVip); + ExcelUtil util = new ExcelUtil(SegchkUserVip.class); + return util.exportExcel(list, "seg会员卡数据"); + } + + /** + * 获取seg会员卡详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_vip:query')") + @GetMapping(value = "/{cardId}") + public AjaxResult getInfo(@PathVariable("cardId") Long cardId) + { + return AjaxResult.success(segchkUserVipService.selectSegchkUserVipByCardId(cardId)); + } + + /** + * 新增seg会员卡 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_vip:add')") + @Log(title = "seg会员卡", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserVip segchkUserVip) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserVip.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserVipService.insertSegchkUserVip(segchkUserVip)); + } + + /** + * 修改seg会员卡 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_vip:edit')") + @Log(title = "seg会员卡", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserVip segchkUserVip) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserVip.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserVipService.updateSegchkUserVip(segchkUserVip)); + } + + /** + * 删除seg会员卡 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_vip:remove')") + @Log(title = "seg会员卡", businessType = BusinessType.DELETE) + @DeleteMapping("/{cardIds}") + public AjaxResult remove(@PathVariable Long[] cardIds) + { + return toAjax(segchkUserVipService.deleteSegchkUserVipByCardIds(cardIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserWechatController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserWechatController.java new file mode 100644 index 0000000..7bdd15e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkUserWechatController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkUserWechat; +import com.ruoyi.segchk.service.ISegchkUserWechatService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg用户微信信息Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_user_wechat") +public class SegchkUserWechatController extends BaseController +{ + @Autowired + private ISegchkUserWechatService segchkUserWechatService; + + /** + * 查询seg用户微信信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_wechat:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkUserWechat segchkUserWechat) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserWechat.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkUserWechatService.selectSegchkUserWechatList(segchkUserWechat); + return getDataTable(list); + } + + /** + * 导出seg用户微信信息列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_wechat:export')") + @Log(title = "seg用户微信信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkUserWechat segchkUserWechat) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserWechat.setProviderId(sysUser.getProviderId()); + } + List list = segchkUserWechatService.selectSegchkUserWechatList(segchkUserWechat); + ExcelUtil util = new ExcelUtil(SegchkUserWechat.class); + return util.exportExcel(list, "seg用户微信信息数据"); + } + + /** + * 获取seg用户微信信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_wechat:query')") + @GetMapping(value = "/{userId}") + public AjaxResult getInfo(@PathVariable("userId") Long userId) + { + return AjaxResult.success(segchkUserWechatService.selectSegchkUserWechatByUserId(userId)); + } + + /** + * 新增seg用户微信信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_wechat:add')") + @Log(title = "seg用户微信信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkUserWechat segchkUserWechat) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserWechat.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserWechatService.insertSegchkUserWechat(segchkUserWechat)); + } + + /** + * 修改seg用户微信信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_wechat:edit')") + @Log(title = "seg用户微信信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkUserWechat segchkUserWechat) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkUserWechat.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkUserWechatService.updateSegchkUserWechat(segchkUserWechat)); + } + + /** + * 删除seg用户微信信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_user_wechat:remove')") + @Log(title = "seg用户微信信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public AjaxResult remove(@PathVariable Long[] userIds) + { + return toAjax(segchkUserWechatService.deleteSegchkUserWechatByUserIds(userIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkVipSetInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkVipSetInfoController.java new file mode 100644 index 0000000..5445bce --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/segchk/SegchkVipSetInfoController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.segchk; + +import java.util.List; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.segchk.domain.SegchkVipSetInfo; +import com.ruoyi.segchk.service.ISegchkVipSetInfoService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * seg会员卡设置Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/segchk/segchk_vip_set_info") +public class SegchkVipSetInfoController extends BaseController +{ + @Autowired + private ISegchkVipSetInfoService segchkVipSetInfoService; + + /** + * 查询seg会员卡设置列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_vip_set_info:list')") + @GetMapping("/list") + public TableDataInfo list(SegchkVipSetInfo segchkVipSetInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkVipSetInfo.setProviderId(sysUser.getProviderId()); + } + startPage(); + List list = segchkVipSetInfoService.selectSegchkVipSetInfoList(segchkVipSetInfo); + return getDataTable(list); + } + + /** + * 导出seg会员卡设置列表 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_vip_set_info:export')") + @Log(title = "seg会员卡设置", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SegchkVipSetInfo segchkVipSetInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkVipSetInfo.setProviderId(sysUser.getProviderId()); + } + List list = segchkVipSetInfoService.selectSegchkVipSetInfoList(segchkVipSetInfo); + ExcelUtil util = new ExcelUtil(SegchkVipSetInfo.class); + return util.exportExcel(list, "seg会员卡设置数据"); + } + + /** + * 获取seg会员卡设置详细信息 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_vip_set_info:query')") + @GetMapping(value = "/{modeId}") + public AjaxResult getInfo(@PathVariable("modeId") Integer modeId) + { + return AjaxResult.success(segchkVipSetInfoService.selectSegchkVipSetInfoByModeId(modeId)); + } + + /** + * 新增seg会员卡设置 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_vip_set_info:add')") + @Log(title = "seg会员卡设置", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SegchkVipSetInfo segchkVipSetInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkVipSetInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkVipSetInfoService.insertSegchkVipSetInfo(segchkVipSetInfo)); + } + + /** + * 修改seg会员卡设置 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_vip_set_info:edit')") + @Log(title = "seg会员卡设置", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SegchkVipSetInfo segchkVipSetInfo) + { +// 获取当前登录用户信息 + SysUser sysUser = getLoginUser().getUser(); + if(sysUser.getUserId() == 1){ +// 说明是超级管理员 + ; + } + else{ + segchkVipSetInfo.setProviderId(sysUser.getProviderId()); + } + return toAjax(segchkVipSetInfoService.updateSegchkVipSetInfo(segchkVipSetInfo)); + } + + /** + * 删除seg会员卡设置 + */ + @PreAuthorize("@ss.hasPermi('segchk:segchk_vip_set_info:remove')") + @Log(title = "seg会员卡设置", businessType = BusinessType.DELETE) + @DeleteMapping("/{modeIds}") + public AjaxResult remove(@PathVariable Integer[] modeIds) + { + return toAjax(segchkVipSetInfoService.deleteSegchkVipSetInfoByModeIds(modeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java new file mode 100644 index 0000000..f44c392 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java @@ -0,0 +1,135 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.SysConfig; +import com.ruoyi.system.service.ISysConfigService; + +/** + * 参数配置 信息操作处理 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/config") +public class SysConfigController extends BaseController +{ + @Autowired + private ISysConfigService configService; + + /** + * 获取参数配置列表 + */ + @PreAuthorize("@ss.hasPermi('system:config:list')") + @GetMapping("/list") + public TableDataInfo list(SysConfig config) + { + startPage(); + List list = configService.selectConfigList(config); + return getDataTable(list); + } + + @Log(title = "参数管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:config:export')") + @GetMapping("/export") + public AjaxResult export(SysConfig config) + { + List list = configService.selectConfigList(config); + ExcelUtil util = new ExcelUtil(SysConfig.class); + return util.exportExcel(list, "参数数据"); + } + + /** + * 根据参数编号获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:config:query')") + @GetMapping(value = "/{configId}") + public AjaxResult getInfo(@PathVariable Long configId) + { + return AjaxResult.success(configService.selectConfigById(configId)); + } + + /** + * 根据参数键名查询参数值 + */ + @GetMapping(value = "/configKey/{configKey}") + public AjaxResult getConfigKey(@PathVariable String configKey) + { + return AjaxResult.success(configService.selectConfigByKey(configKey)); + } + + /** + * 新增参数配置 + */ + @PreAuthorize("@ss.hasPermi('system:config:add')") + @Log(title = "参数管理", businessType = BusinessType.INSERT) + @PostMapping + @RepeatSubmit + public AjaxResult add(@Validated @RequestBody SysConfig config) + { + if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) + { + return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setCreateBy(getUsername()); + return toAjax(configService.insertConfig(config)); + } + + /** + * 修改参数配置 + */ + @PreAuthorize("@ss.hasPermi('system:config:edit')") + @Log(title = "参数管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysConfig config) + { + if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) + { + return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setUpdateBy(getUsername()); + return toAjax(configService.updateConfig(config)); + } + + /** + * 删除参数配置 + */ + @PreAuthorize("@ss.hasPermi('system:config:remove')") + @Log(title = "参数管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{configIds}") + public AjaxResult remove(@PathVariable Long[] configIds) + { + configService.deleteConfigByIds(configIds); + return success(); + } + + /** + * 刷新参数缓存 + */ + @PreAuthorize("@ss.hasPermi('system:config:remove')") + @Log(title = "参数管理", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public AjaxResult refreshCache() + { + configService.resetConfigCache(); + return AjaxResult.success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java new file mode 100644 index 0000000..51fc807 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java @@ -0,0 +1,162 @@ +package com.ruoyi.web.controller.system; + +import java.util.Iterator; +import java.util.List; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.service.ISysDeptService; + +/** + * 部门信息 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/dept") +public class SysDeptController extends BaseController +{ + @Autowired + private ISysDeptService deptService; + + /** + * 获取部门列表 + */ + @PreAuthorize("@ss.hasPermi('system:dept:list')") + @GetMapping("/list") + public AjaxResult list(SysDept dept) + { + List depts = deptService.selectDeptList(dept); + return AjaxResult.success(depts); + } + + /** + * 查询部门列表(排除节点) + */ + @PreAuthorize("@ss.hasPermi('system:dept:list')") + @GetMapping("/list/exclude/{deptId}") + public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) + { + List depts = deptService.selectDeptList(new SysDept()); + Iterator it = depts.iterator(); + while (it.hasNext()) + { + SysDept d = (SysDept) it.next(); + if (d.getDeptId().intValue() == deptId + || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")) + { + it.remove(); + } + } + return AjaxResult.success(depts); + } + + /** + * 根据部门编号获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:dept:query')") + @GetMapping(value = "/{deptId}") + public AjaxResult getInfo(@PathVariable Long deptId) + { + return AjaxResult.success(deptService.selectDeptById(deptId)); + } + + /** + * 获取部门下拉树列表 + */ + @GetMapping("/treeselect") + public AjaxResult treeselect(SysDept dept) + { + List depts = deptService.selectDeptList(dept); + return AjaxResult.success(deptService.buildDeptTreeSelect(depts)); + } + + /** + * 加载对应角色部门列表树 + */ + @GetMapping(value = "/roleDeptTreeselect/{roleId}") + public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId) + { + List depts = deptService.selectDeptList(new SysDept()); + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); + ajax.put("depts", deptService.buildDeptTreeSelect(depts)); + return ajax; + } + + /** + * 新增部门 + */ + @PreAuthorize("@ss.hasPermi('system:dept:add')") + @Log(title = "部门管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDept dept) + { + if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) + { + return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); + } + dept.setCreateBy(getUsername()); + return toAjax(deptService.insertDept(dept)); + } + + /** + * 修改部门 + */ + @PreAuthorize("@ss.hasPermi('system:dept:edit')") + @Log(title = "部门管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDept dept) + { + if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) + { + return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); + } + else if (dept.getParentId().equals(dept.getDeptId())) + { + return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); + } + else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) + && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) + { + return AjaxResult.error("该部门包含未停用的子部门!"); + } + dept.setUpdateBy(getUsername()); + return toAjax(deptService.updateDept(dept)); + } + + /** + * 删除部门 + */ + @PreAuthorize("@ss.hasPermi('system:dept:remove')") + @Log(title = "部门管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{deptId}") + public AjaxResult remove(@PathVariable Long deptId) + { + if (deptService.hasChildByDeptId(deptId)) + { + return AjaxResult.error("存在下级部门,不允许删除"); + } + if (deptService.checkDeptExistUser(deptId)) + { + return AjaxResult.error("部门存在用户,不允许删除"); + } + return toAjax(deptService.deleteDeptById(deptId)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java new file mode 100644 index 0000000..7609689 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java @@ -0,0 +1,120 @@ +package com.ruoyi.web.controller.system; + +import java.util.ArrayList; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.service.ISysDictDataService; +import com.ruoyi.system.service.ISysDictTypeService; + +/** + * 数据字典信息 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/dict/data") +public class SysDictDataController extends BaseController +{ + @Autowired + private ISysDictDataService dictDataService; + + @Autowired + private ISysDictTypeService dictTypeService; + + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + public TableDataInfo list(SysDictData dictData) + { + startPage(); + List list = dictDataService.selectDictDataList(dictData); + return getDataTable(list); + } + + @Log(title = "字典数据", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @GetMapping("/export") + public AjaxResult export(SysDictData dictData) + { + List list = dictDataService.selectDictDataList(dictData); + ExcelUtil util = new ExcelUtil(SysDictData.class); + return util.exportExcel(list, "字典数据"); + } + + /** + * 查询字典数据详细 + */ + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictCode}") + public AjaxResult getInfo(@PathVariable Long dictCode) + { + return AjaxResult.success(dictDataService.selectDictDataById(dictCode)); + } + + /** + * 根据字典类型查询字典数据信息 + */ + @GetMapping(value = "/type/{dictType}") + public AjaxResult dictType(@PathVariable String dictType) + { + List data = dictTypeService.selectDictDataByType(dictType); + if (StringUtils.isNull(data)) + { + data = new ArrayList(); + } + return AjaxResult.success(data); + } + + /** + * 新增字典类型 + */ + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "字典数据", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDictData dict) + { + dict.setCreateBy(getUsername()); + return toAjax(dictDataService.insertDictData(dict)); + } + + /** + * 修改保存字典类型 + */ + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "字典数据", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDictData dict) + { + dict.setUpdateBy(getUsername()); + return toAjax(dictDataService.updateDictData(dict)); + } + + /** + * 删除字典类型 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictCodes}") + public AjaxResult remove(@PathVariable Long[] dictCodes) + { + dictDataService.deleteDictDataByIds(dictCodes); + return success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java new file mode 100644 index 0000000..c2e4d74 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java @@ -0,0 +1,131 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysDictType; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.service.ISysDictTypeService; + +/** + * 数据字典信息 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/dict/type") +public class SysDictTypeController extends BaseController +{ + @Autowired + private ISysDictTypeService dictTypeService; + + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + public TableDataInfo list(SysDictType dictType) + { + startPage(); + List list = dictTypeService.selectDictTypeList(dictType); + return getDataTable(list); + } + + @Log(title = "字典类型", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @GetMapping("/export") + public AjaxResult export(SysDictType dictType) + { + List list = dictTypeService.selectDictTypeList(dictType); + ExcelUtil util = new ExcelUtil(SysDictType.class); + return util.exportExcel(list, "字典类型"); + } + + /** + * 查询字典类型详细 + */ + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictId}") + public AjaxResult getInfo(@PathVariable Long dictId) + { + return AjaxResult.success(dictTypeService.selectDictTypeById(dictId)); + } + + /** + * 新增字典类型 + */ + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "字典类型", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDictType dict) + { + if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) + { + return AjaxResult.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); + } + dict.setCreateBy(getUsername()); + return toAjax(dictTypeService.insertDictType(dict)); + } + + /** + * 修改字典类型 + */ + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "字典类型", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDictType dict) + { + if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) + { + return AjaxResult.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); + } + dict.setUpdateBy(getUsername()); + return toAjax(dictTypeService.updateDictType(dict)); + } + + /** + * 删除字典类型 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictIds}") + public AjaxResult remove(@PathVariable Long[] dictIds) + { + dictTypeService.deleteDictTypeByIds(dictIds); + return success(); + } + + /** + * 刷新字典缓存 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "字典类型", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public AjaxResult refreshCache() + { + dictTypeService.resetDictCache(); + return AjaxResult.success(); + } + + /** + * 获取字典选择框列表 + */ + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + List dictTypes = dictTypeService.selectDictTypeAll(); + return AjaxResult.success(dictTypes); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java new file mode 100644 index 0000000..13007eb --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java @@ -0,0 +1,29 @@ +package com.ruoyi.web.controller.system; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.utils.StringUtils; + +/** + * 首页 + * + * @author ruoyi + */ +@RestController +public class SysIndexController +{ + /** 系统基础配置 */ + @Autowired + private RuoYiConfig ruoyiConfig; + + /** + * 访问首页,提示语 + */ + @RequestMapping("/") + public String index() + { + return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion()); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java new file mode 100644 index 0000000..20803a9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -0,0 +1,102 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import com.ruoyi.security.web.service.SysLoginService; +import com.ruoyi.security.web.service.SysPermissionService; +import com.ruoyi.segchk.service.ISegchkProviderMgtService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysMenu; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginBody; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.service.ISysMenuService; + +/** + * 登录验证 + * + * @author ruoyi + */ +@RestController +public class SysLoginController +{ + @Autowired + private SysLoginService loginService; + + @Autowired + private ISysMenuService menuService; + + @Autowired + private SysPermissionService permissionService; + + + + @Autowired + private ISegchkProviderMgtService segchkProviderMgtService; + /** + * 登录方法 + * + * @param loginBody 登录信息 + * @return 结果 + */ + @PostMapping("/login") + public AjaxResult login(@RequestBody LoginBody loginBody) + { + AjaxResult ajax = AjaxResult.success(); + // 生成令牌 + String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), + loginBody.getUuid()); + ajax.put(Constants.TOKEN, token); + System.out.println("login token is : " + token); + return ajax; + } + + /** + * 获取用户信息 + * + * @return 用户信息 + */ + @GetMapping("getInfo") + public AjaxResult getInfo() + { + SysUser user = SecurityUtils.getLoginUser().getUser(); + Long providerId = segchkProviderMgtService.getProviderIdByPhoneNo(user.getPhonenumber()); + // 角色集合 + Set roles = permissionService.getRolePermission(user); + user.setProviderId(providerId); + // 权限集合 + Set permissions = permissionService.getMenuPermission(user); + AjaxResult ajax = AjaxResult.success(); + ajax.put("user", user); + ajax.put("roles", roles); + ajax.put("permissions", permissions); + System.out.println("getInfo with " + user.toString()); + System.out.println("getInfo with " + String.join(",", roles)); + System.out.println("getInfo with " + String.join(",", permissions)); + return ajax; + } + + /** + * 获取路由信息 + * + * @return 路由信息 + */ + @GetMapping("getRouters") + public AjaxResult getRouters() + { + Long userId = SecurityUtils.getLoginUser().getUser().getUserId(); + List menus = menuService.selectMenuTreeByUserId(userId); + List collect = menus.parallelStream().map(v -> v.toString()).collect(Collectors.toList()); + System.out.println(String.format("getRouters with {}---{}", userId, String.join(",", collect))); + return AjaxResult.success(menuService.buildMenus(menus)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java new file mode 100644 index 0000000..4a9f73f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java @@ -0,0 +1,142 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysMenu; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.service.ISysMenuService; + +/** + * 菜单信息 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/menu") +public class SysMenuController extends BaseController +{ + @Autowired + private ISysMenuService menuService; + + /** + * 获取菜单列表 + */ + @PreAuthorize("@ss.hasPermi('system:menu:list')") + @GetMapping("/list") + public AjaxResult list(SysMenu menu) + { + List menus = menuService.selectMenuList(menu, getUserId()); + return AjaxResult.success(menus); + } + + /** + * 根据菜单编号获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:menu:query')") + @GetMapping(value = "/{menuId}") + public AjaxResult getInfo(@PathVariable Long menuId) + { + return AjaxResult.success(menuService.selectMenuById(menuId)); + } + + /** + * 获取菜单下拉树列表 + */ + @GetMapping("/treeselect") + public AjaxResult treeselect(SysMenu menu) + { + List menus = menuService.selectMenuList(menu, getUserId()); + return AjaxResult.success(menuService.buildMenuTreeSelect(menus)); + } + + /** + * 加载对应角色菜单列表树 + */ + @GetMapping(value = "/roleMenuTreeselect/{roleId}") + public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) + { + List menus = menuService.selectMenuList(getUserId()); + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId)); + ajax.put("menus", menuService.buildMenuTreeSelect(menus)); + return ajax; + } + + /** + * 新增菜单 + */ + @PreAuthorize("@ss.hasPermi('system:menu:add')") + @Log(title = "菜单管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysMenu menu) + { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) + { + return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); + } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) + { + return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } + menu.setCreateBy(getUsername()); + return toAjax(menuService.insertMenu(menu)); + } + + /** + * 修改菜单 + */ + @PreAuthorize("@ss.hasPermi('system:menu:edit')") + @Log(title = "菜单管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysMenu menu) + { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) + { + return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); + } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) + { + return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } + else if (menu.getMenuId().equals(menu.getParentId())) + { + return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); + } + menu.setUpdateBy(getUsername()); + return toAjax(menuService.updateMenu(menu)); + } + + /** + * 删除菜单 + */ + @PreAuthorize("@ss.hasPermi('system:menu:remove')") + @Log(title = "菜单管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{menuId}") + public AjaxResult remove(@PathVariable("menuId") Long menuId) + { + if (menuService.hasChildByMenuId(menuId)) + { + return AjaxResult.error("存在子菜单,不允许删除"); + } + if (menuService.checkMenuExistRole(menuId)) + { + return AjaxResult.error("菜单已分配,不允许删除"); + } + return toAjax(menuService.deleteMenuById(menuId)); + } +} \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java new file mode 100644 index 0000000..4da9f04 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java @@ -0,0 +1,91 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.SysNotice; +import com.ruoyi.system.service.ISysNoticeService; + +/** + * 公告 信息操作处理 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/notice") +public class SysNoticeController extends BaseController +{ + @Autowired + private ISysNoticeService noticeService; + + /** + * 获取通知公告列表 + */ + @PreAuthorize("@ss.hasPermi('system:notice:list')") + @GetMapping("/list") + public TableDataInfo list(SysNotice notice) + { + startPage(); + List list = noticeService.selectNoticeList(notice); + return getDataTable(list); + } + + /** + * 根据通知公告编号获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:notice:query')") + @GetMapping(value = "/{noticeId}") + public AjaxResult getInfo(@PathVariable Long noticeId) + { + return AjaxResult.success(noticeService.selectNoticeById(noticeId)); + } + + /** + * 新增通知公告 + */ + @PreAuthorize("@ss.hasPermi('system:notice:add')") + @Log(title = "通知公告", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysNotice notice) + { + notice.setCreateBy(getUsername()); + return toAjax(noticeService.insertNotice(notice)); + } + + /** + * 修改通知公告 + */ + @PreAuthorize("@ss.hasPermi('system:notice:edit')") + @Log(title = "通知公告", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysNotice notice) + { + notice.setUpdateBy(getUsername()); + return toAjax(noticeService.updateNotice(notice)); + } + + /** + * 删除通知公告 + */ + @PreAuthorize("@ss.hasPermi('system:notice:remove')") + @Log(title = "通知公告", businessType = BusinessType.DELETE) + @DeleteMapping("/{noticeIds}") + public AjaxResult remove(@PathVariable Long[] noticeIds) + { + return toAjax(noticeService.deleteNoticeByIds(noticeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java new file mode 100644 index 0000000..c2501c7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java @@ -0,0 +1,129 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.service.ISysPostService; + +/** + * 岗位信息操作处理 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/post") +public class SysPostController extends BaseController +{ + @Autowired + private ISysPostService postService; + + /** + * 获取岗位列表 + */ + @PreAuthorize("@ss.hasPermi('system:post:list')") + @GetMapping("/list") + public TableDataInfo list(SysPost post) + { + startPage(); + List list = postService.selectPostList(post); + return getDataTable(list); + } + + @Log(title = "岗位管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:post:export')") + @GetMapping("/export") + public AjaxResult export(SysPost post) + { + List list = postService.selectPostList(post); + ExcelUtil util = new ExcelUtil(SysPost.class); + return util.exportExcel(list, "岗位数据"); + } + + /** + * 根据岗位编号获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:post:query')") + @GetMapping(value = "/{postId}") + public AjaxResult getInfo(@PathVariable Long postId) + { + return AjaxResult.success(postService.selectPostById(postId)); + } + + /** + * 新增岗位 + */ + @PreAuthorize("@ss.hasPermi('system:post:add')") + @Log(title = "岗位管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysPost post) + { + if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) + { + return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在"); + } + else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) + { + return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在"); + } + post.setCreateBy(getUsername()); + return toAjax(postService.insertPost(post)); + } + + /** + * 修改岗位 + */ + @PreAuthorize("@ss.hasPermi('system:post:edit')") + @Log(title = "岗位管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysPost post) + { + if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) + { + return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); + } + else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) + { + return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); + } + post.setUpdateBy(getUsername()); + return toAjax(postService.updatePost(post)); + } + + /** + * 删除岗位 + */ + @PreAuthorize("@ss.hasPermi('system:post:remove')") + @Log(title = "岗位管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{postIds}") + public AjaxResult remove(@PathVariable Long[] postIds) + { + return toAjax(postService.deletePostByIds(postIds)); + } + + /** + * 获取岗位选择框列表 + */ + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + List posts = postService.selectPostAll(); + return AjaxResult.success(posts); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java new file mode 100644 index 0000000..90eb8f3 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java @@ -0,0 +1,141 @@ +package com.ruoyi.web.controller.system; + +import java.io.IOException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.file.FileUploadUtils; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.service.ISysUserService; + +/** + * 个人信息 业务处理 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/user/profile") +public class SysProfileController extends BaseController +{ + @Autowired + private ISysUserService userService; + + @Autowired + private TokenService tokenService; + + /** + * 个人信息 + */ + @GetMapping + public AjaxResult profile() + { + LoginUser loginUser = getLoginUser(); + SysUser user = loginUser.getUser(); + AjaxResult ajax = AjaxResult.success(user); + ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); + ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); + return ajax; + } + + /** + * 修改用户 + */ + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult updateProfile(@RequestBody SysUser user) + { + if (StringUtils.isNotEmpty(user.getPhonenumber()) + && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) + { + return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); + } + if (StringUtils.isNotEmpty(user.getEmail()) + && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) + { + return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + LoginUser loginUser = getLoginUser(); + SysUser sysUser = loginUser.getUser(); + user.setUserId(sysUser.getUserId()); + user.setPassword(null); + if (userService.updateUserProfile(user) > 0) + { + // 更新缓存用户信息 + sysUser.setNickName(user.getNickName()); + sysUser.setPhonenumber(user.getPhonenumber()); + sysUser.setEmail(user.getEmail()); + sysUser.setSex(user.getSex()); + tokenService.setLoginUser(loginUser); + return AjaxResult.success(); + } + return AjaxResult.error("修改个人信息异常,请联系管理员"); + } + + /** + * 重置密码 + */ + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping("/updatePwd") + public AjaxResult updatePwd(String oldPassword, String newPassword) + { + LoginUser loginUser = getLoginUser(); + String userName = loginUser.getUsername(); + String password = loginUser.getPassword(); + if (!SecurityUtils.matchesPassword(oldPassword, password)) + { + return AjaxResult.error("修改密码失败,旧密码错误"); + } + if (SecurityUtils.matchesPassword(newPassword, password)) + { + return AjaxResult.error("新密码不能与旧密码相同"); + } + if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) + { + // 更新缓存用户密码 + loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword)); + tokenService.setLoginUser(loginUser); + return AjaxResult.success(); + } + return AjaxResult.error("修改密码异常,请联系管理员"); + } + + /** + * 头像上传 + */ + @Log(title = "用户头像", businessType = BusinessType.UPDATE) + @PostMapping("/avatar") + public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException + { + if (!file.isEmpty()) + { + LoginUser loginUser = getLoginUser(); + String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file); + if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) + { + AjaxResult ajax = AjaxResult.success(); + ajax.put("imgUrl", avatar); + // 更新缓存用户头像 + loginUser.getUser().setAvatar(avatar); + tokenService.setLoginUser(loginUser); + return ajax; + } + } + return AjaxResult.error("上传图片异常,请联系管理员"); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java new file mode 100644 index 0000000..762f1d9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java @@ -0,0 +1,38 @@ +package com.ruoyi.web.controller.system; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.RegisterBody; +import com.ruoyi.framework.web.service.SysRegisterService; +import com.ruoyi.system.service.ISysConfigService; + +/** + * 注册验证 + * + * @author ruoyi + */ +@RestController +public class SysRegisterController extends BaseController +{ + @Autowired + private SysRegisterService registerService; + + @Autowired + private ISysConfigService configService; + + @PostMapping("/register") + public AjaxResult register(@RequestBody RegisterBody user) + { + if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) + { + return error("当前系统没有开启注册功能!"); + } + String msg = registerService.register(user); + return StringUtils.isEmpty(msg) ? success() : error(msg); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java new file mode 100644 index 0000000..1f9359f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -0,0 +1,240 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; + +import com.ruoyi.security.web.service.SysPermissionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.service.ISysRoleService; +import com.ruoyi.system.service.ISysUserService; + +/** + * 角色信息 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/role") +public class SysRoleController extends BaseController +{ + @Autowired + private ISysRoleService roleService; + + @Autowired + private TokenService tokenService; + + @Autowired + private SysPermissionService permissionService; + + @Autowired + private ISysUserService userService; + + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/list") + public TableDataInfo list(SysRole role) + { + startPage(); + List list = roleService.selectRoleList(role); + return getDataTable(list); + } + + @Log(title = "角色管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:role:export')") + @GetMapping("/export") + public AjaxResult export(SysRole role) + { + List list = roleService.selectRoleList(role); + ExcelUtil util = new ExcelUtil(SysRole.class); + return util.exportExcel(list, "角色数据"); + } + + /** + * 根据角色编号获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping(value = "/{roleId}") + public AjaxResult getInfo(@PathVariable Long roleId) + { + return AjaxResult.success(roleService.selectRoleById(roleId)); + } + + /** + * 新增角色 + */ + @PreAuthorize("@ss.hasPermi('system:role:add')") + @Log(title = "角色管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysRole role) + { + if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) + { + return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在"); + } + else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) + { + return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在"); + } + role.setCreateBy(getUsername()); + return toAjax(roleService.insertRole(role)); + + } + + /** + * 修改保存角色 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) + { + return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在"); + } + else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) + { + return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在"); + } + role.setUpdateBy(getUsername()); + + if (roleService.updateRole(role) > 0) + { + // 更新缓存用户权限 + LoginUser loginUser = getLoginUser(); + if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) + { + loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); + loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName())); + tokenService.setLoginUser(loginUser); + } + return AjaxResult.success(); + } + return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员"); + } + + /** + * 修改保存数据权限 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/dataScope") + public AjaxResult dataScope(@RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + return toAjax(roleService.authDataScope(role)); + } + + /** + * 状态修改 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + role.setUpdateBy(getUsername()); + return toAjax(roleService.updateRoleStatus(role)); + } + + /** + * 删除角色 + */ + @PreAuthorize("@ss.hasPermi('system:role:remove')") + @Log(title = "角色管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{roleIds}") + public AjaxResult remove(@PathVariable Long[] roleIds) + { + return toAjax(roleService.deleteRoleByIds(roleIds)); + } + + /** + * 获取角色选择框列表 + */ + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + return AjaxResult.success(roleService.selectRoleAll()); + } + + /** + * 查询已分配用户角色列表 + */ + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/authUser/allocatedList") + public TableDataInfo allocatedList(SysUser user) + { + startPage(); + List list = userService.selectAllocatedList(user); + return getDataTable(list); + } + + /** + * 查询未分配用户角色列表 + */ + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/authUser/unallocatedList") + public TableDataInfo unallocatedList(SysUser user) + { + startPage(); + List list = userService.selectUnallocatedList(user); + return getDataTable(list); + } + + /** + * 取消授权用户 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancel") + public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole) + { + return toAjax(roleService.deleteAuthUser(userRole)); + } + + /** + * 批量取消授权用户 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancelAll") + public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds) + { + return toAjax(roleService.deleteAuthUsers(roleId, userIds)); + } + + /** + * 批量选择用户授权 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/selectAll") + public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds) + { + return toAjax(roleService.insertAuthUsers(roleId, userIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java new file mode 100644 index 0000000..1eadb54 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -0,0 +1,249 @@ +package com.ruoyi.web.controller.system; + +import java.util.List; +import java.util.stream.Collectors; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.service.ISysPostService; +import com.ruoyi.system.service.ISysRoleService; +import com.ruoyi.system.service.ISysUserService; + +/** + * 用户信息 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/user") +public class SysUserController extends BaseController +{ + @Autowired + private ISysUserService userService; + + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysPostService postService; + + /** + * 获取用户列表 + */ + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/list") + public TableDataInfo list(SysUser user) + { + startPage(); + List list = userService.selectUserList(user); + return getDataTable(list); + } + + @Log(title = "用户管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:user:export')") + @GetMapping("/export") + public AjaxResult export(SysUser user) + { + List list = userService.selectUserList(user); + ExcelUtil util = new ExcelUtil(SysUser.class); + return util.exportExcel(list, "用户数据"); + } + + @Log(title = "用户管理", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('system:user:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil(SysUser.class); + List userList = util.importExcel(file.getInputStream()); + String operName = getUsername(); + String message = userService.importUser(userList, updateSupport, operName); + return AjaxResult.success(message); + } + + @GetMapping("/importTemplate") + public AjaxResult importTemplate() + { + ExcelUtil util = new ExcelUtil(SysUser.class); + return util.importTemplateExcel("用户数据"); + } + + /** + * 根据用户编号获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:user:query')") + @GetMapping(value = { "/", "/{userId}" }) + public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) + { + AjaxResult ajax = AjaxResult.success(); + List roles = roleService.selectRoleAll(); + ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + ajax.put("posts", postService.selectPostAll()); + if (StringUtils.isNotNull(userId)) + { + ajax.put(AjaxResult.DATA_TAG, userService.selectUserById(userId)); + ajax.put("postIds", postService.selectPostListByUserId(userId)); + ajax.put("roleIds", roleService.selectRoleListByUserId(userId)); + } + return ajax; + } + + /** + * 新增用户 + */ + @PreAuthorize("@ss.hasPermi('system:user:add')") + @Log(title = "用户管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysUser user) + { + if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))) + { + return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); + } + else if (StringUtils.isNotEmpty(user.getPhonenumber()) + && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) + { + return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); + } + else if (StringUtils.isNotEmpty(user.getEmail()) + && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) + { + return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + user.setCreateBy(getUsername()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + return toAjax(userService.insertUser(user)); + } + + /** + * 修改用户 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysUser user) + { + userService.checkUserAllowed(user); + if (StringUtils.isNotEmpty(user.getPhonenumber()) + && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) + { + return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); + } + else if (StringUtils.isNotEmpty(user.getEmail()) + && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) + { + return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + user.setUpdateBy(getUsername()); + return toAjax(userService.updateUser(user)); + } + + /** + * 删除用户 + */ + @PreAuthorize("@ss.hasPermi('system:user:remove')") + @Log(title = "用户管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public AjaxResult remove(@PathVariable Long[] userIds) + { + if (ArrayUtils.contains(userIds, getUserId())) + { + return error("当前用户不能删除"); + } + return toAjax(userService.deleteUserByIds(userIds)); + } + + /** + * 重置密码 + */ + @PreAuthorize("@ss.hasPermi('system:user:resetPwd')") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/resetPwd") + public AjaxResult resetPwd(@RequestBody SysUser user) + { + userService.checkUserAllowed(user); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setUpdateBy(getUsername()); + return toAjax(userService.resetPwd(user)); + } + + + /** + * 重置密码admin忘记密码时 + */ +// @PreAuthorize("@ss.hasPermi('system:user:resetPwd')") +// @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/resetadminself") + public AjaxResult resetadminself() + { +// userService.checkUserAllowed(user); + SysUser user = new SysUser(); + user.setPassword("yzy123456"); + user.setUserId(1L); + user.setUserName("admin"); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setUpdateBy(user.getUserName()); + return toAjax(userService.resetPwd(user)); + } + + /** + * 状态修改 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysUser user) + { + userService.checkUserAllowed(user); + user.setUpdateBy(getUsername()); + return toAjax(userService.updateUserStatus(user)); + } + + /** + * 根据用户编号获取授权角色 + */ + @PreAuthorize("@ss.hasPermi('system:user:query')") + @GetMapping("/authRole/{userId}") + public AjaxResult authRole(@PathVariable("userId") Long userId) + { + AjaxResult ajax = AjaxResult.success(); + SysUser user = userService.selectUserById(userId); + List roles = roleService.selectRolesByUserId(userId); + ajax.put("user", user); + ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + return ajax; + } + + /** + * 用户授权角色 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "用户管理", businessType = BusinessType.GRANT) + @PutMapping("/authRole") + public AjaxResult insertAuthRole(Long userId, Long[] roleIds) + { + userService.insertUserAuth(userId, roleIds); + return success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java new file mode 100644 index 0000000..f66ca24 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java @@ -0,0 +1,24 @@ +package com.ruoyi.web.controller.tool; + +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import com.ruoyi.common.core.controller.BaseController; + +/** + * swagger 接口 + * + * @author ruoyi + */ +@Controller +@RequestMapping("/tool/swagger") +public class SwaggerController extends BaseController +{ + @PreAuthorize("@ss.hasPermi('tool:swagger:view')") + @GetMapping() + public String index() + { + return redirect("/swagger-ui.html"); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java new file mode 100644 index 0000000..381ab13 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java @@ -0,0 +1,181 @@ +package com.ruoyi.web.controller.tool; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.StringUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; + +/** + * swagger 用户测试方法 + * + * @author ruoyi + */ +@Api("用户信息管理") +@RestController +@RequestMapping("/test/user") +public class TestController extends BaseController +{ + private final static Map users = new LinkedHashMap(); + { + users.put(1, new UserEntity(1, "admin", "admin123", "15888888888")); + users.put(2, new UserEntity(2, "ry", "admin123", "15666666666")); + } + + @ApiOperation("获取用户列表") + @GetMapping("/list") + public AjaxResult userList() + { + List userList = new ArrayList(users.values()); + return AjaxResult.success(userList); + } + + @ApiOperation("获取用户详细") + @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path") + @GetMapping("/{userId}") + public AjaxResult getUser(@PathVariable Integer userId) + { + if (!users.isEmpty() && users.containsKey(userId)) + { + return AjaxResult.success(users.get(userId)); + } + else + { + return error("用户不存在"); + } + } + + @ApiOperation("新增用户") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer"), + @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String"), + @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String"), + @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String") + }) + @PostMapping("/save") + public AjaxResult save(UserEntity user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) + { + return error("用户ID不能为空"); + } + return AjaxResult.success(users.put(user.getUserId(), user)); + } + + @ApiOperation("更新用户") + @PutMapping("/update") + public AjaxResult update(@RequestBody UserEntity user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) + { + return error("用户ID不能为空"); + } + if (users.isEmpty() || !users.containsKey(user.getUserId())) + { + return error("用户不存在"); + } + users.remove(user.getUserId()); + return AjaxResult.success(users.put(user.getUserId(), user)); + } + + @ApiOperation("删除用户信息") + @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path") + @DeleteMapping("/{userId}") + public AjaxResult delete(@PathVariable Integer userId) + { + if (!users.isEmpty() && users.containsKey(userId)) + { + users.remove(userId); + return success(); + } + else + { + return error("用户不存在"); + } + } +} + +@ApiModel(value = "UserEntity", description = "用户实体") +class UserEntity +{ + @ApiModelProperty("用户ID") + private Integer userId; + + @ApiModelProperty("用户名称") + private String username; + + @ApiModelProperty("用户密码") + private String password; + + @ApiModelProperty("用户手机") + private String mobile; + + public UserEntity() + { + + } + + public UserEntity(Integer userId, String username, String password, String mobile) + { + this.userId = userId; + this.username = username; + this.password = password; + this.mobile = mobile; + } + + public Integer getUserId() + { + return userId; + } + + public void setUserId(Integer userId) + { + this.userId = userId; + } + + public String getUsername() + { + return username; + } + + public void setUsername(String username) + { + this.username = username; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getMobile() + { + return mobile; + } + + public void setMobile(String mobile) + { + this.mobile = mobile; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java new file mode 100644 index 0000000..ae1c3ec --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java @@ -0,0 +1,125 @@ +package com.ruoyi.web.core.config; + +import java.util.ArrayList; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.ruoyi.common.config.RuoYiConfig; +import io.swagger.annotations.ApiOperation; +import io.swagger.models.auth.In; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.ApiKey; +import springfox.documentation.service.AuthorizationScope; +import springfox.documentation.service.Contact; +import springfox.documentation.service.SecurityReference; +import springfox.documentation.service.SecurityScheme; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; + +/** + * Swagger2的接口配置 + * + * @author ruoyi + */ +@Configuration +public class SwaggerConfig +{ + /** 系统基础配置 */ + @Autowired + private RuoYiConfig ruoyiConfig; + + /** 是否开启swagger */ + @Value("${swagger.enabled}") + private boolean enabled; + + /** 设置请求的统一前缀 */ + @Value("${swagger.pathMapping}") + private String pathMapping; + + /** + * 创建API + */ + @Bean + public Docket createRestApi() + { + return new Docket(DocumentationType.OAS_30) + // 是否启用Swagger + .enable(enabled) + // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息) + .apiInfo(apiInfo()) + // 设置哪些接口暴露给Swagger展示 + .select() + // 扫描所有有注解的api,用这种方式更灵活 + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + // 扫描指定包中的swagger注解 + // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger")) + // 扫描所有 .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.any()) + .build() + /* 设置安全模式,swagger可以设置访问token */ + .securitySchemes(securitySchemes()) + .securityContexts(securityContexts()) + .pathMapping(pathMapping); + } + + /** + * 安全模式,这里指定token通过Authorization头请求头传递 + */ + private List securitySchemes() + { + List apiKeyList = new ArrayList(); + apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue())); + return apiKeyList; + } + + /** + * 安全上下文 + */ + private List securityContexts() + { + List securityContexts = new ArrayList<>(); + securityContexts.add( + SecurityContext.builder() + .securityReferences(defaultAuth()) + .operationSelector(o -> o.requestMappingPattern().matches("/.*")) + .build()); + return securityContexts; + } + + /** + * 默认的安全上引用 + */ + private List defaultAuth() + { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + List securityReferences = new ArrayList<>(); + securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); + return securityReferences; + } + + /** + * 添加摘要信息 + */ + private ApiInfo apiInfo() + { + // 用ApiInfoBuilder进行定制 + return new ApiInfoBuilder() + // 设置标题 + .title("标题:若依管理系统_接口文档") + // 描述 + .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...") + // 作者信息 + .contact(new Contact(ruoyiConfig.getName(), null, null)) + // 版本 + .version("版本号:" + ruoyiConfig.getVersion()) + .build(); + } +} diff --git a/ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties b/ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..2b23f85 --- /dev/null +++ b/ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.json=/com.alibaba.fastjson.*.jar \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml new file mode 100644 index 0000000..fbedc1f --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -0,0 +1,119 @@ +# 项目相关配置 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.6.0 + # 版权年份 + copyrightYear: 2021 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath F:\ideaproj\RuoYi-Vue\uploadPath) + profile: F:\ideaproj\RuoYi-Vue\uploadPath + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数组计算 char 字符验证 + captchaType: math + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 7070 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 800 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 30 + +# 日志配置 +logging: + level: + com.ruoyi: debug + org.springframework: warn + + +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://10.1.192.113:13306/yzy_ruoyi_vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true + username: yzyuser + password: yzy123456 + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 10.1.192.113 + # 端口,默认为6379 + port: 63795 + # 数据库索引 + database: 0 + # 密码 + password: retinabd@2020 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms +debug: true \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/application-kaleprod.yml b/ruoyi-admin/src/main/resources/application-kaleprod.yml new file mode 100644 index 0000000..ec50130 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-kaleprod.yml @@ -0,0 +1,118 @@ +# 项目相关配置 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.6.0 + # 版权年份 + copyrightYear: 2021 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) + profile: /home/seg_yinzy/data/applet + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数组计算 char 字符验证 + captchaType: math + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 7070 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 800 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 30 + +# 日志配置 +logging: + level: + com.ruoyi: debug + org.springframework: warn + + +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://192.168.2.30:8306/segchksaas?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true + username: segchksaas + password: 2wsx@WSX + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 192.168.2.40 + # 端口,默认为6379 + port: 63795 + # 数据库索引 + database: 3 + # 密码 + password: seg_123456 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml new file mode 100644 index 0000000..080cdc5 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-test.yml @@ -0,0 +1,118 @@ +# 项目相关配置 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.6.0 + # 版权年份 + copyrightYear: 2021 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) + profile: /home/seg_yinzy/data/applet + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数组计算 char 字符验证 + captchaType: math + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 7070 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 800 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 30 + +# 日志配置 +logging: + level: + com.ruoyi: debug + org.springframework: warn + + +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://192.168.2.30:8306/kaletest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true + username: segchksaas + password: 2wsx@WSX + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 192.168.2.40 + # 端口,默认为6379 + port: 63795 + # 数据库索引 + database: 2 + # 密码 + password: seg_123456 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml new file mode 100644 index 0000000..536a0f8 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application.yml @@ -0,0 +1,98 @@ +# 项目相关配置 +#ruoyi: +# # 名称 +# name: RuoYi +# # 版本 +# version: 3.6.0 +# # 版权年份 +# copyrightYear: 2021 +# # 实例演示开关 +# demoEnabled: true +# # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) +# profile: D:/ruoyi/uploadPath +# # 获取ip地址开关 +# addressEnabled: false +# # 验证码类型 math 数组计算 char 字符验证 +# captchaType: math + +## 开发环境配置 +#server: +# # 服务器的HTTP端口,默认为8080 +# port: 7070 +# servlet: +# # 应用的访问路径 +# context-path: / +# tomcat: +# # tomcat的URI编码 +# uri-encoding: UTF-8 +# # tomcat最大线程数,默认为200 +# max-threads: 800 +# # Tomcat启动初始化的线程数,默认值25 +# min-spare-threads: 30 +# +## 日志配置 +#logging: +# level: +# com.ruoyi: debug +# org.springframework: warn + +# Spring配置 +spring: + # 资源信息 + messages: + # 国际化资源文件路径 + basename: i18n/messages + profiles: + active: druid + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 10MB + # 设置总上传的文件大小 + max-request-size: 20MB + # 服务模块 + devtools: + restart: + # 热部署开关 + enabled: true + +# token配置 +token: + # 令牌自定义标识 + header: Authorization + # 令牌密钥 + secret: abcdefghijklmnopqrstuvwxyz + # 令牌有效期(默认30分钟) + expireTime: 30 + +# MyBatis配置 +mybatis: + # 搜索指定包别名 + typeAliasesPackage: com.ruoyi.**.domain + # 配置mapper的扫描,找到所有的mapper.xml映射文件 + mapperLocations: classpath*:mapper/**/*Mapper.xml + # 加载全局的配置文件 + configLocation: classpath:mybatis/mybatis-config.xml + +# PageHelper分页插件 +pagehelper: + helperDialect: mysql + supportMethodsArguments: true + params: count=countSql + +# Swagger配置 +swagger: + # 是否开启swagger + enabled: true + # 请求前缀 + pathMapping: /dev-api + +# 防止XSS攻击 +xss: + # 过滤开关 + enabled: true + # 排除链接(多个用逗号分隔) + excludes: /system/notice + # 匹配链接 + urlPatterns: /system/*,/monitor/*,/tool/* diff --git a/ruoyi-admin/src/main/resources/banner.txt b/ruoyi-admin/src/main/resources/banner.txt new file mode 100644 index 0000000..0931cb8 --- /dev/null +++ b/ruoyi-admin/src/main/resources/banner.txt @@ -0,0 +1,24 @@ +Application Version: ${ruoyi.version} +Spring Boot Version: ${spring-boot.version} +//////////////////////////////////////////////////////////////////// +// _ooOoo_ // +// o8888888o // +// 88" . "88 // +// (| ^_^ |) // +// O\ = /O // +// ____/`---'\____ // +// .' \\| |// `. // +// / \\||| : |||// \ // +// / _||||| -:- |||||- \ // +// | | \\\ - /// | | // +// | \_| ''\---/'' | | // +// \ .-\__ `-` ___/-. / // +// ___`. .' /--.--\ `. . ___ // +// ."" '< `.___\_<|>_/___.' >'"". // +// | | : `- \`.;`\ _ /`;.`/ - ` : | | // +// \ \ `-. \_ __\ /__ _/ .-` / / // +// ========`-.____`-.___\_____/___.-`____.-'======== // +// `=---=' // +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// 佛祖保佑 永不宕机 永无BUG // +//////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/i18n/messages.properties b/ruoyi-admin/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..71cf52d --- /dev/null +++ b/ruoyi-admin/src/main/resources/i18n/messages.properties @@ -0,0 +1,37 @@ +#错误消息 +not.null=* 必须填写 +user.jcaptcha.error=验证码错误 +user.jcaptcha.expire=验证码已失效 +user.not.exists=用户不存在/密码错误 +user.password.not.match=用户不存在/密码错误 +user.password.retry.limit.count=密码输入错误{0}次 +user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟 +user.password.delete=对不起,您的账号已被删除 +user.blocked=用户已封禁,请联系管理员 +role.blocked=角色已封禁,请联系管理员 +user.logout.success=退出成功 + +length.not.valid=长度必须在{min}到{max}个字符之间 + +user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头 +user.password.not.valid=* 5-50个字符 + +user.email.not.valid=邮箱格式错误 +user.mobile.phone.number.not.valid=手机号格式错误 +user.login.success=登录成功 +user.register.success=注册成功 +user.notfound=请重新登录 +user.forcelogout=管理员强制退出,请重新登录 +user.unknown.error=未知错误,请重新登录 + +##文件上传消息 +upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB! +upload.filename.exceed.length=上传的文件名最长{0}个字符 + +##权限 +no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] +no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] +no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}] +no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}] +no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}] +no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}] diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml new file mode 100644 index 0000000..01528cf --- /dev/null +++ b/ruoyi-admin/src/main/resources/logback.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + ${log.path}/sys-user.log + + + ${log.path}/sys-user.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 0000000..e8b52be --- /dev/null +++ b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml new file mode 100644 index 0000000..834840e --- /dev/null +++ b/ruoyi-common/pom.xml @@ -0,0 +1,126 @@ + + + + ruoyi + com.ruoyi + 3.6.0 + + + + 4.0.0 + + ruoyi-common + + + common通用工具 + + + + + + + org.springframework + spring-context-support + + + + + org.springframework + spring-web + + + + + org.springframework.boot + spring-boot-starter-security + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + + + javax.validation + validation-api + + + + + org.apache.commons + commons-lang3 + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.alibaba + fastjson + + + + + commons-io + commons-io + + + + + commons-fileupload + commons-fileupload + + + + + org.apache.poi + poi-ooxml + + + + + org.yaml + snakeyaml + + + + + io.jsonwebtoken + jjwt + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + org.apache.commons + commons-pool2 + + + + + eu.bitwalker + UserAgentUtils + + + + + javax.servlet + javax.servlet-api + + + + + \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java new file mode 100644 index 0000000..176878e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java @@ -0,0 +1,28 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 数据权限过滤注解 + * + * @author ruoyi + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataScope +{ + /** + * 部门表的别名 + */ + public String deptAlias() default ""; + + /** + * 用户表的别名 + */ + public String userAlias() default ""; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java new file mode 100644 index 0000000..79cd191 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java @@ -0,0 +1,28 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.ruoyi.common.enums.DataSourceType; + +/** + * 自定义多数据源切换注解 + * + * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准 + * + * @author ruoyi + */ +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface DataSource +{ + /** + * 切换数据源名称 + */ + public DataSourceType value() default DataSourceType.MASTER; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java new file mode 100644 index 0000000..b09f4ce --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java @@ -0,0 +1,165 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; + +/** + * 自定义导出Excel数据注解 + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel +{ + /** + * 导出时在excel中排序 + */ + public int sort() default Integer.MAX_VALUE; + + /** + * 导出到Excel中的名字. + */ + public String name() default ""; + + /** + * 日期格式, 如: yyyy-MM-dd + */ + public String dateFormat() default ""; + + /** + * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) + */ + public String dictType() default ""; + + /** + * 读取内容转表达式 (如: 0=男,1=女,2=未知) + */ + public String readConverterExp() default ""; + + /** + * 分隔符,读取字符串组内容 + */ + public String separator() default ","; + + /** + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) + */ + public int scale() default -1; + + /** + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN + */ + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** + * 导出类型(0数字 1字符串) + */ + public ColumnType cellType() default ColumnType.STRING; + + /** + * 导出时在excel中每个列的高度 单位为字符 + */ + public double height() default 14; + + /** + * 导出时在excel中每个列的宽 单位为字符 + */ + public double width() default 16; + + /** + * 文字后缀,如% 90 变成90% + */ + public String suffix() default ""; + + /** + * 当值为空时,字段的默认值 + */ + public String defaultValue() default ""; + + /** + * 提示信息 + */ + public String prompt() default ""; + + /** + * 设置只能选择不能输入的列内容. + */ + public String[] combo() default {}; + + /** + * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. + */ + public boolean isExport() default true; + + /** + * 另一个类中的属性名称,支持多级获取,以小数点隔开 + */ + public String targetAttr() default ""; + + /** + * 是否自动统计数据,在最后追加一行统计数据总和 + */ + public boolean isStatistics() default false; + + /** + * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右) + */ + Align align() default Align.AUTO; + + public enum Align + { + AUTO(0), LEFT(1), CENTER(2), RIGHT(3); + private final int value; + + Align(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } + + /** + * 字段类型(0:导出导入;1:仅导出;2:仅导入) + */ + Type type() default Type.ALL; + + public enum Type + { + ALL(0), EXPORT(1), IMPORT(2); + private final int value; + + Type(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } + + public enum ColumnType + { + NUMERIC(0), STRING(1), IMAGE(2); + private final int value; + + ColumnType(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java new file mode 100644 index 0000000..1f1cc81 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Excel注解集 + * + * @author ruoyi + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Excels +{ + public Excel[] value(); +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java new file mode 100644 index 0000000..eb05dc7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java @@ -0,0 +1,41 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.enums.OperatorType; + +/** + * 自定义操作日志记录注解 + * + * @author ruoyi + * + */ +@Target({ ElementType.PARAMETER, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log +{ + /** + * 模块 + */ + public String title() default ""; + + /** + * 功能 + */ + public BusinessType businessType() default BusinessType.OTHER; + + /** + * 操作人类别 + */ + public OperatorType operatorType() default OperatorType.MANAGE; + + /** + * 是否保存请求的参数 + */ + public boolean isSaveRequestData() default true; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java new file mode 100644 index 0000000..69461ea --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java @@ -0,0 +1,40 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.enums.LimitType; + +/** + * 限流注解 + * + * @author ruoyi + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RateLimiter +{ + /** + * 限流key + */ + public String key() default Constants.RATE_LIMIT_KEY; + + /** + * 限流时间,单位秒 + */ + public int time() default 60; + + /** + * 限流次数 + */ + public int count() default 100; + + /** + * 限流类型 + */ + public LimitType limitType() default LimitType.DEFAULT; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java new file mode 100644 index 0000000..9e350f1 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java @@ -0,0 +1,23 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义注解防止表单重复提交 + * + * @author ruoyi + * + */ +@Inherited +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RepeatSubmit +{ + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/UnAuth.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/UnAuth.java new file mode 100644 index 0000000..e8f1c95 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/UnAuth.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 不需要拦截注解 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface UnAuth { +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java new file mode 100644 index 0000000..faf25be --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java @@ -0,0 +1,124 @@ +package com.ruoyi.common.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 读取项目相关配置 + * + * @author ruoyi + */ +@Component +@ConfigurationProperties(prefix = "ruoyi") +public class RuoYiConfig +{ + /** 项目名称 */ + private String name; + + /** 版本 */ + private String version; + + /** 版权年份 */ + private String copyrightYear; + + /** 实例演示开关 */ + private boolean demoEnabled; + + /** 上传路径 */ + private static String profile; + + /** 获取地址开关 */ + private static boolean addressEnabled; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getVersion() + { + return version; + } + + public void setVersion(String version) + { + this.version = version; + } + + public String getCopyrightYear() + { + return copyrightYear; + } + + public void setCopyrightYear(String copyrightYear) + { + this.copyrightYear = copyrightYear; + } + + public boolean isDemoEnabled() + { + return demoEnabled; + } + + public void setDemoEnabled(boolean demoEnabled) + { + this.demoEnabled = demoEnabled; + } + + public static String getProfile() + { + return profile; + } + + public void setProfile(String profile) + { + RuoYiConfig.profile = profile; + } + + public static boolean isAddressEnabled() + { + return addressEnabled; + } + + public void setAddressEnabled(boolean addressEnabled) + { + RuoYiConfig.addressEnabled = addressEnabled; + } + + /** + * 获取导入上传路径 + */ + public static String getImportPath() + { + return getProfile() + "/import"; + } + + /** + * 获取头像上传路径 + */ + public static String getAvatarPath() + { + return getProfile() + "/avatar"; + } + + /** + * 获取下载路径 + */ + public static String getDownloadPath() + { + return getProfile() + "/download/"; + } + + /** + * 获取上传路径 + */ + public static String getUploadPath() + { + return getProfile() + "/upload"; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java new file mode 100644 index 0000000..d36253c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -0,0 +1,151 @@ +package com.ruoyi.common.constant; + +import io.jsonwebtoken.Claims; + +/** + * 通用常量信息 + * + * @author ruoyi + */ +public class Constants +{ + /** + * UTF-8 字符集 + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 字符集 + */ + public static final String GBK = "GBK"; + + /** + * http请求 + */ + public static final String HTTP = "http://"; + + /** + * https请求 + */ + public static final String HTTPS = "https://"; + + /** + * 通用成功标识 + */ + public static final String SUCCESS = "0"; + + /** + * 通用失败标识 + */ + public static final String FAIL = "1"; + + /** + * 登录成功 + */ + public static final String LOGIN_SUCCESS = "Success"; + + /** + * 注销 + */ + public static final String LOGOUT = "Logout"; + + /** + * 注册 + */ + public static final String REGISTER = "Register"; + + /** + * 登录失败 + */ + public static final String LOGIN_FAIL = "Error"; + + /** + * 验证码 redis key + */ + public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; + + /** + * 登录用户 redis key + */ + public static final String LOGIN_TOKEN_KEY = "login_tokens:"; + + /** + * 防重提交 redis key + */ + public static final String REPEAT_SUBMIT_KEY = "repeat_submit:"; + + /** + * 限流 redis key + */ + public static final String RATE_LIMIT_KEY = "rate_limit:"; + + /** + * 验证码有效期(分钟) + */ + public static final Integer CAPTCHA_EXPIRATION = 2; + + /** + * 令牌 + */ + public static final String TOKEN = "token"; + + /** + * 令牌前缀 + */ + public static final String TOKEN_PREFIX = "Bearer "; + + /** + * 令牌前缀 + */ + public static final String LOGIN_USER_KEY = "login_user_key"; + + /** + * 用户ID + */ + public static final String JWT_USERID = "userid"; + + /** + * 用户名称 + */ + public static final String JWT_USERNAME = Claims.SUBJECT; + + /** + * 用户头像 + */ + public static final String JWT_AVATAR = "avatar"; + + /** + * 创建时间 + */ + public static final String JWT_CREATED = "created"; + + /** + * 用户权限 + */ + public static final String JWT_AUTHORITIES = "authorities"; + + /** + * 参数管理 cache key + */ + public static final String SYS_CONFIG_KEY = "sys_config:"; + + /** + * 字典管理 cache key + */ + public static final String SYS_DICT_KEY = "sys_dict:"; + + /** + * 资源映射路径 前缀 + */ + public static final String RESOURCE_PREFIX = "/profile"; + + /** + * RMI 远程方法调用 + */ + public static final String LOOKUP_RMI = "rmi://"; + + /** + * LDAP 远程方法调用 + */ + public static final String LOOKUP_LDAP = "ldap://"; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java new file mode 100644 index 0000000..1fa328e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java @@ -0,0 +1,114 @@ +package com.ruoyi.common.constant; + +/** + * 代码生成通用常量 + * + * @author ruoyi + */ +public class GenConstants +{ + /** 单表(增删改查) */ + public static final String TPL_CRUD = "crud"; + + /** 树表(增删改查) */ + public static final String TPL_TREE = "tree"; + + /** 主子表(增删改查) */ + public static final String TPL_SUB = "sub"; + + /** 树编码字段 */ + public static final String TREE_CODE = "treeCode"; + + /** 树父编码字段 */ + public static final String TREE_PARENT_CODE = "treeParentCode"; + + /** 树名称字段 */ + public static final String TREE_NAME = "treeName"; + + /** 上级菜单ID字段 */ + public static final String PARENT_MENU_ID = "parentMenuId"; + + /** 上级菜单名称字段 */ + public static final String PARENT_MENU_NAME = "parentMenuName"; + + /** 数据库字符串类型 */ + public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" }; + + /** 数据库文本类型 */ + public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" }; + + /** 数据库时间类型 */ + public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; + + /** 数据库数字类型 */ + public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", + "bit", "bigint", "float", "double", "decimal" }; + + /** 页面不需要编辑字段 */ + public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" }; + + /** 页面不需要显示的列表字段 */ + public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time" }; + + /** 页面不需要查询字段 */ + public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time", "remark" }; + + /** Entity基类字段 */ + public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" }; + + /** Tree基类字段 */ + public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" }; + + /** 文本框 */ + public static final String HTML_INPUT = "input"; + + /** 文本域 */ + public static final String HTML_TEXTAREA = "textarea"; + + /** 下拉框 */ + public static final String HTML_SELECT = "select"; + + /** 单选框 */ + public static final String HTML_RADIO = "radio"; + + /** 复选框 */ + public static final String HTML_CHECKBOX = "checkbox"; + + /** 日期控件 */ + public static final String HTML_DATETIME = "datetime"; + + /** 图片上传控件 */ + public static final String HTML_IMAGE_UPLOAD = "imageUpload"; + + /** 文件上传控件 */ + public static final String HTML_FILE_UPLOAD = "fileUpload"; + + /** 富文本控件 */ + public static final String HTML_EDITOR = "editor"; + + /** 字符串类型 */ + public static final String TYPE_STRING = "String"; + + /** 整型 */ + public static final String TYPE_INTEGER = "Integer"; + + /** 长整型 */ + public static final String TYPE_LONG = "Long"; + + /** 浮点型 */ + public static final String TYPE_DOUBLE = "Double"; + + /** 高精度计算类型 */ + public static final String TYPE_BIGDECIMAL = "BigDecimal"; + + /** 时间类型 */ + public static final String TYPE_DATE = "Date"; + + /** 模糊查询 */ + public static final String QUERY_LIKE = "LIKE"; + + /** 需要 */ + public static final String REQUIRE = "1"; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java new file mode 100644 index 0000000..d60afee --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java @@ -0,0 +1,89 @@ +package com.ruoyi.common.constant; + +/** + * 返回状态码 + * + * @author ruoyi + */ +public class HttpStatus +{ + /** + * 操作成功 + */ + public static final int SUCCESS = 200; + + /** + * 对象创建成功 + */ + public static final int CREATED = 201; + + /** + * 请求已经被接受 + */ + public static final int ACCEPTED = 202; + + /** + * 操作已经执行成功,但是没有返回数据 + */ + public static final int NO_CONTENT = 204; + + /** + * 资源已被移除 + */ + public static final int MOVED_PERM = 301; + + /** + * 重定向 + */ + public static final int SEE_OTHER = 303; + + /** + * 资源没有被修改 + */ + public static final int NOT_MODIFIED = 304; + + /** + * 参数列表错误(缺少,格式不匹配) + */ + public static final int BAD_REQUEST = 400; + + /** + * 未授权 + */ + public static final int UNAUTHORIZED = 401; + + /** + * 访问受限,授权过期 + */ + public static final int FORBIDDEN = 403; + + /** + * 资源,服务未找到 + */ + public static final int NOT_FOUND = 404; + + /** + * 不允许的http方法 + */ + public static final int BAD_METHOD = 405; + + /** + * 资源冲突,或者资源被锁 + */ + public static final int CONFLICT = 409; + + /** + * 不支持的数据,媒体类型 + */ + public static final int UNSUPPORTED_TYPE = 415; + + /** + * 系统内部错误 + */ + public static final int ERROR = 500; + + /** + * 接口未实现 + */ + public static final int NOT_IMPLEMENTED = 501; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java new file mode 100644 index 0000000..62ad815 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java @@ -0,0 +1,50 @@ +package com.ruoyi.common.constant; + +/** + * 任务调度通用常量 + * + * @author ruoyi + */ +public class ScheduleConstants +{ + public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME"; + + /** 执行目标key */ + public static final String TASK_PROPERTIES = "TASK_PROPERTIES"; + + /** 默认 */ + public static final String MISFIRE_DEFAULT = "0"; + + /** 立即触发执行 */ + public static final String MISFIRE_IGNORE_MISFIRES = "1"; + + /** 触发一次执行 */ + public static final String MISFIRE_FIRE_AND_PROCEED = "2"; + + /** 不触发立即执行 */ + public static final String MISFIRE_DO_NOTHING = "3"; + + public enum Status + { + /** + * 正常 + */ + NORMAL("0"), + /** + * 暂停 + */ + PAUSE("1"); + + private String value; + + private Status(String value) + { + this.value = value; + } + + public String getValue() + { + return value; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java new file mode 100644 index 0000000..4ed6009 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java @@ -0,0 +1,78 @@ +package com.ruoyi.common.constant; + +/** + * 用户常量信息 + * + * @author ruoyi + */ +public class UserConstants +{ + /** + * 平台内系统用户的唯一标志 + */ + public static final String SYS_USER = "SYS_USER"; + + /** 正常状态 */ + public static final String NORMAL = "0"; + + /** 异常状态 */ + public static final String EXCEPTION = "1"; + + /** 用户封禁状态 */ + public static final String USER_DISABLE = "1"; + + /** 角色封禁状态 */ + public static final String ROLE_DISABLE = "1"; + + /** 部门正常状态 */ + public static final String DEPT_NORMAL = "0"; + + /** 部门停用状态 */ + public static final String DEPT_DISABLE = "1"; + + /** 字典正常状态 */ + public static final String DICT_NORMAL = "0"; + + /** 是否为系统默认(是) */ + public static final String YES = "Y"; + + /** 是否菜单外链(是) */ + public static final String YES_FRAME = "0"; + + /** 是否菜单外链(否) */ + public static final String NO_FRAME = "1"; + + /** 菜单类型(目录) */ + public static final String TYPE_DIR = "M"; + + /** 菜单类型(菜单) */ + public static final String TYPE_MENU = "C"; + + /** 菜单类型(按钮) */ + public static final String TYPE_BUTTON = "F"; + + /** Layout组件标识 */ + public final static String LAYOUT = "Layout"; + + /** ParentView组件标识 */ + public final static String PARENT_VIEW = "ParentView"; + + /** InnerLink组件标识 */ + public final static String INNER_LINK = "InnerLink"; + + /** 校验返回结果码 */ + public final static String UNIQUE = "0"; + public final static String NOT_UNIQUE = "1"; + + /** + * 用户名长度限制 + */ + public static final int USERNAME_MIN_LENGTH = 2; + public static final int USERNAME_MAX_LENGTH = 20; + + /** + * 密码长度限制 + */ + public static final int PASSWORD_MIN_LENGTH = 5; + public static final int PASSWORD_MAX_LENGTH = 20; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java new file mode 100644 index 0000000..d164f3f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java @@ -0,0 +1,184 @@ +package com.ruoyi.common.core.controller; + +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.page.PageDomain; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.page.TableSupport; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.sql.SqlUtil; + +/** + * web层通用数据处理 + * + * @author ruoyi + */ +public class BaseController +{ + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 将前台传递过来的日期格式的字符串,自动转化为Date类型 + */ + @InitBinder + public void initBinder(WebDataBinder binder) + { + // Date 类型转换 + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() + { + @Override + public void setAsText(String text) + { + setValue(DateUtils.parseDate(text)); + } + }); + } + + /** + * 设置请求分页数据 + */ + protected void startPage() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) + { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + PageHelper.startPage(pageNum, pageSize, orderBy); + } + } + + /** + * 设置请求排序数据 + */ + protected void startOrderBy() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + if (StringUtils.isNotEmpty(pageDomain.getOrderBy())) + { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + PageHelper.orderBy(orderBy); + } + } + + /** + * 响应请求分页数据 + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + protected TableDataInfo getDataTable(List list) + { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal(new PageInfo(list).getTotal()); + return rspData; + } + + /** + * 返回成功 + */ + public AjaxResult success() + { + return AjaxResult.success(); + } + + /** + * 返回失败消息 + */ + public AjaxResult error() + { + return AjaxResult.error(); + } + + /** + * 返回成功消息 + */ + public AjaxResult success(String message) + { + return AjaxResult.success(message); + } + + /** + * 返回失败消息 + */ + public AjaxResult error(String message) + { + return AjaxResult.error(message); + } + + /** + * 响应返回结果 + * + * @param rows 影响行数 + * @return 操作结果 + */ + protected AjaxResult toAjax(int rows) + { + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 响应返回结果 + * + * @param result 结果 + * @return 操作结果 + */ + protected AjaxResult toAjax(boolean result) + { + return result ? success() : error(); + } + + /** + * 页面跳转 + */ + public String redirect(String url) + { + return StringUtils.format("redirect:{}", url); + } + + /** + * 获取用户缓存信息 + */ + public LoginUser getLoginUser() + { + return SecurityUtils.getLoginUser(); + } + + /** + * 获取登录用户id + */ + public Long getUserId() + { + return getLoginUser().getUser().getUserId(); + } + + /** + * 获取登录部门id + */ + public Long getDeptId() + { + return getLoginUser().getDeptId(); + } + + /** + * 获取登录用户名 + */ + public String getUsername() + { + return getLoginUser().getUsername(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java new file mode 100644 index 0000000..28e5a68 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java @@ -0,0 +1,148 @@ +package com.ruoyi.common.core.domain; + +import java.util.HashMap; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.utils.StringUtils; + +/** + * 操作消息提醒 + * + * @author ruoyi + */ +public class AjaxResult extends HashMap +{ + private static final long serialVersionUID = 1L; + + /** 状态码 */ + public static final String CODE_TAG = "code"; + + /** 返回内容 */ + public static final String MSG_TAG = "msg"; + + /** 数据对象 */ + public static final String DATA_TAG = "data"; + + /** + * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 + */ + public AjaxResult() + { + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + */ + public AjaxResult(int code, String msg) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + * @param data 数据对象 + */ + public AjaxResult(int code, String msg, Object data) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + if (StringUtils.isNotNull(data)) + { + super.put(DATA_TAG, data); + } + } + + /** + * 返回成功消息 + * + * @return 成功消息 + */ + public static AjaxResult success() + { + return AjaxResult.success("操作成功"); + } + + /** + * 返回成功数据 + * + * @return 成功消息 + */ + public static AjaxResult success(Object data) + { + return AjaxResult.success("操作成功", data); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @return 成功消息 + */ + public static AjaxResult success(String msg) + { + return AjaxResult.success(msg, null); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 成功消息 + */ + public static AjaxResult success(String msg, Object data) + { + return new AjaxResult(HttpStatus.SUCCESS, msg, data); + } + + /** + * 返回错误消息 + * + * @return + */ + public static AjaxResult error() + { + return AjaxResult.error("操作失败"); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @return 警告消息 + */ + public static AjaxResult error(String msg) + { + return AjaxResult.error(msg, null); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 警告消息 + */ + public static AjaxResult error(String msg, Object data) + { + return new AjaxResult(HttpStatus.ERROR, msg, data); + } + + /** + * 返回错误消息 + * + * @param code 状态码 + * @param msg 返回内容 + * @return 警告消息 + */ + public static AjaxResult error(int code, String msg) + { + return new AjaxResult(code, msg, null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java new file mode 100644 index 0000000..f7d5bf4 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java @@ -0,0 +1,114 @@ +package com.ruoyi.common.core.domain; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * Entity基类 + * + * @author ruoyi + */ +public class BaseEntity implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 搜索值 */ + private String searchValue; + + /** 创建者 */ + private String createBy; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新者 */ + private String updateBy; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** 备注 */ + private String remark; + + /** 请求参数 */ + private Map params; + + public String getSearchValue() + { + return searchValue; + } + + public void setSearchValue(String searchValue) + { + this.searchValue = searchValue; + } + + public String getCreateBy() + { + return createBy; + } + + public void setCreateBy(String createBy) + { + this.createBy = createBy; + } + + public Date getCreateTime() + { + return createTime; + } + + public void setCreateTime(Date createTime) + { + this.createTime = createTime; + } + + public String getUpdateBy() + { + return updateBy; + } + + public void setUpdateBy(String updateBy) + { + this.updateBy = updateBy; + } + + public Date getUpdateTime() + { + return updateTime; + } + + public void setUpdateTime(Date updateTime) + { + this.updateTime = updateTime; + } + + public String getRemark() + { + return remark; + } + + public void setRemark(String remark) + { + this.remark = remark; + } + + public Map getParams() + { + if (params == null) + { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map params) + { + this.params = params; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java new file mode 100644 index 0000000..a180a18 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java @@ -0,0 +1,79 @@ +package com.ruoyi.common.core.domain; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tree基类 + * + * @author ruoyi + */ +public class TreeEntity extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 父菜单名称 */ + private String parentName; + + /** 父菜单ID */ + private Long parentId; + + /** 显示顺序 */ + private Integer orderNum; + + /** 祖级列表 */ + private String ancestors; + + /** 子部门 */ + private List children = new ArrayList<>(); + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + public String getAncestors() + { + return ancestors; + } + + public void setAncestors(String ancestors) + { + this.ancestors = ancestors; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java new file mode 100644 index 0000000..bd835db --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java @@ -0,0 +1,77 @@ +package com.ruoyi.common.core.domain; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysMenu; + +/** + * Treeselect树结构实体类 + * + * @author ruoyi + */ +public class TreeSelect implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 节点ID */ + private Long id; + + /** 节点名称 */ + private String label; + + /** 子节点 */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + public TreeSelect() + { + + } + + public TreeSelect(SysDept dept) + { + this.id = dept.getDeptId(); + this.label = dept.getDeptName(); + this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public TreeSelect(SysMenu menu) + { + this.id = menu.getMenuId(); + this.label = menu.getMenuName(); + this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public Long getId() + { + return id; + } + + public void setId(Long id) + { + this.id = id; + } + + public String getLabel() + { + return label; + } + + public void setLabel(String label) + { + this.label = label; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java new file mode 100644 index 0000000..c9238e2 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java @@ -0,0 +1,202 @@ +package com.ruoyi.common.core.domain.entity; + +import java.util.ArrayList; +import java.util.List; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 部门表 sys_dept + * + * @author ruoyi + */ +public class SysDept extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 部门ID */ + private Long deptId; + + /** 父部门ID */ + private Long parentId; + + /** 祖级列表 */ + private String ancestors; + + /** 部门名称 */ + private String deptName; + + /** 显示顺序 */ + private String orderNum; + + /** 负责人 */ + private String leader; + + /** 联系电话 */ + private String phone; + + /** 邮箱 */ + private String email; + + /** 部门状态:0正常,1停用 */ + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 父部门名称 */ + private String parentName; + + /** 子部门 */ + private List children = new ArrayList(); + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public String getAncestors() + { + return ancestors; + } + + public void setAncestors(String ancestors) + { + this.ancestors = ancestors; + } + + @NotBlank(message = "部门名称不能为空") + @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + @NotBlank(message = "显示顺序不能为空") + public String getOrderNum() + { + return orderNum; + } + + public void setOrderNum(String orderNum) + { + this.orderNum = orderNum; + } + + public String getLeader() + { + return leader; + } + + public void setLeader(String leader) + { + this.leader = leader; + } + + @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") + public String getPhone() + { + return phone; + } + + public void setPhone(String phone) + { + this.phone = phone; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("deptId", getDeptId()) + .append("parentId", getParentId()) + .append("ancestors", getAncestors()) + .append("deptName", getDeptName()) + .append("orderNum", getOrderNum()) + .append("leader", getLeader()) + .append("phone", getPhone()) + .append("email", getEmail()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java new file mode 100644 index 0000000..3f152b3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java @@ -0,0 +1,176 @@ +package com.ruoyi.common.core.domain.entity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 字典数据表 sys_dict_data + * + * @author ruoyi + */ +public class SysDictData extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 字典编码 */ + @Excel(name = "字典编码", cellType = ColumnType.NUMERIC) + private Long dictCode; + + /** 字典排序 */ + @Excel(name = "字典排序", cellType = ColumnType.NUMERIC) + private Long dictSort; + + /** 字典标签 */ + @Excel(name = "字典标签") + private String dictLabel; + + /** 字典键值 */ + @Excel(name = "字典键值") + private String dictValue; + + /** 字典类型 */ + @Excel(name = "字典类型") + private String dictType; + + /** 样式属性(其他样式扩展) */ + private String cssClass; + + /** 表格字典样式 */ + private String listClass; + + /** 是否默认(Y是 N否) */ + @Excel(name = "是否默认", readConverterExp = "Y=是,N=否") + private String isDefault; + + /** 状态(0正常 1停用) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + public Long getDictCode() + { + return dictCode; + } + + public void setDictCode(Long dictCode) + { + this.dictCode = dictCode; + } + + public Long getDictSort() + { + return dictSort; + } + + public void setDictSort(Long dictSort) + { + this.dictSort = dictSort; + } + + @NotBlank(message = "字典标签不能为空") + @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符") + public String getDictLabel() + { + return dictLabel; + } + + public void setDictLabel(String dictLabel) + { + this.dictLabel = dictLabel; + } + + @NotBlank(message = "字典键值不能为空") + @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符") + public String getDictValue() + { + return dictValue; + } + + public void setDictValue(String dictValue) + { + this.dictValue = dictValue; + } + + @NotBlank(message = "字典类型不能为空") + @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符") + public String getCssClass() + { + return cssClass; + } + + public void setCssClass(String cssClass) + { + this.cssClass = cssClass; + } + + public String getListClass() + { + return listClass; + } + + public void setListClass(String listClass) + { + this.listClass = listClass; + } + + public boolean getDefault() + { + return UserConstants.YES.equals(this.isDefault) ? true : false; + } + + public String getIsDefault() + { + return isDefault; + } + + public void setIsDefault(String isDefault) + { + this.isDefault = isDefault; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictCode", getDictCode()) + .append("dictSort", getDictSort()) + .append("dictLabel", getDictLabel()) + .append("dictValue", getDictValue()) + .append("dictType", getDictType()) + .append("cssClass", getCssClass()) + .append("listClass", getListClass()) + .append("isDefault", getIsDefault()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java new file mode 100644 index 0000000..d2c4249 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java @@ -0,0 +1,94 @@ +package com.ruoyi.common.core.domain.entity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 字典类型表 sys_dict_type + * + * @author ruoyi + */ +public class SysDictType extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 字典主键 */ + @Excel(name = "字典主键", cellType = ColumnType.NUMERIC) + private Long dictId; + + /** 字典名称 */ + @Excel(name = "字典名称") + private String dictName; + + /** 字典类型 */ + @Excel(name = "字典类型") + private String dictType; + + /** 状态(0正常 1停用) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + public Long getDictId() + { + return dictId; + } + + public void setDictId(Long dictId) + { + this.dictId = dictId; + } + + @NotBlank(message = "字典名称不能为空") + @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") + public String getDictName() + { + return dictName; + } + + public void setDictName(String dictName) + { + this.dictName = dictName; + } + + @NotBlank(message = "字典类型不能为空") + @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictId", getDictId()) + .append("dictName", getDictName()) + .append("dictType", getDictType()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java new file mode 100644 index 0000000..94d654a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java @@ -0,0 +1,245 @@ +package com.ruoyi.common.core.domain.entity; + +import java.util.ArrayList; +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 菜单权限表 sys_menu + * + * @author ruoyi + */ +public class SysMenu extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 菜单ID */ + private Long menuId; + + /** 菜单名称 */ + private String menuName; + + /** 父菜单名称 */ + private String parentName; + + /** 父菜单ID */ + private Long parentId; + + /** 显示顺序 */ + private String orderNum; + + /** 路由地址 */ + private String path; + + /** 组件路径 */ + private String component; + + /** 是否为外链(0是 1否) */ + private String isFrame; + + /** 是否缓存(0缓存 1不缓存) */ + private String isCache; + + /** 类型(M目录 C菜单 F按钮) */ + private String menuType; + + /** 显示状态(0显示 1隐藏) */ + private String visible; + + /** 菜单状态(0显示 1隐藏) */ + private String status; + + /** 权限字符串 */ + private String perms; + + /** 菜单图标 */ + private String icon; + + /** 子菜单 */ + private List children = new ArrayList(); + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + @NotBlank(message = "菜单名称不能为空") + @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") + public String getMenuName() + { + return menuName; + } + + public void setMenuName(String menuName) + { + this.menuName = menuName; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + @NotBlank(message = "显示顺序不能为空") + public String getOrderNum() + { + return orderNum; + } + + public void setOrderNum(String orderNum) + { + this.orderNum = orderNum; + } + + @Size(min = 0, max = 200, message = "路由地址不能超过200个字符") + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + @Size(min = 0, max = 200, message = "组件路径不能超过255个字符") + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getIsFrame() + { + return isFrame; + } + + public void setIsFrame(String isFrame) + { + this.isFrame = isFrame; + } + + public String getIsCache() + { + return isCache; + } + + public void setIsCache(String isCache) + { + this.isCache = isCache; + } + + @NotBlank(message = "菜单类型不能为空") + public String getMenuType() + { + return menuType; + } + + public void setMenuType(String menuType) + { + this.menuType = menuType; + } + + public String getVisible() + { + return visible; + } + + public void setVisible(String visible) + { + this.visible = visible; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") + public String getPerms() + { + return perms; + } + + public void setPerms(String perms) + { + this.perms = perms; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("menuId", getMenuId()) + .append("menuName", getMenuName()) + .append("parentId", getParentId()) + .append("orderNum", getOrderNum()) + .append("path", getPath()) + .append("component", getComponent()) + .append("isFrame", getIsFrame()) + .append("IsCache", getIsCache()) + .append("menuType", getMenuType()) + .append("visible", getVisible()) + .append("status ", getStatus()) + .append("perms", getPerms()) + .append("icon", getIcon()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java new file mode 100644 index 0000000..36629eb --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java @@ -0,0 +1,226 @@ +package com.ruoyi.common.core.domain.entity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 角色表 sys_role + * + * @author ruoyi + */ +public class SysRole extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 角色ID */ + @Excel(name = "角色序号", cellType = ColumnType.NUMERIC) + private Long roleId; + + /** 角色名称 */ + @Excel(name = "角色名称") + private String roleName; + + /** 角色权限 */ + @Excel(name = "角色权限") + private String roleKey; + + /** 角色排序 */ + @Excel(name = "角色排序") + private String roleSort; + + /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ + @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") + private String dataScope; + + /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */ + private boolean menuCheckStrictly; + + /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */ + private boolean deptCheckStrictly; + + /** 角色状态(0正常 1停用) */ + @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 用户是否存在此角色标识 默认不存在 */ + private boolean flag = false; + + /** 菜单组 */ + private Long[] menuIds; + + /** 部门组(数据权限) */ + private Long[] deptIds; + + public SysRole() + { + + } + + public SysRole(Long roleId) + { + this.roleId = roleId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public boolean isAdmin() + { + return isAdmin(this.roleId); + } + + public static boolean isAdmin(Long roleId) + { + return roleId != null && 1L == roleId; + } + + @NotBlank(message = "角色名称不能为空") + @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") + public String getRoleName() + { + return roleName; + } + + public void setRoleName(String roleName) + { + this.roleName = roleName; + } + + @NotBlank(message = "权限字符不能为空") + @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") + public String getRoleKey() + { + return roleKey; + } + + public void setRoleKey(String roleKey) + { + this.roleKey = roleKey; + } + + @NotBlank(message = "显示顺序不能为空") + public String getRoleSort() + { + return roleSort; + } + + public void setRoleSort(String roleSort) + { + this.roleSort = roleSort; + } + + public String getDataScope() + { + return dataScope; + } + + public void setDataScope(String dataScope) + { + this.dataScope = dataScope; + } + + public boolean isMenuCheckStrictly() + { + return menuCheckStrictly; + } + + public void setMenuCheckStrictly(boolean menuCheckStrictly) + { + this.menuCheckStrictly = menuCheckStrictly; + } + + public boolean isDeptCheckStrictly() + { + return deptCheckStrictly; + } + + public void setDeptCheckStrictly(boolean deptCheckStrictly) + { + this.deptCheckStrictly = deptCheckStrictly; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public boolean isFlag() + { + return flag; + } + + public void setFlag(boolean flag) + { + this.flag = flag; + } + + public Long[] getMenuIds() + { + return menuIds; + } + + public void setMenuIds(Long[] menuIds) + { + this.menuIds = menuIds; + } + + public Long[] getDeptIds() + { + return deptIds; + } + + public void setDeptIds(Long[] deptIds) + { + this.deptIds = deptIds; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("roleName", getRoleName()) + .append("roleKey", getRoleKey()) + .append("roleSort", getRoleSort()) + .append("dataScope", getDataScope()) + .append("menuCheckStrictly", isMenuCheckStrictly()) + .append("deptCheckStrictly", isDeptCheckStrictly()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java new file mode 100644 index 0000000..dc03436 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -0,0 +1,365 @@ +package com.ruoyi.common.core.domain.entity; + +import java.util.Date; +import java.util.List; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.annotation.Excel.Type; +import com.ruoyi.common.annotation.Excels; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 用户对象 sys_user + * + * @author ruoyi + */ +public class SysUser extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户ID */ + @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") + private Long userId; + + /** 部门ID */ + @Excel(name = "部门编号", type = Type.IMPORT) + private Long deptId; + + /** 用户账号 */ + @Excel(name = "登录名称") + private String userName; + + /** 用户昵称 */ + @Excel(name = "用户名称") + private String nickName; + + /** 用户邮箱 */ + @Excel(name = "用户邮箱") + private String email; + + /** 手机号码 */ + @Excel(name = "手机号码") + private String phonenumber; + + /** 用户性别 */ + @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") + private String sex; + + /** 用户头像 */ + private String avatar; + + /** 密码 */ + private String password; + + /** 盐加密 */ + private String salt; + + /** 帐号状态(0正常 1停用) */ + @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 最后登录IP */ + @Excel(name = "最后登录IP", type = Type.EXPORT) + private String loginIp; + + /** 最后登录时间 */ + @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) + private Date loginDate; + + /** 部门对象 */ + @Excels({ + @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), + @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) + }) + private SysDept dept; + + /** 角色对象 */ + private List roles; + + /** 角色组 */ + private Long[] roleIds; + + /** 岗位组 */ + private Long[] postIds; + + /** 角色ID */ + private Long roleId; + +// 行政代码 + private Long distictId; + +// 运营商id + private Long providerId; + + public SysUser() + { + + } + + public SysUser(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public boolean isAdmin() + { + return isAdmin(this.userId); + } + + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") + public String getNickName() + { + return nickName; + } + + public void setNickName(String nickName) + { + this.nickName = nickName; + } + + @NotBlank(message = "用户账号不能为空") + @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") + public String getPhonenumber() + { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) + { + this.phonenumber = phonenumber; + } + + public String getSex() + { + return sex; + } + + public void setSex(String sex) + { + this.sex = sex; + } + + public String getAvatar() + { + return avatar; + } + + public void setAvatar(String avatar) + { + this.avatar = avatar; + } + + @JsonIgnore + @JsonProperty + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getSalt() + { + return salt; + } + + public void setSalt(String salt) + { + this.salt = salt; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getLoginIp() + { + return loginIp; + } + + public void setLoginIp(String loginIp) + { + this.loginIp = loginIp; + } + + public Date getLoginDate() + { + return loginDate; + } + + public void setLoginDate(Date loginDate) + { + this.loginDate = loginDate; + } + + public SysDept getDept() + { + return dept; + } + + public void setDept(SysDept dept) + { + this.dept = dept; + } + + public List getRoles() + { + return roles; + } + + public void setRoles(List roles) + { + this.roles = roles; + } + + public Long[] getRoleIds() + { + return roleIds; + } + + public void setRoleIds(Long[] roleIds) + { + this.roleIds = roleIds; + } + + public Long[] getPostIds() + { + return postIds; + } + + public void setPostIds(Long[] postIds) + { + this.postIds = postIds; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("userName", getUserName()) + .append("nickName", getNickName()) + .append("email", getEmail()) + .append("phonenumber", getPhonenumber()) + .append("sex", getSex()) + .append("avatar", getAvatar()) + .append("password", getPassword()) + .append("salt", getSalt()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("loginIp", getLoginIp()) + .append("loginDate", getLoginDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("dept", getDept()) + .append("distict", getDistictId()) + .append("provider", getProviderId()) + .toString(); + } + + public Long getDistictId() { + return distictId; + } + + public void setDistictId(Long distictId) { + this.distictId = distictId; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java new file mode 100644 index 0000000..03948b4 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java @@ -0,0 +1,69 @@ +package com.ruoyi.common.core.domain.model; + +/** + * 用户登录对象 + * + * @author ruoyi + */ +public class LoginBody +{ + /** + * 用户名 + */ + private String username; + + /** + * 用户密码 + */ + private String password; + + /** + * 验证码 + */ + private String code; + + /** + * 唯一标识 + */ + private String uuid = ""; + + public String getUsername() + { + return username; + } + + public void setUsername(String username) + { + this.username = username; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getCode() + { + return code; + } + + public void setCode(String code) + { + this.code = code; + } + + public String getUuid() + { + return uuid; + } + + public void setUuid(String uuid) + { + this.uuid = uuid; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java new file mode 100644 index 0000000..a8a0d0f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java @@ -0,0 +1,266 @@ +package com.ruoyi.common.core.domain.model; + +import java.util.Collection; +import java.util.Set; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.ruoyi.common.core.domain.entity.SysUser; + +/** + * 登录用户身份权限 + * + * @author ruoyi + */ +public class LoginUser implements UserDetails +{ + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 用户唯一标识 + */ + private String token; + + /** + * 登录时间 + */ + private Long loginTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地点 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 权限列表 + */ + private Set permissions; + + /** + * 用户信息 + */ + private SysUser user; + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public String getToken() + { + return token; + } + + public void setToken(String token) + { + this.token = token; + } + + public LoginUser() + { + } + + public LoginUser(SysUser user, Set permissions) + { + this.user = user; + this.permissions = permissions; + } + + public LoginUser(Long userId, Long deptId, SysUser user, Set permissions) + { + this.userId = userId; + this.deptId = deptId; + this.user = user; + this.permissions = permissions; + } + + @JsonIgnore + @Override + public String getPassword() + { + return user.getPassword(); + } + + @Override + public String getUsername() + { + return user.getUserName(); + } + + /** + * 账户是否未过期,过期无法验证 + */ + @JsonIgnore + @Override + public boolean isAccountNonExpired() + { + return true; + } + + /** + * 指定用户是否解锁,锁定的用户无法进行身份验证 + * + * @return + */ + @JsonIgnore + @Override + public boolean isAccountNonLocked() + { + return true; + } + + /** + * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 + * + * @return + */ + @JsonIgnore + @Override + public boolean isCredentialsNonExpired() + { + return true; + } + + /** + * 是否可用 ,禁用的用户不能身份验证 + * + * @return + */ + @JsonIgnore + @Override + public boolean isEnabled() + { + return true; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public Long getExpireTime() + { + return expireTime; + } + + public void setExpireTime(Long expireTime) + { + this.expireTime = expireTime; + } + + public Set getPermissions() + { + return permissions; + } + + public void setPermissions(Set permissions) + { + this.permissions = permissions; + } + + public SysUser getUser() + { + return user; + } + + public void setUser(SysUser user) + { + this.user = user; + } + + @Override + public Collection getAuthorities() + { + return null; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java new file mode 100644 index 0000000..868a1fc --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java @@ -0,0 +1,11 @@ +package com.ruoyi.common.core.domain.model; + +/** + * 用户注册对象 + * + * @author ruoyi + */ +public class RegisterBody extends LoginBody +{ + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java new file mode 100644 index 0000000..b9d5e6e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java @@ -0,0 +1,84 @@ +package com.ruoyi.common.core.page; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 分页数据 + * + * @author ruoyi + */ +public class PageDomain +{ + /** 当前记录起始索引 */ + private Integer pageNum; + + /** 每页显示记录数 */ + private Integer pageSize; + + /** 排序列 */ + private String orderByColumn; + + /** 排序的方向desc或者asc */ + private String isAsc = "asc"; + + public String getOrderBy() + { + if (StringUtils.isEmpty(orderByColumn)) + { + return ""; + } + return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; + } + + public Integer getPageNum() + { + return pageNum; + } + + public void setPageNum(Integer pageNum) + { + this.pageNum = pageNum; + } + + public Integer getPageSize() + { + return pageSize; + } + + public void setPageSize(Integer pageSize) + { + this.pageSize = pageSize; + } + + public String getOrderByColumn() + { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) + { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc() + { + return isAsc; + } + + public void setIsAsc(String isAsc) + { + if (StringUtils.isNotEmpty(isAsc)) + { + // 兼容前端排序类型 + if ("ascending".equals(isAsc)) + { + isAsc = "asc"; + } + else if ("descending".equals(isAsc)) + { + isAsc = "desc"; + } + this.isAsc = isAsc; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java new file mode 100644 index 0000000..847685b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java @@ -0,0 +1,85 @@ +package com.ruoyi.common.core.page; + +import java.io.Serializable; +import java.util.List; + +/** + * 表格分页数据对象 + * + * @author ruoyi + */ +public class TableDataInfo implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 总记录数 */ + private long total; + + /** 列表数据 */ + private List rows; + + /** 消息状态码 */ + private int code; + + /** 消息内容 */ + private String msg; + + /** + * 表格数据对象 + */ + public TableDataInfo() + { + } + + /** + * 分页 + * + * @param list 列表数据 + * @param total 总记录数 + */ + public TableDataInfo(List list, int total) + { + this.rows = list; + this.total = total; + } + + public long getTotal() + { + return total; + } + + public void setTotal(long total) + { + this.total = total; + } + + public List getRows() + { + return rows; + } + + public void setRows(List rows) + { + this.rows = rows; + } + + public int getCode() + { + return code; + } + + public void setCode(int code) + { + this.code = code; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java new file mode 100644 index 0000000..14eb1e1 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java @@ -0,0 +1,49 @@ +package com.ruoyi.common.core.page; + +import com.ruoyi.common.utils.ServletUtils; + +/** + * 表格数据处理 + * + * @author ruoyi + */ +public class TableSupport +{ + /** + * 当前记录起始索引 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 每页显示记录数 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 排序列 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 排序的方向 "desc" 或者 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 封装分页对象 + */ + public static PageDomain getPageDomain() + { + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM)); + pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE)); + pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN)); + pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); + return pageDomain; + } + + public static PageDomain buildPageRequest() + { + return getPageDomain(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java new file mode 100644 index 0000000..22a610d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java @@ -0,0 +1,234 @@ +package com.ruoyi.common.core.redis; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundSetOperations; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +/** + * spring redis 工具类 + * + * @author ruoyi + **/ +@SuppressWarnings(value = { "unchecked", "rawtypes" }) +@Component +public class RedisCache +{ + @Autowired + public RedisTemplate redisTemplate; + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject(final String key, final T value) + { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) + { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout) + { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) + { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public T getCacheObject(final String key) + { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 删除单个对象 + * + * @param key + */ + public boolean deleteObject(final String key) + { + return redisTemplate.delete(key); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * @return + */ + public long deleteObject(final Collection collection) + { + return redisTemplate.delete(collection); + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public long setCacheList(final String key, final List dataList) + { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据 + */ + public List getCacheList(final String key) + { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) + { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) + { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 获得缓存的set + * + * @param key + * @return + */ + public Set getCacheSet(final String key) + { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缓存Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) + { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 获得缓存的Map + * + * @param key + * @return + */ + public Map getCacheMap(final String key) + { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) + { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public T getCacheMapValue(final String key, final String hKey) + { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) + { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public Collection keys(final String pattern) + { + return redisTemplate.keys(pattern); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java new file mode 100644 index 0000000..84124aa --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java @@ -0,0 +1,86 @@ +package com.ruoyi.common.core.text; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import com.ruoyi.common.utils.StringUtils; + +/** + * 字符集工具类 + * + * @author ruoyi + */ +public class CharsetKit +{ + /** ISO-8859-1 */ + public static final String ISO_8859_1 = "ISO-8859-1"; + /** UTF-8 */ + public static final String UTF_8 = "UTF-8"; + /** GBK */ + public static final String GBK = "GBK"; + + /** ISO-8859-1 */ + public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1); + /** UTF-8 */ + public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8); + /** GBK */ + public static final Charset CHARSET_GBK = Charset.forName(GBK); + + /** + * 转换为Charset对象 + * + * @param charset 字符集,为空则返回默认字符集 + * @return Charset + */ + public static Charset charset(String charset) + { + return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, String srcCharset, String destCharset) + { + return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, Charset srcCharset, Charset destCharset) + { + if (null == srcCharset) + { + srcCharset = StandardCharsets.ISO_8859_1; + } + + if (null == destCharset) + { + destCharset = StandardCharsets.UTF_8; + } + + if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) + { + return source; + } + return new String(source.getBytes(srcCharset), destCharset); + } + + /** + * @return 系统字符集编码 + */ + public static String systemCharset() + { + return Charset.defaultCharset().name(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java new file mode 100644 index 0000000..1fb7461 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java @@ -0,0 +1,1005 @@ +package com.ruoyi.common.core.text; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Set; +import com.ruoyi.common.utils.StringUtils; +import org.apache.commons.lang3.ArrayUtils; + +/** + * 类型转换器 + * + * @author ruoyi + */ +public class Convert +{ + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static String toStr(Object value, String defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof String) + { + return (String) value; + } + return value.toString(); + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static String toStr(Object value) + { + return toStr(value, null); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Character toChar(Object value, Character defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof Character) + { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Character toChar(Object value) + { + return toChar(value, null); + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Byte toByte(Object value, Byte defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Byte) + { + return (Byte) value; + } + if (value instanceof Number) + { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Byte.parseByte(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Byte toByte(Object value) + { + return toByte(value, null); + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Short toShort(Object value, Short defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Short) + { + return (Short) value; + } + if (value instanceof Number) + { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Short.parseShort(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Short toShort(Object value) + { + return toShort(value, null); + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Number toNumber(Object value, Number defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Number) + { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return NumberFormat.getInstance().parse(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Number toNumber(Object value) + { + return toNumber(value, null); + } + + /** + * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Integer toInt(Object value, Integer defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Integer) + { + return (Integer) value; + } + if (value instanceof Number) + { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Integer.parseInt(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Integer toInt(Object value) + { + return toInt(value, null); + } + + /** + * 转换为Integer数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String str) + { + return toIntArray(",", str); + } + + /** + * 转换为Long数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String str) + { + return toLongArray(",", str); + } + + /** + * 转换为Integer数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Integer[] {}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 转换为Long数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Long[] {}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 转换为String数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String str) + { + return toStrArray(",", str); + } + + /** + * 转换为String数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String split, String str) + { + return str.split(split); + } + + /** + * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Long toLong(Object value, Long defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Long) + { + return (Long) value; + } + if (value instanceof Number) + { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).longValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Long toLong(Object value) + { + return toLong(value, null); + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Double toDouble(Object value, Double defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Double) + { + return (Double) value; + } + if (value instanceof Number) + { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).doubleValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Double toDouble(Object value) + { + return toDouble(value, null); + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Float toFloat(Object value, Float defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Float) + { + return (Float) value; + } + if (value instanceof Number) + { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Float.parseFloat(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Float toFloat(Object value) + { + return toFloat(value, null); + } + + /** + * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Boolean toBool(Object value, Boolean defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Boolean) + { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) + { + case "true": + return true; + case "false": + return false; + case "yes": + return true; + case "ok": + return true; + case "no": + return false; + case "1": + return true; + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Boolean toBool(Object value) + { + return toBool(value, null); + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * + * @param clazz Enum的Class + * @param value 值 + * @param defaultValue 默认值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) + { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Enum.valueOf(clazz, valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * + * @param clazz Enum的Class + * @param value 值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) + { + return toEnum(clazz, value, null); + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigInteger) + { + return (BigInteger) value; + } + if (value instanceof Long) + { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigInteger(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value) + { + return toBigInteger(value, null); + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigDecimal) + { + return (BigDecimal) value; + } + if (value instanceof Long) + { + return new BigDecimal((Long) value); + } + if (value instanceof Double) + { + return new BigDecimal((Double) value); + } + if (value instanceof Integer) + { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigDecimal(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value) + { + return toBigDecimal(value, null); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @return 字符串 + */ + public static String utf8Str(Object obj) + { + return str(obj, CharsetKit.CHARSET_UTF_8); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charsetName 字符集 + * @return 字符串 + */ + public static String str(Object obj, String charsetName) + { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(Object obj, Charset charset) + { + if (null == obj) + { + return null; + } + + if (obj instanceof String) + { + return (String) obj; + } + else if (obj instanceof byte[]) + { + return str((byte[]) obj, charset); + } + else if (obj instanceof Byte[]) + { + byte[] bytes = ArrayUtils.toPrimitive((Byte[]) obj); + return str(bytes, charset); + } + else if (obj instanceof ByteBuffer) + { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 将byte数组转为字符串 + * + * @param bytes byte数组 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(byte[] bytes, String charset) + { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 解码字节码 + * + * @param data 字符串 + * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 + * @return 解码后的字符串 + */ + public static String str(byte[] data, Charset charset) + { + if (data == null) + { + return null; + } + + if (null == charset) + { + return new String(data); + } + return new String(data, charset); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, String charset) + { + if (data == null) + { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, Charset charset) + { + if (null == charset) + { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 全角半角转换 + /** + * 半角转全角 + * + * @param input String. + * @return 全角字符串. + */ + public static String toSBC(String input) + { + return toSBC(input, null); + } + + /** + * 半角转全角 + * + * @param input String + * @param notConvertSet 不替换的字符集合 + * @return 全角字符串. + */ + public static String toSBC(String input, Set notConvertSet) + { + char c[] = input.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == ' ') + { + c[i] = '\u3000'; + } + else if (c[i] < '\177') + { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 全角转半角 + * + * @param input String. + * @return 半角字符串 + */ + public static String toDBC(String input) + { + return toDBC(input, null); + } + + /** + * 替换全角为半角 + * + * @param text 文本 + * @param notConvertSet 不替换的字符集合 + * @return 替换后的字符 + */ + public static String toDBC(String text, Set notConvertSet) + { + char c[] = text.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == '\u3000') + { + c[i] = ' '; + } + else if (c[i] > '\uFF00' && c[i] < '\uFF5F') + { + c[i] = (char) (c[i] - 65248); + } + } + String returnString = new String(c); + + return returnString; + } + + /** + * 数字金额大写转换 先写个完整的然后将如零拾替换成零 + * + * @param n 数字 + * @return 中文大写数字 + */ + public static String digitUppercase(double n) + { + String[] fraction = { "角", "分" }; + String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; + String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } }; + + String head = n < 0 ? "负" : ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0; i < fraction.length; i++) + { + s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", ""); + } + if (s.length() < 1) + { + s = "整"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) + { + String p = ""; + for (int j = 0; j < unit[1].length && n > 0; j++) + { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; + } + return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java new file mode 100644 index 0000000..c78ac77 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java @@ -0,0 +1,92 @@ +package com.ruoyi.common.core.text; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 字符串格式化 + * + * @author ruoyi + */ +public class StrFormatter +{ + public static final String EMPTY_JSON = "{}"; + public static final char C_BACKSLASH = '\\'; + public static final char C_DELIM_START = '{'; + public static final char C_DELIM_END = '}'; + + /** + * 格式化字符串
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param strPattern 字符串模板 + * @param argArray 参数列表 + * @return 结果 + */ + public static String format(final String strPattern, final Object... argArray) + { + if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) + { + return strPattern; + } + final int strPatternLength = strPattern.length(); + + // 初始化定义好的长度以获得更好的性能 + StringBuilder sbuf = new StringBuilder(strPatternLength + 50); + + int handledPosition = 0; + int delimIndex;// 占位符所在位置 + for (int argIndex = 0; argIndex < argArray.length; argIndex++) + { + delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); + if (delimIndex == -1) + { + if (handledPosition == 0) + { + return strPattern; + } + else + { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果 + sbuf.append(strPattern, handledPosition, strPatternLength); + return sbuf.toString(); + } + } + else + { + if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) + { + if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) + { + // 转义符之前还有一个转义符,占位符依旧有效 + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + else + { + // 占位符被转义 + argIndex--; + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(C_DELIM_START); + handledPosition = delimIndex + 1; + } + } + else + { + // 正常占位符 + sbuf.append(strPattern, handledPosition, delimIndex); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + } + } + // 加入最后一个占位符后所有的字符 + sbuf.append(strPattern, handledPosition, strPattern.length()); + + return sbuf.toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java new file mode 100644 index 0000000..10b7306 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java @@ -0,0 +1,20 @@ +package com.ruoyi.common.enums; + +/** + * 操作状态 + * + * @author ruoyi + * + */ +public enum BusinessStatus +{ + /** + * 成功 + */ + SUCCESS, + + /** + * 失败 + */ + FAIL, +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java new file mode 100644 index 0000000..2e17c4a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java @@ -0,0 +1,59 @@ +package com.ruoyi.common.enums; + +/** + * 业务操作类型 + * + * @author ruoyi + */ +public enum BusinessType +{ + /** + * 其它 + */ + OTHER, + + /** + * 新增 + */ + INSERT, + + /** + * 修改 + */ + UPDATE, + + /** + * 删除 + */ + DELETE, + + /** + * 授权 + */ + GRANT, + + /** + * 导出 + */ + EXPORT, + + /** + * 导入 + */ + IMPORT, + + /** + * 强退 + */ + FORCE, + + /** + * 生成代码 + */ + GENCODE, + + /** + * 清空数据 + */ + CLEAN, +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java new file mode 100644 index 0000000..0d945be --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java @@ -0,0 +1,19 @@ +package com.ruoyi.common.enums; + +/** + * 数据源 + * + * @author ruoyi + */ +public enum DataSourceType +{ + /** + * 主库 + */ + MASTER, + + /** + * 从库 + */ + SLAVE +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java new file mode 100644 index 0000000..be6f739 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java @@ -0,0 +1,36 @@ +package com.ruoyi.common.enums; + +import java.util.HashMap; +import java.util.Map; +import org.springframework.lang.Nullable; + +/** + * 请求方式 + * + * @author ruoyi + */ +public enum HttpMethod +{ + GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; + + private static final Map mappings = new HashMap<>(16); + + static + { + for (HttpMethod httpMethod : values()) + { + mappings.put(httpMethod.name(), httpMethod); + } + } + + @Nullable + public static HttpMethod resolve(@Nullable String method) + { + return (method != null ? mappings.get(method) : null); + } + + public boolean matches(String method) + { + return (this == resolve(method)); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java new file mode 100644 index 0000000..c609fd8 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java @@ -0,0 +1,20 @@ +package com.ruoyi.common.enums; + +/** + * 限流类型 + * + * @author ruoyi + */ + +public enum LimitType +{ + /** + * 默认策略全局限流 + */ + DEFAULT, + + /** + * 根据请求者IP进行限流 + */ + IP +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java new file mode 100644 index 0000000..bdd143c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.enums; + +/** + * 操作人类别 + * + * @author ruoyi + */ +public enum OperatorType +{ + /** + * 其它 + */ + OTHER, + + /** + * 后台用户 + */ + MANAGE, + + /** + * 手机端用户 + */ + MOBILE +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java new file mode 100644 index 0000000..d7ff44a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java @@ -0,0 +1,30 @@ +package com.ruoyi.common.enums; + +/** + * 用户状态 + * + * @author ruoyi + */ +public enum UserStatus +{ + OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); + + private final String code; + private final String info; + + UserStatus(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/CustomException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/CustomException.java new file mode 100644 index 0000000..b9ee3af --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/CustomException.java @@ -0,0 +1,37 @@ +package com.ruoyi.common.exception; + +/** + * 自定义异常 + * + * @author ruoyi + */ +public class CustomException extends RuntimeException { + private static final long serialVersionUID = 1L; + + private Integer code; + + private String message; + + public CustomException(String message) { + this.message = message; + } + + public CustomException(String message, Integer code) { + this.message = message; + this.code = code; + } + + public CustomException(String message, Throwable e) { + super(message, e); + this.message = message; + } + + @Override + public String getMessage() { + return message; + } + + public Integer getCode() { + return code; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java new file mode 100644 index 0000000..f6ad2ab --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java @@ -0,0 +1,15 @@ +package com.ruoyi.common.exception; + +/** + * 演示模式异常 + * + * @author ruoyi + */ +public class DemoModeException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public DemoModeException() + { + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java new file mode 100644 index 0000000..211441b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java @@ -0,0 +1,58 @@ +package com.ruoyi.common.exception; + +/** + * 全局异常 + * + * @author ruoyi + */ +public class GlobalException extends RuntimeException +{ + + private static final long serialVersionUID = 1L; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + * + * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public GlobalException() + { + } + + public GlobalException(String message) + { + this.message = message; + } + + public String getDetailMessage() + { + return detailMessage; + } + + public GlobalException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } + + public String getMessage() + { + return message; + } + + public GlobalException setMessage(String message) + { + this.message = message; + return this; + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java new file mode 100644 index 0000000..cce6052 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java @@ -0,0 +1,77 @@ +package com.ruoyi.common.exception; + +/** + * 业务异常 + * + * @author ruoyi + */ +public class ServiceException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 错误码 + */ + private Integer code; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + * + * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public ServiceException() + { + } + + public ServiceException(String message) + { + this.message = message; + } + + public ServiceException(String message, Integer code) + { + this.message = message; + this.code = code; + } + + public String getDetailMessage() + { + return detailMessage; + } + + public String getMessage() + { + return message; + } + + public Integer getCode() + { + return code; + } + + public ServiceException setMessage(String message) + { + this.message = message; + return this; + } + + public ServiceException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } + + public void setCode(Integer code) { + this.code = code; + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java new file mode 100644 index 0000000..980fa46 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.exception; + +/** + * 工具类异常 + * + * @author ruoyi + */ +public class UtilException extends RuntimeException +{ + private static final long serialVersionUID = 8247610319171014183L; + + public UtilException(Throwable e) + { + super(e.getMessage(), e); + } + + public UtilException(String message) + { + super(message); + } + + public UtilException(String message, Throwable throwable) + { + super(message, throwable); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java new file mode 100644 index 0000000..b55d72e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java @@ -0,0 +1,97 @@ +package com.ruoyi.common.exception.base; + +import com.ruoyi.common.utils.MessageUtils; +import com.ruoyi.common.utils.StringUtils; + +/** + * 基础异常 + * + * @author ruoyi + */ +public class BaseException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 所属模块 + */ + private String module; + + /** + * 错误码 + */ + private String code; + + /** + * 错误码对应的参数 + */ + private Object[] args; + + /** + * 错误消息 + */ + private String defaultMessage; + + public BaseException(String module, String code, Object[] args, String defaultMessage) + { + this.module = module; + this.code = code; + this.args = args; + this.defaultMessage = defaultMessage; + } + + public BaseException(String module, String code, Object[] args) + { + this(module, code, args, null); + } + + public BaseException(String module, String defaultMessage) + { + this(module, null, null, defaultMessage); + } + + public BaseException(String code, Object[] args) + { + this(null, code, args, null); + } + + public BaseException(String defaultMessage) + { + this(null, null, null, defaultMessage); + } + + @Override + public String getMessage() + { + String message = null; + if (!StringUtils.isEmpty(code)) + { + message = MessageUtils.message(code, args); + } + if (message == null) + { + message = defaultMessage; + } + return message; + } + + public String getModule() + { + return module; + } + + public String getCode() + { + return code; + } + + public Object[] getArgs() + { + return args; + } + + public String getDefaultMessage() + { + return defaultMessage; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java new file mode 100644 index 0000000..871f09b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java @@ -0,0 +1,19 @@ +package com.ruoyi.common.exception.file; + +import com.ruoyi.common.exception.base.BaseException; + +/** + * 文件信息异常类 + * + * @author ruoyi + */ +public class FileException extends BaseException +{ + private static final long serialVersionUID = 1L; + + public FileException(String code, Object[] args) + { + super("file", code, args, null); + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java new file mode 100644 index 0000000..70e0ec9 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.file; + +/** + * 文件名称超长限制异常类 + * + * @author ruoyi + */ +public class FileNameLengthLimitExceededException extends FileException +{ + private static final long serialVersionUID = 1L; + + public FileNameLengthLimitExceededException(int defaultFileNameLength) + { + super("upload.filename.exceed.length", new Object[] { defaultFileNameLength }); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java new file mode 100644 index 0000000..ec6ab05 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.file; + +/** + * 文件名大小限制异常类 + * + * @author ruoyi + */ +public class FileSizeLimitExceededException extends FileException +{ + private static final long serialVersionUID = 1L; + + public FileSizeLimitExceededException(long defaultMaxSize) + { + super("upload.exceed.maxSize", new Object[] { defaultMaxSize }); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java new file mode 100644 index 0000000..f1c8e83 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java @@ -0,0 +1,81 @@ +package com.ruoyi.common.exception.file; + +import java.util.Arrays; +import org.apache.commons.fileupload.FileUploadException; + +/** + * 文件上传 误异常类 + * + * @author ruoyi + */ +public class InvalidExtensionException extends FileUploadException +{ + private static final long serialVersionUID = 1L; + + private String[] allowedExtension; + private String extension; + private String filename; + + public InvalidExtensionException(String[] allowedExtension, String extension, String filename) + { + super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]"); + this.allowedExtension = allowedExtension; + this.extension = extension; + this.filename = filename; + } + + public String[] getAllowedExtension() + { + return allowedExtension; + } + + public String getExtension() + { + return extension; + } + + public String getFilename() + { + return filename; + } + + public static class InvalidImageExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidFlashExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidMediaExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidVideoExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java new file mode 100644 index 0000000..a567b40 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java @@ -0,0 +1,34 @@ +package com.ruoyi.common.exception.job; + +/** + * 计划策略异常 + * + * @author ruoyi + */ +public class TaskException extends Exception +{ + private static final long serialVersionUID = 1L; + + private Code code; + + public TaskException(String msg, Code code) + { + this(msg, code, null); + } + + public TaskException(String msg, Code code, Exception nestedEx) + { + super(msg, nestedEx); + this.code = code; + } + + public Code getCode() + { + return code; + } + + public enum Code + { + TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java new file mode 100644 index 0000000..389dbc7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.user; + +/** + * 验证码错误异常类 + * + * @author ruoyi + */ +public class CaptchaException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaException() + { + super("user.jcaptcha.error", null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java new file mode 100644 index 0000000..85f9486 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.user; + +/** + * 验证码失效异常类 + * + * @author ruoyi + */ +public class CaptchaExpireException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaExpireException() + { + super("user.jcaptcha.expire", null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java new file mode 100644 index 0000000..c292d70 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.exception.user; + +import com.ruoyi.common.exception.base.BaseException; + +/** + * 用户信息异常类 + * + * @author ruoyi + */ +public class UserException extends BaseException +{ + private static final long serialVersionUID = 1L; + + public UserException(String code, Object[] args) + { + super("user", code, args, null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java new file mode 100644 index 0000000..a7f3e5f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.user; + +/** + * 用户密码不正确或不符合规范异常类 + * + * @author ruoyi + */ +public class UserPasswordNotMatchException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordNotMatchException() + { + super("user.password.not.match", null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java new file mode 100644 index 0000000..a1bcfe2 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java @@ -0,0 +1,52 @@ +package com.ruoyi.common.filter; + +import java.io.IOException; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import org.springframework.http.MediaType; +import com.ruoyi.common.utils.StringUtils; + +/** + * Repeatable 过滤器 + * + * @author ruoyi + */ +public class RepeatableFilter implements Filter +{ + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + ServletRequest requestWrapper = null; + if (request instanceof HttpServletRequest + && StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) + { + requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response); + } + if (null == requestWrapper) + { + chain.doFilter(request, response); + } + else + { + chain.doFilter(requestWrapper, response); + } + } + + @Override + public void destroy() + { + + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java new file mode 100644 index 0000000..614c24c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java @@ -0,0 +1,75 @@ +package com.ruoyi.common.filter; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import com.ruoyi.common.utils.http.HttpHelper; + +/** + * 构建可重复读取inputStream的request + * + * @author ruoyi + */ +public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper +{ + private final byte[] body; + + public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException + { + super(request); + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + + body = HttpHelper.getBodyString(request).getBytes("UTF-8"); + } + + @Override + public BufferedReader getReader() throws IOException + { + return new BufferedReader(new InputStreamReader(getInputStream())); + } + + @Override + public ServletInputStream getInputStream() throws IOException + { + final ByteArrayInputStream bais = new ByteArrayInputStream(body); + return new ServletInputStream() + { + @Override + public int read() throws IOException + { + return bais.read(); + } + + @Override + public int available() throws IOException + { + return body.length; + } + + @Override + public boolean isFinished() + { + return false; + } + + @Override + public boolean isReady() + { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) + { + + } + }; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java new file mode 100644 index 0000000..99323ed --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java @@ -0,0 +1,74 @@ +package com.ruoyi.common.filter; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.ruoyi.common.utils.StringUtils; + +/** + * 防止XSS攻击的过滤器 + * + * @author ruoyi + */ +public class XssFilter implements Filter +{ + /** + * 排除链接 + */ + public List excludes = new ArrayList<>(); + + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + String tempExcludes = filterConfig.getInitParameter("excludes"); + if (StringUtils.isNotEmpty(tempExcludes)) + { + String[] url = tempExcludes.split(","); + for (int i = 0; url != null && i < url.length; i++) + { + excludes.add(url[i]); + } + } + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse resp = (HttpServletResponse) response; + if (handleExcludeURL(req, resp)) + { + chain.doFilter(request, response); + return; + } + XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request); + chain.doFilter(xssRequest, response); + } + + private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) + { + String url = request.getServletPath(); + String method = request.getMethod(); + // GET DELETE 不过滤 + if (method == null || method.matches("GET") || method.matches("DELETE")) + { + return true; + } + return StringUtils.matches(url, excludes); + } + + @Override + public void destroy() + { + + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java new file mode 100644 index 0000000..4508c92 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java @@ -0,0 +1,104 @@ +package com.ruoyi.common.filter; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import org.apache.commons.io.IOUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.html.EscapeUtil; + +/** + * XSS过滤处理 + * + * @author ruoyi + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper +{ + /** + * @param request + */ + public XssHttpServletRequestWrapper(HttpServletRequest request) + { + super(request); + } + + @Override + public String[] getParameterValues(String name) + { + String[] values = super.getParameterValues(name); + if (values != null) + { + int length = values.length; + String[] escapseValues = new String[length]; + for (int i = 0; i < length; i++) + { + // 防xss攻击和过滤前后空格 + escapseValues[i] = EscapeUtil.clean(values[i]).trim(); + } + return escapseValues; + } + return super.getParameterValues(name); + } + + @Override + public ServletInputStream getInputStream() throws IOException + { + // 非json类型,直接返回 + if (!isJsonRequest()) + { + return super.getInputStream(); + } + + // 为空,直接返回 + String json = IOUtils.toString(super.getInputStream(), "utf-8"); + if (StringUtils.isEmpty(json)) + { + return super.getInputStream(); + } + + // xss过滤 + json = EscapeUtil.clean(json).trim(); + final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes("utf-8")); + return new ServletInputStream() + { + @Override + public boolean isFinished() + { + return true; + } + + @Override + public boolean isReady() + { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) + { + } + + @Override + public int read() throws IOException + { + return bis.read(); + } + }; + } + + /** + * 是否是Json请求 + * + * @param request + */ + public boolean isJsonRequest() + { + String header = super.getHeader(HttpHeaders.CONTENT_TYPE); + return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java new file mode 100644 index 0000000..b6326c2 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java @@ -0,0 +1,114 @@ +package com.ruoyi.common.utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * 精确的浮点数运算 + * + * @author ruoyi + */ +public class Arith +{ + + /** 默认除法运算精度 */ + private static final int DEF_DIV_SCALE = 10; + + /** 这个类不能实例化 */ + private Arith() + { + } + + /** + * 提供精确的加法运算。 + * @param v1 被加数 + * @param v2 加数 + * @return 两个参数的和 + */ + public static double add(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.add(b2).doubleValue(); + } + + /** + * 提供精确的减法运算。 + * @param v1 被减数 + * @param v2 减数 + * @return 两个参数的差 + */ + public static double sub(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.subtract(b2).doubleValue(); + } + + /** + * 提供精确的乘法运算。 + * @param v1 被乘数 + * @param v2 乘数 + * @return 两个参数的积 + */ + public static double mul(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.multiply(b2).doubleValue(); + } + + /** + * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 + * 小数点以后10位,以后的数字四舍五入。 + * @param v1 被除数 + * @param v2 除数 + * @return 两个参数的商 + */ + public static double div(double v1, double v2) + { + return div(v1, v2, DEF_DIV_SCALE); + } + + /** + * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 + * 定精度,以后的数字四舍五入。 + * @param v1 被除数 + * @param v2 除数 + * @param scale 表示表示需要精确到小数点以后几位。 + * @return 两个参数的商 + */ + public static double div(double v1, double v2, int scale) + { + if (scale < 0) + { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + if (b1.compareTo(BigDecimal.ZERO) == 0) + { + return BigDecimal.ZERO.doubleValue(); + } + return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue(); + } + + /** + * 提供精确的小数位四舍五入处理。 + * @param v 需要四舍五入的数字 + * @param scale 小数点后保留几位 + * @return 四舍五入后的结果 + */ + public static double round(double v, int scale) + { + if (scale < 0) + { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b = new BigDecimal(Double.toString(v)); + BigDecimal one = BigDecimal.ONE; + return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java new file mode 100644 index 0000000..536cb3c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java @@ -0,0 +1,155 @@ +package com.ruoyi.common.utils; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.apache.commons.lang3.time.DateFormatUtils; + +/** + * 时间工具类 + * + * @author ruoyi + */ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils +{ + public static String YYYY = "yyyy"; + + public static String YYYY_MM = "yyyy-MM"; + + public static String YYYY_MM_DD = "yyyy-MM-dd"; + + public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + + /** + * 获取当前Date型日期 + * + * @return Date() 当前日期 + */ + public static Date getNowDate() + { + return new Date(); + } + + /** + * 获取当前日期, 默认格式为yyyy-MM-dd + * + * @return String + */ + public static String getDate() + { + return dateTimeNow(YYYY_MM_DD); + } + + public static final String getTime() + { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static final String dateTimeNow() + { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static final String dateTimeNow(final String format) + { + return parseDateToStr(format, new Date()); + } + + public static final String dateTime(final Date date) + { + return parseDateToStr(YYYY_MM_DD, date); + } + + public static final String parseDateToStr(final String format, final Date date) + { + return new SimpleDateFormat(format).format(date); + } + + public static final Date dateTime(final String format, final String ts) + { + try + { + return new SimpleDateFormat(format).parse(ts); + } + catch (ParseException e) + { + throw new RuntimeException(e); + } + } + + /** + * 日期路径 即年/月/日 如2018/08/08 + */ + public static final String datePath() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 日期路径 即年/月/日 如20180808 + */ + public static final String dateTime() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + /** + * 日期型字符串转化为日期 格式 + */ + public static Date parseDate(Object str) + { + if (str == null) + { + return null; + } + try + { + return parseDate(str.toString(), parsePatterns); + } + catch (ParseException e) + { + return null; + } + } + + /** + * 获取服务器启动时间 + */ + public static Date getServerStartDate() + { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 计算两个时间差 + */ + public static String getDatePoor(Date endDate, Date nowDate) + { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - nowDate.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + // long sec = diff % nd % nh % nm / ns; + return day + "天" + hour + "小时" + min + "分钟"; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java new file mode 100644 index 0000000..fd9946d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java @@ -0,0 +1,183 @@ +package com.ruoyi.common.utils; + +import java.util.Collection; +import java.util.List; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.spring.SpringUtils; + +/** + * 字典工具类 + * + * @author ruoyi + */ +public class DictUtils +{ + /** + * 分隔符 + */ + public static final String SEPARATOR = ","; + + /** + * 设置字典缓存 + * + * @param key 参数键 + * @param dictDatas 字典数据列表 + */ + public static void setDictCache(String key, List dictDatas) + { + SpringUtils.getBean(RedisCache.class).setCacheObject(getCacheKey(key), dictDatas); + } + + /** + * 获取字典缓存 + * + * @param key 参数键 + * @return dictDatas 字典数据列表 + */ + public static List getDictCache(String key) + { + Object cacheObj = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key)); + if (StringUtils.isNotNull(cacheObj)) + { + List dictDatas = StringUtils.cast(cacheObj); + return dictDatas; + } + return null; + } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @return 字典标签 + */ + public static String getDictLabel(String dictType, String dictValue) + { + return getDictLabel(dictType, dictValue, SEPARATOR); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @return 字典值 + */ + public static String getDictValue(String dictType, String dictLabel) + { + return getDictValue(dictType, dictLabel, SEPARATOR); + } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @param separator 分隔符 + * @return 字典标签 + */ + public static String getDictLabel(String dictType, String dictValue, String separator) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + + if (StringUtils.containsAny(separator, dictValue) && StringUtils.isNotEmpty(datas)) + { + for (SysDictData dict : datas) + { + for (String value : dictValue.split(separator)) + { + if (value.equals(dict.getDictValue())) + { + propertyString.append(dict.getDictLabel() + separator); + break; + } + } + } + } + else + { + for (SysDictData dict : datas) + { + if (dictValue.equals(dict.getDictValue())) + { + return dict.getDictLabel(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param separator 分隔符 + * @return 字典值 + */ + public static String getDictValue(String dictType, String dictLabel, String separator) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + + if (StringUtils.containsAny(separator, dictLabel) && StringUtils.isNotEmpty(datas)) + { + for (SysDictData dict : datas) + { + for (String label : dictLabel.split(separator)) + { + if (label.equals(dict.getDictLabel())) + { + propertyString.append(dict.getDictValue() + separator); + break; + } + } + } + } + else + { + for (SysDictData dict : datas) + { + if (dictLabel.equals(dict.getDictLabel())) + { + return dict.getDictValue(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 删除指定字典缓存 + * + * @param key 字典键 + */ + public static void removeDictCache(String key) + { + SpringUtils.getBean(RedisCache.class).deleteObject(getCacheKey(key)); + } + + /** + * 清空字典缓存 + */ + public static void clearDictCache() + { + Collection keys = SpringUtils.getBean(RedisCache.class).keys(Constants.SYS_DICT_KEY + "*"); + SpringUtils.getBean(RedisCache.class).deleteObject(keys); + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + public static String getCacheKey(String configKey) + { + return Constants.SYS_DICT_KEY + configKey; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java new file mode 100644 index 0000000..ae81a69 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java @@ -0,0 +1,40 @@ +package com.ruoyi.common.utils; + +import java.io.PrintWriter; +import java.io.StringWriter; +import org.apache.commons.lang3.exception.ExceptionUtils; + +/** + * 错误信息处理类。 + * + * @author ruoyi + */ +public class ExceptionUtil +{ + /** + * 获取exception的详细错误信息。 + */ + public static String getExceptionMessage(Throwable e) + { + StringWriter sw = new StringWriter(); + e.printStackTrace(new PrintWriter(sw, true)); + String str = sw.toString(); + return str; + } + + public static String getRootErrorMessage(Exception e) + { + Throwable root = ExceptionUtils.getRootCause(e); + root = (root == null ? e : root); + if (root == null) + { + return ""; + } + String msg = root.getMessage(); + if (msg == null) + { + return "null"; + } + return StringUtils.defaultString(msg); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/LogUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/LogUtils.java new file mode 100644 index 0000000..0de30c6 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/LogUtils.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.utils; + +/** + * 处理并记录日志文件 + * + * @author ruoyi + */ +public class LogUtils +{ + public static String getBlock(Object msg) + { + if (msg == null) + { + msg = ""; + } + return "[" + msg.toString() + "]"; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java new file mode 100644 index 0000000..7dac75a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.utils; + +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; +import com.ruoyi.common.utils.spring.SpringUtils; + +/** + * 获取i18n资源文件 + * + * @author ruoyi + */ +public class MessageUtils +{ + /** + * 根据消息键和参数 获取消息 委托给spring messageSource + * + * @param code 消息键 + * @param args 参数 + * @return 获取国际化翻译值 + */ + public static String message(String code, Object... args) + { + MessageSource messageSource = SpringUtils.getBean(MessageSource.class); + return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisCahceKey.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisCahceKey.java new file mode 100644 index 0000000..9888118 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisCahceKey.java @@ -0,0 +1,91 @@ +package com.ruoyi.common.utils; + +/** + * Created by 魔金商城 on 18/2/6. + * redis缓存中的key + */ +public interface RedisCahceKey { + + /** + * mobile端首页缓存key + */ + String MOBILE_TEMPLATE = "MOBILE_TEMPLATE"; + + /** + * 地区缓存key + */ + String AREA = "AREA"; + + /** + * 基本信息设置缓存key + */ + String BASE_INFO_SET = "BASE_INFO_SET"; + + /** + * pc端首页缓存key + */ + String PC_TEMPLATE = "PC_TEMPLATE"; + + + // pc端店铺首页模版缓存key + String STORE_PC_TEMPLATE = "STORE_PC_TEMPLATE"; + + /** + * 手机端专题页缓存key + */ + String MOBILE_THEMATIC = "MOBILE_THEMATIC"; + + /** + * PC端专题页缓存key + */ + String PC_THEMATIC = "PC_THEMATIC"; + + /** + * APP端首页模版缓存key + */ + String APP_INDEX_TEMPLATE = "APP_INDEX_TEMPLATE"; + + /** + * APP 专题页缓存 + */ + String APP_THEMATIC = "APP_THEMATIC"; + + /** + * APPLET 端首页模版缓存key + */ + String APPLET_INDEX_TEMPLATE = "APPLET_INDEX_TEMPLATE"; + + /** + * APPLET 专题页缓存 + */ + String APPLET_THEMATIC = "APPLET_THEMATIC"; + + + /** + * 促销设置缓存key + */ + String MARKETING_SETTING = "MARKETING_SETTING"; + + /** + * 微信用户关联缓存key + */ + String WE_CHAT_CUSTOMER_LINK = "WE_CHAT_CUSTOMER_LINK"; + + /** + * 微信用户关联缓存key + */ + String WE_CHAT_OPENID = "WE_CHAT_OPENID"; + + /** + * app版本 + */ + String APP_VERSION = "APP_VERSION"; + /** + * 社区团购设置 + */ + String COMMUNITY_BUY_SETTING = "COMMUNITY_BUY_SETTING"; + /** + * 社区推广 + */ + String COMMUNITY_BUY_INDEX = "COMMUNITY_BUY_INDEX"; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java new file mode 100644 index 0000000..a6f3d53 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java @@ -0,0 +1,120 @@ +package com.ruoyi.common.utils; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.exception.ServiceException; + +/** + * 安全服务工具类 + * + * @author ruoyi + */ +public class SecurityUtils +{ + /** + * 用户ID + **/ + public static Long getUserId() + { + try + { + return getLoginUser().getUserId(); + } + catch (Exception e) + { + throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取部门ID + **/ + public static Long getDeptId() + { + try + { + return getLoginUser().getDeptId(); + } + catch (Exception e) + { + throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取用户账户 + **/ + public static String getUsername() + { + try + { + return getLoginUser().getUsername(); + } + catch (Exception e) + { + throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取用户 + **/ + public static LoginUser getLoginUser() + { + try + { + return (LoginUser) getAuthentication().getPrincipal(); + } + catch (Exception e) + { + throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取Authentication + */ + public static Authentication getAuthentication() + { + return SecurityContextHolder.getContext().getAuthentication(); + } + + /** + * 生成BCryptPasswordEncoder密码 + * + * @param password 密码 + * @return 加密字符串 + */ + public static String encryptPassword(String password) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.encode(password); + } + + /** + * 判断密码是否相同 + * + * @param rawPassword 真实密码 + * @param encodedPassword 加密后字符 + * @return 结果 + */ + public static boolean matchesPassword(String rawPassword, String encodedPassword) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.matches(rawPassword, encodedPassword); + } + + /** + * 是否为管理员 + * + * @param userId 用户ID + * @return 结果 + */ + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java new file mode 100644 index 0000000..ab9ebcf --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java @@ -0,0 +1,136 @@ +package com.ruoyi.common.utils; + +import java.io.IOException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import com.ruoyi.common.core.text.Convert; + +/** + * 客户端工具类 + * + * @author ruoyi + */ +public class ServletUtils +{ + /** + * 获取String参数 + */ + public static String getParameter(String name) + { + return getRequest().getParameter(name); + } + + /** + * 获取String参数 + */ + public static String getParameter(String name, String defaultValue) + { + return Convert.toStr(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name) + { + return Convert.toInt(getRequest().getParameter(name)); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name, Integer defaultValue) + { + return Convert.toInt(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取request + */ + public static HttpServletRequest getRequest() + { + return getRequestAttributes().getRequest(); + } + + /** + * 获取response + */ + public static HttpServletResponse getResponse() + { + return getRequestAttributes().getResponse(); + } + + /** + * 获取session + */ + public static HttpSession getSession() + { + return getRequest().getSession(); + } + + public static ServletRequestAttributes getRequestAttributes() + { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } + + /** + * 将字符串渲染到客户端 + * + * @param response 渲染对象 + * @param string 待渲染的字符串 + * @return null + */ + public static String renderString(HttpServletResponse response, String string) + { + try + { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } + catch (IOException e) + { + e.printStackTrace(); + } + return null; + } + + /** + * 是否是Ajax异步请求 + * + * @param request + */ + public static boolean isAjaxRequest(HttpServletRequest request) + { + String accept = request.getHeader("accept"); + if (accept != null && accept.indexOf("application/json") != -1) + { + return true; + } + + String xRequestedWith = request.getHeader("X-Requested-With"); + if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) + { + return true; + } + + String uri = request.getRequestURI(); + if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")) + { + return true; + } + + String ajax = request.getParameter("__ajax"); + if (StringUtils.inStringIgnoreCase(ajax, "json", "xml")) + { + return true; + } + return false; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SnowflakeIdWorker.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SnowflakeIdWorker.java new file mode 100644 index 0000000..ece52e1 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SnowflakeIdWorker.java @@ -0,0 +1,171 @@ +package com.ruoyi.common.utils; + + +/** + * Created by 魔金商城 on 17/11/02. + *

+ * Twitter_Snowflake
+ * SnowFlake的结构如下(每部分用-分开):
+ * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
+ * 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0
+ * 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截) + * 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69
+ * 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId和5位workerId
+ * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
+ * 加起来刚好64位,为一个Long型。
+ * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。 + */ +public class SnowflakeIdWorker { + /** + * 开始时间截 (2015-01-01) + */ + private final long twepoch = 1420041600000L; + + /** + * 机器id所占的位数 + */ + private final long workerIdBits = 5L; + + /** + * 数据标识id所占的位数 + */ + private final long datacenterIdBits = 5L; + + /** + * 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) + */ + private final long maxWorkerId = -1L ^ (-1L << workerIdBits); + + /** + * 支持的最大数据标识id,结果是31 + */ + private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); + + /** + * 序列在id中占的位数 + */ + private final long sequenceBits = 12L; + + /** + * 机器ID向左移12位 + */ + private final long workerIdShift = sequenceBits; + + /** + * 数据标识id向左移17位(12+5) + */ + private final long datacenterIdShift = sequenceBits + workerIdBits; + + /** + * 时间截向左移22位(5+5+12) + */ + private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; + + /** + * 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095) + */ + private final long sequenceMask = -1L ^ (-1L << sequenceBits); + + /** + * 工作机器ID(0~31) + */ + private long workerId; + + /** + * 数据中心ID(0~31) + */ + private long datacenterId; + + /** + * 毫秒内序列(0~4095) + */ + private long sequence = 0L; + + /** + * 上次生成ID的时间截 + */ + private long lastTimestamp = -1L; + + //==============================Constructors===================================== + + /** + * 构造函数 + * + * @param workerId 工作ID (0~31) + * @param datacenterId 数据中心ID (0~31) + */ + public SnowflakeIdWorker(long workerId, long datacenterId) { + if (workerId > maxWorkerId || workerId < 0) { + throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); + } + if (datacenterId > maxDatacenterId || datacenterId < 0) { + throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); + } + this.workerId = workerId; + this.datacenterId = datacenterId; + } + + // ==============================Methods========================================== + + /** + * 获得下一个ID (该方法是线程安全的) + * + * @return SnowflakeId + */ + public synchronized long nextId() { + long timestamp = timeGen(); + + //如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常 + if (timestamp < lastTimestamp) { + throw new RuntimeException( + String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); + } + + //如果是同一时间生成的,则进行毫秒内序列 + if (lastTimestamp == timestamp) { + sequence = (sequence + 1) & sequenceMask; + //毫秒内序列溢出 + if (sequence == 0) { + //阻塞到下一个毫秒,获得新的时间戳 + timestamp = tilNextMillis(lastTimestamp); + } + } + //时间戳改变,毫秒内序列重置 + else { + sequence = 0L; + } + + //上次生成ID的时间截 + lastTimestamp = timestamp; + + //移位并通过或运算拼到一起组成64位的ID + return ((timestamp - twepoch) << timestampLeftShift) // + | (datacenterId << datacenterIdShift) // + | (workerId << workerIdShift) // + | sequence; + } + + /** + * 阻塞到下一个毫秒,直到获得新的时间戳 + * + * @param lastTimestamp 上次生成ID的时间截 + * @return 当前时间戳 + */ + protected long tilNextMillis(long lastTimestamp) { + long timestamp = timeGen(); + while (timestamp <= lastTimestamp) { + timestamp = timeGen(); + } + return timestamp; + } + + /** + * 返回以毫秒为单位的当前时间 + * + * @return 当前时间(毫秒) + */ + protected long timeGen() { + return System.currentTimeMillis(); + } + +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java new file mode 100644 index 0000000..4ca2bfc --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java @@ -0,0 +1,534 @@ +package com.ruoyi.common.utils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.springframework.util.AntPathMatcher; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.text.StrFormatter; + +/** + * 字符串工具类 + * + * @author ruoyi + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils +{ + /** 空字符串 */ + private static final String NULLSTR = ""; + + /** 下划线 */ + private static final char SEPARATOR = '_'; + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * @return value 返回值 + */ + public static T nvl(T value, T defaultValue) + { + return value != null ? value : defaultValue; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) + { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 判断一个Collection是否非空,包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Collection coll) + { + return !isEmpty(coll); + } + + /** + * * 判断一个对象数组是否为空 + * + * @param objects 要判断的对象数组 + ** @return true:为空 false:非空 + */ + public static boolean isEmpty(Object[] objects) + { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 判断一个对象数组是否非空 + * + * @param objects 要判断的对象数组 + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Object[] objects) + { + return !isEmpty(objects); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Map map) + { + return isNull(map) || map.isEmpty(); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Map map) + { + return !isEmpty(map); + } + + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * @return true:为空 false:非空 + */ + public static boolean isEmpty(String str) + { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty(String str) + { + return !isEmpty(str); + } + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) + { + return object == null; + } + + /** + * * 判断一个对象是否非空 + * + * @param object Object + * @return true:非空 false:空 + */ + public static boolean isNotNull(Object object) + { + return !isNull(object); + } + + /** + * * 判断一个对象是否是数组类型(Java基本型别的数组) + * + * @param object 对象 + * @return true:是数组 false:不是数组 + */ + public static boolean isArray(Object object) + { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 去空格 + */ + public static String trim(String str) + { + return (str == null ? "" : str.trim()); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @return 结果 + */ + public static String substring(final String str, int start) + { + if (str == null) + { + return NULLSTR; + } + + if (start < 0) + { + start = str.length() + start; + } + + if (start < 0) + { + start = 0; + } + if (start > str.length()) + { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) + { + if (str == null) + { + return NULLSTR; + } + + if (end < 0) + { + end = str.length() + end; + } + if (start < 0) + { + start = str.length() + start; + } + + if (end > str.length()) + { + end = str.length(); + } + + if (start > end) + { + return NULLSTR; + } + + if (start < 0) + { + start = 0; + } + if (end < 0) + { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * @return 格式化后的文本 + */ + public static String format(String template, Object... params) + { + if (isEmpty(params) || isEmpty(template)) + { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 是否为http(s)://开头 + * + * @param link 链接 + * @return 结果 + */ + public static boolean ishttp(String link) + { + return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); + } + + /** + * 字符串转set + * + * @param str 字符串 + * @param sep 分隔符 + * @return set集合 + */ + public static final Set str2Set(String str, String sep) + { + return new HashSet(str2List(str, sep, true, false)); + } + + /** + * 字符串转list + * + * @param str 字符串 + * @param sep 分隔符 + * @param filterBlank 过滤纯空白 + * @param trim 去掉首尾空白 + * @return list集合 + */ + public static final List str2List(String str, String sep, boolean filterBlank, boolean trim) + { + List list = new ArrayList(); + if (StringUtils.isEmpty(str)) + { + return list; + } + + // 过滤空白字符串 + if (filterBlank && StringUtils.isBlank(str)) + { + return list; + } + String[] split = str.split(sep); + for (String string : split) + { + if (filterBlank && StringUtils.isBlank(string)) + { + continue; + } + if (trim) + { + string = string.trim(); + } + list.add(string); + } + + return list; + } + + /** + * 查找指定字符串是否包含指定字符串列表中的任意一个字符串同时串忽略大小写 + * + * @param cs 指定字符串 + * @param searchCharSequences 需要检查的字符串数组 + * @return 是否包含任意一个字符串 + */ + public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) + { + if (isEmpty(cs) || isEmpty(searchCharSequences)) + { + return false; + } + for (CharSequence testStr : searchCharSequences) + { + if (containsIgnoreCase(cs, testStr)) + { + return true; + } + } + return false; + } + + /** + * 驼峰转下划线命名 + */ + public static String toUnderScoreCase(String str) + { + if (str == null) + { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) + { + char c = str.charAt(i); + if (i > 0) + { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } + else + { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) + { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) + { + sb.append(SEPARATOR); + } + else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) + { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * @return 包含返回true + */ + public static boolean inStringIgnoreCase(String str, String... strs) + { + if (str != null && strs != null) + { + for (String s : strs) + { + if (str.equalsIgnoreCase(trim(s))) + { + return true; + } + } + } + return false; + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String convertToCamelCase(String name) + { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) + { + // 没必要转换 + return ""; + } + else if (!name.contains("_")) + { + // 不含下划线,仅将首字母大写 + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + // 用下划线将原始字符串分割 + String[] camels = name.split("_"); + for (String camel : camels) + { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) + { + continue; + } + // 首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 驼峰式命名法 例如:user_name->userName + */ + public static String toCamelCase(String s) + { + if (s == null) + { + return null; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + + if (c == SEPARATOR) + { + upperCase = true; + } + else if (upperCase) + { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } + else + { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) + { + if (isEmpty(str) || isEmpty(strs)) + { + return false; + } + for (String pattern : strs) + { + if (isMatch(pattern, str)) + { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + * @return + */ + public static boolean isMatch(String pattern, String url) + { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) + { + return (T) obj; + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java new file mode 100644 index 0000000..1934195 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java @@ -0,0 +1,99 @@ +package com.ruoyi.common.utils; + +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 线程相关工具类. + * + * @author ruoyi + */ +public class Threads +{ + private static final Logger logger = LoggerFactory.getLogger(Threads.class); + + /** + * sleep等待,单位为毫秒 + */ + public static void sleep(long milliseconds) + { + try + { + Thread.sleep(milliseconds); + } + catch (InterruptedException e) + { + return; + } + } + + /** + * 停止线程池 + * 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务. + * 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数. + * 如果仍人超時,則強制退出. + * 另对在shutdown时线程本身被调用中断做了处理. + */ + public static void shutdownAndAwaitTermination(ExecutorService pool) + { + if (pool != null && !pool.isShutdown()) + { + pool.shutdown(); + try + { + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + pool.shutdownNow(); + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + logger.info("Pool did not terminate"); + } + } + } + catch (InterruptedException ie) + { + pool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + } + + /** + * 打印线程异常信息 + */ + public static void printException(Runnable r, Throwable t) + { + if (t == null && r instanceof Future) + { + try + { + Future future = (Future) r; + if (future.isDone()) + { + future.get(); + } + } + catch (CancellationException ce) + { + t = ce; + } + catch (ExecutionException ee) + { + t = ee.getCause(); + } + catch (InterruptedException ie) + { + Thread.currentThread().interrupt(); + } + } + if (t != null) + { + logger.error(t.getMessage(), t); + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/VerifyCodeUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/VerifyCodeUtils.java new file mode 100644 index 0000000..5fdf3a9 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/VerifyCodeUtils.java @@ -0,0 +1,228 @@ +package com.ruoyi.common.utils; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.OutputStream; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Random; +import javax.imageio.ImageIO; + +/** + * 验证码工具类 + * + * @author ruoyi + */ +public class VerifyCodeUtils +{ + // 使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符 + public static final String VERIFY_CODES = "123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; + + private static Random random = new SecureRandom(); + + /** + * 使用系统默认字符源生成验证码 + * + * @param verifySize 验证码长度 + * @return + */ + public static String generateVerifyCode(int verifySize) + { + return generateVerifyCode(verifySize, VERIFY_CODES); + } + + /** + * 使用指定源生成验证码 + * + * @param verifySize 验证码长度 + * @param sources 验证码字符源 + * @return + */ + public static String generateVerifyCode(int verifySize, String sources) + { + if (sources == null || sources.length() == 0) + { + sources = VERIFY_CODES; + } + int codesLen = sources.length(); + Random rand = new Random(System.currentTimeMillis()); + StringBuilder verifyCode = new StringBuilder(verifySize); + for (int i = 0; i < verifySize; i++) + { + verifyCode.append(sources.charAt(rand.nextInt(codesLen - 1))); + } + return verifyCode.toString(); + } + + /** + * 输出指定验证码图片流 + * + * @param w + * @param h + * @param os + * @param code + * @throws IOException + */ + public static void outputImage(int w, int h, OutputStream os, String code) throws IOException + { + int verifySize = code.length(); + BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + Random rand = new Random(); + Graphics2D g2 = image.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + Color[] colors = new Color[5]; + Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN, Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, + Color.ORANGE, Color.PINK, Color.YELLOW }; + float[] fractions = new float[colors.length]; + for (int i = 0; i < colors.length; i++) + { + colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; + fractions[i] = rand.nextFloat(); + } + Arrays.sort(fractions); + + g2.setColor(Color.GRAY);// 设置边框色 + g2.fillRect(0, 0, w, h); + + Color c = getRandColor(200, 250); + g2.setColor(c);// 设置背景色 + g2.fillRect(0, 2, w, h - 4); + + // 绘制干扰线 + Random random = new Random(); + g2.setColor(getRandColor(160, 200));// 设置线条的颜色 + for (int i = 0; i < 20; i++) + { + int x = random.nextInt(w - 1); + int y = random.nextInt(h - 1); + int xl = random.nextInt(6) + 1; + int yl = random.nextInt(12) + 1; + g2.drawLine(x, y, x + xl + 40, y + yl + 20); + } + + // 添加噪点 + float yawpRate = 0.05f;// 噪声率 + int area = (int) (yawpRate * w * h); + for (int i = 0; i < area; i++) + { + int x = random.nextInt(w); + int y = random.nextInt(h); + int rgb = getRandomIntColor(); + image.setRGB(x, y, rgb); + } + + shear(g2, w, h, c);// 使图片扭曲 + + g2.setColor(getRandColor(100, 160)); + int fontSize = h - 4; + Font font = new Font("Algerian", Font.ITALIC, fontSize); + g2.setFont(font); + char[] chars = code.toCharArray(); + for (int i = 0; i < verifySize; i++) + { + AffineTransform affine = new AffineTransform(); + affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), + (w / verifySize) * i + fontSize / 2, h / 2); + g2.setTransform(affine); + g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10); + } + + g2.dispose(); + ImageIO.write(image, "jpg", os); + } + + private static Color getRandColor(int fc, int bc) + { + if (fc > 255) { + fc = 255; + } + if (bc > 255) { + bc = 255; + } + int r = fc + random.nextInt(bc - fc); + int g = fc + random.nextInt(bc - fc); + int b = fc + random.nextInt(bc - fc); + return new Color(r, g, b); + } + + private static int getRandomIntColor() + { + int[] rgb = getRandomRgb(); + int color = 0; + for (int c : rgb) + { + color = color << 8; + color = color | c; + } + return color; + } + + private static int[] getRandomRgb() + { + int[] rgb = new int[3]; + for (int i = 0; i < 3; i++) + { + rgb[i] = random.nextInt(255); + } + return rgb; + } + + private static void shear(Graphics g, int w1, int h1, Color color) + { + shearX(g, w1, h1, color); + shearY(g, w1, h1, color); + } + + private static void shearX(Graphics g, int w1, int h1, Color color) + { + + int period = random.nextInt(2); + + boolean borderGap = true; + int frames = 1; + int phase = random.nextInt(2); + + for (int i = 0; i < h1; i++) + { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); + g.copyArea(0, i, w1, 1, (int) d, 0); + if (borderGap) + { + g.setColor(color); + g.drawLine((int) d, i, 0, i); + g.drawLine((int) d + w1, i, w1, i); + } + } + + } + + private static void shearY(Graphics g, int w1, int h1, Color color) + { + + int period = random.nextInt(40) + 10; // 50; + + boolean borderGap = true; + int frames = 20; + int phase = 7; + for (int i = 0; i < w1; i++) + { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); + g.copyArea(i, 0, 1, h1, 0, (int) d); + if (borderGap) + { + g.setColor(color); + g.drawLine(i, (int) d, i, 0); + g.drawLine(i, (int) d + h1, i, h1); + } + + } + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java new file mode 100644 index 0000000..4463662 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java @@ -0,0 +1,110 @@ +package com.ruoyi.common.utils.bean; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Bean 工具类 + * + * @author ruoyi + */ +public class BeanUtils extends org.springframework.beans.BeanUtils +{ + /** Bean方法名中属性名开始的下标 */ + private static final int BEAN_METHOD_PROP_INDEX = 3; + + /** * 匹配getter方法的正则表达式 */ + private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); + + /** * 匹配setter方法的正则表达式 */ + private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); + + /** + * Bean属性复制工具方法。 + * + * @param dest 目标对象 + * @param src 源对象 + */ + public static void copyBeanProp(Object dest, Object src) + { + try + { + copyProperties(src, dest); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + /** + * 获取对象的setter方法。 + * + * @param obj 对象 + * @return 对象的setter方法列表 + */ + public static List getSetterMethods(Object obj) + { + // setter方法列表 + List setterMethods = new ArrayList(); + + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + + // 查找setter方法 + + for (Method method : methods) + { + Matcher m = SET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 1)) + { + setterMethods.add(method); + } + } + // 返回setter方法列表 + return setterMethods; + } + + /** + * 获取对象的getter方法。 + * + * @param obj 对象 + * @return 对象的getter方法列表 + */ + + public static List getGetterMethods(Object obj) + { + // getter方法列表 + List getterMethods = new ArrayList(); + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + // 查找getter方法 + for (Method method : methods) + { + Matcher m = GET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 0)) + { + getterMethods.add(method); + } + } + // 返回getter方法列表 + return getterMethods; + } + + /** + * 检查Bean方法名中的属性名是否相等。
+ * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。 + * + * @param m1 方法名1 + * @param m2 方法名2 + * @return 属性名一样返回true,否则返回false + */ + + public static boolean isMethodPropEquals(String m1, String m2) + { + return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileTypeUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileTypeUtils.java new file mode 100644 index 0000000..68130b9 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileTypeUtils.java @@ -0,0 +1,76 @@ +package com.ruoyi.common.utils.file; + +import java.io.File; +import org.apache.commons.lang3.StringUtils; + +/** + * 文件类型工具类 + * + * @author ruoyi + */ +public class FileTypeUtils +{ + /** + * 获取文件类型 + *

+ * 例如: ruoyi.txt, 返回: txt + * + * @param file 文件名 + * @return 后缀(不含".") + */ + public static String getFileType(File file) + { + if (null == file) + { + return StringUtils.EMPTY; + } + return getFileType(file.getName()); + } + + /** + * 获取文件类型 + *

+ * 例如: ruoyi.txt, 返回: txt + * + * @param fileName 文件名 + * @return 后缀(不含".") + */ + public static String getFileType(String fileName) + { + int separatorIndex = fileName.lastIndexOf("."); + if (separatorIndex < 0) + { + return ""; + } + return fileName.substring(separatorIndex + 1).toLowerCase(); + } + + /** + * 获取文件类型 + * + * @param photoByte 文件字节码 + * @return 后缀(不含".") + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "JPG"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "GIF"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "JPG"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "BMP"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "PNG"; + } + return strFileExtendName; + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java new file mode 100644 index 0000000..eb12806 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java @@ -0,0 +1,235 @@ +package com.ruoyi.common.utils.file; + +import java.io.File; +import java.io.IOException; +import org.apache.commons.io.FilenameUtils; +import org.springframework.web.multipart.MultipartFile; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.exception.file.FileNameLengthLimitExceededException; +import com.ruoyi.common.exception.file.FileSizeLimitExceededException; +import com.ruoyi.common.exception.file.InvalidExtensionException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.IdUtils; + +/** + * 文件上传工具类 + * + * @author ruoyi + */ +public class FileUploadUtils +{ + /** + * 默认大小 50M + */ + public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024; + + /** + * 默认的文件名最大长度 100 + */ + public static final int DEFAULT_FILE_NAME_LENGTH = 100; + + /** + * 默认上传的地址 + */ + private static String defaultBaseDir = RuoYiConfig.getProfile(); + + public static void setDefaultBaseDir(String defaultBaseDir) + { + FileUploadUtils.defaultBaseDir = defaultBaseDir; + } + + public static String getDefaultBaseDir() + { + return defaultBaseDir; + } + + /** + * 以默认配置进行文件上传 + * + * @param file 上传的文件 + * @return 文件名称 + * @throws Exception + */ + public static final String upload(MultipartFile file) throws IOException + { + try + { + return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 根据文件路径上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @return 文件名称 + * @throws IOException + */ + public static final String upload(String baseDir, MultipartFile file) throws IOException + { + try + { + return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 文件上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @param allowedExtension 上传文件类型 + * @return 返回上传成功的文件名 + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws FileNameLengthLimitExceededException 文件名太长 + * @throws IOException 比如读写文件出错时 + * @throws InvalidExtensionException 文件校验异常 + */ + public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, + InvalidExtensionException + { + int fileNamelength = file.getOriginalFilename().length(); + if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) + { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + + assertAllowed(file, allowedExtension); + + String fileName = extractFilename(file); + + File desc = getAbsoluteFile(baseDir, fileName); + file.transferTo(desc); + String pathFileName = getPathFileName(baseDir, fileName); + return pathFileName; + } + + /** + * 编码文件名 + */ + public static final String extractFilename(MultipartFile file) + { + String fileName = file.getOriginalFilename(); + String extension = getExtension(file); + fileName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; + return fileName; + } + + public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException + { + File desc = new File(uploadDir + File.separator + fileName); + + if (!desc.exists()) + { + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + } + return desc; + } + + public static final String getPathFileName(String uploadDir, String fileName) throws IOException + { + int dirLastIndex = RuoYiConfig.getProfile().length() + 1; + String currentDir = StringUtils.substring(uploadDir, dirLastIndex); + String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; + return pathFileName; + } + + /** + * 文件大小校验 + * + * @param file 上传的文件 + * @return + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws InvalidExtensionException + */ + public static final void assertAllowed(MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, InvalidExtensionException + { + long size = file.getSize(); + if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) + { + throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + } + + String fileName = file.getOriginalFilename(); + String extension = getExtension(file); + if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) + { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) + { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) + { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) + { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) + { + throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, + fileName); + } + else + { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } + } + + } + + /** + * 判断MIME类型是否是允许的MIME类型 + * + * @param extension + * @param allowedExtension + * @return + */ + public static final boolean isAllowedExtension(String extension, String[] allowedExtension) + { + for (String str : allowedExtension) + { + if (str.equalsIgnoreCase(extension)) + { + return true; + } + } + return false; + } + + /** + * 获取文件名的后缀 + * + * @param file 表单文件 + * @return 后缀名 + */ + public static final String getExtension(MultipartFile file) + { + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + if (StringUtils.isEmpty(extension)) + { + extension = MimeTypeUtils.getExtension(file.getContentType()); + } + return extension; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java new file mode 100644 index 0000000..ff33055 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -0,0 +1,256 @@ +package com.ruoyi.common.utils.file; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.IdUtils; + +/** + * 文件处理工具类 + * + * @author ruoyi + */ +public class FileUtils +{ + public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; + + /** + * 输出指定文件的byte数组 + * + * @param filePath 文件路径 + * @param os 输出流 + * @return + */ + public static void writeBytes(String filePath, OutputStream os) throws IOException + { + FileInputStream fis = null; + try + { + File file = new File(filePath); + if (!file.exists()) + { + throw new FileNotFoundException(filePath); + } + fis = new FileInputStream(file); + byte[] b = new byte[1024]; + int length; + while ((length = fis.read(b)) > 0) + { + os.write(b, 0, length); + } + } + catch (IOException e) + { + throw e; + } + finally + { + IOUtils.close(os); + IOUtils.close(fis); + } + } + + /** + * 写数据到文件中 + * + * @param data 数据 + * @return 目标文件 + * @throws IOException IO异常 + */ + public static String writeImportBytes(byte[] data) throws IOException + { + return writeBytes(data, RuoYiConfig.getImportPath()); + } + + /** + * 写数据到文件中 + * + * @param data 数据 + * @param uploadDir 目标文件 + * @return 目标文件 + * @throws IOException IO异常 + */ + public static String writeBytes(byte[] data, String uploadDir) throws IOException + { + FileOutputStream fos = null; + String pathName = ""; + try + { + String extension = getFileExtendName(data); + pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; + File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); + fos = new FileOutputStream(file); + fos.write(data); + } + finally + { + IOUtils.close(fos); + } + return FileUploadUtils.getPathFileName(uploadDir, pathName); + } + + /** + * 删除文件 + * + * @param filePath 文件 + * @return + */ + public static boolean deleteFile(String filePath) + { + boolean flag = false; + File file = new File(filePath); + // 路径为文件且不为空则进行删除 + if (file.isFile() && file.exists()) + { + file.delete(); + flag = true; + } + return flag; + } + + /** + * 文件名称验证 + * + * @param filename 文件名称 + * @return true 正常 false 非法 + */ + public static boolean isValidFilename(String filename) + { + return filename.matches(FILENAME_PATTERN); + } + + /** + * 检查文件是否可下载 + * + * @param resource 需要下载的文件 + * @return true 正常 false 非法 + */ + public static boolean checkAllowDownload(String resource) + { + // 禁止目录上跳级别 + if (StringUtils.contains(resource, "..")) + { + return false; + } + + // 检查允许下载的文件规则 + if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) + { + return true; + } + + // 不在允许下载的文件规则 + return false; + } + + /** + * 下载文件名重新编码 + * + * @param request 请求对象 + * @param fileName 文件名 + * @return 编码后的文件名 + */ + public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException + { + final String agent = request.getHeader("USER-AGENT"); + String filename = fileName; + if (agent.contains("MSIE")) + { + // IE浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + filename = filename.replace("+", " "); + } + else if (agent.contains("Firefox")) + { + // 火狐浏览器 + filename = new String(fileName.getBytes(), "ISO8859-1"); + } + else if (agent.contains("Chrome")) + { + // google浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + } + else + { + // 其它浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + } + return filename; + } + + /** + * 下载文件名重新编码 + * + * @param response 响应对象 + * @param realFileName 真实文件名 + * @return + */ + public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException + { + String percentEncodedFileName = percentEncode(realFileName); + + StringBuilder contentDispositionValue = new StringBuilder(); + contentDispositionValue.append("attachment; filename=") + .append(percentEncodedFileName) + .append(";") + .append("filename*=") + .append("utf-8''") + .append(percentEncodedFileName); + + response.setHeader("Content-disposition", contentDispositionValue.toString()); + } + + /** + * 百分号编码工具方法 + * + * @param s 需要百分号编码的字符串 + * @return 百分号编码后的字符串 + */ + public static String percentEncode(String s) throws UnsupportedEncodingException + { + String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); + return encode.replaceAll("\\+", "%20"); + } + + /** + * 获取图像后缀 + * + * @param photoByte 图像数据 + * @return 后缀名 + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "jpg"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "gif"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "jpg"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "bmp"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "png"; + } + return strFileExtendName; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java new file mode 100644 index 0000000..0b7b5aa --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java @@ -0,0 +1,101 @@ +package com.ruoyi.common.utils.file; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Arrays; +import org.apache.poi.util.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.StringUtils; + +/** + * 图片处理工具类 + * + * @author ruoyi + */ +public class ImageUtils +{ + private static final Logger log = LoggerFactory.getLogger(ImageUtils.class); + + public static byte[] getImage(String imagePath) + { + InputStream is = getFile(imagePath); + try + { + return IOUtils.toByteArray(is); + } + catch (Exception e) + { + log.error("图片加载异常 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(is); + } + } + + public static InputStream getFile(String imagePath) + { + try + { + byte[] result = readFile(imagePath); + result = Arrays.copyOf(result, result.length); + return new ByteArrayInputStream(result); + } + catch (Exception e) + { + log.error("获取图片异常 {}", e); + } + return null; + } + + /** + * 读取文件为字节数据 + * + * @param key 地址 + * @return 字节数据 + */ + public static byte[] readFile(String url) + { + InputStream in = null; + ByteArrayOutputStream baos = null; + try + { + if (url.startsWith("http")) + { + // 网络地址 + URL urlObj = new URL(url); + URLConnection urlConnection = urlObj.openConnection(); + urlConnection.setConnectTimeout(30 * 1000); + urlConnection.setReadTimeout(60 * 1000); + urlConnection.setDoInput(true); + in = urlConnection.getInputStream(); + } + else + { + // 本机地址 + String localPath = RuoYiConfig.getProfile(); + String downloadPath = localPath + StringUtils.substringAfter(url, Constants.RESOURCE_PREFIX); + in = new FileInputStream(downloadPath); + } + return IOUtils.toByteArray(in); + } + catch (Exception e) + { + log.error("获取文件路径异常 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(in); + IOUtils.closeQuietly(baos); + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java new file mode 100644 index 0000000..f968f1a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java @@ -0,0 +1,59 @@ +package com.ruoyi.common.utils.file; + +/** + * 媒体类型工具类 + * + * @author ruoyi + */ +public class MimeTypeUtils +{ + public static final String IMAGE_PNG = "image/png"; + + public static final String IMAGE_JPG = "image/jpg"; + + public static final String IMAGE_JPEG = "image/jpeg"; + + public static final String IMAGE_BMP = "image/bmp"; + + public static final String IMAGE_GIF = "image/gif"; + + public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" }; + + public static final String[] FLASH_EXTENSION = { "swf", "flv" }; + + public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", + "asf", "rm", "rmvb" }; + + public static final String[] VIDEO_EXTENSION = { "mp4", "avi", "rmvb" }; + + public static final String[] DEFAULT_ALLOWED_EXTENSION = { + // 图片 + "bmp", "gif", "jpg", "jpeg", "png", + // word excel powerpoint + "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt", + // 压缩文件 + "rar", "zip", "gz", "bz2", + // 视频格式 + "mp4", "avi", "rmvb", + // pdf + "pdf" }; + + public static String getExtension(String prefix) + { + switch (prefix) + { + case IMAGE_PNG: + return "png"; + case IMAGE_JPG: + return "jpg"; + case IMAGE_JPEG: + return "jpeg"; + case IMAGE_BMP: + return "bmp"; + case IMAGE_GIF: + return "gif"; + default: + return ""; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java new file mode 100644 index 0000000..7f74ac2 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java @@ -0,0 +1,155 @@ +package com.ruoyi.common.utils.html; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 转义和反转义工具类 + * + * @author ruoyi + */ +public class EscapeUtil +{ + public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)"; + + private static final char[][] TEXT = new char[64][]; + + static + { + for (int i = 0; i < 64; i++) + { + TEXT[i] = new char[] { (char) i }; + } + + // special HTML characters + TEXT['\''] = "'".toCharArray(); // 单引号 + TEXT['"'] = """.toCharArray(); // 双引号 + TEXT['&'] = "&".toCharArray(); // &符 + TEXT['<'] = "<".toCharArray(); // 小于号 + TEXT['>'] = ">".toCharArray(); // 大于号 + } + + /** + * 转义文本中的HTML字符为安全的字符 + * + * @param text 被转义的文本 + * @return 转义后的文本 + */ + public static String escape(String text) + { + return encode(text); + } + + /** + * 还原被转义的HTML特殊字符 + * + * @param content 包含转义符的HTML内容 + * @return 转换后的字符串 + */ + public static String unescape(String content) + { + return decode(content); + } + + /** + * 清除所有HTML标签,但是不删除标签内的内容 + * + * @param content 文本 + * @return 清除标签后的文本 + */ + public static String clean(String content) + { + return new HTMLFilter().filter(content); + } + + /** + * Escape编码 + * + * @param text 被编码的文本 + * @return 编码后的字符 + */ + private static String encode(String text) + { + int len; + if ((text == null) || ((len = text.length()) == 0)) + { + return StringUtils.EMPTY; + } + StringBuilder buffer = new StringBuilder(len + (len >> 2)); + char c; + for (int i = 0; i < len; i++) + { + c = text.charAt(i); + if (c < 64) + { + buffer.append(TEXT[c]); + } + else + { + buffer.append(c); + } + } + return buffer.toString(); + } + + /** + * Escape解码 + * + * @param content 被转义的内容 + * @return 解码后的字符串 + */ + public static String decode(String content) + { + if (StringUtils.isEmpty(content)) + { + return content; + } + + StringBuilder tmp = new StringBuilder(content.length()); + int lastPos = 0, pos = 0; + char ch; + while (lastPos < content.length()) + { + pos = content.indexOf("%", lastPos); + if (pos == lastPos) + { + if (content.charAt(pos + 1) == 'u') + { + ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16); + tmp.append(ch); + lastPos = pos + 6; + } + else + { + ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16); + tmp.append(ch); + lastPos = pos + 3; + } + } + else + { + if (pos == -1) + { + tmp.append(content.substring(lastPos)); + lastPos = content.length(); + } + else + { + tmp.append(content.substring(lastPos, pos)); + lastPos = pos; + } + } + } + return tmp.toString(); + } + + public static void main(String[] args) + { + String html = ""; + // String html = "ipt>alert(\"XSS\")ipt>"; + // String html = "<123"; + // String html = "123>"; + System.out.println(EscapeUtil.clean(html)); + System.out.println(EscapeUtil.escape(html)); + System.out.println(EscapeUtil.unescape(html)); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java new file mode 100644 index 0000000..cd8cd4f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java @@ -0,0 +1,570 @@ +package com.ruoyi.common.utils.html; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * HTML过滤器,用于去除XSS漏洞隐患。 + * + * @author ruoyi + */ +public final class HTMLFilter +{ + /** + * regex flag union representing /si modifiers in php + **/ + private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL; + private static final Pattern P_COMMENTS = Pattern.compile("", Pattern.DOTALL); + private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI); + private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL); + private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI); + private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI); + private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI); + private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI); + private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI); + private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?"); + private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?"); + private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?"); + private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))"); + private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL); + private static final Pattern P_END_ARROW = Pattern.compile("^>"); + private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_AMP = Pattern.compile("&"); + private static final Pattern P_QUOTE = Pattern.compile("\""); + private static final Pattern P_LEFT_ARROW = Pattern.compile("<"); + private static final Pattern P_RIGHT_ARROW = Pattern.compile(">"); + private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>"); + + // @xxx could grow large... maybe use sesat's ReferenceMap + private static final ConcurrentMap P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>(); + private static final ConcurrentMap P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>(); + + /** + * set of allowed html elements, along with allowed attributes for each element + **/ + private final Map> vAllowed; + /** + * counts of open tags for each (allowable) html element + **/ + private final Map vTagCounts = new HashMap<>(); + + /** + * html elements which must always be self-closing (e.g. "") + **/ + private final String[] vSelfClosingTags; + /** + * html elements which must always have separate opening and closing tags (e.g. "") + **/ + private final String[] vNeedClosingTags; + /** + * set of disallowed html elements + **/ + private final String[] vDisallowed; + /** + * attributes which should be checked for valid protocols + **/ + private final String[] vProtocolAtts; + /** + * allowed protocols + **/ + private final String[] vAllowedProtocols; + /** + * tags which should be removed if they contain no content (e.g. "" or "") + **/ + private final String[] vRemoveBlanks; + /** + * entities allowed within html markup + **/ + private final String[] vAllowedEntities; + /** + * flag determining whether comments are allowed in input String. + */ + private final boolean stripComment; + private final boolean encodeQuotes; + /** + * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "" + * becomes " text "). If set to false, unbalanced angle brackets will be html escaped. + */ + private final boolean alwaysMakeTags; + + /** + * Default constructor. + */ + public HTMLFilter() + { + vAllowed = new HashMap<>(); + + final ArrayList a_atts = new ArrayList<>(); + a_atts.add("href"); + a_atts.add("target"); + vAllowed.put("a", a_atts); + + final ArrayList img_atts = new ArrayList<>(); + img_atts.add("src"); + img_atts.add("width"); + img_atts.add("height"); + img_atts.add("alt"); + vAllowed.put("img", img_atts); + + final ArrayList no_atts = new ArrayList<>(); + vAllowed.put("b", no_atts); + vAllowed.put("strong", no_atts); + vAllowed.put("i", no_atts); + vAllowed.put("em", no_atts); + + vSelfClosingTags = new String[] { "img" }; + vNeedClosingTags = new String[] { "a", "b", "strong", "i", "em" }; + vDisallowed = new String[] {}; + vAllowedProtocols = new String[] { "http", "mailto", "https" }; // no ftp. + vProtocolAtts = new String[] { "src", "href" }; + vRemoveBlanks = new String[] { "a", "b", "strong", "i", "em" }; + vAllowedEntities = new String[] { "amp", "gt", "lt", "quot" }; + stripComment = true; + encodeQuotes = true; + alwaysMakeTags = false; + } + + /** + * Map-parameter configurable constructor. + * + * @param conf map containing configuration. keys match field names. + */ + @SuppressWarnings("unchecked") + public HTMLFilter(final Map conf) + { + + assert conf.containsKey("vAllowed") : "configuration requires vAllowed"; + assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags"; + assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags"; + assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed"; + assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols"; + assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts"; + assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks"; + assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities"; + + vAllowed = Collections.unmodifiableMap((HashMap>) conf.get("vAllowed")); + vSelfClosingTags = (String[]) conf.get("vSelfClosingTags"); + vNeedClosingTags = (String[]) conf.get("vNeedClosingTags"); + vDisallowed = (String[]) conf.get("vDisallowed"); + vAllowedProtocols = (String[]) conf.get("vAllowedProtocols"); + vProtocolAtts = (String[]) conf.get("vProtocolAtts"); + vRemoveBlanks = (String[]) conf.get("vRemoveBlanks"); + vAllowedEntities = (String[]) conf.get("vAllowedEntities"); + stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true; + encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true; + alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true; + } + + private void reset() + { + vTagCounts.clear(); + } + + // --------------------------------------------------------------- + // my versions of some PHP library functions + public static String chr(final int decimal) + { + return String.valueOf((char) decimal); + } + + public static String htmlSpecialChars(final String s) + { + String result = s; + result = regexReplace(P_AMP, "&", result); + result = regexReplace(P_QUOTE, """, result); + result = regexReplace(P_LEFT_ARROW, "<", result); + result = regexReplace(P_RIGHT_ARROW, ">", result); + return result; + } + + // --------------------------------------------------------------- + + /** + * given a user submitted input String, filter out any invalid or restricted html. + * + * @param input text (i.e. submitted by a user) than may contain html + * @return "clean" version of input, with only valid, whitelisted html elements allowed + */ + public String filter(final String input) + { + reset(); + String s = input; + + s = escapeComments(s); + + s = balanceHTML(s); + + s = checkTags(s); + + s = processRemoveBlanks(s); + + // s = validateEntities(s); + + return s; + } + + public boolean isAlwaysMakeTags() + { + return alwaysMakeTags; + } + + public boolean isStripComments() + { + return stripComment; + } + + private String escapeComments(final String s) + { + final Matcher m = P_COMMENTS.matcher(s); + final StringBuffer buf = new StringBuffer(); + if (m.find()) + { + final String match = m.group(1); // (.*?) + m.appendReplacement(buf, Matcher.quoteReplacement("")); + } + m.appendTail(buf); + + return buf.toString(); + } + + private String balanceHTML(String s) + { + if (alwaysMakeTags) + { + // + // try and form html + // + s = regexReplace(P_END_ARROW, "", s); + // 不追加结束标签 + s = regexReplace(P_BODY_TO_END, "<$1>", s); + s = regexReplace(P_XML_CONTENT, "$1<$2", s); + + } + else + { + // + // escape stray brackets + // + s = regexReplace(P_STRAY_LEFT_ARROW, "<$1", s); + s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2><", s); + + // + // the last regexp causes '<>' entities to appear + // (we need to do a lookahead assertion so that the last bracket can + // be used in the next pass of the regexp) + // + s = regexReplace(P_BOTH_ARROWS, "", s); + } + + return s; + } + + private String checkTags(String s) + { + Matcher m = P_TAGS.matcher(s); + + final StringBuffer buf = new StringBuffer(); + while (m.find()) + { + String replaceStr = m.group(1); + replaceStr = processTag(replaceStr); + m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr)); + } + m.appendTail(buf); + + // these get tallied in processTag + // (remember to reset before subsequent calls to filter method) + final StringBuilder sBuilder = new StringBuilder(buf.toString()); + for (String key : vTagCounts.keySet()) + { + for (int ii = 0; ii < vTagCounts.get(key); ii++) + { + sBuilder.append(""); + } + } + s = sBuilder.toString(); + + return s; + } + + private String processRemoveBlanks(final String s) + { + String result = s; + for (String tag : vRemoveBlanks) + { + if (!P_REMOVE_PAIR_BLANKS.containsKey(tag)) + { + P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?>")); + } + result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result); + if (!P_REMOVE_SELF_BLANKS.containsKey(tag)) + { + P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>")); + } + result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result); + } + + return result; + } + + private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s) + { + Matcher m = regex_pattern.matcher(s); + return m.replaceAll(replacement); + } + + private String processTag(final String s) + { + // ending tags + Matcher m = P_END_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + if (allowed(name)) + { + if (false == inArray(name, vSelfClosingTags)) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) - 1); + return ""; + } + } + } + } + + // starting tags + m = P_START_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + final String body = m.group(2); + String ending = m.group(3); + + // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" ); + if (allowed(name)) + { + final StringBuilder params = new StringBuilder(); + + final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body); + final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body); + final List paramNames = new ArrayList<>(); + final List paramValues = new ArrayList<>(); + while (m2.find()) + { + paramNames.add(m2.group(1)); // ([a-z0-9]+) + paramValues.add(m2.group(3)); // (.*?) + } + while (m3.find()) + { + paramNames.add(m3.group(1)); // ([a-z0-9]+) + paramValues.add(m3.group(3)); // ([^\"\\s']+) + } + + String paramName, paramValue; + for (int ii = 0; ii < paramNames.size(); ii++) + { + paramName = paramNames.get(ii).toLowerCase(); + paramValue = paramValues.get(ii); + + // debug( "paramName='" + paramName + "'" ); + // debug( "paramValue='" + paramValue + "'" ); + // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) ); + + if (allowedAttribute(name, paramName)) + { + if (inArray(paramName, vProtocolAtts)) + { + paramValue = processParamProtocol(paramValue); + } + params.append(' ').append(paramName).append("=\"").append(paramValue).append("\""); + } + } + + if (inArray(name, vSelfClosingTags)) + { + ending = " /"; + } + + if (inArray(name, vNeedClosingTags)) + { + ending = ""; + } + + if (ending == null || ending.length() < 1) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) + 1); + } + else + { + vTagCounts.put(name, 1); + } + } + else + { + ending = " /"; + } + return "<" + name + params + ending + ">"; + } + else + { + return ""; + } + } + + // comments + m = P_COMMENT.matcher(s); + if (!stripComment && m.find()) + { + return "<" + m.group() + ">"; + } + + return ""; + } + + private String processParamProtocol(String s) + { + s = decodeEntities(s); + final Matcher m = P_PROTOCOL.matcher(s); + if (m.find()) + { + final String protocol = m.group(1); + if (!inArray(protocol, vAllowedProtocols)) + { + // bad protocol, turn into local anchor link instead + s = "#" + s.substring(protocol.length() + 1); + if (s.startsWith("#//")) + { + s = "#" + s.substring(3); + } + } + } + + return s; + } + + private String decodeEntities(String s) + { + StringBuffer buf = new StringBuffer(); + + Matcher m = P_ENTITY.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.decode(match).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENTITY_UNICODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENCODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + s = validateEntities(s); + return s; + } + + private String validateEntities(final String s) + { + StringBuffer buf = new StringBuffer(); + + // validate entities throughout the string + Matcher m = P_VALID_ENTITIES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // ([^&;]*) + final String two = m.group(2); // (?=(;|&|$)) + m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two))); + } + m.appendTail(buf); + + return encodeQuotes(buf.toString()); + } + + private String encodeQuotes(final String s) + { + if (encodeQuotes) + { + StringBuffer buf = new StringBuffer(); + Matcher m = P_VALID_QUOTES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // (>|^) + final String two = m.group(2); // ([^<]+?) + final String three = m.group(3); // (<|$) + // 不替换双引号为",防止json格式无效 regexReplace(P_QUOTE, """, two) + m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three)); + } + m.appendTail(buf); + return buf.toString(); + } + else + { + return s; + } + } + + private String checkEntity(final String preamble, final String term) + { + + return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&" + preamble; + } + + private boolean isValidEntity(final String entity) + { + return inArray(entity, vAllowedEntities); + } + + private static boolean inArray(final String s, final String[] array) + { + for (String item : array) + { + if (item != null && item.equals(s)) + { + return true; + } + } + return false; + } + + private boolean allowed(final String name) + { + return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed); + } + + private boolean allowedAttribute(final String name, final String paramName) + { + return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName)); + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpHelper.java new file mode 100644 index 0000000..dac60ad --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpHelper.java @@ -0,0 +1,55 @@ +package com.ruoyi.common.utils.http; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import javax.servlet.ServletRequest; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 通用http工具封装 + * + * @author ruoyi + */ +public class HttpHelper +{ + private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class); + + public static String getBodyString(ServletRequest request) + { + StringBuilder sb = new StringBuilder(); + BufferedReader reader = null; + try (InputStream inputStream = request.getInputStream()) + { + reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8"))); + String line = ""; + while ((line = reader.readLine()) != null) + { + sb.append(line); + } + } + catch (IOException e) + { + LOGGER.warn("getBodyString出现问题!"); + } + finally + { + if (reader != null) + { + try + { + reader.close(); + } + catch (IOException e) + { + LOGGER.error(ExceptionUtils.getMessage(e)); + } + } + } + return sb.toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java new file mode 100644 index 0000000..9aee92e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java @@ -0,0 +1,262 @@ +package com.ruoyi.common.utils.http; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLConnection; +import java.security.cert.X509Certificate; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.ruoyi.common.constant.Constants; + +/** + * 通用http发送方法 + * + * @author ruoyi + */ +public class HttpUtils +{ + private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param) + { + return sendGet(url, param, Constants.UTF8); + } + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @param contentType 编码类型 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param, String contentType) + { + StringBuilder result = new StringBuilder(); + BufferedReader in = null; + try + { + String urlNameString = url + "?" + param; + log.info("sendGet - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection connection = realUrl.openConnection(); + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + connection.connect(); + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (in != null) + { + in.close(); + } + } + catch (Exception ex) + { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) + { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try + { + String urlNameString = url; + log.info("sendPost - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (out != null) + { + out.close(); + } + if (in != null) + { + in.close(); + } + } + catch (IOException ex) + { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + public static String sendSSLPost(String url, String param) + { + StringBuilder result = new StringBuilder(); + String urlNameString = url + "?" + param; + try + { + log.info("sendSSLPost - {}", urlNameString); + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom()); + URL console = new URL(urlNameString); + HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + + conn.setSSLSocketFactory(sc.getSocketFactory()); + conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); + conn.connect(); + InputStream is = conn.getInputStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + String ret = ""; + while ((ret = br.readLine()) != null) + { + if (ret != null && !"".equals(ret.trim())) + { + result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8")); + } + } + log.info("recv - {}", result); + conn.disconnect(); + br.close(); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e); + } + return result.toString(); + } + + private static class TrustAnyTrustManager implements X509TrustManager + { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public X509Certificate[] getAcceptedIssuers() + { + return new X509Certificate[] {}; + } + } + + private static class TrustAnyHostnameVerifier implements HostnameVerifier + { + @Override + public boolean verify(String hostname, SSLSession session) + { + return true; + } + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java new file mode 100644 index 0000000..01c24fc --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java @@ -0,0 +1,56 @@ +package com.ruoyi.common.utils.ip; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.http.HttpUtils; + +/** + * 获取地址类 + * + * @author ruoyi + */ +public class AddressUtils +{ + private static final Logger log = LoggerFactory.getLogger(AddressUtils.class); + + // IP地址查询 + public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; + + // 未知地址 + public static final String UNKNOWN = "XX XX"; + + public static String getRealAddressByIP(String ip) + { + String address = UNKNOWN; + // 内网不查询 + if (IpUtils.internalIp(ip)) + { + return "内网IP"; + } + if (RuoYiConfig.isAddressEnabled()) + { + try + { + String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK); + if (StringUtils.isEmpty(rspStr)) + { + log.error("获取地理位置异常 {}", ip); + return UNKNOWN; + } + JSONObject obj = JSONObject.parseObject(rspStr); + String region = obj.getString("pro"); + String city = obj.getString("city"); + return String.format("%s %s", region, city); + } + catch (Exception e) + { + log.error("获取地理位置异常 {}", ip); + } + } + return address; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java new file mode 100644 index 0000000..1b3f42b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java @@ -0,0 +1,195 @@ +package com.ruoyi.common.utils.ip; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import javax.servlet.http.HttpServletRequest; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.html.EscapeUtil; + +/** + * 获取IP方法 + * + * @author ruoyi + */ +public class IpUtils +{ + public static String getIpAddr(HttpServletRequest request) + { + if (request == null) + { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getRemoteAddr(); + } + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : EscapeUtil.clean(ip); + } + + public static boolean internalIp(String ip) + { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || "127.0.0.1".equals(ip); + } + + private static boolean internalIp(byte[] addr) + { + if (StringUtils.isNull(addr) || addr.length < 2) + { + return true; + } + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) + { + case SECTION_1: + return true; + case SECTION_2: + if (b1 >= SECTION_3 && b1 <= SECTION_4) + { + return true; + } + case SECTION_5: + switch (b1) + { + case SECTION_6: + return true; + } + default: + return false; + } + } + + /** + * 将IPv4地址转换成字节 + * + * @param text IPv4地址 + * @return byte 字节 + */ + public static byte[] textToNumericFormatV4(String text) + { + if (text.length() == 0) + { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try + { + long l; + int i; + switch (elements.length) + { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) { + return null; + } + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) { + return null; + } + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) { + return null; + } + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } + catch (NumberFormatException e) + { + return null; + } + return bytes; + } + + public static String getHostIp() + { + try + { + return InetAddress.getLocalHost().getHostAddress(); + } + catch (UnknownHostException e) + { + } + return "127.0.0.1"; + } + + public static String getHostName() + { + try + { + return InetAddress.getLocalHost().getHostName(); + } + catch (UnknownHostException e) + { + } + return "未知"; + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java new file mode 100644 index 0000000..4862a4b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -0,0 +1,1256 @@ +package com.ruoyi.common.utils.poi; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; +import javax.servlet.http.HttpServletResponse; +import org.apache.poi.hssf.usermodel.HSSFClientAnchor; +import org.apache.poi.hssf.usermodel.HSSFPicture; +import org.apache.poi.hssf.usermodel.HSSFPictureData; +import org.apache.poi.hssf.usermodel.HSSFShape; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.ClientAnchor; +import org.apache.poi.ss.usermodel.DataValidation; +import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.ss.usermodel.DataValidationHelper; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.ss.usermodel.Drawing; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.PictureData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.apache.poi.xssf.usermodel.XSSFDrawing; +import org.apache.poi.xssf.usermodel.XSSFPicture; +import org.apache.poi.xssf.usermodel.XSSFShape; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.annotation.Excel.Type; +import com.ruoyi.common.annotation.Excels; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.exception.UtilException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.file.FileTypeUtils; +import com.ruoyi.common.utils.file.FileUtils; +import com.ruoyi.common.utils.file.ImageUtils; +import com.ruoyi.common.utils.reflect.ReflectUtils; + +/** + * Excel相关处理 + * + * @author ruoyi + */ +public class ExcelUtil +{ + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + + /** + * Excel sheet最大行数,默认65536 + */ + public static final int sheetSize = 65536; + + /** + * 工作表名称 + */ + private String sheetName; + + /** + * 导出类型(EXPORT:导出数据;IMPORT:导入模板) + */ + private Type type; + + /** + * 工作薄对象 + */ + private Workbook wb; + + /** + * 工作表对象 + */ + private Sheet sheet; + + /** + * 样式列表 + */ + private Map styles; + + /** + * 导入导出数据列表 + */ + private List list; + + /** + * 注解列表 + */ + private List fields; + + /** + * 最大高度 + */ + private short maxHeight; + + /** + * 统计列表 + */ + private Map statistics = new HashMap(); + + /** + * 数字格式 + */ + private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); + + /** + * 实体对象 + */ + public Class clazz; + + public ExcelUtil(Class clazz) + { + this.clazz = clazz; + } + + public void init(List list, String sheetName, Type type) + { + if (list == null) + { + list = new ArrayList(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + createExcelField(); + createWorkbook(); + } + + /** + * 对excel表单默认第一个索引名转换成list + * + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(InputStream is) throws Exception + { + return importExcel(StringUtils.EMPTY, is); + } + + /** + * 对excel表单指定表格索引名转换成list + * + * @param sheetName 表格索引名 + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(String sheetName, InputStream is) throws Exception + { + this.type = Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List list = new ArrayList(); + // 如果指定sheet名,则取指定sheet中的内容 否则默认指向第1个sheet + Sheet sheet = StringUtils.isNotEmpty(sheetName) ? wb.getSheet(sheetName) : wb.getSheetAt(0); + if (sheet == null) + { + throw new IOException("文件sheet不存在"); + } + boolean isXSSFWorkbook = !(wb instanceof HSSFWorkbook); + Map pictures; + if (isXSSFWorkbook) + { + pictures = getSheetPictures07((XSSFSheet) sheet, (XSSFWorkbook) wb); + } + else + { + pictures = getSheetPictures03((HSSFSheet) sheet, (HSSFWorkbook) wb); + } + // 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1 + int rows = sheet.getLastRowNum(); + + if (rows > 0) + { + // 定义一个map用于存放excel列的序号和field. + Map cellMap = new HashMap(); + // 获取表头 + Row heard = sheet.getRow(0); + for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) + { + Cell cell = heard.getCell(i); + if (StringUtils.isNotNull(cell)) + { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } + else + { + cellMap.put(null, i); + } + } + // 有数据时才处理 得到类的所有field. + Field[] allFields = clazz.getDeclaredFields(); + // 定义一个map用于存放列的序号和field. + Map fieldsMap = new HashMap(); + for (int col = 0; col < allFields.length; col++) + { + Field field = allFields[col]; + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + // 设置类的私有字段属性可访问. + field.setAccessible(true); + Integer column = cellMap.get(attr.name()); + if (column != null) + { + fieldsMap.put(column, field); + } + } + } + for (int i = 1; i <= rows; i++) + { + // 从第2行开始取数据,默认第一行是表头. + Row row = sheet.getRow(i); + // 判断当前行是否是空行 + if (isRowEmpty(row)) + { + continue; + } + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) + { + Object val = this.getCellValue(row, entry.getKey()); + + // 如果不存在实例则新建. + entity = (entity == null ? clazz.newInstance() : entity); + // 从map中得到对应列的field. + Field field = fieldsMap.get(entry.getKey()); + // 取得类型,并根据对象类型设置值. + Class fieldType = field.getType(); + if (String.class == fieldType) + { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) + { + val = StringUtils.substringBefore(s, ".0"); + } + else + { + String dateFormat = field.getAnnotation(Excel.class).dateFormat(); + if (StringUtils.isNotEmpty(dateFormat)) + { + val = DateUtils.parseDateToStr(dateFormat, (Date) val); + } + else + { + val = Convert.toStr(val); + } + } + } + else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) + { + val = Convert.toInt(val); + } + else if (Long.TYPE == fieldType || Long.class == fieldType) + { + val = Convert.toLong(val); + } + else if (Double.TYPE == fieldType || Double.class == fieldType) + { + val = Convert.toDouble(val); + } + else if (Float.TYPE == fieldType || Float.class == fieldType) + { + val = Convert.toFloat(val); + } + else if (BigDecimal.class == fieldType) + { + val = Convert.toBigDecimal(val); + } + else if (Date.class == fieldType) + { + if (val instanceof String) + { + val = DateUtils.parseDate(val); + } + else if (val instanceof Double) + { + val = DateUtil.getJavaDate((Double) val); + } + } + else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) + { + val = Convert.toBool(val, false); + } + if (StringUtils.isNotNull(fieldType)) + { + Excel attr = field.getAnnotation(Excel.class); + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) + { + propertyName = field.getName() + "." + attr.targetAttr(); + } + else if (StringUtils.isNotEmpty(attr.readConverterExp())) + { + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); + } + else if (StringUtils.isNotEmpty(attr.dictType())) + { + val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); + } + else if (ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures)) + { + PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey()); + if (image == null) + { + val = ""; + } + byte[] data = image.getData(); + val = FileUtils.writeImportBytes(data); + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + } + list.add(entity); + } + } + return list; + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @return 结果 + */ + public AjaxResult exportExcel(List list, String sheetName) + { + this.init(list, sheetName, Type.EXPORT); + return exportExcel(); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param response 返回数据 + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @return 结果 + * @throws IOException + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName) throws IOException + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(list, sheetName, Type.EXPORT); + exportExcel(response.getOutputStream()); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @return 结果 + */ + public AjaxResult importTemplateExcel(String sheetName) + { + this.init(null, sheetName, Type.IMPORT); + return exportExcel(); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @return 结果 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName) throws IOException + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(null, sheetName, Type.IMPORT); + exportExcel(response.getOutputStream()); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @return 结果 + */ + public void exportExcel(OutputStream out) + { + try + { + writeSheet(); + wb.write(out); + } + catch (Exception e) + { + log.error("导出Excel异常{}", e.getMessage()); + } + finally + { + IOUtils.closeQuietly(wb); + IOUtils.closeQuietly(out); + } + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @return 结果 + */ + public AjaxResult exportExcel() + { + OutputStream out = null; + try + { + writeSheet(); + String filename = encodingFilename(sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return AjaxResult.success(filename); + } + catch (Exception e) + { + log.error("导出Excel异常{}", e.getMessage()); + throw new UtilException("导出Excel失败,请联系网站管理员!"); + } + finally + { + IOUtils.closeQuietly(wb); + IOUtils.closeQuietly(out); + } + } + + /** + * 创建写入数据到Sheet + */ + public void writeSheet() + { + // 取出一共有多少个sheet. + double sheetNo = Math.ceil(list.size() / sheetSize); + for (int index = 0; index <= sheetNo; index++) + { + createSheet(sheetNo, index); + + // 产生一行 + Row row = sheet.createRow(0); + int column = 0; + // 写入各个字段的列头名称 + for (Object[] os : fields) + { + Excel excel = (Excel) os[1]; + this.createCell(excel, row, column++); + } + if (Type.EXPORT.equals(type)) + { + fillExcelData(index, row); + addStatisticsRow(); + } + } + } + + /** + * 填充excel数据 + * + * @param index 序号 + * @param row 单元格行 + */ + public void fillExcelData(int index, Row row) + { + int startNo = index * sheetSize; + int endNo = Math.min(startNo + sheetSize, list.size()); + for (int i = startNo; i < endNo; i++) + { + row = sheet.createRow(i + 1 - startNo); + // 得到导出对象. + T vo = (T) list.get(i); + int column = 0; + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 设置实体类私有属性可访问 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++); + } + } + } + + /** + * 创建表格样式 + * + * @param wb 工作薄对象 + * @return 样式列表 + */ + private Map createStyles(Workbook wb) + { + // 写入各条记录,每条记录对应excel表中的一行 + Map styles = new HashMap(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); + styles.put("data", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("Arial"); + headerFont.setFontHeightInPoints((short) 10); + headerFont.setBold(true); + headerFont.setColor(IndexedColors.WHITE.getIndex()); + style.setFont(headerFont); + styles.put("header", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font totalFont = wb.createFont(); + totalFont.setFontName("Arial"); + totalFont.setFontHeightInPoints((short) 10); + style.setFont(totalFont); + styles.put("total", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.LEFT); + styles.put("data1", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + styles.put("data2", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.RIGHT); + styles.put("data3", style); + + return styles; + } + + /** + * 创建单元格 + */ + public Cell createCell(Excel attr, Row row, int column) + { + // 创建列 + Cell cell = row.createCell(column); + // 写入列信息 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column); + cell.setCellStyle(styles.get("header")); + return cell; + } + + /** + * 设置单元格信息 + * + * @param value 单元格值 + * @param attr 注解相关 + * @param cell 单元格信息 + */ + public void setCellVo(Object value, Excel attr, Cell cell) + { + if (ColumnType.STRING == attr.cellType()) + { + cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); + } + else if (ColumnType.NUMERIC == attr.cellType()) + { + if (StringUtils.isNotNull(value)) + { + cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); + } + } + else if (ColumnType.IMAGE == attr.cellType()) + { + ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1); + String imagePath = Convert.toStr(value); + if (StringUtils.isNotEmpty(imagePath)) + { + byte[] data = ImageUtils.getImage(imagePath); + getDrawingPatriarch(cell.getSheet()).createPicture(anchor, + cell.getSheet().getWorkbook().addPicture(data, getImageType(data))); + } + } + } + + /** + * 获取画布 + */ + public static Drawing getDrawingPatriarch(Sheet sheet) + { + if (sheet.getDrawingPatriarch() == null) + { + sheet.createDrawingPatriarch(); + } + return sheet.getDrawingPatriarch(); + } + + /** + * 获取图片类型,设置图片插入类型 + */ + public int getImageType(byte[] value) + { + String type = FileTypeUtils.getFileExtendName(value); + if ("JPG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_JPEG; + } + else if ("PNG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_PNG; + } + return Workbook.PICTURE_TYPE_JPEG; + } + + /** + * 创建表格样式 + */ + public void setDataValidation(Excel attr, Row row, int column) + { + if (attr.name().indexOf("注:") >= 0) + { + sheet.setColumnWidth(column, 6000); + } + else + { + // 设置列宽 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); + } + // 如果设置了提示信息则鼠标放上去提示. + if (StringUtils.isNotEmpty(attr.prompt())) + { + // 这里默认设了2-101列提示. + setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); + } + // 如果设置了combo属性则本列只能选择不能输入 + if (attr.combo().length > 0) + { + // 这里默认设了2-101列只能选择不能输入. + setXSSFValidation(sheet, attr.combo(), 1, 100, column, column); + } + } + + /** + * 添加单元格 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column) + { + Cell cell = null; + try + { + // 设置行高 + row.setHeight(maxHeight); + // 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列. + if (attr.isExport()) + { + // 创建cell + cell = row.createCell(column); + int align = attr.align().value(); + cell.setCellStyle(styles.get("data" + (align >= 1 && align <= 3 ? align : ""))); + + // 用于读取对象中的属性 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + String separator = attr.separator(); + String dictType = attr.dictType(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) + { + cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value)); + } + else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) + { + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); + } + else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value)) + { + cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator)); + } + else if (value instanceof BigDecimal && -1 != attr.scale()) + { + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString()); + } + else + { + // 设置列类型 + setCellVo(value, attr, cell); + } + addStatisticsData(column, Convert.toStr(value), attr); + } + } + catch (Exception e) + { + log.error("导出Excel失败{}", e); + } + return cell; + } + + /** + * 设置 POI XSSFSheet 单元格提示 + * + * @param sheet 表单 + * @param promptTitle 提示标题 + * @param promptContent 提示内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + dataValidation.createPromptBox(promptTitle, promptContent); + dataValidation.setShowPromptBox(true); + sheet.addValidationData(dataValidation); + } + + /** + * 设置某些列的值只能输入预制的数据,显示下拉框. + * + * @param sheet 要设置的sheet. + * @param textlist 下拉框显示的内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + * @return 设置好的sheet. + */ + public void setXSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 加载下拉列表内容 + DataValidationConstraint constraint = helper.createExplicitListConstraint(textlist); + // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 数据有效性对象 + DataValidation dataValidation = helper.createValidation(constraint, regions); + // 处理Excel兼容性问题 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + } + + /** + * 解析导出值 0=男,1=女,2=未知 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String convertByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(separator, propertyValue)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[0].equals(value)) + { + propertyString.append(itemArray[1] + separator); + break; + } + } + } + else + { + if (itemArray[0].equals(propertyValue)) + { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 反向解析值 男=0,女=1,未知=2 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String reverseByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(separator, propertyValue)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[1].equals(value)) + { + propertyString.append(itemArray[0] + separator); + break; + } + } + } + else + { + if (itemArray[1].equals(propertyValue)) + { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 解析字典值 + * + * @param dictValue 字典值 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典标签 + */ + public static String convertDictByExp(String dictValue, String dictType, String separator) + { + return DictUtils.getDictLabel(dictType, dictValue, separator); + } + + /** + * 反向解析值字典值 + * + * @param dictLabel 字典标签 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典值 + */ + public static String reverseDictByExp(String dictLabel, String dictType, String separator) + { + return DictUtils.getDictValue(dictType, dictLabel, separator); + } + + /** + * 合计统计信息 + */ + private void addStatisticsData(Integer index, String text, Excel entity) + { + if (entity != null && entity.isStatistics()) + { + Double temp = 0D; + if (!statistics.containsKey(index)) + { + statistics.put(index, temp); + } + try + { + temp = Double.valueOf(text); + } + catch (NumberFormatException e) + { + } + statistics.put(index, statistics.get(index) + temp); + } + } + + /** + * 创建统计行 + */ + public void addStatisticsRow() + { + if (statistics.size() > 0) + { + Row row = sheet.createRow(sheet.getLastRowNum() + 1); + Set keys = statistics.keySet(); + Cell cell = row.createCell(0); + cell.setCellStyle(styles.get("total")); + cell.setCellValue("合计"); + + for (Integer key : keys) + { + cell = row.createCell(key); + cell.setCellStyle(styles.get("total")); + cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key))); + } + statistics.clear(); + } + } + + /** + * 编码文件名 + */ + public String encodingFilename(String filename) + { + filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx"; + return filename; + } + + /** + * 获取下载路径 + * + * @param filename 文件名称 + */ + public String getAbsoluteFile(String filename) + { + String downloadPath = RuoYiConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + return downloadPath; + } + + /** + * 获取bean中的属性值 + * + * @param vo 实体对象 + * @param field 字段 + * @param excel 注解 + * @return 最终的属性值 + * @throws Exception + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception + { + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())) + { + String target = excel.targetAttr(); + if (target.indexOf(".") > -1) + { + String[] targets = target.split("[.]"); + for (String name : targets) + { + o = getValue(o, name); + } + } + else + { + o = getValue(o, target); + } + } + return o; + } + + /** + * 以类的属性的get方法方法形式获取值 + * + * @param o + * @param name + * @return value + * @throws Exception + */ + private Object getValue(Object o, String name) throws Exception + { + if (StringUtils.isNotNull(o) && StringUtils.isNotEmpty(name)) + { + Class clazz = o.getClass(); + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + o = field.get(o); + } + return o; + } + + /** + * 得到所有定义字段 + */ + private void createExcelField() + { + this.fields = new ArrayList(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) + { + // 单注解 + if (field.isAnnotationPresent(Excel.class)) + { + putToField(field, field.getAnnotation(Excel.class)); + } + + // 多注解 + if (field.isAnnotationPresent(Excels.class)) + { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel excel : excels) + { + putToField(field, excel); + } + } + } + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + this.maxHeight = getRowHeight(); + } + + /** + * 根据注解获取最大行高 + */ + public short getRowHeight() + { + double maxHeight = 0; + for (Object[] os : this.fields) + { + Excel excel = (Excel) os[1]; + maxHeight = maxHeight > excel.height() ? maxHeight : excel.height(); + } + return (short) (maxHeight * 20); + } + + /** + * 放到字段集合中 + */ + private void putToField(Field field, Excel attr) + { + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + this.fields.add(new Object[] { field, attr }); + } + } + + /** + * 创建一个工作簿 + */ + public void createWorkbook() + { + this.wb = new SXSSFWorkbook(500); + } + + /** + * 创建工作表 + * + * @param sheetNo sheet数量 + * @param index 序号 + */ + public void createSheet(double sheetNo, int index) + { + this.sheet = wb.createSheet(); + this.styles = createStyles(wb); + // 设置工作表的名称. + if (sheetNo == 0) + { + wb.setSheetName(index, sheetName); + } + else + { + wb.setSheetName(index, sheetName + index); + } + } + + /** + * 获取单元格值 + * + * @param row 获取的行 + * @param column 获取单元格列号 + * @return 单元格值 + */ + public Object getCellValue(Row row, int column) + { + if (row == null) + { + return row; + } + Object val = ""; + try + { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) + { + if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) + { + val = cell.getNumericCellValue(); + if (DateUtil.isCellDateFormatted(cell)) + { + val = DateUtil.getJavaDate((Double) val); // POI Excel 日期格式转换 + } + else + { + if ((Double) val % 1 != 0) + { + val = new BigDecimal(val.toString()); + } + else + { + val = new DecimalFormat("0").format(val); + } + } + } + else if (cell.getCellType() == CellType.STRING) + { + val = cell.getStringCellValue(); + } + else if (cell.getCellType() == CellType.BOOLEAN) + { + val = cell.getBooleanCellValue(); + } + else if (cell.getCellType() == CellType.ERROR) + { + val = cell.getErrorCellValue(); + } + + } + } + catch (Exception e) + { + return val; + } + return val; + } + + /** + * 判断是否是空行 + * + * @param row 判断的行 + * @return + */ + private boolean isRowEmpty(Row row) + { + if (row == null) + { + return true; + } + for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) + { + Cell cell = row.getCell(i); + if (cell != null && cell.getCellType() != CellType.BLANK) + { + return false; + } + } + return true; + } + + /** + * 获取Excel2003图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + List pictures = workbook.getAllPictures(); + if (!pictures.isEmpty()) + { + for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) + { + HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); + if (shape instanceof HSSFPicture) + { + HSSFPicture pic = (HSSFPicture) shape; + int pictureIndex = pic.getPictureIndex() - 1; + HSSFPictureData picData = pictures.get(pictureIndex); + String picIndex = String.valueOf(anchor.getRow1()) + "_" + String.valueOf(anchor.getCol1()); + sheetIndexPicMap.put(picIndex, picData); + } + } + return sheetIndexPicMap; + } + else + { + return sheetIndexPicMap; + } + } + + /** + * 获取Excel2007图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + for (POIXMLDocumentPart dr : sheet.getRelations()) + { + if (dr instanceof XSSFDrawing) + { + XSSFDrawing drawing = (XSSFDrawing) dr; + List shapes = drawing.getShapes(); + for (XSSFShape shape : shapes) + { + if (shape instanceof XSSFPicture) + { + XSSFPicture pic = (XSSFPicture) shape; + XSSFClientAnchor anchor = pic.getPreferredSize(); + CTMarker ctMarker = anchor.getFrom(); + String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol(); + sheetIndexPicMap.put(picIndex, pic.getPictureData()); + } + } + } + } + return sheetIndexPicMap; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java new file mode 100644 index 0000000..b19953e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java @@ -0,0 +1,410 @@ +package com.ruoyi.common.utils.reflect; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Date; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.poi.ss.usermodel.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.utils.DateUtils; + +/** + * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数. + * + * @author ruoyi + */ +@SuppressWarnings("rawtypes") +public class ReflectUtils +{ + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + + private static final String CGLIB_CLASS_SEPARATOR = "$$"; + + private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); + + /** + * 调用Getter方法. + * 支持多级,如:对象名.对象名.方法 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter(Object obj, String propertyName) + { + Object object = obj; + for (String name : StringUtils.split(propertyName, ".")) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + return (E) object; + } + + /** + * 调用Setter方法, 仅匹配方法名。 + * 支持多级,如:对象名.对象名.方法 + */ + public static void invokeSetter(Object obj, String propertyName, E value) + { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0; i < names.length; i++) + { + if (i < names.length - 1) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + else + { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + invokeMethodByName(object, setterMethodName, new Object[] { value }); + } + } + } + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + */ + @SuppressWarnings("unchecked") + public static E getFieldValue(final Object obj, final String fieldName) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return null; + } + E result = null; + try + { + result = (E) field.get(obj); + } + catch (IllegalAccessException e) + { + logger.error("不可能抛出的异常{}", e.getMessage()); + } + return result; + } + + /** + * 直接设置对象属性值, 无视private/protected修饰符, 不经过setter函数. + */ + public static void setFieldValue(final Object obj, final String fieldName, final E value) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + // throw new IllegalArgumentException("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return; + } + try + { + field.set(obj, value); + } + catch (IllegalAccessException e) + { + logger.error("不可能抛出的异常: {}", e.getMessage()); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符. + * 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用. + * 同时匹配方法名+参数类型, + */ + @SuppressWarnings("unchecked") + public static E invokeMethod(final Object obj, final String methodName, final Class[] parameterTypes, + final Object[] args) + { + if (obj == null || methodName == null) + { + return null; + } + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) + { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try + { + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符, + * 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用. + * 只匹配函数名,如果有多个同名函数调用第一个。 + */ + @SuppressWarnings("unchecked") + public static E invokeMethodByName(final Object obj, final String methodName, final Object[] args) + { + Method method = getAccessibleMethodByName(obj, methodName, args.length); + if (method == null) + { + // 如果为空不报错,直接返回空。 + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try + { + // 类型转换(将参数数据类型转换为目标方法参数类型) + Class[] cs = method.getParameterTypes(); + for (int i = 0; i < cs.length; i++) + { + if (args[i] != null && !args[i].getClass().equals(cs[i])) + { + if (cs[i] == String.class) + { + args[i] = Convert.toStr(args[i]); + if (StringUtils.endsWith((String) args[i], ".0")) + { + args[i] = StringUtils.substringBefore((String) args[i], ".0"); + } + } + else if (cs[i] == Integer.class) + { + args[i] = Convert.toInt(args[i]); + } + else if (cs[i] == Long.class) + { + args[i] = Convert.toLong(args[i]); + } + else if (cs[i] == Double.class) + { + args[i] = Convert.toDouble(args[i]); + } + else if (cs[i] == Float.class) + { + args[i] = Convert.toFloat(args[i]); + } + else if (cs[i] == Date.class) + { + if (args[i] instanceof String) + { + args[i] = DateUtils.parseDate(args[i]); + } + else + { + args[i] = DateUtil.getJavaDate((Double) args[i]); + } + } + else if (cs[i] == boolean.class || cs[i] == Boolean.class) + { + args[i] = Convert.toBool(args[i]); + } + } + } + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + */ + public static Field getAccessibleField(final Object obj, final String fieldName) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(fieldName, "fieldName can't be blank"); + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) + { + try + { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } + catch (NoSuchFieldException e) + { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 匹配函数名+参数类型。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethod(final Object obj, final String methodName, + final Class... parameterTypes) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + try + { + Method method = searchType.getDeclaredMethod(methodName, parameterTypes); + makeAccessible(method); + return method; + } + catch (NoSuchMethodException e) + { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 只匹配函数名。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethodByName(final Object obj, final String methodName, int argsNum) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + Method[] methods = searchType.getDeclaredMethods(); + for (Method method : methods) + { + if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) + { + makeAccessible(method); + return method; + } + } + } + return null; + } + + /** + * 改变private/protected的方法为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Method method) + { + if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) + && !method.isAccessible()) + { + method.setAccessible(true); + } + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Field field) + { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) + || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) + { + field.setAccessible(true); + } + } + + /** + * 通过反射, 获得Class定义中声明的泛型参数的类型, 注意泛型必须定义在父类处 + * 如无法找到, 返回Object.class. + */ + @SuppressWarnings("unchecked") + public static Class getClassGenricType(final Class clazz) + { + return getClassGenricType(clazz, 0); + } + + /** + * 通过反射, 获得Class定义中声明的父类的泛型参数的类型. + * 如无法找到, 返回Object.class. + */ + public static Class getClassGenricType(final Class clazz, final int index) + { + Type genType = clazz.getGenericSuperclass(); + + if (!(genType instanceof ParameterizedType)) + { + logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType"); + return Object.class; + } + + Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); + + if (index >= params.length || index < 0) + { + logger.debug("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + + params.length); + return Object.class; + } + if (!(params[index] instanceof Class)) + { + logger.debug(clazz.getSimpleName() + " not set the actual class on superclass generic parameter"); + return Object.class; + } + + return (Class) params[index]; + } + + public static Class getUserClass(Object instance) + { + if (instance == null) + { + throw new RuntimeException("Instance must not be null"); + } + Class clazz = instance.getClass(); + if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) + { + Class superClass = clazz.getSuperclass(); + if (superClass != null && !Object.class.equals(superClass)) + { + return superClass; + } + } + return clazz; + + } + + /** + * 将反射时的checked exception转换为unchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e) + { + if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) + { + return new IllegalArgumentException(msg, e); + } + else if (e instanceof InvocationTargetException) + { + return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException()); + } + return new RuntimeException(msg, e); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java new file mode 100644 index 0000000..ca1cd92 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java @@ -0,0 +1,291 @@ +package com.ruoyi.common.utils.sign; + +/** + * Base64工具类 + * + * @author ruoyi + */ +public final class Base64 +{ + static private final int BASELENGTH = 128; + static private final int LOOKUPLENGTH = 64; + static private final int TWENTYFOURBITGROUP = 24; + static private final int EIGHTBIT = 8; + static private final int SIXTEENBIT = 16; + static private final int FOURBYTE = 4; + static private final int SIGN = -128; + static private final char PAD = '='; + static final private byte[] base64Alphabet = new byte[BASELENGTH]; + static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; + + static + { + for (int i = 0; i < BASELENGTH; ++i) + { + base64Alphabet[i] = -1; + } + for (int i = 'Z'; i >= 'A'; i--) + { + base64Alphabet[i] = (byte) (i - 'A'); + } + for (int i = 'z'; i >= 'a'; i--) + { + base64Alphabet[i] = (byte) (i - 'a' + 26); + } + + for (int i = '9'; i >= '0'; i--) + { + base64Alphabet[i] = (byte) (i - '0' + 52); + } + + base64Alphabet['+'] = 62; + base64Alphabet['/'] = 63; + + for (int i = 0; i <= 25; i++) + { + lookUpBase64Alphabet[i] = (char) ('A' + i); + } + + for (int i = 26, j = 0; i <= 51; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('a' + j); + } + + for (int i = 52, j = 0; i <= 61; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('0' + j); + } + lookUpBase64Alphabet[62] = (char) '+'; + lookUpBase64Alphabet[63] = (char) '/'; + } + + private static boolean isWhiteSpace(char octect) + { + return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); + } + + private static boolean isPad(char octect) + { + return (octect == PAD); + } + + private static boolean isData(char octect) + { + return (octect < BASELENGTH && base64Alphabet[octect] != -1); + } + + /** + * Encodes hex octects into Base64 + * + * @param binaryData Array containing binaryData + * @return Encoded Base64 array + */ + public static String encode(byte[] binaryData) + { + if (binaryData == null) + { + return null; + } + + int lengthDataBits = binaryData.length * EIGHTBIT; + if (lengthDataBits == 0) + { + return ""; + } + + int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; + int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; + int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; + char encodedData[] = null; + + encodedData = new char[numberQuartet * 4]; + + byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; + + int encodedIndex = 0; + int dataIndex = 0; + + for (int i = 0; i < numberTriplets; i++) + { + b1 = binaryData[dataIndex++]; + b2 = binaryData[dataIndex++]; + b3 = binaryData[dataIndex++]; + + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; + } + + // form integral number of 6-bit groups + if (fewerThan24bits == EIGHTBIT) + { + b1 = binaryData[dataIndex]; + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; + encodedData[encodedIndex++] = PAD; + encodedData[encodedIndex++] = PAD; + } + else if (fewerThan24bits == SIXTEENBIT) + { + b1 = binaryData[dataIndex]; + b2 = binaryData[dataIndex + 1]; + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; + encodedData[encodedIndex++] = PAD; + } + return new String(encodedData); + } + + /** + * Decodes Base64 data into octects + * + * @param encoded string containing Base64 data + * @return Array containind decoded data. + */ + public static byte[] decode(String encoded) + { + if (encoded == null) + { + return null; + } + + char[] base64Data = encoded.toCharArray(); + // remove white spaces + int len = removeWhiteSpace(base64Data); + + if (len % FOURBYTE != 0) + { + return null;// should be divisible by four + } + + int numberQuadruple = (len / FOURBYTE); + + if (numberQuadruple == 0) + { + return new byte[0]; + } + + byte decodedData[] = null; + byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; + char d1 = 0, d2 = 0, d3 = 0, d4 = 0; + + int i = 0; + int encodedIndex = 0; + int dataIndex = 0; + decodedData = new byte[(numberQuadruple) * 3]; + + for (; i < numberQuadruple - 1; i++) + { + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) + || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) + { + return null; + } // if found "no data" just return null + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + } + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) + { + return null;// if found "no data" just return null + } + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + + d3 = base64Data[dataIndex++]; + d4 = base64Data[dataIndex++]; + if (!isData((d3)) || !isData((d4))) + {// Check if they are PAD characters + if (isPad(d3) && isPad(d4)) + { + if ((b2 & 0xf) != 0)// last 4 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 1]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); + return tmp; + } + else if (!isPad(d3) && isPad(d4)) + { + b3 = base64Alphabet[d3]; + if ((b3 & 0x3) != 0)// last 2 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 2]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + return tmp; + } + else + { + return null; + } + } + else + { // No PAD e.g 3cQl + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + + } + return decodedData; + } + + /** + * remove WhiteSpace from MIME containing encoded Base64 data. + * + * @param data the byte array of base64 data (with WS) + * @return the new length + */ + private static int removeWhiteSpace(char[] data) + { + if (data == null) + { + return 0; + } + + // count characters that's not whitespace + int newSize = 0; + int len = data.length; + for (int i = 0; i < len; i++) + { + if (!isWhiteSpace(data[i])) + { + data[newSize++] = data[i]; + } + } + return newSize; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java new file mode 100644 index 0000000..de77ee8 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java @@ -0,0 +1,66 @@ +package com.ruoyi.common.utils.sign; + +import java.security.MessageDigest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Md5加密方法 + * + * @author ruoyi + */ +public class Md5Utils +{ + private static final Logger log = LoggerFactory.getLogger(Md5Utils.class); + + private static byte[] md5(String s) + { + MessageDigest algorithm; + try + { + algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(s.getBytes("UTF-8")); + byte[] messageDigest = algorithm.digest(); + return messageDigest; + } + catch (Exception e) + { + log.error("MD5 Error...", e); + } + return null; + } + + private static final String toHex(byte hash[]) + { + if (hash == null) + { + return null; + } + StringBuffer buf = new StringBuffer(hash.length * 2); + int i; + + for (i = 0; i < hash.length; i++) + { + if ((hash[i] & 0xff) < 0x10) + { + buf.append("0"); + } + buf.append(Long.toString(hash[i] & 0xff, 16)); + } + return buf.toString(); + } + + public static String hash(String s) + { + try + { + return new String(toHex(md5(s)).getBytes("UTF-8"), "UTF-8"); + } + catch (Exception e) + { + log.error("not supported charset...{}", e); + return s; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java new file mode 100644 index 0000000..9993b98 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java @@ -0,0 +1,146 @@ +package com.ruoyi.common.utils.spring; + +import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; +import com.ruoyi.common.utils.StringUtils; + +/** + * spring工具类 方便在非spring管理环境中获取bean + * + * @author ruoyi + */ +@Component +public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware +{ + /** Spring应用上下文环境 */ + private static ConfigurableListableBeanFactory beanFactory; + + private static ApplicationContext applicationContext; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException + { + SpringUtils.beanFactory = beanFactory; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException + { + SpringUtils.applicationContext = applicationContext; + } + + /** + * 获取对象 + * + * @param name + * @return Object 一个以所给名字注册的bean的实例 + * @throws org.springframework.beans.BeansException + * + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException + { + return (T) beanFactory.getBean(name); + } + + /** + * 获取类型为requiredType的对象 + * + * @param clz + * @return + * @throws org.springframework.beans.BeansException + * + */ + public static T getBean(Class clz) throws BeansException + { + T result = (T) beanFactory.getBean(clz); + return result; + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) + { + return beanFactory.containsBean(name); + } + + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * @return boolean + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.isSingleton(name); + } + + /** + * @param name + * @return Class 注册对象的类型 + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getType(name); + } + + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + * @return + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getAliases(name); + } + + /** + * 获取aop代理对象 + * + * @param invoker + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy(T invoker) + { + return (T) AopContext.currentProxy(); + } + + /** + * 获取当前的环境配置,无配置返回null + * + * @return 当前的环境配置 + */ + public static String[] getActiveProfiles() + { + return applicationContext.getEnvironment().getActiveProfiles(); + } + + /** + * 获取当前的环境配置,当有多个环境配置时,只获取第一个 + * + * @return 当前的环境配置 + */ + public static String getActiveProfile() + { + final String[] activeProfiles = getActiveProfiles(); + return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java new file mode 100644 index 0000000..a198946 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java @@ -0,0 +1,37 @@ +package com.ruoyi.common.utils.sql; + +import com.ruoyi.common.exception.UtilException; +import com.ruoyi.common.utils.StringUtils; + +/** + * sql操作工具类 + * + * @author ruoyi + */ +public class SqlUtil +{ + /** + * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序) + */ + public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+"; + + /** + * 检查字符,防止注入绕过 + */ + public static String escapeOrderBySql(String value) + { + if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) + { + throw new UtilException("参数不符合规范,不能进行查询"); + } + return value; + } + + /** + * 验证 order by 语法是否符合规范 + */ + public static boolean isValidOrderBySql(String value) + { + return value.matches(SQL_PATTERN); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java new file mode 100644 index 0000000..2c84427 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java @@ -0,0 +1,49 @@ +package com.ruoyi.common.utils.uuid; + +/** + * ID生成器工具类 + * + * @author ruoyi + */ +public class IdUtils +{ + /** + * 获取随机UUID + * + * @return 随机UUID + */ + public static String randomUUID() + { + return UUID.randomUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线 + * + * @return 简化的UUID,去掉了横线 + */ + public static String simpleUUID() + { + return UUID.randomUUID().toString(true); + } + + /** + * 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 随机UUID + */ + public static String fastUUID() + { + return UUID.fastUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 简化的UUID,去掉了横线 + */ + public static String fastSimpleUUID() + { + return UUID.fastUUID().toString(true); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java new file mode 100644 index 0000000..062d633 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java @@ -0,0 +1,484 @@ +package com.ruoyi.common.utils.uuid; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; +import com.ruoyi.common.exception.UtilException; + +/** + * 提供通用唯一识别码(universally unique identifier)(UUID)实现 + * + * @author ruoyi + */ +public final class UUID implements java.io.Serializable, Comparable +{ + private static final long serialVersionUID = -1185015143654744140L; + + /** + * SecureRandom 的单例 + * + */ + private static class Holder + { + static final SecureRandom numberGenerator = getSecureRandom(); + } + + /** 此UUID的最高64有效位 */ + private final long mostSigBits; + + /** 此UUID的最低64有效位 */ + private final long leastSigBits; + + /** + * 私有构造 + * + * @param data 数据 + */ + private UUID(byte[] data) + { + long msb = 0; + long lsb = 0; + assert data.length == 16 : "data must be 16 bytes in length"; + for (int i = 0; i < 8; i++) + { + msb = (msb << 8) | (data[i] & 0xff); + } + for (int i = 8; i < 16; i++) + { + lsb = (lsb << 8) | (data[i] & 0xff); + } + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * 使用指定的数据构造新的 UUID。 + * + * @param mostSigBits 用于 {@code UUID} 的最高有效 64 位 + * @param leastSigBits 用于 {@code UUID} 的最低有效 64 位 + */ + public UUID(long mostSigBits, long leastSigBits) + { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的本地线程伪随机数生成器生成该 UUID。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID fastUUID() + { + return randomUUID(false); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID() + { + return randomUUID(true); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @param isSecure 是否使用{@link SecureRandom}如果是可以获得更安全的随机码,否则可以得到更好的性能 + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID(boolean isSecure) + { + final Random ng = isSecure ? Holder.numberGenerator : getRandom(); + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(randomBytes); + } + + /** + * 根据指定的字节数组获取类型 3(基于名称的)UUID 的静态工厂。 + * + * @param name 用于构造 UUID 的字节数组。 + * + * @return 根据指定数组生成的 {@code UUID} + */ + public static UUID nameUUIDFromBytes(byte[] name) + { + MessageDigest md; + try + { + md = MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException nsae) + { + throw new InternalError("MD5 not supported"); + } + byte[] md5Bytes = md.digest(name); + md5Bytes[6] &= 0x0f; /* clear version */ + md5Bytes[6] |= 0x30; /* set to version 3 */ + md5Bytes[8] &= 0x3f; /* clear variant */ + md5Bytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(md5Bytes); + } + + /** + * 根据 {@link #toString()} 方法中描述的字符串标准表示形式创建{@code UUID}。 + * + * @param name 指定 {@code UUID} 字符串 + * @return 具有指定值的 {@code UUID} + * @throws IllegalArgumentException 如果 name 与 {@link #toString} 中描述的字符串表示形式不符抛出此异常 + * + */ + public static UUID fromString(String name) + { + String[] components = name.split("-"); + if (components.length != 5) + { + throw new IllegalArgumentException("Invalid UUID string: " + name); + } + for (int i = 0; i < 5; i++) + { + components[i] = "0x" + components[i]; + } + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new UUID(mostSigBits, leastSigBits); + } + + /** + * 返回此 UUID 的 128 位值中的最低有效 64 位。 + * + * @return 此 UUID 的 128 位值中的最低有效 64 位。 + */ + public long getLeastSignificantBits() + { + return leastSigBits; + } + + /** + * 返回此 UUID 的 128 位值中的最高有效 64 位。 + * + * @return 此 UUID 的 128 位值中最高有效 64 位。 + */ + public long getMostSignificantBits() + { + return mostSigBits; + } + + /** + * 与此 {@code UUID} 相关联的版本号. 版本号描述此 {@code UUID} 是如何生成的。 + *

+ * 版本号具有以下含意: + *

    + *
  • 1 基于时间的 UUID + *
  • 2 DCE 安全 UUID + *
  • 3 基于名称的 UUID + *
  • 4 随机生成的 UUID + *
+ * + * @return 此 {@code UUID} 的版本号 + */ + public int version() + { + // Version is bits masked by 0x000000000000F000 in MS long + return (int) ((mostSigBits >> 12) & 0x0f); + } + + /** + * 与此 {@code UUID} 相关联的变体号。变体号描述 {@code UUID} 的布局。 + *

+ * 变体号具有以下含意: + *

    + *
  • 0 为 NCS 向后兼容保留 + *
  • 2 IETF RFC 4122(Leach-Salz), 用于此类 + *
  • 6 保留,微软向后兼容 + *
  • 7 保留供以后定义使用 + *
+ * + * @return 此 {@code UUID} 相关联的变体号 + */ + public int variant() + { + // This field is composed of a varying number of bits. + // 0 - - Reserved for NCS backward compatibility + // 1 0 - The IETF aka Leach-Salz variant (used by this class) + // 1 1 0 Reserved, Microsoft backward compatibility + // 1 1 1 Reserved for future definition. + return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63)); + } + + /** + * 与此 UUID 相关联的时间戳值。 + * + *

+ * 60 位的时间戳值根据此 {@code UUID} 的 time_low、time_mid 和 time_hi 字段构造。
+ * 所得到的时间戳以 100 毫微秒为单位,从 UTC(通用协调时间) 1582 年 10 月 15 日零时开始。 + * + *

+ * 时间戳值仅在在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 {@code UUID} 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @throws UnsupportedOperationException 如果此 {@code UUID} 不是 version 为 1 的 UUID。 + */ + public long timestamp() throws UnsupportedOperationException + { + checkTimeBase(); + return (mostSigBits & 0x0FFFL) << 48// + | ((mostSigBits >> 16) & 0x0FFFFL) << 32// + | mostSigBits >>> 32; + } + + /** + * 与此 UUID 相关联的时钟序列值。 + * + *

+ * 14 位的时钟序列值根据此 UUID 的 clock_seq 字段构造。clock_seq 字段用于保证在基于时间的 UUID 中的时间唯一性。 + *

+ * {@code clockSequence} 值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 + * UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的时钟序列 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public int clockSequence() throws UnsupportedOperationException + { + checkTimeBase(); + return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + + /** + * 与此 UUID 相关的节点值。 + * + *

+ * 48 位的节点值根据此 UUID 的 node 字段构造。此字段旨在用于保存机器的 IEEE 802 地址,该地址用于生成此 UUID 以保证空间唯一性。 + *

+ * 节点值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的节点值 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public long node() throws UnsupportedOperationException + { + checkTimeBase(); + return leastSigBits & 0x0000FFFFFFFFFFFFL; + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @return 此{@code UUID} 的字符串表现形式 + * @see #toString(boolean) + */ + @Override + public String toString() + { + return toString(false); + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @param isSimple 是否简单模式,简单模式为不带'-'的UUID字符串 + * @return 此{@code UUID} 的字符串表现形式 + */ + public String toString(boolean isSimple) + { + final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36); + // time_low + builder.append(digits(mostSigBits >> 32, 8)); + if (false == isSimple) + { + builder.append('-'); + } + // time_mid + builder.append(digits(mostSigBits >> 16, 4)); + if (false == isSimple) + { + builder.append('-'); + } + // time_high_and_version + builder.append(digits(mostSigBits, 4)); + if (false == isSimple) + { + builder.append('-'); + } + // variant_and_sequence + builder.append(digits(leastSigBits >> 48, 4)); + if (false == isSimple) + { + builder.append('-'); + } + // node + builder.append(digits(leastSigBits, 12)); + + return builder.toString(); + } + + /** + * 返回此 UUID 的哈希码。 + * + * @return UUID 的哈希码值。 + */ + @Override + public int hashCode() + { + long hilo = mostSigBits ^ leastSigBits; + return ((int) (hilo >> 32)) ^ (int) hilo; + } + + /** + * 将此对象与指定对象比较。 + *

+ * 当且仅当参数不为 {@code null}、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为 {@code true}。 + * + * @param obj 要与之比较的对象 + * + * @return 如果对象相同,则返回 {@code true};否则返回 {@code false} + */ + @Override + public boolean equals(Object obj) + { + if ((null == obj) || (obj.getClass() != UUID.class)) + { + return false; + } + UUID id = (UUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + // Comparison Operations + + /** + * 将此 UUID 与指定的 UUID 比较。 + * + *

+ * 如果两个 UUID 不同,且第一个 UUID 的最高有效字段大于第二个 UUID 的对应字段,则第一个 UUID 大于第二个 UUID。 + * + * @param val 与此 UUID 比较的 UUID + * + * @return 在此 UUID 小于、等于或大于 val 时,分别返回 -1、0 或 1。 + * + */ + @Override + public int compareTo(UUID val) + { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 : // + (this.mostSigBits > val.mostSigBits ? 1 : // + (this.leastSigBits < val.leastSigBits ? -1 : // + (this.leastSigBits > val.leastSigBits ? 1 : // + 0)))); + } + + // ------------------------------------------------------------------------------------------------------------------- + // Private method start + /** + * 返回指定数字对应的hex值 + * + * @param val 值 + * @param digits 位 + * @return 值 + */ + private static String digits(long val, int digits) + { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * 检查是否为time-based版本UUID + */ + private void checkTimeBase() + { + if (version() != 1) + { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + } + + /** + * 获取{@link SecureRandom},类提供加密的强随机数生成器 (RNG) + * + * @return {@link SecureRandom} + */ + public static SecureRandom getSecureRandom() + { + try + { + return SecureRandom.getInstance("SHA1PRNG"); + } + catch (NoSuchAlgorithmException e) + { + throw new UtilException(e); + } + } + + /** + * 获取随机数生成器对象
+ * ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。 + * + * @return {@link ThreadLocalRandom} + */ + public static ThreadLocalRandom getRandom() + { + return ThreadLocalRandom.current(); + } +} diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml new file mode 100644 index 0000000..15f13e8 --- /dev/null +++ b/ruoyi-framework/pom.xml @@ -0,0 +1,66 @@ + + + + ruoyi + com.ruoyi + 3.6.0 + + + + 4.0.0 + + ruoyi-framework + + + framework框架核心 + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + com.alibaba + druid-spring-boot-starter + + + + + com.github.penggle + kaptcha + + + javax.servlet-api + javax.servlet + + + + + + + com.github.oshi + oshi-core + + + + + com.ruoyi + ruoyi-system + + + + + \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java new file mode 100644 index 0000000..226e150 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java @@ -0,0 +1,181 @@ +package com.ruoyi.framework.aspectj; + +import java.lang.reflect.Method; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.stereotype.Component; +import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.SecurityUtils; + +/** + * 数据过滤处理 + * + * @author ruoyi + */ +@Aspect +@Component +public class DataScopeAspect +{ + /** + * 全部数据权限 + */ + public static final String DATA_SCOPE_ALL = "1"; + + /** + * 自定数据权限 + */ + public static final String DATA_SCOPE_CUSTOM = "2"; + + /** + * 部门数据权限 + */ + public static final String DATA_SCOPE_DEPT = "3"; + + /** + * 部门及以下数据权限 + */ + public static final String DATA_SCOPE_DEPT_AND_CHILD = "4"; + + /** + * 仅本人数据权限 + */ + public static final String DATA_SCOPE_SELF = "5"; + + /** + * 数据权限过滤关键字 + */ + public static final String DATA_SCOPE = "dataScope"; + + // 配置织入点 + @Pointcut("@annotation(com.ruoyi.common.annotation.DataScope)") + public void dataScopePointCut() + { + } + + @Before("dataScopePointCut()") + public void doBefore(JoinPoint point) throws Throwable + { + clearDataScope(point); + handleDataScope(point); + } + + protected void handleDataScope(final JoinPoint joinPoint) + { + // 获得注解 + DataScope controllerDataScope = getAnnotationLog(joinPoint); + if (controllerDataScope == null) + { + return; + } + // 获取当前的用户 + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNotNull(loginUser)) + { + SysUser currentUser = loginUser.getUser(); + // 如果是超级管理员,则不过滤数据 + if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) + { + dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), + controllerDataScope.userAlias()); + } + } + } + + /** + * 数据范围过滤 + * + * @param joinPoint 切点 + * @param user 用户 + * @param userAlias 别名 + */ + public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias) + { + StringBuilder sqlString = new StringBuilder(); + + for (SysRole role : user.getRoles()) + { + String dataScope = role.getDataScope(); + if (DATA_SCOPE_ALL.equals(dataScope)) + { + sqlString = new StringBuilder(); + break; + } + else if (DATA_SCOPE_CUSTOM.equals(dataScope)) + { + sqlString.append(StringUtils.format( + " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, + role.getRoleId())); + } + else if (DATA_SCOPE_DEPT.equals(dataScope)) + { + sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId())); + } + else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) + { + sqlString.append(StringUtils.format( + " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", + deptAlias, user.getDeptId(), user.getDeptId())); + } + else if (DATA_SCOPE_SELF.equals(dataScope)) + { + if (StringUtils.isNotBlank(userAlias)) + { + sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId())); + } + else + { + // 数据权限为仅本人且没有userAlias别名不查询任何数据 + sqlString.append(" OR 1=0 "); + } + } + } + + if (StringUtils.isNotBlank(sqlString.toString())) + { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) + { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")"); + } + } + } + + /** + * 是否存在注解,如果存在就获取 + */ + private DataScope getAnnotationLog(JoinPoint joinPoint) + { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + + if (method != null) + { + return method.getAnnotation(DataScope.class); + } + return null; + } + + /** + * 拼接权限sql前先清空params.dataScope参数防止注入 + */ + private void clearDataScope(final JoinPoint joinPoint) + { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) + { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, ""); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java new file mode 100644 index 0000000..8c2c9f4 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java @@ -0,0 +1,72 @@ +package com.ruoyi.framework.aspectj; + +import java.util.Objects; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.datasource.DynamicDataSourceContextHolder; + +/** + * 多数据源处理 + * + * @author ruoyi + */ +@Aspect +@Order(1) +@Component +public class DataSourceAspect +{ + protected Logger logger = LoggerFactory.getLogger(getClass()); + + @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)" + + "|| @within(com.ruoyi.common.annotation.DataSource)") + public void dsPointCut() + { + + } + + @Around("dsPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable + { + DataSource dataSource = getDataSource(point); + + if (StringUtils.isNotNull(dataSource)) + { + DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name()); + } + + try + { + return point.proceed(); + } + finally + { + // 销毁数据源 在执行方法之后 + DynamicDataSourceContextHolder.clearDataSourceType(); + } + } + + /** + * 获取需要切换的数据源 + */ + public DataSource getDataSource(ProceedingJoinPoint point) + { + MethodSignature signature = (MethodSignature) point.getSignature(); + DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class); + if (Objects.nonNull(dataSource)) + { + return dataSource; + } + + return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java new file mode 100644 index 0000000..89b5a32 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -0,0 +1,243 @@ +package com.ruoyi.framework.aspectj; + +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.HandlerMapping; +import com.alibaba.fastjson.JSON; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.BusinessStatus; +import com.ruoyi.common.enums.HttpMethod; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.system.domain.SysOperLog; + +/** + * 操作日志记录处理 + * + * @author ruoyi + */ +@Aspect +@Component +public class LogAspect +{ + private static final Logger log = LoggerFactory.getLogger(LogAspect.class); + + // 配置织入点 + @Pointcut("@annotation(com.ruoyi.common.annotation.Log)") + public void logPointCut() + { + } + + /** + * 处理完请求后执行 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "logPointCut()", returning = "jsonResult") + public void doAfterReturning(JoinPoint joinPoint, Object jsonResult) + { + handleLog(joinPoint, null, jsonResult); + } + + /** + * 拦截异常操作 + * + * @param joinPoint 切点 + * @param e 异常 + */ + @AfterThrowing(value = "logPointCut()", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Exception e) + { + handleLog(joinPoint, e, null); + } + + protected void handleLog(final JoinPoint joinPoint, final Exception e, Object jsonResult) + { + try + { + // 获得注解 + Log controllerLog = getAnnotationLog(joinPoint); + if (controllerLog == null) + { + return; + } + + // 获取当前的用户 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // *========数据库日志=========*// + SysOperLog operLog = new SysOperLog(); + operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); + // 请求的地址 + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + operLog.setOperIp(ip); + // 返回参数 + operLog.setJsonResult(JSON.toJSONString(jsonResult)); + + operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); + if (loginUser != null) + { + operLog.setOperName(loginUser.getUsername()); + } + + if (e != null) + { + operLog.setStatus(BusinessStatus.FAIL.ordinal()); + operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); + } + // 设置方法名称 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + operLog.setMethod(className + "." + methodName + "()"); + // 设置请求方式 + operLog.setRequestMethod(ServletUtils.getRequest().getMethod()); + // 处理设置注解上的参数 + getControllerMethodDescription(joinPoint, controllerLog, operLog); + // 保存数据库 + AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); + } + catch (Exception exp) + { + // 记录本地异常日志 + log.error("==前置通知异常=="); + log.error("异常信息:{}", exp.getMessage()); + exp.printStackTrace(); + } + } + + /** + * 获取注解中对方法的描述信息 用于Controller层注解 + * + * @param log 日志 + * @param operLog 操作日志 + * @throws Exception + */ + public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog) throws Exception + { + // 设置action动作 + operLog.setBusinessType(log.businessType().ordinal()); + // 设置标题 + operLog.setTitle(log.title()); + // 设置操作人类别 + operLog.setOperatorType(log.operatorType().ordinal()); + // 是否需要保存request,参数和值 + if (log.isSaveRequestData()) + { + // 获取参数的信息,传入到数据库中。 + setRequestValue(joinPoint, operLog); + } + } + + /** + * 获取请求的参数,放到log中 + * + * @param operLog 操作日志 + * @throws Exception 异常 + */ + private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog) throws Exception + { + String requestMethod = operLog.getRequestMethod(); + if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) + { + String params = argsArrayToString(joinPoint.getArgs()); + operLog.setOperParam(StringUtils.substring(params, 0, 2000)); + } + else + { + Map paramsMap = (Map) ServletUtils.getRequest().getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); + operLog.setOperParam(StringUtils.substring(paramsMap.toString(), 0, 2000)); + } + } + + /** + * 是否存在注解,如果存在就获取 + */ + private Log getAnnotationLog(JoinPoint joinPoint) throws Exception + { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + + if (method != null) + { + return method.getAnnotation(Log.class); + } + return null; + } + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) + { + String params = ""; + if (paramsArray != null && paramsArray.length > 0) + { + for (int i = 0; i < paramsArray.length; i++) + { + if (StringUtils.isNotNull(paramsArray[i]) && !isFilterObject(paramsArray[i])) + { + Object jsonObj = JSON.toJSON(paramsArray[i]); + params += jsonObj.toString() + " "; + } + } + } + return params.trim(); + } + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + @SuppressWarnings("rawtypes") + public boolean isFilterObject(final Object o) + { + Class clazz = o.getClass(); + if (clazz.isArray()) + { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } + else if (Collection.class.isAssignableFrom(clazz)) + { + Collection collection = (Collection) o; + for (Iterator iter = collection.iterator(); iter.hasNext();) + { + return iter.next() instanceof MultipartFile; + } + } + else if (Map.class.isAssignableFrom(clazz)) + { + Map map = (Map) o; + for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) + { + Map.Entry entry = (Map.Entry) iter.next(); + return entry.getValue() instanceof MultipartFile; + } + } + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse + || o instanceof BindingResult; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java new file mode 100644 index 0000000..12aa291 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java @@ -0,0 +1,116 @@ +package com.ruoyi.framework.aspectj; + +import java.lang.reflect.Method; +import java.util.Collections; +import java.util.List; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.RedisScript; +import org.springframework.stereotype.Component; +import com.ruoyi.common.annotation.RateLimiter; +import com.ruoyi.common.enums.LimitType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.IpUtils; + +/** + * 限流处理 + * + * @author ruoyi + */ +@Aspect +@Component +public class RateLimiterAspect +{ + private static final Logger log = LoggerFactory.getLogger(RateLimiterAspect.class); + + private RedisTemplate redisTemplate; + + private RedisScript limitScript; + + @Autowired + public void setRedisTemplate1(RedisTemplate redisTemplate) + { + this.redisTemplate = redisTemplate; + } + + @Autowired + public void setLimitScript(RedisScript limitScript) + { + this.limitScript = limitScript; + } + + // 配置织入点 + @Pointcut("@annotation(com.ruoyi.common.annotation.RateLimiter)") + public void rateLimiterPointCut() + { + } + + @Before("rateLimiterPointCut()") + public void doBefore(JoinPoint point) throws Throwable + { + RateLimiter rateLimiter = getAnnotationRateLimiter(point); + String key = rateLimiter.key(); + int time = rateLimiter.time(); + int count = rateLimiter.count(); + + String combineKey = getCombineKey(rateLimiter, point); + List keys = Collections.singletonList(combineKey); + try + { + Long number = redisTemplate.execute(limitScript, keys, count, time); + if (StringUtils.isNull(number) || number.intValue() > count) + { + throw new ServiceException("访问过于频繁,请稍后再试"); + } + log.info("限制请求'{}',当前请求'{}',缓存key'{}'", count, number.intValue(), key); + } + catch (ServiceException e) + { + throw e; + } + catch (Exception e) + { + throw new RuntimeException("服务器限流异常,请稍后再试"); + } + } + + /** + * 是否存在注解,如果存在就获取 + */ + private RateLimiter getAnnotationRateLimiter(JoinPoint joinPoint) + { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + + if (method != null) + { + return method.getAnnotation(RateLimiter.class); + } + return null; + } + + public String getCombineKey(RateLimiter rateLimiter, JoinPoint point) + { + StringBuffer stringBuffer = new StringBuffer(rateLimiter.key()); + if (rateLimiter.limitType() == LimitType.IP) + { + stringBuffer.append(IpUtils.getIpAddr(ServletUtils.getRequest())); + } + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + Class targetClass = method.getDeclaringClass(); + stringBuffer.append("-").append(targetClass.getName()).append("- ").append(method.getName()); + return stringBuffer.toString(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java new file mode 100644 index 0000000..1d4dc1f --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java @@ -0,0 +1,30 @@ +package com.ruoyi.framework.config; + +import java.util.TimeZone; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; + +/** + * 程序注解配置 + * + * @author ruoyi + */ +@Configuration +// 表示通过aop框架暴露该代理对象,AopContext能够访问 +@EnableAspectJAutoProxy(exposeProxy = true) +// 指定要扫描的Mapper类的包的路径 +@MapperScan("com.ruoyi.**.mapper") +public class ApplicationConfig +{ + /** + * 时区配置 + */ + @Bean + public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() + { + return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault()); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java new file mode 100644 index 0000000..43e78ae --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java @@ -0,0 +1,83 @@ +package com.ruoyi.framework.config; + +import java.util.Properties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.google.code.kaptcha.impl.DefaultKaptcha; +import com.google.code.kaptcha.util.Config; +import static com.google.code.kaptcha.Constants.*; + +/** + * 验证码配置 + * + * @author ruoyi + */ +@Configuration +public class CaptchaConfig +{ + @Bean(name = "captchaProducer") + public DefaultKaptcha getKaptchaBean() + { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 是否有边框 默认为true 我们可以自己设置yes,no + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 验证码文本字符颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black"); + // 验证码图片宽度 默认为200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 验证码图片高度 默认为50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 验证码文本字符大小 默认为40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode"); + // 验证码文本字符长度 默认为5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4"); + // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } + + @Bean(name = "captchaProducerMath") + public DefaultKaptcha getKaptchaBeanMath() + { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 是否有边框 默认为true 我们可以自己设置yes,no + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 边框颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90"); + // 验证码文本字符颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue"); + // 验证码图片宽度 默认为200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 验证码图片高度 默认为50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 验证码文本字符大小 默认为40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "35"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath"); + // 验证码文本生成器 + properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.ruoyi.framework.config.KaptchaTextCreator"); + // 验证码文本字符间距 默认为2 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3"); + // 验证码文本字符长度 默认为5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6"); + // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 验证码噪点颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_NOISE_COLOR, "white"); + // 干扰实现类 + properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise"); + // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java new file mode 100644 index 0000000..f6abac1 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java @@ -0,0 +1,126 @@ +package com.ruoyi.framework.config; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.sql.DataSource; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; +import com.alibaba.druid.util.Utils; +import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.framework.config.properties.DruidProperties; +import com.ruoyi.framework.datasource.DynamicDataSource; + +/** + * druid 配置多数据源 + * + * @author ruoyi + */ +@Configuration +public class DruidConfig +{ + @Bean + @ConfigurationProperties("spring.datasource.druid.master") + public DataSource masterDataSource(DruidProperties druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean + @ConfigurationProperties("spring.datasource.druid.slave") + @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true") + public DataSource slaveDataSource(DruidProperties druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean(name = "dynamicDataSource") + @Primary + public DynamicDataSource dataSource(DataSource masterDataSource) + { + Map targetDataSources = new HashMap<>(); + targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource); + setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource"); + return new DynamicDataSource(masterDataSource, targetDataSources); + } + + /** + * 设置数据源 + * + * @param targetDataSources 备选数据源集合 + * @param sourceName 数据源名称 + * @param beanName bean名称 + */ + public void setDataSource(Map targetDataSources, String sourceName, String beanName) + { + try + { + DataSource dataSource = SpringUtils.getBean(beanName); + targetDataSources.put(sourceName, dataSource); + } + catch (Exception e) + { + } + } + + /** + * 去除监控页面底部的广告 + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true") + public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) + { + // 获取web监控页面的参数 + DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); + // 提取common.js的配置路径 + String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; + String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); + final String filePath = "support/http/resources/js/common.js"; + // 创建filter进行过滤 + Filter filter = new Filter() + { + @Override + public void init(javax.servlet.FilterConfig filterConfig) throws ServletException + { + } + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + chain.doFilter(request, response); + // 重置缓冲区,响应头不会被重置 + response.resetBuffer(); + // 获取common.js + String text = Utils.readFromResource(filePath); + // 正则替换banner, 除去底部的广告信息 + text = text.replaceAll("
", ""); + text = text.replaceAll("powered.*?shrek.wang", ""); + response.getWriter().write(text); + } + @Override + public void destroy() + { + } + }; + FilterRegistrationBean registrationBean = new FilterRegistrationBean(); + registrationBean.setFilter(filter); + registrationBean.addUrlPatterns(commonJsPattern); + return registrationBean; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java new file mode 100644 index 0000000..59812ea --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java @@ -0,0 +1,71 @@ +package com.ruoyi.framework.config; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.type.TypeFactory; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; +import com.alibaba.fastjson.parser.ParserConfig; +import org.springframework.util.Assert; +import java.nio.charset.Charset; + +/** + * Redis使用FastJson序列化 + * + * @author ruoyi + */ +public class FastJson2JsonRedisSerializer implements RedisSerializer +{ + @SuppressWarnings("unused") + private ObjectMapper objectMapper = new ObjectMapper(); + + public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + + private Class clazz; + + static + { + ParserConfig.getGlobalInstance().setAutoTypeSupport(true); + } + + public FastJson2JsonRedisSerializer(Class clazz) + { + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) throws SerializationException + { + if (t == null) + { + return new byte[0]; + } + return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException + { + if (bytes == null || bytes.length <= 0) + { + return null; + } + String str = new String(bytes, DEFAULT_CHARSET); + + return JSON.parseObject(str, clazz); + } + + public void setObjectMapper(ObjectMapper objectMapper) + { + Assert.notNull(objectMapper, "'objectMapper' must not be null"); + this.objectMapper = objectMapper; + } + + protected JavaType getJavaType(Class clazz) + { + return TypeFactory.defaultInstance().constructType(clazz); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java new file mode 100644 index 0000000..87b3750 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java @@ -0,0 +1,58 @@ +package com.ruoyi.framework.config; + +import java.util.HashMap; +import java.util.Map; +import javax.servlet.DispatcherType; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.ruoyi.common.filter.RepeatableFilter; +import com.ruoyi.common.filter.XssFilter; +import com.ruoyi.common.utils.StringUtils; + +/** + * Filter配置 + * + * @author ruoyi + */ +@Configuration +@ConditionalOnProperty(value = "xss.enabled", havingValue = "true") +public class FilterConfig +{ + @Value("${xss.excludes}") + private String excludes; + + @Value("${xss.urlPatterns}") + private String urlPatterns; + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + public FilterRegistrationBean xssFilterRegistration() + { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setDispatcherTypes(DispatcherType.REQUEST); + registration.setFilter(new XssFilter()); + registration.addUrlPatterns(StringUtils.split(urlPatterns, ",")); + registration.setName("xssFilter"); + registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE); + Map initParameters = new HashMap(); + initParameters.put("excludes", excludes); + registration.setInitParameters(initParameters); + return registration; + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + public FilterRegistrationBean someFilterRegistration() + { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new RepeatableFilter()); + registration.addUrlPatterns("/*"); + registration.setName("repeatableFilter"); + registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE); + return registration; + } + +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java new file mode 100644 index 0000000..3e74580 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java @@ -0,0 +1,75 @@ +package com.ruoyi.framework.config; + +import java.util.Random; +import com.google.code.kaptcha.text.impl.DefaultTextCreator; + +/** + * 验证码文本生成器 + * + * @author ruoyi + */ +public class KaptchaTextCreator extends DefaultTextCreator +{ + private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(","); + + @Override + public String getText() + { + Integer result = 0; + Random random = new Random(); + int x = random.nextInt(10); + int y = random.nextInt(10); + StringBuilder suChinese = new StringBuilder(); + int randomoperands = (int) Math.round(Math.random() * 2); + if (randomoperands == 0) + { + result = x * y; + suChinese.append(CNUMBERS[x]); + suChinese.append("*"); + suChinese.append(CNUMBERS[y]); + } + else if (randomoperands == 1) + { + if (!(x == 0) && y % x == 0) + { + result = y / x; + suChinese.append(CNUMBERS[y]); + suChinese.append("/"); + suChinese.append(CNUMBERS[x]); + } + else + { + result = x + y; + suChinese.append(CNUMBERS[x]); + suChinese.append("+"); + suChinese.append(CNUMBERS[y]); + } + } + else if (randomoperands == 2) + { + if (x >= y) + { + result = x - y; + suChinese.append(CNUMBERS[x]); + suChinese.append("-"); + suChinese.append(CNUMBERS[y]); + } + else + { + result = y - x; + suChinese.append(CNUMBERS[y]); + suChinese.append("-"); + suChinese.append(CNUMBERS[x]); + } + } + else + { + result = x + y; + suChinese.append(CNUMBERS[x]); + suChinese.append("+"); + suChinese.append(CNUMBERS[y]); + } + suChinese.append("=?@" + result); + return suChinese.toString(); + } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java new file mode 100644 index 0000000..057c941 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java @@ -0,0 +1,132 @@ +package com.ruoyi.framework.config; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import javax.sql.DataSource; +import org.apache.ibatis.io.VFS; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.type.classreading.CachingMetadataReaderFactory; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.util.ClassUtils; +import com.ruoyi.common.utils.StringUtils; + +/** + * Mybatis支持*匹配扫描包 + * + * @author ruoyi + */ +@Configuration +public class MyBatisConfig +{ + @Autowired + private Environment env; + + static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; + + public static String setTypeAliasesPackage(String typeAliasesPackage) + { + ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); + MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); + List allResult = new ArrayList(); + try + { + for (String aliasesPackage : typeAliasesPackage.split(",")) + { + List result = new ArrayList(); + aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN; + Resource[] resources = resolver.getResources(aliasesPackage); + if (resources != null && resources.length > 0) + { + MetadataReader metadataReader = null; + for (Resource resource : resources) + { + if (resource.isReadable()) + { + metadataReader = metadataReaderFactory.getMetadataReader(resource); + try + { + result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); + } + catch (ClassNotFoundException e) + { + e.printStackTrace(); + } + } + } + } + if (result.size() > 0) + { + HashSet hashResult = new HashSet(result); + allResult.addAll(hashResult); + } + } + if (allResult.size() > 0) + { + typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); + } + else + { + throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + return typeAliasesPackage; + } + + public Resource[] resolveMapperLocations(String[] mapperLocations) + { + ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); + List resources = new ArrayList(); + if (mapperLocations != null) + { + for (String mapperLocation : mapperLocations) + { + try + { + Resource[] mappers = resourceResolver.getResources(mapperLocation); + resources.addAll(Arrays.asList(mappers)); + } + catch (IOException e) + { + // ignore + } + } + } + return resources.toArray(new Resource[resources.size()]); + } + + @Bean + public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception + { + String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); + String mapperLocations = env.getProperty("mybatis.mapperLocations"); + String configLocation = env.getProperty("mybatis.configLocation"); + typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); + VFS.addImplClass(SpringBootVFS.class); + + final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); + sessionFactory.setDataSource(dataSource); + sessionFactory.setTypeAliasesPackage(typeAliasesPackage); + sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); + sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); + return sessionFactory.getObject(); + } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java new file mode 100644 index 0000000..3c3185e --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java @@ -0,0 +1,79 @@ +package com.ruoyi.framework.config; + +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; + +/** + * redis配置 + * + * @author ruoyi + */ +@Configuration +@EnableCaching +public class RedisConfig extends CachingConfigurerSupport +{ + @Bean + @SuppressWarnings(value = { "unchecked", "rawtypes" }) + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) + { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + + FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); + + ObjectMapper mapper = new ObjectMapper(); + mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + serializer.setObjectMapper(mapper); + + // 使用StringRedisSerializer来序列化和反序列化redis的key值 + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(serializer); + + // Hash的key也采用StringRedisSerializer的序列化方式 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(serializer); + + template.afterPropertiesSet(); + return template; + } + + @Bean + public DefaultRedisScript limitScript() + { + DefaultRedisScript redisScript = new DefaultRedisScript<>(); + redisScript.setScriptText(limitScriptText()); + redisScript.setResultType(Long.class); + return redisScript; + } + + /** + * 限流脚本 + */ + private String limitScriptText() + { + return "local key = KEYS[1]\n" + + "local count = tonumber(ARGV[1])\n" + + "local time = tonumber(ARGV[2])\n" + + "local current = redis.call('get', key);\n" + + "if current and tonumber(current) > count then\n" + + " return current;\n" + + "end\n" + + "current = redis.call('incr', key)\n" + + "if tonumber(current) == 1 then\n" + + " redis.call('expire', key, time)\n" + + "end\n" + + "return current;"; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java new file mode 100644 index 0000000..4f197d7 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java @@ -0,0 +1,65 @@ +package com.ruoyi.framework.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.framework.interceptor.RepeatSubmitInterceptor; + +/** + * 通用配置 + * + * @author ruoyi + */ +@Configuration +public class ResourcesConfig implements WebMvcConfigurer +{ + @Autowired + private RepeatSubmitInterceptor repeatSubmitInterceptor; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) + { + /** 本地文件上传路径 */ + registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/"); + + /** swagger配置 */ + registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); + } + + /** + * 自定义拦截规则 + */ + @Override + public void addInterceptors(InterceptorRegistry registry) + { + registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**"); + } + + /** + * 跨域配置 + */ +// @Bean +// public CorsFilter corsFilter() +// { +// UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); +// CorsConfiguration config = new CorsConfiguration(); +// config.setAllowCredentials(true); +// // 设置访问源地址 +// config.addAllowedOrigin("*"); +// // 设置访问源请求头 +// config.addAllowedHeader("*"); +// // 设置访问源请求方法 +// config.addAllowedMethod("*"); +// // 对接口配置跨域设置 +// source.registerCorsConfiguration("/**", config); +// return new CorsFilter(source); +// } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ServerConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ServerConfig.java new file mode 100644 index 0000000..b5b7de3 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ServerConfig.java @@ -0,0 +1,32 @@ +package com.ruoyi.framework.config; + +import javax.servlet.http.HttpServletRequest; +import org.springframework.stereotype.Component; +import com.ruoyi.common.utils.ServletUtils; + +/** + * 服务相关配置 + * + * @author ruoyi + */ +@Component +public class ServerConfig +{ + /** + * 获取完整的请求路径,包括:域名,端口,上下文访问路径 + * + * @return 服务地址 + */ + public String getUrl() + { + HttpServletRequest request = ServletUtils.getRequest(); + return getDomain(request); + } + + public static String getDomain(HttpServletRequest request) + { + StringBuffer url = request.getRequestURL(); + String contextPath = request.getServletContext().getContextPath(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java new file mode 100644 index 0000000..0d67c22 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java @@ -0,0 +1,62 @@ +package com.ruoyi.framework.config; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor; +import org.apache.commons.lang3.concurrent.BasicThreadFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import com.ruoyi.common.utils.Threads; + +/** + * 线程池配置 + * + * @author ruoyi + **/ +@Configuration +public class ThreadPoolConfig +{ + // 核心线程池大小 + private int corePoolSize = 50; + + // 最大可创建的线程数 + private int maxPoolSize = 200; + + // 队列最大长度 + private int queueCapacity = 1000; + + // 线程池维护线程所允许的空闲时间 + private int keepAliveSeconds = 300; + + @Bean(name = "threadPoolTaskExecutor") + public ThreadPoolTaskExecutor threadPoolTaskExecutor() + { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setMaxPoolSize(maxPoolSize); + executor.setCorePoolSize(corePoolSize); + executor.setQueueCapacity(queueCapacity); + executor.setKeepAliveSeconds(keepAliveSeconds); + // 线程池对拒绝任务(无线程可用)的处理策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return executor; + } + + /** + * 执行周期性或定时任务 + */ + @Bean(name = "scheduledExecutorService") + protected ScheduledExecutorService scheduledExecutorService() + { + return new ScheduledThreadPoolExecutor(corePoolSize, + new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build()) + { + @Override + protected void afterExecute(Runnable r, Throwable t) + { + super.afterExecute(r, t); + Threads.printException(r, t); + } + }; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java new file mode 100644 index 0000000..84f7e00 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java @@ -0,0 +1,77 @@ +package com.ruoyi.framework.config.properties; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import com.alibaba.druid.pool.DruidDataSource; + +/** + * druid 配置属性 + * + * @author ruoyi + */ +@Configuration +public class DruidProperties +{ + @Value("${spring.datasource.druid.initialSize}") + private int initialSize; + + @Value("${spring.datasource.druid.minIdle}") + private int minIdle; + + @Value("${spring.datasource.druid.maxActive}") + private int maxActive; + + @Value("${spring.datasource.druid.maxWait}") + private int maxWait; + + @Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}") + private int timeBetweenEvictionRunsMillis; + + @Value("${spring.datasource.druid.minEvictableIdleTimeMillis}") + private int minEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}") + private int maxEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.validationQuery}") + private String validationQuery; + + @Value("${spring.datasource.druid.testWhileIdle}") + private boolean testWhileIdle; + + @Value("${spring.datasource.druid.testOnBorrow}") + private boolean testOnBorrow; + + @Value("${spring.datasource.druid.testOnReturn}") + private boolean testOnReturn; + + public DruidDataSource dataSource(DruidDataSource datasource) + { + /** 配置初始化大小、最小、最大 */ + datasource.setInitialSize(initialSize); + datasource.setMaxActive(maxActive); + datasource.setMinIdle(minIdle); + + /** 配置获取连接等待超时的时间 */ + datasource.setMaxWait(maxWait); + + /** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */ + datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + + /** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */ + datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); + + /** + * 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 + */ + datasource.setValidationQuery(validationQuery); + /** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */ + datasource.setTestWhileIdle(testWhileIdle); + /** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ + datasource.setTestOnBorrow(testOnBorrow); + /** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ + datasource.setTestOnReturn(testOnReturn); + return datasource; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java new file mode 100644 index 0000000..e70b8cf --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java @@ -0,0 +1,26 @@ +package com.ruoyi.framework.datasource; + +import java.util.Map; +import javax.sql.DataSource; +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +/** + * 动态数据源 + * + * @author ruoyi + */ +public class DynamicDataSource extends AbstractRoutingDataSource +{ + public DynamicDataSource(DataSource defaultTargetDataSource, Map targetDataSources) + { + super.setDefaultTargetDataSource(defaultTargetDataSource); + super.setTargetDataSources(targetDataSources); + super.afterPropertiesSet(); + } + + @Override + protected Object determineCurrentLookupKey() + { + return DynamicDataSourceContextHolder.getDataSourceType(); + } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java new file mode 100644 index 0000000..3572db9 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java @@ -0,0 +1,45 @@ +package com.ruoyi.framework.datasource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 数据源切换处理 + * + * @author ruoyi + */ +public class DynamicDataSourceContextHolder +{ + public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class); + + /** + * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本, + * 所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 + */ + private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + + /** + * 设置数据源的变量 + */ + public static void setDataSourceType(String dsType) + { + log.info("切换到{}数据源", dsType); + CONTEXT_HOLDER.set(dsType); + } + + /** + * 获得数据源的变量 + */ + public static String getDataSourceType() + { + return CONTEXT_HOLDER.get(); + } + + /** + * 清空数据源变量 + */ + public static void clearDataSourceType() + { + CONTEXT_HOLDER.remove(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java new file mode 100644 index 0000000..17d607f --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java @@ -0,0 +1,55 @@ +package com.ruoyi.framework.interceptor; + +import java.lang.reflect.Method; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.ServletUtils; + +/** + * 防止重复提交拦截器 + * + * @author ruoyi + */ +@Component +public abstract class RepeatSubmitInterceptor extends HandlerInterceptorAdapter +{ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception + { + if (handler instanceof HandlerMethod) + { + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); + if (annotation != null) + { + if (this.isRepeatSubmit(request)) + { + AjaxResult ajaxResult = AjaxResult.error("不允许重复提交,请稍后再试"); + ServletUtils.renderString(response, JSONObject.toJSONString(ajaxResult)); + return false; + } + } + return true; + } + else + { + return super.preHandle(request, response, handler); + } + } + + /** + * 验证是否重复提交由子类实现具体的防重复提交的规则 + * + * @param request + * @return + * @throws Exception + */ + public abstract boolean isRepeatSubmit(HttpServletRequest request); +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java new file mode 100644 index 0000000..cb4edbe --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java @@ -0,0 +1,125 @@ +package com.ruoyi.framework.interceptor.impl; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.filter.RepeatedlyRequestWrapper; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.http.HttpHelper; +import com.ruoyi.framework.interceptor.RepeatSubmitInterceptor; + +/** + * 判断请求url和数据是否和上一次相同, + * 如果和上次相同,则是重复提交表单。 有效时间为10秒内。 + * + * @author ruoyi + */ +@Component +public class SameUrlDataInterceptor extends RepeatSubmitInterceptor +{ + public final String REPEAT_PARAMS = "repeatParams"; + + public final String REPEAT_TIME = "repeatTime"; + + // 令牌自定义标识 + @Value("${token.header}") + private String header; + + @Autowired + private RedisCache redisCache; + + /** + * 间隔时间,单位:秒 默认10秒 + * + * 两次相同参数的请求,如果间隔时间大于该参数,系统不会认定为重复提交的数据 + */ + private int intervalTime = 10; + + public void setIntervalTime(int intervalTime) + { + this.intervalTime = intervalTime; + } + + @SuppressWarnings("unchecked") + @Override + public boolean isRepeatSubmit(HttpServletRequest request) + { + String nowParams = ""; + if (request instanceof RepeatedlyRequestWrapper) + { + RepeatedlyRequestWrapper repeatedlyRequest = (RepeatedlyRequestWrapper) request; + nowParams = HttpHelper.getBodyString(repeatedlyRequest); + } + + // body参数为空,获取Parameter的数据 + if (StringUtils.isEmpty(nowParams)) + { + nowParams = JSONObject.toJSONString(request.getParameterMap()); + } + Map nowDataMap = new HashMap(); + nowDataMap.put(REPEAT_PARAMS, nowParams); + nowDataMap.put(REPEAT_TIME, System.currentTimeMillis()); + + // 请求地址(作为存放cache的key值) + String url = request.getRequestURI(); + + // 唯一值(没有消息头则使用请求地址) + String submitKey = request.getHeader(header); + if (StringUtils.isEmpty(submitKey)) + { + submitKey = url; + } + + // 唯一标识(指定key + 消息头) + String cacheRepeatKey = Constants.REPEAT_SUBMIT_KEY + submitKey; + + Object sessionObj = redisCache.getCacheObject(cacheRepeatKey); + if (sessionObj != null) + { + Map sessionMap = (Map) sessionObj; + if (sessionMap.containsKey(url)) + { + Map preDataMap = (Map) sessionMap.get(url); + if (compareParams(nowDataMap, preDataMap) && compareTime(nowDataMap, preDataMap)) + { + return true; + } + } + } + Map cacheMap = new HashMap(); + cacheMap.put(url, nowDataMap); + redisCache.setCacheObject(cacheRepeatKey, cacheMap, intervalTime, TimeUnit.SECONDS); + return false; + } + + /** + * 判断参数是否相同 + */ + private boolean compareParams(Map nowMap, Map preMap) + { + String nowParams = (String) nowMap.get(REPEAT_PARAMS); + String preParams = (String) preMap.get(REPEAT_PARAMS); + return nowParams.equals(preParams); + } + + /** + * 判断两次间隔时间 + */ + private boolean compareTime(Map nowMap, Map preMap) + { + long time1 = (Long) nowMap.get(REPEAT_TIME); + long time2 = (Long) preMap.get(REPEAT_TIME); + if ((time1 - time2) < (this.intervalTime * 1000)) + { + return true; + } + return false; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java new file mode 100644 index 0000000..7387a02 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java @@ -0,0 +1,55 @@ +package com.ruoyi.framework.manager; + +import java.util.TimerTask; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import com.ruoyi.common.utils.Threads; +import com.ruoyi.common.utils.spring.SpringUtils; + +/** + * 异步任务管理器 + * + * @author ruoyi + */ +public class AsyncManager +{ + /** + * 操作延迟10毫秒 + */ + private final int OPERATE_DELAY_TIME = 10; + + /** + * 异步操作任务调度线程池 + */ + private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService"); + + /** + * 单例模式 + */ + private AsyncManager(){} + + private static AsyncManager me = new AsyncManager(); + + public static AsyncManager me() + { + return me; + } + + /** + * 执行任务 + * + * @param task 任务 + */ + public void execute(TimerTask task) + { + executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); + } + + /** + * 停止任务线程池 + */ + public void shutdown() + { + Threads.shutdownAndAwaitTermination(executor); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java new file mode 100644 index 0000000..e36ca3c --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java @@ -0,0 +1,39 @@ +package com.ruoyi.framework.manager; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import javax.annotation.PreDestroy; + +/** + * 确保应用退出时能关闭后台线程 + * + * @author ruoyi + */ +@Component +public class ShutdownManager +{ + private static final Logger logger = LoggerFactory.getLogger("sys-user"); + + @PreDestroy + public void destroy() + { + shutdownAsyncManager(); + } + + /** + * 停止异步执行任务 + */ + private void shutdownAsyncManager() + { + try + { + logger.info("====关闭后台任务任务线程池===="); + AsyncManager.me().shutdown(); + } + catch (Exception e) + { + logger.error(e.getMessage(), e); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java new file mode 100644 index 0000000..23d0230 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java @@ -0,0 +1,102 @@ +package com.ruoyi.framework.manager.factory; + +import java.util.TimerTask; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.LogUtils; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.AddressUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.system.domain.SysLogininfor; +import com.ruoyi.system.domain.SysOperLog; +import com.ruoyi.system.service.ISysLogininforService; +import com.ruoyi.system.service.ISysOperLogService; +import eu.bitwalker.useragentutils.UserAgent; + +/** + * 异步工厂(产生任务用) + * + * @author ruoyi + */ +public class AsyncFactory +{ + private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); + + /** + * 记录登录信息 + * + * @param username 用户名 + * @param status 状态 + * @param message 消息 + * @param args 列表 + * @return 任务task + */ + public static TimerTask recordLogininfor(final String username, final String status, final String message, + final Object... args) + { + final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + final String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + return new TimerTask() + { + @Override + public void run() + { + String address = AddressUtils.getRealAddressByIP(ip); + StringBuilder s = new StringBuilder(); + s.append(LogUtils.getBlock(ip)); + s.append(address); + s.append(LogUtils.getBlock(username)); + s.append(LogUtils.getBlock(status)); + s.append(LogUtils.getBlock(message)); + // 打印信息到日志 + sys_user_logger.info(s.toString(), args); + // 获取客户端操作系统 + String os = userAgent.getOperatingSystem().getName(); + // 获取客户端浏览器 + String browser = userAgent.getBrowser().getName(); + // 封装对象 + SysLogininfor logininfor = new SysLogininfor(); + logininfor.setUserName(username); + logininfor.setIpaddr(ip); + logininfor.setLoginLocation(address); + logininfor.setBrowser(browser); + logininfor.setOs(os); + logininfor.setMsg(message); + // 日志状态 + if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) + { + logininfor.setStatus(Constants.SUCCESS); + } + else if (Constants.LOGIN_FAIL.equals(status)) + { + logininfor.setStatus(Constants.FAIL); + } + // 插入数据 + SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor); + } + }; + } + + /** + * 操作日志记录 + * + * @param operLog 操作日志信息 + * @return 任务task + */ + public static TimerTask recordOper(final SysOperLog operLog) + { + return new TimerTask() + { + @Override + public void run() + { + // 远程查询操作地点 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); + } + }; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java new file mode 100644 index 0000000..0f2db93 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java @@ -0,0 +1,115 @@ +package com.ruoyi.framework.web.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.RegisterBody; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.user.CaptchaException; +import com.ruoyi.common.exception.user.CaptchaExpireException; +import com.ruoyi.common.utils.MessageUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.system.service.ISysConfigService; +import com.ruoyi.system.service.ISysUserService; + +/** + * 注册校验方法 + * + * @author ruoyi + */ +@Component +public class SysRegisterService +{ + @Autowired + private ISysUserService userService; + + @Autowired + private ISysConfigService configService; + + @Autowired + private RedisCache redisCache; + + /** + * 注册 + */ + public String register(RegisterBody registerBody) + { + String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword(); + + boolean captchaOnOff = configService.selectCaptchaOnOff(); + // 验证码开关 + if (captchaOnOff) + { + validateCaptcha(username, registerBody.getCode(), registerBody.getUuid()); + } + + if (StringUtils.isEmpty(username)) + { + msg = "用户名不能为空"; + } + else if (StringUtils.isEmpty(password)) + { + msg = "用户密码不能为空"; + } + else if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) + { + msg = "账户长度必须在2到20个字符之间"; + } + else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) + { + msg = "密码长度必须在5到20个字符之间"; + } + else if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(username))) + { + msg = "保存用户'" + username + "'失败,注册账号已存在"; + } + else + { + SysUser sysUser = new SysUser(); + sysUser.setUserName(username); + sysUser.setNickName(username); + sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword())); + boolean regFlag = userService.registerUser(sysUser); + if (!regFlag) + { + msg = "注册失败,请联系系统管理人员"; + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.REGISTER, + MessageUtils.message("user.register.success"))); + } + } + return msg; + } + + /** + * 校验验证码 + * + * @param username 用户名 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public void validateCaptcha(String username, String code, String uuid) + { + String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; + String captcha = redisCache.getCacheObject(verifyKey); + redisCache.deleteObject(verifyKey); + if (captcha == null) + { + throw new CaptchaExpireException(); + } + if (!code.equalsIgnoreCase(captcha)) + { + throw new CaptchaException(); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java new file mode 100644 index 0000000..bf28e0f --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java @@ -0,0 +1,225 @@ +package com.ruoyi.framework.web.service; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.AddressUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import eu.bitwalker.useragentutils.UserAgent; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +/** + * token验证处理 + * + * @author ruoyi + */ +@Component +public class TokenService +{ + // 令牌自定义标识 + @Value("${token.header}") + private String header; + + // 令牌秘钥 + @Value("${token.secret}") + private String secret; + + // 令牌有效期(默认30分钟) + @Value("${token.expireTime}") + private int expireTime; + + protected static final long MILLIS_SECOND = 1000; + + protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + + private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L; + + @Autowired + private RedisCache redisCache; + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUser getLoginUser(HttpServletRequest request) + { + // 获取请求携带的令牌 + String token = getToken(request); + if (StringUtils.isNotEmpty(token)) + { + try + { + Claims claims = parseToken(token); + // 解析对应的权限以及用户信息 + String uuid = (String) claims.get(Constants.LOGIN_USER_KEY); + String userKey = getTokenKey(uuid); + LoginUser user = redisCache.getCacheObject(userKey); + return user; + } + catch (Exception e) + { + } + } + return null; + } + + /** + * 设置用户身份信息 + */ + public void setLoginUser(LoginUser loginUser) + { + if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) + { + refreshToken(loginUser); + } + } + + /** + * 删除用户身份信息 + */ + public void delLoginUser(String token) + { + if (StringUtils.isNotEmpty(token)) + { + String userKey = getTokenKey(token); + redisCache.deleteObject(userKey); + } + } + + /** + * 创建令牌 + * + * @param loginUser 用户信息 + * @return 令牌 + */ + public String createToken(LoginUser loginUser) + { + String token = IdUtils.fastUUID(); + loginUser.setToken(token); + setUserAgent(loginUser); + refreshToken(loginUser); + + Map claims = new HashMap<>(); + claims.put(Constants.LOGIN_USER_KEY, token); + return createToken(claims); + } + + /** + * 验证令牌有效期,相差不足20分钟,自动刷新缓存 + * + * @param loginUser + * @return 令牌 + */ + public void verifyToken(LoginUser loginUser) + { + long expireTime = loginUser.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTime - currentTime <= MILLIS_MINUTE_TEN) + { + refreshToken(loginUser); + } + } + + /** + * 刷新令牌有效期 + * + * @param loginUser 登录信息 + */ + public void refreshToken(LoginUser loginUser) + { + loginUser.setLoginTime(System.currentTimeMillis()); + loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(loginUser.getToken()); + redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + } + + /** + * 设置用户代理信息 + * + * @param loginUser 登录信息 + */ + public void setUserAgent(LoginUser loginUser) + { + UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + loginUser.setIpaddr(ip); + loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip)); + loginUser.setBrowser(userAgent.getBrowser().getName()); + loginUser.setOs(userAgent.getOperatingSystem().getName()); + } + + /** + * 从数据声明生成令牌 + * + * @param claims 数据声明 + * @return 令牌 + */ + private String createToken(Map claims) + { + String token = Jwts.builder() + .setClaims(claims) + .signWith(SignatureAlgorithm.HS512, secret).compact(); + return token; + } + + /** + * 从令牌中获取数据声明 + * + * @param token 令牌 + * @return 数据声明 + */ + private Claims parseToken(String token) + { + return Jwts.parser() + .setSigningKey(secret) + .parseClaimsJws(token) + .getBody(); + } + + /** + * 从令牌中获取用户名 + * + * @param token 令牌 + * @return 用户名 + */ + public String getUsernameFromToken(String token) + { + Claims claims = parseToken(token); + return claims.getSubject(); + } + + /** + * 获取请求token + * + * @param request + * @return token + */ + private String getToken(HttpServletRequest request) + { + String token = request.getHeader(header); + if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) + { + token = token.replace(Constants.TOKEN_PREFIX, ""); + } + return token; + } + + private String getTokenKey(String uuid) + { + return Constants.LOGIN_TOKEN_KEY + uuid; + } +} diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml new file mode 100644 index 0000000..c3ff924 --- /dev/null +++ b/ruoyi-generator/pom.xml @@ -0,0 +1,42 @@ + + + + ruoyi + com.ruoyi + 3.6.0 + + + + 4.0.0 + + ruoyi-generator + + + generator代码生成 + + + + + + + org.apache.velocity + velocity + + + + + commons-collections + commons-collections + + + + + com.ruoyi + ruoyi-common + + + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java new file mode 100644 index 0000000..cc4cd14 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java @@ -0,0 +1,73 @@ +package com.ruoyi.generator.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + +/** + * 读取代码生成相关配置 + * + * @author ruoyi + */ +@Component +@ConfigurationProperties(prefix = "gen") +@PropertySource(value = { "classpath:generator.yml" }) +public class GenConfig +{ + /** 作者 */ + public static String author; + + /** 生成包路径 */ + public static String packageName; + + /** 自动去除表前缀,默认是false */ + public static boolean autoRemovePre; + + /** 表前缀(类名不会包含表前缀) */ + public static String tablePrefix; + + public static String getAuthor() + { + return author; + } + + @Value("${author}") + public void setAuthor(String author) + { + GenConfig.author = author; + } + + public static String getPackageName() + { + return packageName; + } + + @Value("${packageName}") + public void setPackageName(String packageName) + { + GenConfig.packageName = packageName; + } + + public static boolean getAutoRemovePre() + { + return autoRemovePre; + } + + @Value("${autoRemovePre}") + public void setAutoRemovePre(boolean autoRemovePre) + { + GenConfig.autoRemovePre = autoRemovePre; + } + + public static String getTablePrefix() + { + return tablePrefix; + } + + @Value("${tablePrefix}") + public void setTablePrefix(String tablePrefix) + { + GenConfig.tablePrefix = tablePrefix; + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java new file mode 100644 index 0000000..6dfe5e3 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java @@ -0,0 +1,214 @@ +package com.ruoyi.generator.controller; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.service.IGenTableColumnService; +import com.ruoyi.generator.service.IGenTableService; + +/** + * 代码生成 操作处理 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/tool/gen") +public class GenController extends BaseController +{ + @Autowired + private IGenTableService genTableService; + + @Autowired + private IGenTableColumnService genTableColumnService; + + /** + * 查询代码生成列表 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping("/list") + public TableDataInfo genList(GenTable genTable) + { + startPage(); + List list = genTableService.selectGenTableList(genTable); + return getDataTable(list); + } + + /** + * 修改代码生成业务 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:query')") + @GetMapping(value = "/{talbleId}") + public AjaxResult getInfo(@PathVariable Long talbleId) + { + GenTable table = genTableService.selectGenTableById(talbleId); + List tables = genTableService.selectGenTableAll(); + List list = genTableColumnService.selectGenTableColumnListByTableId(talbleId); + Map map = new HashMap(); + map.put("info", table); + map.put("rows", list); + map.put("tables", tables); + return AjaxResult.success(map); + } + + /** + * 查询数据库列表 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping("/db/list") + public TableDataInfo dataList(GenTable genTable) + { + startPage(); + List list = genTableService.selectDbTableList(genTable); + return getDataTable(list); + } + + /** + * 查询数据表字段列表 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping(value = "/column/{talbleId}") + public TableDataInfo columnList(Long tableId) + { + TableDataInfo dataInfo = new TableDataInfo(); + List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); + dataInfo.setRows(list); + dataInfo.setTotal(list.size()); + return dataInfo; + } + + /** + * 导入表结构(保存) + */ + @PreAuthorize("@ss.hasPermi('tool:gen:import')") + @Log(title = "代码生成", businessType = BusinessType.IMPORT) + @PostMapping("/importTable") + public AjaxResult importTableSave(String tables) + { + String[] tableNames = Convert.toStrArray(tables); + // 查询表信息 + List tableList = genTableService.selectDbTableListByNames(tableNames); + genTableService.importGenTable(tableList); + return AjaxResult.success(); + } + + /** + * 修改保存代码生成业务 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:edit')") + @Log(title = "代码生成", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult editSave(@Validated @RequestBody GenTable genTable) + { + genTableService.validateEdit(genTable); + genTableService.updateGenTable(genTable); + return AjaxResult.success(); + } + + /** + * 删除代码生成 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:remove')") + @Log(title = "代码生成", businessType = BusinessType.DELETE) + @DeleteMapping("/{tableIds}") + public AjaxResult remove(@PathVariable Long[] tableIds) + { + genTableService.deleteGenTableByIds(tableIds); + return AjaxResult.success(); + } + + /** + * 预览代码 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:preview')") + @GetMapping("/preview/{tableId}") + public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException + { + Map dataMap = genTableService.previewCode(tableId); + return AjaxResult.success(dataMap); + } + + /** + * 生成代码(下载方式) + */ + @PreAuthorize("@ss.hasPermi('tool:gen:code')") + @Log(title = "代码生成", businessType = BusinessType.GENCODE) + @GetMapping("/download/{tableName}") + public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException + { + byte[] data = genTableService.downloadCode(tableName); + genCode(response, data); + } + + /** + * 生成代码(自定义路径) + */ + @PreAuthorize("@ss.hasPermi('tool:gen:code')") + @Log(title = "代码生成", businessType = BusinessType.GENCODE) + @GetMapping("/genCode/{tableName}") + public AjaxResult genCode(@PathVariable("tableName") String tableName) + { + genTableService.generatorCode(tableName); + return AjaxResult.success(); + } + + /** + * 同步数据库 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:edit')") + @Log(title = "代码生成", businessType = BusinessType.UPDATE) + @GetMapping("/synchDb/{tableName}") + public AjaxResult synchDb(@PathVariable("tableName") String tableName) + { + genTableService.synchDb(tableName); + return AjaxResult.success(); + } + + /** + * 批量生成代码 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:code')") + @Log(title = "代码生成", businessType = BusinessType.GENCODE) + @GetMapping("/batchGenCode") + public void batchGenCode(HttpServletResponse response, String tables) throws IOException + { + String[] tableNames = Convert.toStrArray(tables); + byte[] data = genTableService.downloadCode(tableNames); + genCode(response, data); + } + + /** + * 生成zip文件 + */ + private void genCode(HttpServletResponse response, byte[] data) throws IOException + { + response.reset(); + response.addHeader("Access-Control-Allow-Origin", "*"); + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\""); + response.addHeader("Content-Length", "" + data.length); + response.setContentType("application/octet-stream; charset=UTF-8"); + IOUtils.write(data, response.getOutputStream()); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java new file mode 100644 index 0000000..269779c --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java @@ -0,0 +1,372 @@ +package com.ruoyi.generator.domain; + +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.apache.commons.lang3.ArrayUtils; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.utils.StringUtils; + +/** + * 业务表 gen_table + * + * @author ruoyi + */ +public class GenTable extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 编号 */ + private Long tableId; + + /** 表名称 */ + @NotBlank(message = "表名称不能为空") + private String tableName; + + /** 表描述 */ + @NotBlank(message = "表描述不能为空") + private String tableComment; + + /** 关联父表的表名 */ + private String subTableName; + + /** 本表关联父表的外键名 */ + private String subTableFkName; + + /** 实体类名称(首字母大写) */ + @NotBlank(message = "实体类名称不能为空") + private String className; + + /** 使用的模板(crud单表操作 tree树表操作 sub主子表操作) */ + private String tplCategory; + + /** 生成包路径 */ + @NotBlank(message = "生成包路径不能为空") + private String packageName; + + /** 生成模块名 */ + @NotBlank(message = "生成模块名不能为空") + private String moduleName; + + /** 生成业务名 */ + @NotBlank(message = "生成业务名不能为空") + private String businessName; + + /** 生成功能名 */ + @NotBlank(message = "生成功能名不能为空") + private String functionName; + + /** 生成作者 */ + @NotBlank(message = "作者不能为空") + private String functionAuthor; + + /** 生成代码方式(0zip压缩包 1自定义路径) */ + private String genType; + + /** 生成路径(不填默认项目路径) */ + private String genPath; + + /** 主键信息 */ + private GenTableColumn pkColumn; + + /** 子表信息 */ + private GenTable subTable; + + /** 表列信息 */ + @Valid + private List columns; + + /** 其它生成选项 */ + private String options; + + /** 树编码字段 */ + private String treeCode; + + /** 树父编码字段 */ + private String treeParentCode; + + /** 树名称字段 */ + private String treeName; + + /** 上级菜单ID字段 */ + private String parentMenuId; + + /** 上级菜单名称字段 */ + private String parentMenuName; + + public Long getTableId() + { + return tableId; + } + + public void setTableId(Long tableId) + { + this.tableId = tableId; + } + + public String getTableName() + { + return tableName; + } + + public void setTableName(String tableName) + { + this.tableName = tableName; + } + + public String getTableComment() + { + return tableComment; + } + + public void setTableComment(String tableComment) + { + this.tableComment = tableComment; + } + + public String getSubTableName() + { + return subTableName; + } + + public void setSubTableName(String subTableName) + { + this.subTableName = subTableName; + } + + public String getSubTableFkName() + { + return subTableFkName; + } + + public void setSubTableFkName(String subTableFkName) + { + this.subTableFkName = subTableFkName; + } + + public String getClassName() + { + return className; + } + + public void setClassName(String className) + { + this.className = className; + } + + public String getTplCategory() + { + return tplCategory; + } + + public void setTplCategory(String tplCategory) + { + this.tplCategory = tplCategory; + } + + public String getPackageName() + { + return packageName; + } + + public void setPackageName(String packageName) + { + this.packageName = packageName; + } + + public String getModuleName() + { + return moduleName; + } + + public void setModuleName(String moduleName) + { + this.moduleName = moduleName; + } + + public String getBusinessName() + { + return businessName; + } + + public void setBusinessName(String businessName) + { + this.businessName = businessName; + } + + public String getFunctionName() + { + return functionName; + } + + public void setFunctionName(String functionName) + { + this.functionName = functionName; + } + + public String getFunctionAuthor() + { + return functionAuthor; + } + + public void setFunctionAuthor(String functionAuthor) + { + this.functionAuthor = functionAuthor; + } + + public String getGenType() + { + return genType; + } + + public void setGenType(String genType) + { + this.genType = genType; + } + + public String getGenPath() + { + return genPath; + } + + public void setGenPath(String genPath) + { + this.genPath = genPath; + } + + public GenTableColumn getPkColumn() + { + return pkColumn; + } + + public void setPkColumn(GenTableColumn pkColumn) + { + this.pkColumn = pkColumn; + } + + public GenTable getSubTable() + { + return subTable; + } + + public void setSubTable(GenTable subTable) + { + this.subTable = subTable; + } + + public List getColumns() + { + return columns; + } + + public void setColumns(List columns) + { + this.columns = columns; + } + + public String getOptions() + { + return options; + } + + public void setOptions(String options) + { + this.options = options; + } + + public String getTreeCode() + { + return treeCode; + } + + public void setTreeCode(String treeCode) + { + this.treeCode = treeCode; + } + + public String getTreeParentCode() + { + return treeParentCode; + } + + public void setTreeParentCode(String treeParentCode) + { + this.treeParentCode = treeParentCode; + } + + public String getTreeName() + { + return treeName; + } + + public void setTreeName(String treeName) + { + this.treeName = treeName; + } + + public String getParentMenuId() + { + return parentMenuId; + } + + public void setParentMenuId(String parentMenuId) + { + this.parentMenuId = parentMenuId; + } + + public String getParentMenuName() + { + return parentMenuName; + } + + public void setParentMenuName(String parentMenuName) + { + this.parentMenuName = parentMenuName; + } + + public boolean isSub() + { + return isSub(this.tplCategory); + } + + public static boolean isSub(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_SUB, tplCategory); + } + + public boolean isTree() + { + return isTree(this.tplCategory); + } + + public static boolean isTree(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory); + } + + public boolean isCrud() + { + return isCrud(this.tplCategory); + } + + public static boolean isCrud(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory); + } + + public boolean isSuperColumn(String javaField) + { + return isSuperColumn(this.tplCategory, javaField); + } + + public static boolean isSuperColumn(String tplCategory, String javaField) + { + if (isTree(tplCategory)) + { + return StringUtils.equalsAnyIgnoreCase(javaField, + ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY)); + } + return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java new file mode 100644 index 0000000..d1733b6 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java @@ -0,0 +1,373 @@ +package com.ruoyi.generator.domain; + +import javax.validation.constraints.NotBlank; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.utils.StringUtils; + +/** + * 代码生成业务字段表 gen_table_column + * + * @author ruoyi + */ +public class GenTableColumn extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 编号 */ + private Long columnId; + + /** 归属表编号 */ + private Long tableId; + + /** 列名称 */ + private String columnName; + + /** 列描述 */ + private String columnComment; + + /** 列类型 */ + private String columnType; + + /** JAVA类型 */ + private String javaType; + + /** JAVA字段名 */ + @NotBlank(message = "Java属性不能为空") + private String javaField; + + /** 是否主键(1是) */ + private String isPk; + + /** 是否自增(1是) */ + private String isIncrement; + + /** 是否必填(1是) */ + private String isRequired; + + /** 是否为插入字段(1是) */ + private String isInsert; + + /** 是否编辑字段(1是) */ + private String isEdit; + + /** 是否列表字段(1是) */ + private String isList; + + /** 是否查询字段(1是) */ + private String isQuery; + + /** 查询方式(EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围) */ + private String queryType; + + /** 显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件、image图片上传控件、upload文件上传控件、editor富文本控件) */ + private String htmlType; + + /** 字典类型 */ + private String dictType; + + /** 排序 */ + private Integer sort; + + public void setColumnId(Long columnId) + { + this.columnId = columnId; + } + + public Long getColumnId() + { + return columnId; + } + + public void setTableId(Long tableId) + { + this.tableId = tableId; + } + + public Long getTableId() + { + return tableId; + } + + public void setColumnName(String columnName) + { + this.columnName = columnName; + } + + public String getColumnName() + { + return columnName; + } + + public void setColumnComment(String columnComment) + { + this.columnComment = columnComment; + } + + public String getColumnComment() + { + return columnComment; + } + + public void setColumnType(String columnType) + { + this.columnType = columnType; + } + + public String getColumnType() + { + return columnType; + } + + public void setJavaType(String javaType) + { + this.javaType = javaType; + } + + public String getJavaType() + { + return javaType; + } + + public void setJavaField(String javaField) + { + this.javaField = javaField; + } + + public String getJavaField() + { + return javaField; + } + + public String getCapJavaField() + { + return StringUtils.capitalize(javaField); + } + + public void setIsPk(String isPk) + { + this.isPk = isPk; + } + + public String getIsPk() + { + return isPk; + } + + public boolean isPk() + { + return isPk(this.isPk); + } + + public boolean isPk(String isPk) + { + return isPk != null && StringUtils.equals("1", isPk); + } + + public String getIsIncrement() + { + return isIncrement; + } + + public void setIsIncrement(String isIncrement) + { + this.isIncrement = isIncrement; + } + + public boolean isIncrement() + { + return isIncrement(this.isIncrement); + } + + public boolean isIncrement(String isIncrement) + { + return isIncrement != null && StringUtils.equals("1", isIncrement); + } + + public void setIsRequired(String isRequired) + { + this.isRequired = isRequired; + } + + public String getIsRequired() + { + return isRequired; + } + + public boolean isRequired() + { + return isRequired(this.isRequired); + } + + public boolean isRequired(String isRequired) + { + return isRequired != null && StringUtils.equals("1", isRequired); + } + + public void setIsInsert(String isInsert) + { + this.isInsert = isInsert; + } + + public String getIsInsert() + { + return isInsert; + } + + public boolean isInsert() + { + return isInsert(this.isInsert); + } + + public boolean isInsert(String isInsert) + { + return isInsert != null && StringUtils.equals("1", isInsert); + } + + public void setIsEdit(String isEdit) + { + this.isEdit = isEdit; + } + + public String getIsEdit() + { + return isEdit; + } + + public boolean isEdit() + { + return isInsert(this.isEdit); + } + + public boolean isEdit(String isEdit) + { + return isEdit != null && StringUtils.equals("1", isEdit); + } + + public void setIsList(String isList) + { + this.isList = isList; + } + + public String getIsList() + { + return isList; + } + + public boolean isList() + { + return isList(this.isList); + } + + public boolean isList(String isList) + { + return isList != null && StringUtils.equals("1", isList); + } + + public void setIsQuery(String isQuery) + { + this.isQuery = isQuery; + } + + public String getIsQuery() + { + return isQuery; + } + + public boolean isQuery() + { + return isQuery(this.isQuery); + } + + public boolean isQuery(String isQuery) + { + return isQuery != null && StringUtils.equals("1", isQuery); + } + + public void setQueryType(String queryType) + { + this.queryType = queryType; + } + + public String getQueryType() + { + return queryType; + } + + public String getHtmlType() + { + return htmlType; + } + + public void setHtmlType(String htmlType) + { + this.htmlType = htmlType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + public String getDictType() + { + return dictType; + } + + public void setSort(Integer sort) + { + this.sort = sort; + } + + public Integer getSort() + { + return sort; + } + + public boolean isSuperColumn() + { + return isSuperColumn(this.javaField); + } + + public static boolean isSuperColumn(String javaField) + { + return StringUtils.equalsAnyIgnoreCase(javaField, + // BaseEntity + "createBy", "createTime", "updateBy", "updateTime", "remark", + // TreeEntity + "parentName", "parentId", "orderNum", "ancestors"); + } + + public boolean isUsableColumn() + { + return isUsableColumn(javaField); + } + + public static boolean isUsableColumn(String javaField) + { + // isSuperColumn()中的名单用于避免生成多余Domain属性,若某些属性在生成页面时需要用到不能忽略,则放在此处白名单 + return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum", "remark"); + } + + public String readConverterExp() + { + String remarks = StringUtils.substringBetween(this.columnComment, "(", ")"); + StringBuffer sb = new StringBuffer(); + if (StringUtils.isNotEmpty(remarks)) + { + for (String value : remarks.split(" ")) + { + if (StringUtils.isNotEmpty(value)) + { + Object startStr = value.subSequence(0, 1); + String endStr = value.substring(1); + sb.append("").append(startStr).append("=").append(endStr).append(","); + } + } + return sb.deleteCharAt(sb.length() - 1).toString(); + } + else + { + return this.columnComment; + } + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java new file mode 100644 index 0000000..951e166 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java @@ -0,0 +1,60 @@ +package com.ruoyi.generator.mapper; + +import java.util.List; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 业务字段 数据层 + * + * @author ruoyi + */ +public interface GenTableColumnMapper +{ + /** + * 根据表名称查询列信息 + * + * @param tableName 表名称 + * @return 列信息 + */ + public List selectDbTableColumnsByName(String tableName); + + /** + * 查询业务字段列表 + * + * @param tableId 业务字段编号 + * @return 业务字段集合 + */ + public List selectGenTableColumnListByTableId(Long tableId); + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int insertGenTableColumn(GenTableColumn genTableColumn); + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int updateGenTableColumn(GenTableColumn genTableColumn); + + /** + * 删除业务字段 + * + * @param genTableColumns 列数据 + * @return 结果 + */ + public int deleteGenTableColumns(List genTableColumns); + + /** + * 批量删除业务字段 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteGenTableColumnByIds(Long[] ids); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java new file mode 100644 index 0000000..9b330df --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java @@ -0,0 +1,83 @@ +package com.ruoyi.generator.mapper; + +import java.util.List; +import com.ruoyi.generator.domain.GenTable; + +/** + * 业务 数据层 + * + * @author ruoyi + */ +public interface GenTableMapper +{ + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * @return 业务集合 + */ + public List selectGenTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * @return 数据库表集合 + */ + public List selectDbTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * @return 数据库表集合 + */ + public List selectDbTableListByNames(String[] tableNames); + + /** + * 查询所有表信息 + * + * @return 表信息集合 + */ + public List selectGenTableAll(); + + /** + * 查询表ID业务信息 + * + * @param id 业务ID + * @return 业务信息 + */ + public GenTable selectGenTableById(Long id); + + /** + * 查询表名称业务信息 + * + * @param tableName 表名称 + * @return 业务信息 + */ + public GenTable selectGenTableByName(String tableName); + + /** + * 新增业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + public int insertGenTable(GenTable genTable); + + /** + * 修改业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + public int updateGenTable(GenTable genTable); + + /** + * 批量删除业务 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteGenTableByIds(Long[] ids); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java new file mode 100644 index 0000000..0679689 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java @@ -0,0 +1,68 @@ +package com.ruoyi.generator.service; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.mapper.GenTableColumnMapper; + +/** + * 业务字段 服务层实现 + * + * @author ruoyi + */ +@Service +public class GenTableColumnServiceImpl implements IGenTableColumnService +{ + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 查询业务字段列表 + * + * @param tableId 业务字段编号 + * @return 业务字段集合 + */ + @Override + public List selectGenTableColumnListByTableId(Long tableId) + { + return genTableColumnMapper.selectGenTableColumnListByTableId(tableId); + } + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + @Override + public int insertGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.insertGenTableColumn(genTableColumn); + } + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + @Override + public int updateGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.updateGenTableColumn(genTableColumn); + } + + /** + * 删除业务字段对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteGenTableColumnByIds(String ids) + { + return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java new file mode 100644 index 0000000..499da03 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java @@ -0,0 +1,500 @@ +package com.ruoyi.generator.service; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.StringWriter; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.core.text.CharsetKit; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.mapper.GenTableColumnMapper; +import com.ruoyi.generator.mapper.GenTableMapper; +import com.ruoyi.generator.util.GenUtils; +import com.ruoyi.generator.util.VelocityInitializer; +import com.ruoyi.generator.util.VelocityUtils; + +/** + * 业务 服务层实现 + * + * @author ruoyi + */ +@Service +public class GenTableServiceImpl implements IGenTableService +{ + private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class); + + @Autowired + private GenTableMapper genTableMapper; + + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 查询业务信息 + * + * @param id 业务ID + * @return 业务信息 + */ + @Override + public GenTable selectGenTableById(Long id) + { + GenTable genTable = genTableMapper.selectGenTableById(id); + setTableFromOptions(genTable); + return genTable; + } + + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * @return 业务集合 + */ + @Override + public List selectGenTableList(GenTable genTable) + { + return genTableMapper.selectGenTableList(genTable); + } + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * @return 数据库表集合 + */ + @Override + public List selectDbTableList(GenTable genTable) + { + return genTableMapper.selectDbTableList(genTable); + } + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * @return 数据库表集合 + */ + @Override + public List selectDbTableListByNames(String[] tableNames) + { + return genTableMapper.selectDbTableListByNames(tableNames); + } + + /** + * 查询所有表信息 + * + * @return 表信息集合 + */ + @Override + public List selectGenTableAll() + { + return genTableMapper.selectGenTableAll(); + } + + /** + * 修改业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + @Override + @Transactional + public void updateGenTable(GenTable genTable) + { + String options = JSON.toJSONString(genTable.getParams()); + genTable.setOptions(options); + int row = genTableMapper.updateGenTable(genTable); + if (row > 0) + { + for (GenTableColumn cenTableColumn : genTable.getColumns()) + { + genTableColumnMapper.updateGenTableColumn(cenTableColumn); + } + } + } + + /** + * 删除业务对象 + * + * @param tableIds 需要删除的数据ID + * @return 结果 + */ + @Override + @Transactional + public void deleteGenTableByIds(Long[] tableIds) + { + genTableMapper.deleteGenTableByIds(tableIds); + genTableColumnMapper.deleteGenTableColumnByIds(tableIds); + } + + /** + * 导入表结构 + * + * @param tableList 导入表列表 + */ + @Override + @Transactional + public void importGenTable(List tableList) + { + String operName = SecurityUtils.getUsername(); + try + { + for (GenTable table : tableList) + { + String tableName = table.getTableName(); + GenUtils.initTable(table, operName); + int row = genTableMapper.insertGenTable(table); + if (row > 0) + { + // 保存列信息 + List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + for (GenTableColumn column : genTableColumns) + { + GenUtils.initColumnField(column, table); + genTableColumnMapper.insertGenTableColumn(column); + } + } + } + } + catch (Exception e) + { + throw new ServiceException("导入失败:" + e.getMessage()); + } + } + + /** + * 预览代码 + * + * @param tableId 表编号 + * @return 预览数据列表 + */ + @Override + public Map previewCode(Long tableId) + { + Map dataMap = new LinkedHashMap<>(); + // 查询表信息 + GenTable table = genTableMapper.selectGenTableById(tableId); + // 设置主子表信息 + setSubTable(table); + // 设置主键列信息 + setPkColumn(table); + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + for (String template : templates) + { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + dataMap.put(template, sw.toString()); + } + return dataMap; + } + + /** + * 生成代码(下载方式) + * + * @param tableName 表名称 + * @return 数据 + */ + @Override + public byte[] downloadCode(String tableName) + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + generatorCode(tableName, zip); + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 生成代码(自定义路径) + * + * @param tableName 表名称 + */ + @Override + public void generatorCode(String tableName) + { + // 查询表信息 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 设置主子表信息 + setSubTable(table); + // 设置主键列信息 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + for (String template : templates) + { + if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) + { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try + { + String path = getGenPath(table, template); + FileUtils.writeStringToFile(new File(path), sw.toString(), CharsetKit.UTF_8); + } + catch (IOException e) + { + throw new ServiceException("渲染模板失败,表名:" + table.getTableName()); + } + } + } + } + + /** + * 同步数据库 + * + * @param tableName 表名称 + */ + @Override + @Transactional + public void synchDb(String tableName) + { + GenTable table = genTableMapper.selectGenTableByName(tableName); + List tableColumns = table.getColumns(); + List tableColumnNames = tableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); + + List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + if (StringUtils.isEmpty(dbTableColumns)) + { + throw new ServiceException("同步数据失败,原表结构不存在"); + } + List dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); + + dbTableColumns.forEach(column -> { + if (!tableColumnNames.contains(column.getColumnName())) + { + GenUtils.initColumnField(column, table); + genTableColumnMapper.insertGenTableColumn(column); + } + }); + + List delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); + if (StringUtils.isNotEmpty(delColumns)) + { + genTableColumnMapper.deleteGenTableColumns(delColumns); + } + } + + /** + * 批量生成代码(下载方式) + * + * @param tableNames 表数组 + * @return 数据 + */ + @Override + public byte[] downloadCode(String[] tableNames) + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + for (String tableName : tableNames) + { + generatorCode(tableName, zip); + } + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 查询表信息并生成代码 + */ + private void generatorCode(String tableName, ZipOutputStream zip) + { + // 查询表信息 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 设置主子表信息 + setSubTable(table); + // 设置主键列信息 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + for (String template : templates) + { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try + { + // 添加到zip + zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); + IOUtils.write(sw.toString(), zip, Constants.UTF8); + IOUtils.closeQuietly(sw); + zip.flush(); + zip.closeEntry(); + } + catch (IOException e) + { + log.error("渲染模板失败,表名:" + table.getTableName(), e); + } + } + } + + /** + * 修改保存参数校验 + * + * @param genTable 业务信息 + */ + @Override + public void validateEdit(GenTable genTable) + { + if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) + { + String options = JSON.toJSONString(genTable.getParams()); + JSONObject paramsObj = JSONObject.parseObject(options); + if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) + { + throw new ServiceException("树编码字段不能为空"); + } + else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) + { + throw new ServiceException("树父编码字段不能为空"); + } + else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) + { + throw new ServiceException("树名称字段不能为空"); + } + else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) + { + if (StringUtils.isEmpty(genTable.getSubTableName())) + { + throw new ServiceException("关联子表的表名不能为空"); + } + else if (StringUtils.isEmpty(genTable.getSubTableFkName())) + { + throw new ServiceException("子表关联的外键名不能为空"); + } + } + } + } + + /** + * 设置主键列信息 + * + * @param table 业务表信息 + */ + public void setPkColumn(GenTable table) + { + for (GenTableColumn column : table.getColumns()) + { + if (column.isPk()) + { + table.setPkColumn(column); + break; + } + } + if (StringUtils.isNull(table.getPkColumn())) + { + table.setPkColumn(table.getColumns().get(0)); + } + if (GenConstants.TPL_SUB.equals(table.getTplCategory())) + { + for (GenTableColumn column : table.getSubTable().getColumns()) + { + if (column.isPk()) + { + table.getSubTable().setPkColumn(column); + break; + } + } + if (StringUtils.isNull(table.getSubTable().getPkColumn())) + { + table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); + } + } + } + + /** + * 设置主子表信息 + * + * @param table 业务表信息 + */ + public void setSubTable(GenTable table) + { + String subTableName = table.getSubTableName(); + if (StringUtils.isNotEmpty(subTableName)) + { + table.setSubTable(genTableMapper.selectGenTableByName(subTableName)); + } + } + + /** + * 设置代码生成其他选项值 + * + * @param genTable 设置后的生成对象 + */ + public void setTableFromOptions(GenTable genTable) + { + JSONObject paramsObj = JSONObject.parseObject(genTable.getOptions()); + if (StringUtils.isNotNull(paramsObj)) + { + String treeCode = paramsObj.getString(GenConstants.TREE_CODE); + String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + String parentMenuId = paramsObj.getString(GenConstants.PARENT_MENU_ID); + String parentMenuName = paramsObj.getString(GenConstants.PARENT_MENU_NAME); + + genTable.setTreeCode(treeCode); + genTable.setTreeParentCode(treeParentCode); + genTable.setTreeName(treeName); + genTable.setParentMenuId(parentMenuId); + genTable.setParentMenuName(parentMenuName); + } + } + + /** + * 获取代码生成地址 + * + * @param table 业务表信息 + * @param template 模板文件路径 + * @return 生成地址 + */ + public static String getGenPath(GenTable table, String template) + { + String genPath = table.getGenPath(); + if (StringUtils.equals(genPath, "/")) + { + return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table); + } + return genPath + File.separator + VelocityUtils.getFileName(template, table); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java new file mode 100644 index 0000000..3037f70 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java @@ -0,0 +1,44 @@ +package com.ruoyi.generator.service; + +import java.util.List; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 业务字段 服务层 + * + * @author ruoyi + */ +public interface IGenTableColumnService +{ + /** + * 查询业务字段列表 + * + * @param tableId 业务字段编号 + * @return 业务字段集合 + */ + public List selectGenTableColumnListByTableId(Long tableId); + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int insertGenTableColumn(GenTableColumn genTableColumn); + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int updateGenTableColumn(GenTableColumn genTableColumn); + + /** + * 删除业务字段信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteGenTableColumnByIds(String ids); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java new file mode 100644 index 0000000..9d53f95 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java @@ -0,0 +1,121 @@ +package com.ruoyi.generator.service; + +import java.util.List; +import java.util.Map; +import com.ruoyi.generator.domain.GenTable; + +/** + * 业务 服务层 + * + * @author ruoyi + */ +public interface IGenTableService +{ + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * @return 业务集合 + */ + public List selectGenTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * @return 数据库表集合 + */ + public List selectDbTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * @return 数据库表集合 + */ + public List selectDbTableListByNames(String[] tableNames); + + /** + * 查询所有表信息 + * + * @return 表信息集合 + */ + public List selectGenTableAll(); + + /** + * 查询业务信息 + * + * @param id 业务ID + * @return 业务信息 + */ + public GenTable selectGenTableById(Long id); + + /** + * 修改业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + public void updateGenTable(GenTable genTable); + + /** + * 删除业务信息 + * + * @param tableIds 需要删除的表数据ID + * @return 结果 + */ + public void deleteGenTableByIds(Long[] tableIds); + + /** + * 导入表结构 + * + * @param tableList 导入表列表 + */ + public void importGenTable(List tableList); + + /** + * 预览代码 + * + * @param tableId 表编号 + * @return 预览数据列表 + */ + public Map previewCode(Long tableId); + + /** + * 生成代码(下载方式) + * + * @param tableName 表名称 + * @return 数据 + */ + public byte[] downloadCode(String tableName); + + /** + * 生成代码(自定义路径) + * + * @param tableName 表名称 + * @return 数据 + */ + public void generatorCode(String tableName); + + /** + * 同步数据库 + * + * @param tableName 表名称 + */ + public void synchDb(String tableName); + + /** + * 批量生成代码(下载方式) + * + * @param tableNames 表数组 + * @return 数据 + */ + public byte[] downloadCode(String[] tableNames); + + /** + * 修改保存参数校验 + * + * @param genTable 业务信息 + */ + public void validateEdit(GenTable genTable); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java new file mode 100644 index 0000000..06c6821 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java @@ -0,0 +1,258 @@ +package com.ruoyi.generator.util; + +import java.util.Arrays; +import org.apache.commons.lang3.RegExUtils; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.generator.config.GenConfig; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 代码生成器 工具类 + * + * @author ruoyi + */ +public class GenUtils +{ + /** + * 初始化表信息 + */ + public static void initTable(GenTable genTable, String operName) + { + genTable.setClassName(convertClassName(genTable.getTableName())); + genTable.setPackageName(GenConfig.getPackageName()); + genTable.setModuleName(getModuleName(GenConfig.getPackageName())); + genTable.setBusinessName(getBusinessName(genTable.getTableName())); + genTable.setFunctionName(replaceText(genTable.getTableComment())); + genTable.setFunctionAuthor(GenConfig.getAuthor()); + genTable.setCreateBy(operName); + } + + /** + * 初始化列属性字段 + */ + public static void initColumnField(GenTableColumn column, GenTable table) + { + String dataType = getDbType(column.getColumnType()); + String columnName = column.getColumnName(); + column.setTableId(table.getTableId()); + column.setCreateBy(table.getCreateBy()); + // 设置java字段名 + column.setJavaField(StringUtils.toCamelCase(columnName)); + // 设置默认类型 + column.setJavaType(GenConstants.TYPE_STRING); + + if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) + { + // 字符串长度超过500设置为文本域 + Integer columnLength = getColumnLength(column.getColumnType()); + String htmlType = columnLength >= 500 || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType) ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT; + column.setHtmlType(htmlType); + } + else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) + { + column.setJavaType(GenConstants.TYPE_DATE); + column.setHtmlType(GenConstants.HTML_DATETIME); + } + else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) + { + column.setHtmlType(GenConstants.HTML_INPUT); + + // 如果是浮点型 统一用BigDecimal + String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ","); + if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) + { + column.setJavaType(GenConstants.TYPE_BIGDECIMAL); + } + // 如果是整形 + else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) + { + column.setJavaType(GenConstants.TYPE_INTEGER); + } + // 长整形 + else + { + column.setJavaType(GenConstants.TYPE_LONG); + } + } + + // 插入字段(默认所有字段都需要插入) + column.setIsInsert(GenConstants.REQUIRE); + + // 编辑字段 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk()) + { + column.setIsEdit(GenConstants.REQUIRE); + } + // 列表字段 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) + { + column.setIsList(GenConstants.REQUIRE); + } + // 查询字段 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) + { + column.setIsQuery(GenConstants.REQUIRE); + } + + // 查询字段类型 + if (StringUtils.endsWithIgnoreCase(columnName, "name")) + { + column.setQueryType(GenConstants.QUERY_LIKE); + } + // 状态字段设置单选框 + if (StringUtils.endsWithIgnoreCase(columnName, "status")) + { + column.setHtmlType(GenConstants.HTML_RADIO); + } + // 类型&性别字段设置下拉框 + else if (StringUtils.endsWithIgnoreCase(columnName, "type") + || StringUtils.endsWithIgnoreCase(columnName, "sex")) + { + column.setHtmlType(GenConstants.HTML_SELECT); + } + // 图片字段设置图片上传控件 + else if (StringUtils.endsWithIgnoreCase(columnName, "image")) + { + column.setHtmlType(GenConstants.HTML_IMAGE_UPLOAD); + } + // 文件字段设置文件上传控件 + else if (StringUtils.endsWithIgnoreCase(columnName, "file")) + { + column.setHtmlType(GenConstants.HTML_FILE_UPLOAD); + } + // 内容字段设置富文本控件 + else if (StringUtils.endsWithIgnoreCase(columnName, "content")) + { + column.setHtmlType(GenConstants.HTML_EDITOR); + } + } + + /** + * 校验数组是否包含指定值 + * + * @param arr 数组 + * @param targetValue 值 + * @return 是否包含 + */ + public static boolean arraysContains(String[] arr, String targetValue) + { + return Arrays.asList(arr).contains(targetValue); + } + + /** + * 获取模块名 + * + * @param packageName 包名 + * @return 模块名 + */ + public static String getModuleName(String packageName) + { + int lastIndex = packageName.lastIndexOf("."); + int nameLength = packageName.length(); + String moduleName = StringUtils.substring(packageName, lastIndex + 1, nameLength); + return moduleName; + } + + /** + * 获取业务名 + * + * @param tableName 表名 + * @return 业务名 + */ + public static String getBusinessName(String tableName) + { + int lastIndex = tableName.lastIndexOf("_"); + int nameLength = tableName.length(); + String businessName = StringUtils.substring(tableName, lastIndex + 1, nameLength); + return businessName; + } + + /** + * 表名转换成Java类名 + * + * @param tableName 表名称 + * @return 类名 + */ + public static String convertClassName(String tableName) + { + boolean autoRemovePre = GenConfig.getAutoRemovePre(); + String tablePrefix = GenConfig.getTablePrefix(); + if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) + { + String[] searchList = StringUtils.split(tablePrefix, ","); + tableName = replaceFirst(tableName, searchList); + } + return StringUtils.convertToCamelCase(tableName); + } + + /** + * 批量替换前缀 + * + * @param replacementm 替换值 + * @param searchList 替换列表 + * @return + */ + public static String replaceFirst(String replacementm, String[] searchList) + { + String text = replacementm; + for (String searchString : searchList) + { + if (replacementm.startsWith(searchString)) + { + text = replacementm.replaceFirst(searchString, ""); + break; + } + } + return text; + } + + /** + * 关键字替换 + * + * @param text 需要被替换的名字 + * @return 替换后的名字 + */ + public static String replaceText(String text) + { + return RegExUtils.replaceAll(text, "(?:表|若依)", ""); + } + + /** + * 获取数据库类型字段 + * + * @param columnType 列类型 + * @return 截取后的列类型 + */ + public static String getDbType(String columnType) + { + if (StringUtils.indexOf(columnType, "(") > 0) + { + return StringUtils.substringBefore(columnType, "("); + } + else + { + return columnType; + } + } + + /** + * 获取字段长度 + * + * @param columnType 列类型 + * @return 截取后的列类型 + */ + public static Integer getColumnLength(String columnType) + { + if (StringUtils.indexOf(columnType, "(") > 0) + { + String length = StringUtils.substringBetween(columnType, "(", ")"); + return Integer.valueOf(length); + } + else + { + return 0; + } + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java new file mode 100644 index 0000000..32452b8 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java @@ -0,0 +1,35 @@ +package com.ruoyi.generator.util; + +import java.util.Properties; +import org.apache.velocity.app.Velocity; +import com.ruoyi.common.constant.Constants; + +/** + * VelocityEngine工厂 + * + * @author ruoyi + */ +public class VelocityInitializer +{ + /** + * 初始化vm方法 + */ + public static void initVelocity() + { + Properties p = new Properties(); + try + { + // 加载classpath目录下的vm文件 + p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + // 定义字符集 + p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8); + p.setProperty(Velocity.OUTPUT_ENCODING, Constants.UTF8); + // 初始化Velocity引擎,指定配置Properties + Velocity.init(p); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java new file mode 100644 index 0000000..4472928 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java @@ -0,0 +1,362 @@ +package com.ruoyi.generator.util; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import org.apache.velocity.VelocityContext; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 模板处理工具类 + * + * @author ruoyi + */ +public class VelocityUtils +{ + /** 项目空间路径 */ + private static final String PROJECT_PATH = "main/java"; + + /** mybatis空间路径 */ + private static final String MYBATIS_PATH = "main/resources/mapper"; + + /** 默认上级菜单,系统工具 */ + private static final String DEFAULT_PARENT_MENU_ID = "3"; + + /** + * 设置模板变量信息 + * + * @return 模板列表 + */ + public static VelocityContext prepareContext(GenTable genTable) + { + String moduleName = genTable.getModuleName(); + String businessName = genTable.getBusinessName(); + String packageName = genTable.getPackageName(); + String tplCategory = genTable.getTplCategory(); + String functionName = genTable.getFunctionName(); + + VelocityContext velocityContext = new VelocityContext(); + velocityContext.put("tplCategory", genTable.getTplCategory()); + velocityContext.put("tableName", genTable.getTableName()); + velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "【请填写功能名称】"); + velocityContext.put("ClassName", genTable.getClassName()); + velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName())); + velocityContext.put("moduleName", genTable.getModuleName()); + velocityContext.put("BusinessName", StringUtils.capitalize(genTable.getBusinessName())); + velocityContext.put("businessName", genTable.getBusinessName()); + velocityContext.put("basePackage", getPackagePrefix(packageName)); + velocityContext.put("packageName", packageName); + velocityContext.put("author", genTable.getFunctionAuthor()); + velocityContext.put("datetime", DateUtils.getDate()); + velocityContext.put("pkColumn", genTable.getPkColumn()); + velocityContext.put("importList", getImportList(genTable)); + velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName)); + velocityContext.put("columns", genTable.getColumns()); + velocityContext.put("table", genTable); + setMenuVelocityContext(velocityContext, genTable); + if (GenConstants.TPL_TREE.equals(tplCategory)) + { + setTreeVelocityContext(velocityContext, genTable); + } + if (GenConstants.TPL_SUB.equals(tplCategory)) + { + setSubVelocityContext(velocityContext, genTable); + } + return velocityContext; + } + + public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSONObject.parseObject(options); + String parentMenuId = getParentMenuId(paramsObj); + context.put("parentMenuId", parentMenuId); + } + + public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSONObject.parseObject(options); + String treeCode = getTreecode(paramsObj); + String treeParentCode = getTreeParentCode(paramsObj); + String treeName = getTreeName(paramsObj); + + context.put("treeCode", treeCode); + context.put("treeParentCode", treeParentCode); + context.put("treeName", treeName); + context.put("expandColumn", getExpandColumn(genTable)); + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) + { + context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + if (paramsObj.containsKey(GenConstants.TREE_NAME)) + { + context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME)); + } + } + + public static void setSubVelocityContext(VelocityContext context, GenTable genTable) + { + GenTable subTable = genTable.getSubTable(); + String subTableName = genTable.getSubTableName(); + String subTableFkName = genTable.getSubTableFkName(); + String subClassName = genTable.getSubTable().getClassName(); + String subTableFkClassName = StringUtils.convertToCamelCase(subTableFkName); + + context.put("subTable", subTable); + context.put("subTableName", subTableName); + context.put("subTableFkName", subTableFkName); + context.put("subTableFkClassName", subTableFkClassName); + context.put("subTableFkclassName", StringUtils.uncapitalize(subTableFkClassName)); + context.put("subClassName", subClassName); + context.put("subclassName", StringUtils.uncapitalize(subClassName)); + context.put("subImportList", getImportList(genTable.getSubTable())); + } + + /** + * 获取模板信息 + * + * @return 模板列表 + */ + public static List getTemplateList(String tplCategory) + { + List templates = new ArrayList(); + templates.add("vm/java/domain.java.vm"); + templates.add("vm/java/mapper.java.vm"); + templates.add("vm/java/service.java.vm"); + templates.add("vm/java/serviceImpl.java.vm"); + templates.add("vm/java/controller.java.vm"); + templates.add("vm/xml/mapper.xml.vm"); + templates.add("vm/sql/sql.vm"); + templates.add("vm/js/api.js.vm"); + if (GenConstants.TPL_CRUD.equals(tplCategory)) + { + templates.add("vm/vue/index.vue.vm"); + } + else if (GenConstants.TPL_TREE.equals(tplCategory)) + { + templates.add("vm/vue/index-tree.vue.vm"); + } + else if (GenConstants.TPL_SUB.equals(tplCategory)) + { + templates.add("vm/vue/index.vue.vm"); + templates.add("vm/java/sub-domain.java.vm"); + } + return templates; + } + + /** + * 获取文件名 + */ + public static String getFileName(String template, GenTable genTable) + { + // 文件名称 + String fileName = ""; + // 包路径 + String packageName = genTable.getPackageName(); + // 模块名 + String moduleName = genTable.getModuleName(); + // 大写类名 + String className = genTable.getClassName(); + // 业务名称 + String businessName = genTable.getBusinessName(); + + String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/"); + String mybatisPath = MYBATIS_PATH + "/" + moduleName; + String vuePath = "vue"; + + if (template.contains("domain.java.vm")) + { + fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); + } + if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) + { + fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); + } + else if (template.contains("mapper.java.vm")) + { + fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); + } + else if (template.contains("service.java.vm")) + { + fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); + } + else if (template.contains("serviceImpl.java.vm")) + { + fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); + } + else if (template.contains("controller.java.vm")) + { + fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); + } + else if (template.contains("mapper.xml.vm")) + { + fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); + } + else if (template.contains("sql.vm")) + { + fileName = businessName + "Menu.sql"; + } + else if (template.contains("api.js.vm")) + { + fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); + } + else if (template.contains("index.vue.vm")) + { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } + else if (template.contains("index-tree.vue.vm")) + { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } + return fileName; + } + + /** + * 获取包前缀 + * + * @param packageName 包名称 + * @return 包前缀名称 + */ + public static String getPackagePrefix(String packageName) + { + int lastIndex = packageName.lastIndexOf("."); + String basePackage = StringUtils.substring(packageName, 0, lastIndex); + return basePackage; + } + + /** + * 根据列类型获取导入包 + * + * @param genTable 业务表对象 + * @return 返回需要导入的包列表 + */ + public static HashSet getImportList(GenTable genTable) + { + List columns = genTable.getColumns(); + GenTable subGenTable = genTable.getSubTable(); + HashSet importList = new HashSet(); + if (StringUtils.isNotNull(subGenTable)) + { + importList.add("java.util.List"); + } + for (GenTableColumn column : columns) + { + if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) + { + importList.add("java.util.Date"); + importList.add("com.fasterxml.jackson.annotation.JsonFormat"); + } + else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) + { + importList.add("java.math.BigDecimal"); + } + } + return importList; + } + + /** + * 获取权限前缀 + * + * @param moduleName 模块名称 + * @param businessName 业务名称 + * @return 返回权限前缀 + */ + public static String getPermissionPrefix(String moduleName, String businessName) + { + return StringUtils.format("{}:{}", moduleName, businessName); + } + + /** + * 获取上级菜单ID字段 + * + * @param paramsObj 生成其他选项 + * @return 上级菜单ID字段 + */ + public static String getParentMenuId(JSONObject paramsObj) + { + if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) + && StringUtils.isNotEmpty(paramsObj.getString(GenConstants.PARENT_MENU_ID))) + { + return paramsObj.getString(GenConstants.PARENT_MENU_ID); + } + return DEFAULT_PARENT_MENU_ID; + } + + /** + * 获取树编码 + * + * @param paramsObj 生成其他选项 + * @return 树编码 + */ + public static String getTreecode(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_CODE)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE)); + } + return StringUtils.EMPTY; + } + + /** + * 获取树父编码 + * + * @param paramsObj 生成其他选项 + * @return 树父编码 + */ + public static String getTreeParentCode(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + return StringUtils.EMPTY; + } + + /** + * 获取树名称 + * + * @param paramsObj 生成其他选项 + * @return 树名称 + */ + public static String getTreeName(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_NAME)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME)); + } + return StringUtils.EMPTY; + } + + /** + * 获取需要在哪一列上面显示展开按钮 + * + * @param genTable 业务表对象 + * @return 展开按钮列序号 + */ + public static int getExpandColumn(GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSONObject.parseObject(options); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + int num = 0; + for (GenTableColumn column : genTable.getColumns()) + { + if (column.isList()) + { + num++; + String columnName = column.getColumnName(); + if (columnName.equals(treeName)) + { + break; + } + } + } + return num; + } +} diff --git a/ruoyi-generator/src/main/resources/generator.yml b/ruoyi-generator/src/main/resources/generator.yml new file mode 100644 index 0000000..89e75bd --- /dev/null +++ b/ruoyi-generator/src/main/resources/generator.yml @@ -0,0 +1,10 @@ +# 代码生成 +gen: + # 作者 + author: yinzhiying + # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool + packageName: com.ruoyi.segchk + # 自动去除表前缀,默认是false + autoRemovePre: false + # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) + tablePrefix: sys_ \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml new file mode 100644 index 0000000..5fa790f --- /dev/null +++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column + + + + + + + + insert into gen_table_column ( + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time + )values( + #{tableId}, + #{columnName}, + #{columnComment}, + #{columnType}, + #{javaType}, + #{javaField}, + #{isPk}, + #{isIncrement}, + #{isRequired}, + #{isInsert}, + #{isEdit}, + #{isList}, + #{isQuery}, + #{queryType}, + #{htmlType}, + #{dictType}, + #{sort}, + #{createBy}, + sysdate() + ) + + + + update gen_table_column + + column_comment = #{columnComment}, + java_type = #{javaType}, + java_field = #{javaField}, + is_insert = #{isInsert}, + is_edit = #{isEdit}, + is_list = #{isList}, + is_query = #{isQuery}, + is_required = #{isRequired}, + query_type = #{queryType}, + html_type = #{htmlType}, + dict_type = #{dictType}, + sort = #{sort}, + update_by = #{updateBy}, + update_time = sysdate() + + where column_id = #{columnId} + + + + delete from gen_table_column where table_id in + + #{tableId} + + + + + delete from gen_table_column where column_id in + + #{item.columnId} + + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml new file mode 100644 index 0000000..3162379 --- /dev/null +++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table + + + + + + + + + + + + + + + + + + insert into gen_table ( + table_name, + table_comment, + class_name, + tpl_category, + package_name, + module_name, + business_name, + function_name, + function_author, + gen_type, + gen_path, + remark, + create_by, + create_time + )values( + #{tableName}, + #{tableComment}, + #{className}, + #{tplCategory}, + #{packageName}, + #{moduleName}, + #{businessName}, + #{functionName}, + #{functionAuthor}, + #{genType}, + #{genPath}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update gen_table + + table_name = #{tableName}, + table_comment = #{tableComment}, + sub_table_name = #{subTableName}, + sub_table_fk_name = #{subTableFkName}, + class_name = #{className}, + function_author = #{functionAuthor}, + gen_type = #{genType}, + gen_path = #{genPath}, + tpl_category = #{tplCategory}, + package_name = #{packageName}, + module_name = #{moduleName}, + business_name = #{businessName}, + function_name = #{functionName}, + options = #{options}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where table_id = #{tableId} + + + + delete from gen_table where table_id in + + #{tableId} + + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm new file mode 100644 index 0000000..56ff5e6 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm @@ -0,0 +1,114 @@ +package ${packageName}.controller; + +import java.util.List; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; +import com.ruoyi.common.utils.poi.ExcelUtil; +#if($table.crud || $table.sub) +import com.ruoyi.common.core.page.TableDataInfo; +#elseif($table.tree) +#end + +/** + * ${functionName}Controller + * + * @author ${author} + * @date ${datetime} + */ +@RestController +@RequestMapping("/${moduleName}/${businessName}") +public class ${ClassName}Controller extends BaseController +{ + @Autowired + private I${ClassName}Service ${className}Service; + + /** + * 查询${functionName}列表 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')") + @GetMapping("/list") +#if($table.crud || $table.sub) + public TableDataInfo list(${ClassName} ${className}) + { + startPage(); + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return getDataTable(list); + } +#elseif($table.tree) + public AjaxResult list(${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return AjaxResult.success(list); + } +#end + + /** + * 导出${functionName}列表 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')") + @Log(title = "${functionName}", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); + return util.exportExcel(list, "${functionName}数据"); + } + + /** + * 获取${functionName}详细信息 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')") + @GetMapping(value = "/{${pkColumn.javaField}}") + public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) + { + return AjaxResult.success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField})); + } + + /** + * 新增${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')") + @Log(title = "${functionName}", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.insert${ClassName}(${className})); + } + + /** + * 修改${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')") + @Log(title = "${functionName}", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.update${ClassName}(${className})); + } + + /** + * 删除${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')") + @Log(title = "${functionName}", businessType = BusinessType.DELETE) + @DeleteMapping("/{${pkColumn.javaField}s}") + public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) + { + return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s)); + } +} diff --git a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm new file mode 100644 index 0000000..bd51c17 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm @@ -0,0 +1,105 @@ +package ${packageName}.domain; + +#foreach ($import in $importList) +import ${import}; +#end +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +#if($table.crud || $table.sub) +import com.ruoyi.common.core.domain.BaseEntity; +#elseif($table.tree) +import com.ruoyi.common.core.domain.TreeEntity; +#end + +/** + * ${functionName}对象 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +#if($table.crud || $table.sub) +#set($Entity="BaseEntity") +#elseif($table.tree) +#set($Entity="TreeEntity") +#end +public class ${ClassName} extends ${Entity} +{ + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("(")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end + private $column.javaType $column.javaField; + +#end +#end +#if($table.sub) + /** $table.subTable.functionName信息 */ + private List<${subClassName}> ${subclassName}List; + +#end +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } + + public $column.javaType get${AttrName}() + { + return $column.javaField; + } +#end +#end + +#if($table.sub) + public List<${subClassName}> get${subClassName}List() + { + return ${subclassName}List; + } + + public void set${subClassName}List(List<${subClassName}> ${subclassName}List) + { + this.${subclassName}List = ${subclassName}List; + } + +#end + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) +#foreach ($column in $columns) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + .append("${column.javaField}", get${AttrName}()) +#end +#if($table.sub) + .append("${subclassName}List", get${subClassName}List()) +#end + .toString(); + } +} diff --git a/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm new file mode 100644 index 0000000..42d015d --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm @@ -0,0 +1,91 @@ +package ${packageName}.mapper; + +import java.util.List; +import ${packageName}.domain.${ClassName}; +#if($table.sub) +import ${packageName}.domain.${subClassName}; +#end + +/** + * ${functionName}Mapper接口 + * + * @author ${author} + * @date ${datetime} + */ +public interface ${ClassName}Mapper +{ + /** + * 查询${functionName} + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return ${functionName} + */ + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 查询${functionName}列表 + * + * @param ${className} ${functionName} + * @return ${functionName}集合 + */ + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 新增${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 修改${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 删除${functionName} + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return 结果 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 批量删除${functionName} + * + * @param ${pkColumn.javaField}s 需要删除的数据主键集合 + * @return 结果 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); +#if($table.sub) + + /** + * 批量删除${subTable.functionName} + * + * @param ${pkColumn.javaField}s 需要删除的数据主键集合 + * @return 结果 + */ + public int delete${subClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 批量新增${subTable.functionName} + * + * @param ${subclassName}List ${subTable.functionName}列表 + * @return 结果 + */ + public int batch${subClassName}(List<${subClassName}> ${subclassName}List); + + + /** + * 通过${functionName}主键删除${subTable.functionName}信息 + * + * @param ${pkColumn.javaField} ${functionName}ID + * @return 结果 + */ + public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField}); +#end +} diff --git a/ruoyi-generator/src/main/resources/vm/java/service.java.vm b/ruoyi-generator/src/main/resources/vm/java/service.java.vm new file mode 100644 index 0000000..264882b --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/service.java.vm @@ -0,0 +1,61 @@ +package ${packageName}.service; + +import java.util.List; +import ${packageName}.domain.${ClassName}; + +/** + * ${functionName}Service接口 + * + * @author ${author} + * @date ${datetime} + */ +public interface I${ClassName}Service +{ + /** + * 查询${functionName} + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return ${functionName} + */ + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 查询${functionName}列表 + * + * @param ${className} ${functionName} + * @return ${functionName}集合 + */ + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 新增${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 修改${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 批量删除${functionName} + * + * @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合 + * @return 结果 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 删除${functionName}信息 + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return 结果 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); +} diff --git a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm new file mode 100644 index 0000000..75105ce --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -0,0 +1,166 @@ +package ${packageName}.service.impl; + +import java.util.List; +#foreach ($column in $columns) +#if($column.javaField == 'createTime' || $column.javaField == 'updateTime') +import com.ruoyi.common.utils.DateUtils; +#break +#end +#end +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +#if($table.sub) +import java.util.ArrayList; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import ${packageName}.domain.${subClassName}; +#end +import ${packageName}.mapper.${ClassName}Mapper; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; + +/** + * ${functionName}Service业务层处理 + * + * @author ${author} + * @date ${datetime} + */ +@Service +public class ${ClassName}ServiceImpl implements I${ClassName}Service +{ + @Autowired + private ${ClassName}Mapper ${className}Mapper; + + /** + * 查询${functionName} + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return ${functionName} + */ + @Override + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { + return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } + + /** + * 查询${functionName}列表 + * + * @param ${className} ${functionName} + * @return ${functionName} + */ + @Override + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) + { + return ${className}Mapper.select${ClassName}List(${className}); + } + + /** + * 新增${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int insert${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'createTime') + ${className}.setCreateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + int rows = ${className}Mapper.insert${ClassName}(${className}); + insert${subClassName}(${className}); + return rows; +#else + return ${className}Mapper.insert${ClassName}(${className}); +#end + } + + /** + * 修改${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int update${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'updateTime') + ${className}.setUpdateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}()); + insert${subClassName}(${className}); +#end + return ${className}Mapper.update${ClassName}(${className}); + } + + /** + * 批量删除${functionName} + * + * @param ${pkColumn.javaField}s 需要删除的${functionName}主键 + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s); + } + + /** + * 删除${functionName}信息 + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return 结果 + */ + @Override + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField}); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } +#if($table.sub) + + /** + * 新增${subTable.functionName}信息 + * + * @param ${className} ${functionName}对象 + */ + public void insert${subClassName}(${ClassName} ${className}) + { + List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List(); + ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}(); + if (StringUtils.isNotNull(${subclassName}List)) + { + List<${subClassName}> list = new ArrayList<${subClassName}>(); + for (${subClassName} ${subclassName} : ${subclassName}List) + { + ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField}); + list.add(${subclassName}); + } + if (list.size() > 0) + { + ${className}Mapper.batch${subClassName}(list); + } + } + } +#end +} diff --git a/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm b/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm new file mode 100644 index 0000000..a3f53eb --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm @@ -0,0 +1,76 @@ +package ${packageName}.domain; + +#foreach ($import in $subImportList) +import ${import}; +#end +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * ${subTable.functionName}对象 ${subTableName} + * + * @author ${author} + * @date ${datetime} + */ +public class ${subClassName} extends BaseEntity +{ + private static final long serialVersionUID = 1L; + +#foreach ($column in $subTable.columns) +#if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("(")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end + private $column.javaType $column.javaField; + +#end +#end +#foreach ($column in $subTable.columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } + + public $column.javaType get${AttrName}() + { + return $column.javaField; + } +#end +#end + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) +#foreach ($column in $subTable.columns) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + .append("${column.javaField}", get${AttrName}()) +#end + .toString(); + } +} diff --git a/ruoyi-generator/src/main/resources/vm/js/api.js.vm b/ruoyi-generator/src/main/resources/vm/js/api.js.vm new file mode 100644 index 0000000..296d41a --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/js/api.js.vm @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询${functionName}列表 +export function list${BusinessName}(query) { + return request({ + url: '/${moduleName}/${businessName}/list', + method: 'get', + params: query + }) +} + +// 查询${functionName}详细 +export function get${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'get' + }) +} + +// 新增${functionName} +export function add${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}', + method: 'post', + data: data + }) +} + +// 修改${functionName} +export function update${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}', + method: 'put', + data: data + }) +} + +// 删除${functionName} +export function del${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'delete' + }) +} + +// 导出${functionName} +export function export${BusinessName}(query) { + return request({ + url: '/${moduleName}/${businessName}/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/sql/sql.vm b/ruoyi-generator/src/main/resources/vm/sql/sql.vm new file mode 100644 index 0000000..0575583 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/sql/sql.vm @@ -0,0 +1,22 @@ +-- 菜单 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '${functionName}菜单'); + +-- 按钮父菜单ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 'admin', sysdate(), '', null, ''); \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm new file mode 100644 index 0000000..dc1fb2b --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm @@ -0,0 +1,503 @@ + + + diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm new file mode 100644 index 0000000..5a3394b --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm @@ -0,0 +1,607 @@ + + + diff --git a/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm new file mode 100644 index 0000000..0895aee --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -0,0 +1,135 @@ + + + + + +#foreach ($column in $columns) + +#end + +#if($table.sub) + + + + + + +#foreach ($column in $subTable.columns) + +#end + +#end + + + select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName} + + + + + + + + insert into ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + $column.columnName, +#end +#end + + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + #{$column.javaField}, +#end +#end + + + + + update ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName) + $column.columnName = #{$column.javaField}, +#end +#end + + where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} in + + #{${pkColumn.javaField}} + + +#if($table.sub) + + + delete from ${subTableName} where ${subTableFkName} in + + #{${subTableFkclassName}} + + + + + delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}} + + + + insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($velocityCount != $subTable.columns.size()),#end#end) values + + (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($velocityCount != $subTable.columns.size()),#end#end) + + +#end + \ No newline at end of file diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml new file mode 100644 index 0000000..d7167ed --- /dev/null +++ b/ruoyi-quartz/pom.xml @@ -0,0 +1,42 @@ + + + + ruoyi + com.ruoyi + 3.6.0 + + + + 4.0.0 + + ruoyi-quartz + + + quartz定时任务 + + + + + + + org.quartz-scheduler + quartz + + + com.mchange + c3p0 + + + + + + + com.ruoyi + ruoyi-common + + + + + \ No newline at end of file diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java new file mode 100644 index 0000000..58c69bc --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java @@ -0,0 +1,57 @@ +package com.ruoyi.quartz.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.quartz.SchedulerFactoryBean; +import javax.sql.DataSource; +import java.util.Properties; + +/** + * 定时任务配置 + * + * @author ruoyi + */ +@Configuration +public class ScheduleConfig +{ + @Bean + public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) + { + SchedulerFactoryBean factory = new SchedulerFactoryBean(); + factory.setDataSource(dataSource); + + // quartz参数 + Properties prop = new Properties(); + prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler"); + prop.put("org.quartz.scheduler.instanceId", "AUTO"); + // 线程池配置 + prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); + prop.put("org.quartz.threadPool.threadCount", "20"); + prop.put("org.quartz.threadPool.threadPriority", "5"); + // JobStore配置 + prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX"); + // 集群配置 + prop.put("org.quartz.jobStore.isClustered", "true"); + prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); + prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); + prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); + + // sqlserver 启用 + // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); + prop.put("org.quartz.jobStore.misfireThreshold", "12000"); + prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); + factory.setQuartzProperties(prop); + + factory.setSchedulerName("RuoyiScheduler"); + // 延时启动 + factory.setStartupDelay(1); + factory.setApplicationContextSchedulerContextKey("applicationContextKey"); + // 可选,QuartzScheduler + // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 + factory.setOverwriteExistingJobs(true); + // 设置自动启动,默认为true + factory.setAutoStartup(true); + + return factory; + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java new file mode 100644 index 0000000..b03ceb8 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java @@ -0,0 +1,167 @@ +package com.ruoyi.quartz.controller; + +import java.util.List; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.exception.job.TaskException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.quartz.domain.SysJob; +import com.ruoyi.quartz.service.ISysJobService; +import com.ruoyi.quartz.util.CronUtils; + +/** + * 调度任务信息操作处理 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/job") +public class SysJobController extends BaseController +{ + @Autowired + private ISysJobService jobService; + + /** + * 查询定时任务列表 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:list')") + @GetMapping("/list") + public TableDataInfo list(SysJob sysJob) + { + startPage(); + List list = jobService.selectJobList(sysJob); + return getDataTable(list); + } + + /** + * 导出定时任务列表 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:export')") + @Log(title = "定时任务", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SysJob sysJob) + { + List list = jobService.selectJobList(sysJob); + ExcelUtil util = new ExcelUtil(SysJob.class); + return util.exportExcel(list, "定时任务"); + } + + /** + * 获取定时任务详细信息 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:query')") + @GetMapping(value = "/{jobId}") + public AjaxResult getInfo(@PathVariable("jobId") Long jobId) + { + return AjaxResult.success(jobService.selectJobById(jobId)); + } + + /** + * 新增定时任务 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:add')") + @Log(title = "定时任务", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysJob job) throws SchedulerException, TaskException + { + if (!CronUtils.isValid(job.getCronExpression())) + { + return error("新增任务'" + job.getJobName() + "'失败,Cron表达式不正确"); + } + else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) + { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi://'调用"); + } + else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_LDAP)) + { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap://'调用"); + } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS })) + { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用"); + } + job.setCreateBy(getUsername()); + return toAjax(jobService.insertJob(job)); + } + + /** + * 修改定时任务 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:edit')") + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysJob job) throws SchedulerException, TaskException + { + if (!CronUtils.isValid(job.getCronExpression())) + { + return error("修改任务'" + job.getJobName() + "'失败,Cron表达式不正确"); + } + else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) + { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi://'调用"); + } + else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_LDAP)) + { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap://'调用"); + } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS })) + { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用"); + } + job.setUpdateBy(getUsername()); + return toAjax(jobService.updateJob(job)); + } + + /** + * 定时任务状态修改 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException + { + SysJob newJob = jobService.selectJobById(job.getJobId()); + newJob.setStatus(job.getStatus()); + return toAjax(jobService.changeStatus(newJob)); + } + + /** + * 定时任务立即执行一次 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") + @Log(title = "定时任务", businessType = BusinessType.UPDATE) + @PutMapping("/run") + public AjaxResult run(@RequestBody SysJob job) throws SchedulerException + { + jobService.run(job); + return AjaxResult.success(); + } + + /** + * 删除定时任务 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:remove')") + @Log(title = "定时任务", businessType = BusinessType.DELETE) + @DeleteMapping("/{jobIds}") + public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException + { + jobService.deleteJobByIds(jobIds); + return AjaxResult.success(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java new file mode 100644 index 0000000..b1f8204 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java @@ -0,0 +1,90 @@ +package com.ruoyi.quartz.controller; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.quartz.domain.SysJobLog; +import com.ruoyi.quartz.service.ISysJobLogService; + +/** + * 调度日志操作处理 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/jobLog") +public class SysJobLogController extends BaseController +{ + @Autowired + private ISysJobLogService jobLogService; + + /** + * 查询定时任务调度日志列表 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:list')") + @GetMapping("/list") + public TableDataInfo list(SysJobLog sysJobLog) + { + startPage(); + List list = jobLogService.selectJobLogList(sysJobLog); + return getDataTable(list); + } + + /** + * 导出定时任务调度日志列表 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:export')") + @Log(title = "任务调度日志", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SysJobLog sysJobLog) + { + List list = jobLogService.selectJobLogList(sysJobLog); + ExcelUtil util = new ExcelUtil(SysJobLog.class); + return util.exportExcel(list, "调度日志"); + } + + /** + * 根据调度编号获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:query')") + @GetMapping(value = "/{configId}") + public AjaxResult getInfo(@PathVariable Long jobLogId) + { + return AjaxResult.success(jobLogService.selectJobLogById(jobLogId)); + } + + + /** + * 删除定时任务调度日志 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:remove')") + @Log(title = "定时任务调度日志", businessType = BusinessType.DELETE) + @DeleteMapping("/{jobLogIds}") + public AjaxResult remove(@PathVariable Long[] jobLogIds) + { + return toAjax(jobLogService.deleteJobLogByIds(jobLogIds)); + } + + /** + * 清空定时任务调度日志 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:remove')") + @Log(title = "调度日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public AjaxResult clean() + { + jobLogService.cleanJobLog(); + return AjaxResult.success(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java new file mode 100644 index 0000000..1f49695 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java @@ -0,0 +1,171 @@ +package com.ruoyi.quartz.domain; + +import java.util.Date; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.constant.ScheduleConstants; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.quartz.util.CronUtils; + +/** + * 定时任务调度表 sys_job + * + * @author ruoyi + */ +public class SysJob extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 任务ID */ + @Excel(name = "任务序号", cellType = ColumnType.NUMERIC) + private Long jobId; + + /** 任务名称 */ + @Excel(name = "任务名称") + private String jobName; + + /** 任务组名 */ + @Excel(name = "任务组名") + private String jobGroup; + + /** 调用目标字符串 */ + @Excel(name = "调用目标字符串") + private String invokeTarget; + + /** cron执行表达式 */ + @Excel(name = "执行表达式 ") + private String cronExpression; + + /** cron计划策略 */ + @Excel(name = "计划策略 ", readConverterExp = "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行") + private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT; + + /** 是否并发执行(0允许 1禁止) */ + @Excel(name = "并发执行", readConverterExp = "0=允许,1=禁止") + private String concurrent; + + /** 任务状态(0正常 1暂停) */ + @Excel(name = "任务状态", readConverterExp = "0=正常,1=暂停") + private String status; + + public Long getJobId() + { + return jobId; + } + + public void setJobId(Long jobId) + { + this.jobId = jobId; + } + + @NotBlank(message = "任务名称不能为空") + @Size(min = 0, max = 64, message = "任务名称不能超过64个字符") + public String getJobName() + { + return jobName; + } + + public void setJobName(String jobName) + { + this.jobName = jobName; + } + + public String getJobGroup() + { + return jobGroup; + } + + public void setJobGroup(String jobGroup) + { + this.jobGroup = jobGroup; + } + + @NotBlank(message = "调用目标字符串不能为空") + @Size(min = 0, max = 500, message = "调用目标字符串长度不能超过500个字符") + public String getInvokeTarget() + { + return invokeTarget; + } + + public void setInvokeTarget(String invokeTarget) + { + this.invokeTarget = invokeTarget; + } + + @NotBlank(message = "Cron执行表达式不能为空") + @Size(min = 0, max = 255, message = "Cron执行表达式不能超过255个字符") + public String getCronExpression() + { + return cronExpression; + } + + public void setCronExpression(String cronExpression) + { + this.cronExpression = cronExpression; + } + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + public Date getNextValidTime() + { + if (StringUtils.isNotEmpty(cronExpression)) + { + return CronUtils.getNextExecution(cronExpression); + } + return null; + } + + public String getMisfirePolicy() + { + return misfirePolicy; + } + + public void setMisfirePolicy(String misfirePolicy) + { + this.misfirePolicy = misfirePolicy; + } + + public String getConcurrent() + { + return concurrent; + } + + public void setConcurrent(String concurrent) + { + this.concurrent = concurrent; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("jobId", getJobId()) + .append("jobName", getJobName()) + .append("jobGroup", getJobGroup()) + .append("cronExpression", getCronExpression()) + .append("nextValidTime", getNextValidTime()) + .append("misfirePolicy", getMisfirePolicy()) + .append("concurrent", getConcurrent()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java new file mode 100644 index 0000000..121c035 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java @@ -0,0 +1,155 @@ +package com.ruoyi.quartz.domain; + +import java.util.Date; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 定时任务调度日志表 sys_job_log + * + * @author ruoyi + */ +public class SysJobLog extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + @Excel(name = "日志序号") + private Long jobLogId; + + /** 任务名称 */ + @Excel(name = "任务名称") + private String jobName; + + /** 任务组名 */ + @Excel(name = "任务组名") + private String jobGroup; + + /** 调用目标字符串 */ + @Excel(name = "调用目标字符串") + private String invokeTarget; + + /** 日志信息 */ + @Excel(name = "日志信息") + private String jobMessage; + + /** 执行状态(0正常 1失败) */ + @Excel(name = "执行状态", readConverterExp = "0=正常,1=失败") + private String status; + + /** 异常信息 */ + @Excel(name = "异常信息") + private String exceptionInfo; + + /** 开始时间 */ + private Date startTime; + + /** 停止时间 */ + private Date stopTime; + + public Long getJobLogId() + { + return jobLogId; + } + + public void setJobLogId(Long jobLogId) + { + this.jobLogId = jobLogId; + } + + public String getJobName() + { + return jobName; + } + + public void setJobName(String jobName) + { + this.jobName = jobName; + } + + public String getJobGroup() + { + return jobGroup; + } + + public void setJobGroup(String jobGroup) + { + this.jobGroup = jobGroup; + } + + public String getInvokeTarget() + { + return invokeTarget; + } + + public void setInvokeTarget(String invokeTarget) + { + this.invokeTarget = invokeTarget; + } + + public String getJobMessage() + { + return jobMessage; + } + + public void setJobMessage(String jobMessage) + { + this.jobMessage = jobMessage; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getExceptionInfo() + { + return exceptionInfo; + } + + public void setExceptionInfo(String exceptionInfo) + { + this.exceptionInfo = exceptionInfo; + } + + public Date getStartTime() + { + return startTime; + } + + public void setStartTime(Date startTime) + { + this.startTime = startTime; + } + + public Date getStopTime() + { + return stopTime; + } + + public void setStopTime(Date stopTime) + { + this.stopTime = stopTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("jobLogId", getJobLogId()) + .append("jobName", getJobName()) + .append("jobGroup", getJobGroup()) + .append("jobMessage", getJobMessage()) + .append("status", getStatus()) + .append("exceptionInfo", getExceptionInfo()) + .append("startTime", getStartTime()) + .append("stopTime", getStopTime()) + .toString(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java new file mode 100644 index 0000000..727d916 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java @@ -0,0 +1,64 @@ +package com.ruoyi.quartz.mapper; + +import java.util.List; +import com.ruoyi.quartz.domain.SysJobLog; + +/** + * 调度任务日志信息 数据层 + * + * @author ruoyi + */ +public interface SysJobLogMapper +{ + /** + * 获取quartz调度器日志的计划任务 + * + * @param jobLog 调度日志信息 + * @return 调度任务日志集合 + */ + public List selectJobLogList(SysJobLog jobLog); + + /** + * 查询所有调度任务日志 + * + * @return 调度任务日志列表 + */ + public List selectJobLogAll(); + + /** + * 通过调度任务日志ID查询调度信息 + * + * @param jobLogId 调度任务日志ID + * @return 调度任务日志对象信息 + */ + public SysJobLog selectJobLogById(Long jobLogId); + + /** + * 新增任务日志 + * + * @param jobLog 调度日志信息 + * @return 结果 + */ + public int insertJobLog(SysJobLog jobLog); + + /** + * 批量删除调度日志信息 + * + * @param logIds 需要删除的数据ID + * @return 结果 + */ + public int deleteJobLogByIds(Long[] logIds); + + /** + * 删除任务日志 + * + * @param jobId 调度日志ID + * @return 结果 + */ + public int deleteJobLogById(Long jobId); + + /** + * 清空任务日志 + */ + public void cleanJobLog(); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java new file mode 100644 index 0000000..20f45db --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java @@ -0,0 +1,67 @@ +package com.ruoyi.quartz.mapper; + +import java.util.List; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 调度任务信息 数据层 + * + * @author ruoyi + */ +public interface SysJobMapper +{ + /** + * 查询调度任务日志集合 + * + * @param job 调度信息 + * @return 操作日志集合 + */ + public List selectJobList(SysJob job); + + /** + * 查询所有调度任务 + * + * @return 调度任务列表 + */ + public List selectJobAll(); + + /** + * 通过调度ID查询调度任务信息 + * + * @param jobId 调度ID + * @return 角色对象信息 + */ + public SysJob selectJobById(Long jobId); + + /** + * 通过调度ID删除调度任务信息 + * + * @param jobId 调度ID + * @return 结果 + */ + public int deleteJobById(Long jobId); + + /** + * 批量删除调度任务信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteJobByIds(Long[] ids); + + /** + * 修改调度任务信息 + * + * @param job 调度任务信息 + * @return 结果 + */ + public int updateJob(SysJob job); + + /** + * 新增调度任务信息 + * + * @param job 调度任务信息 + * @return 结果 + */ + public int insertJob(SysJob job); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java new file mode 100644 index 0000000..8546792 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java @@ -0,0 +1,56 @@ +package com.ruoyi.quartz.service; + +import java.util.List; +import com.ruoyi.quartz.domain.SysJobLog; + +/** + * 定时任务调度日志信息信息 服务层 + * + * @author ruoyi + */ +public interface ISysJobLogService +{ + /** + * 获取quartz调度器日志的计划任务 + * + * @param jobLog 调度日志信息 + * @return 调度任务日志集合 + */ + public List selectJobLogList(SysJobLog jobLog); + + /** + * 通过调度任务日志ID查询调度信息 + * + * @param jobLogId 调度任务日志ID + * @return 调度任务日志对象信息 + */ + public SysJobLog selectJobLogById(Long jobLogId); + + /** + * 新增任务日志 + * + * @param jobLog 调度日志信息 + */ + public void addJobLog(SysJobLog jobLog); + + /** + * 批量删除调度日志信息 + * + * @param logIds 需要删除的日志ID + * @return 结果 + */ + public int deleteJobLogByIds(Long[] logIds); + + /** + * 删除任务日志 + * + * @param jobId 调度日志ID + * @return 结果 + */ + public int deleteJobLogById(Long jobId); + + /** + * 清空任务日志 + */ + public void cleanJobLog(); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java new file mode 100644 index 0000000..6d62661 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java @@ -0,0 +1,102 @@ +package com.ruoyi.quartz.service; + +import java.util.List; +import org.quartz.SchedulerException; +import com.ruoyi.common.exception.job.TaskException; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 定时任务调度信息信息 服务层 + * + * @author ruoyi + */ +public interface ISysJobService +{ + /** + * 获取quartz调度器的计划任务 + * + * @param job 调度信息 + * @return 调度任务集合 + */ + public List selectJobList(SysJob job); + + /** + * 通过调度任务ID查询调度信息 + * + * @param jobId 调度任务ID + * @return 调度任务对象信息 + */ + public SysJob selectJobById(Long jobId); + + /** + * 暂停任务 + * + * @param job 调度信息 + * @return 结果 + */ + public int pauseJob(SysJob job) throws SchedulerException; + + /** + * 恢复任务 + * + * @param job 调度信息 + * @return 结果 + */ + public int resumeJob(SysJob job) throws SchedulerException; + + /** + * 删除任务后,所对应的trigger也将被删除 + * + * @param job 调度信息 + * @return 结果 + */ + public int deleteJob(SysJob job) throws SchedulerException; + + /** + * 批量删除调度信息 + * + * @param jobIds 需要删除的任务ID + * @return 结果 + */ + public void deleteJobByIds(Long[] jobIds) throws SchedulerException; + + /** + * 任务调度状态修改 + * + * @param job 调度信息 + * @return 结果 + */ + public int changeStatus(SysJob job) throws SchedulerException; + + /** + * 立即运行任务 + * + * @param job 调度信息 + * @return 结果 + */ + public void run(SysJob job) throws SchedulerException; + + /** + * 新增任务 + * + * @param job 调度信息 + * @return 结果 + */ + public int insertJob(SysJob job) throws SchedulerException, TaskException; + + /** + * 更新任务 + * + * @param job 调度信息 + * @return 结果 + */ + public int updateJob(SysJob job) throws SchedulerException, TaskException; + + /** + * 校验cron表达式是否有效 + * + * @param cronExpression 表达式 + * @return 结果 + */ + public boolean checkCronExpressionIsValid(String cronExpression); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java new file mode 100644 index 0000000..812eed7 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java @@ -0,0 +1,87 @@ +package com.ruoyi.quartz.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.quartz.domain.SysJobLog; +import com.ruoyi.quartz.mapper.SysJobLogMapper; +import com.ruoyi.quartz.service.ISysJobLogService; + +/** + * 定时任务调度日志信息 服务层 + * + * @author ruoyi + */ +@Service +public class SysJobLogServiceImpl implements ISysJobLogService +{ + @Autowired + private SysJobLogMapper jobLogMapper; + + /** + * 获取quartz调度器日志的计划任务 + * + * @param jobLog 调度日志信息 + * @return 调度任务日志集合 + */ + @Override + public List selectJobLogList(SysJobLog jobLog) + { + return jobLogMapper.selectJobLogList(jobLog); + } + + /** + * 通过调度任务日志ID查询调度信息 + * + * @param jobLogId 调度任务日志ID + * @return 调度任务日志对象信息 + */ + @Override + public SysJobLog selectJobLogById(Long jobLogId) + { + return jobLogMapper.selectJobLogById(jobLogId); + } + + /** + * 新增任务日志 + * + * @param jobLog 调度日志信息 + */ + @Override + public void addJobLog(SysJobLog jobLog) + { + jobLogMapper.insertJobLog(jobLog); + } + + /** + * 批量删除调度日志信息 + * + * @param logIds 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteJobLogByIds(Long[] logIds) + { + return jobLogMapper.deleteJobLogByIds(logIds); + } + + /** + * 删除任务日志 + * + * @param jobId 调度日志ID + */ + @Override + public int deleteJobLogById(Long jobId) + { + return jobLogMapper.deleteJobLogById(jobId); + } + + /** + * 清空任务日志 + */ + @Override + public void cleanJobLog() + { + jobLogMapper.cleanJobLog(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java new file mode 100644 index 0000000..57a5243 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java @@ -0,0 +1,254 @@ +package com.ruoyi.quartz.service.impl; + +import java.util.List; +import javax.annotation.PostConstruct; +import org.quartz.JobDataMap; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.common.constant.ScheduleConstants; +import com.ruoyi.common.exception.job.TaskException; +import com.ruoyi.quartz.domain.SysJob; +import com.ruoyi.quartz.mapper.SysJobMapper; +import com.ruoyi.quartz.service.ISysJobService; +import com.ruoyi.quartz.util.CronUtils; +import com.ruoyi.quartz.util.ScheduleUtils; + +/** + * 定时任务调度信息 服务层 + * + * @author ruoyi + */ +@Service +public class SysJobServiceImpl implements ISysJobService +{ + @Autowired + private Scheduler scheduler; + + @Autowired + private SysJobMapper jobMapper; + + /** + * 项目启动时,初始化定时器 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据) + */ + @PostConstruct + public void init() throws SchedulerException, TaskException + { + scheduler.clear(); + List jobList = jobMapper.selectJobAll(); + for (SysJob job : jobList) + { + ScheduleUtils.createScheduleJob(scheduler, job); + } + } + + /** + * 获取quartz调度器的计划任务列表 + * + * @param job 调度信息 + * @return + */ + @Override + public List selectJobList(SysJob job) + { + return jobMapper.selectJobList(job); + } + + /** + * 通过调度任务ID查询调度信息 + * + * @param jobId 调度任务ID + * @return 调度任务对象信息 + */ + @Override + public SysJob selectJobById(Long jobId) + { + return jobMapper.selectJobById(jobId); + } + + /** + * 暂停任务 + * + * @param job 调度信息 + */ + @Override + @Transactional + public int pauseJob(SysJob job) throws SchedulerException + { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); + int rows = jobMapper.updateJob(job); + if (rows > 0) + { + scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 恢复任务 + * + * @param job 调度信息 + */ + @Override + @Transactional + public int resumeJob(SysJob job) throws SchedulerException + { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + job.setStatus(ScheduleConstants.Status.NORMAL.getValue()); + int rows = jobMapper.updateJob(job); + if (rows > 0) + { + scheduler.resumeJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 删除任务后,所对应的trigger也将被删除 + * + * @param job 调度信息 + */ + @Override + @Transactional + public int deleteJob(SysJob job) throws SchedulerException + { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + int rows = jobMapper.deleteJobById(jobId); + if (rows > 0) + { + scheduler.deleteJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 批量删除调度信息 + * + * @param jobIds 需要删除的任务ID + * @return 结果 + */ + @Override + @Transactional + public void deleteJobByIds(Long[] jobIds) throws SchedulerException + { + for (Long jobId : jobIds) + { + SysJob job = jobMapper.selectJobById(jobId); + deleteJob(job); + } + } + + /** + * 任务调度状态修改 + * + * @param job 调度信息 + */ + @Override + @Transactional + public int changeStatus(SysJob job) throws SchedulerException + { + int rows = 0; + String status = job.getStatus(); + if (ScheduleConstants.Status.NORMAL.getValue().equals(status)) + { + rows = resumeJob(job); + } + else if (ScheduleConstants.Status.PAUSE.getValue().equals(status)) + { + rows = pauseJob(job); + } + return rows; + } + + /** + * 立即运行任务 + * + * @param job 调度信息 + */ + @Override + @Transactional + public void run(SysJob job) throws SchedulerException + { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + SysJob properties = selectJobById(job.getJobId()); + // 参数 + JobDataMap dataMap = new JobDataMap(); + dataMap.put(ScheduleConstants.TASK_PROPERTIES, properties); + scheduler.triggerJob(ScheduleUtils.getJobKey(jobId, jobGroup), dataMap); + } + + /** + * 新增任务 + * + * @param job 调度信息 调度信息 + */ + @Override + @Transactional + public int insertJob(SysJob job) throws SchedulerException, TaskException + { + job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); + int rows = jobMapper.insertJob(job); + if (rows > 0) + { + ScheduleUtils.createScheduleJob(scheduler, job); + } + return rows; + } + + /** + * 更新任务的时间表达式 + * + * @param job 调度信息 + */ + @Override + @Transactional + public int updateJob(SysJob job) throws SchedulerException, TaskException + { + SysJob properties = selectJobById(job.getJobId()); + int rows = jobMapper.updateJob(job); + if (rows > 0) + { + updateSchedulerJob(job, properties.getJobGroup()); + } + return rows; + } + + /** + * 更新任务 + * + * @param job 任务对象 + * @param jobGroup 任务组名 + */ + public void updateSchedulerJob(SysJob job, String jobGroup) throws SchedulerException, TaskException + { + Long jobId = job.getJobId(); + // 判断是否存在 + JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup); + if (scheduler.checkExists(jobKey)) + { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.deleteJob(jobKey); + } + ScheduleUtils.createScheduleJob(scheduler, job); + } + + /** + * 校验cron表达式是否有效 + * + * @param cronExpression 表达式 + * @return 结果 + */ + @Override + public boolean checkCronExpressionIsValid(String cronExpression) + { + return CronUtils.isValid(cronExpression); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java new file mode 100644 index 0000000..853243b --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java @@ -0,0 +1,28 @@ +package com.ruoyi.quartz.task; + +import org.springframework.stereotype.Component; +import com.ruoyi.common.utils.StringUtils; + +/** + * 定时任务调度测试 + * + * @author ruoyi + */ +@Component("ryTask") +public class RyTask +{ + public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) + { + System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); + } + + public void ryParams(String params) + { + System.out.println("执行有参方法:" + params); + } + + public void ryNoParams() + { + System.out.println("执行无参方法"); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SegchkTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SegchkTask.java new file mode 100644 index 0000000..97177ad --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SegchkTask.java @@ -0,0 +1,28 @@ +package com.ruoyi.quartz.task; + +import com.ruoyi.common.utils.StringUtils; +import org.springframework.stereotype.Component; + +/** + * 定时任务调度测试 + * + * @author ruoyi + */ +@Component("SegchkTask") +public class SegchkTask +{ + public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) + { + System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); + } + + public void ryParams(String params) + { + System.out.println("执行有参方法:" + params); + } + + public void ryNoParams() + { + System.out.println("执行无参方法"); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java new file mode 100644 index 0000000..731a5eb --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java @@ -0,0 +1,107 @@ +package com.ruoyi.quartz.util; + +import java.util.Date; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.ScheduleConstants; +import com.ruoyi.common.utils.ExceptionUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.bean.BeanUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.quartz.domain.SysJob; +import com.ruoyi.quartz.domain.SysJobLog; +import com.ruoyi.quartz.service.ISysJobLogService; + +/** + * 抽象quartz调用 + * + * @author ruoyi + */ +public abstract class AbstractQuartzJob implements Job +{ + private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class); + + /** + * 线程本地变量 + */ + private static ThreadLocal threadLocal = new ThreadLocal<>(); + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException + { + SysJob sysJob = new SysJob(); + BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES)); + try + { + before(context, sysJob); + if (sysJob != null) + { + doExecute(context, sysJob); + } + after(context, sysJob, null); + } + catch (Exception e) + { + log.error("任务执行异常 - :", e); + after(context, sysJob, e); + } + } + + /** + * 执行前 + * + * @param context 工作执行上下文对象 + * @param sysJob 系统计划任务 + */ + protected void before(JobExecutionContext context, SysJob sysJob) + { + threadLocal.set(new Date()); + } + + /** + * 执行后 + * + * @param context 工作执行上下文对象 + * @param sysJob 系统计划任务 + */ + protected void after(JobExecutionContext context, SysJob sysJob, Exception e) + { + Date startTime = threadLocal.get(); + threadLocal.remove(); + + final SysJobLog sysJobLog = new SysJobLog(); + sysJobLog.setJobName(sysJob.getJobName()); + sysJobLog.setJobGroup(sysJob.getJobGroup()); + sysJobLog.setInvokeTarget(sysJob.getInvokeTarget()); + sysJobLog.setStartTime(startTime); + sysJobLog.setStopTime(new Date()); + long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime(); + sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒"); + if (e != null) + { + sysJobLog.setStatus(Constants.FAIL); + String errorMsg = StringUtils.substring(ExceptionUtil.getExceptionMessage(e), 0, 2000); + sysJobLog.setExceptionInfo(errorMsg); + } + else + { + sysJobLog.setStatus(Constants.SUCCESS); + } + + // 写入数据库当中 + SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog); + } + + /** + * 执行方法,由子类重载 + * + * @param context 工作执行上下文对象 + * @param sysJob 系统计划任务 + * @throws Exception 执行过程中的异常 + */ + protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception; +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java new file mode 100644 index 0000000..dd53839 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java @@ -0,0 +1,63 @@ +package com.ruoyi.quartz.util; + +import java.text.ParseException; +import java.util.Date; +import org.quartz.CronExpression; + +/** + * cron表达式工具类 + * + * @author ruoyi + * + */ +public class CronUtils +{ + /** + * 返回一个布尔值代表一个给定的Cron表达式的有效性 + * + * @param cronExpression Cron表达式 + * @return boolean 表达式是否有效 + */ + public static boolean isValid(String cronExpression) + { + return CronExpression.isValidExpression(cronExpression); + } + + /** + * 返回一个字符串值,表示该消息无效Cron表达式给出有效性 + * + * @param cronExpression Cron表达式 + * @return String 无效时返回表达式错误描述,如果有效返回null + */ + public static String getInvalidMessage(String cronExpression) + { + try + { + new CronExpression(cronExpression); + return null; + } + catch (ParseException pe) + { + return pe.getMessage(); + } + } + + /** + * 返回下一个执行时间根据给定的Cron表达式 + * + * @param cronExpression Cron表达式 + * @return Date 下次Cron表达式执行时间 + */ + public static Date getNextExecution(String cronExpression) + { + try + { + CronExpression cron = new CronExpression(cronExpression); + return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis())); + } + catch (ParseException e) + { + throw new IllegalArgumentException(e.getMessage()); + } + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java new file mode 100644 index 0000000..40a19bd --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java @@ -0,0 +1,182 @@ +package com.ruoyi.quartz.util; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.LinkedList; +import java.util.List; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 任务执行工具 + * + * @author ruoyi + */ +public class JobInvokeUtil +{ + /** + * 执行方法 + * + * @param sysJob 系统任务 + */ + public static void invokeMethod(SysJob sysJob) throws Exception + { + String invokeTarget = sysJob.getInvokeTarget(); + String beanName = getBeanName(invokeTarget); + String methodName = getMethodName(invokeTarget); + List methodParams = getMethodParams(invokeTarget); + + if (!isValidClassName(beanName)) + { + Object bean = SpringUtils.getBean(beanName); + invokeMethod(bean, methodName, methodParams); + } + else + { + Object bean = Class.forName(beanName).newInstance(); + invokeMethod(bean, methodName, methodParams); + } + } + + /** + * 调用任务方法 + * + * @param bean 目标对象 + * @param methodName 方法名称 + * @param methodParams 方法参数 + */ + private static void invokeMethod(Object bean, String methodName, List methodParams) + throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, + InvocationTargetException + { + if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0) + { + Method method = bean.getClass().getDeclaredMethod(methodName, getMethodParamsType(methodParams)); + method.invoke(bean, getMethodParamsValue(methodParams)); + } + else + { + Method method = bean.getClass().getDeclaredMethod(methodName); + method.invoke(bean); + } + } + + /** + * 校验是否为为class包名 + * + * @param str 名称 + * @return true是 false否 + */ + public static boolean isValidClassName(String invokeTarget) + { + return StringUtils.countMatches(invokeTarget, ".") > 1; + } + + /** + * 获取bean名称 + * + * @param invokeTarget 目标字符串 + * @return bean名称 + */ + public static String getBeanName(String invokeTarget) + { + String beanName = StringUtils.substringBefore(invokeTarget, "("); + return StringUtils.substringBeforeLast(beanName, "."); + } + + /** + * 获取bean方法 + * + * @param invokeTarget 目标字符串 + * @return method方法 + */ + public static String getMethodName(String invokeTarget) + { + String methodName = StringUtils.substringBefore(invokeTarget, "("); + return StringUtils.substringAfterLast(methodName, "."); + } + + /** + * 获取method方法参数相关列表 + * + * @param invokeTarget 目标字符串 + * @return method方法相关参数列表 + */ + public static List getMethodParams(String invokeTarget) + { + String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")"); + if (StringUtils.isEmpty(methodStr)) + { + return null; + } + String[] methodParams = methodStr.split(","); + List classs = new LinkedList<>(); + for (int i = 0; i < methodParams.length; i++) + { + String str = StringUtils.trimToEmpty(methodParams[i]); + // String字符串类型,包含' + if (StringUtils.contains(str, "'")) + { + classs.add(new Object[] { StringUtils.replace(str, "'", ""), String.class }); + } + // boolean布尔类型,等于true或者false + else if (StringUtils.equals(str, "true") || StringUtils.equalsIgnoreCase(str, "false")) + { + classs.add(new Object[] { Boolean.valueOf(str), Boolean.class }); + } + // long长整形,包含L + else if (StringUtils.containsIgnoreCase(str, "L")) + { + classs.add(new Object[] { Long.valueOf(StringUtils.replaceIgnoreCase(str, "L", "")), Long.class }); + } + // double浮点类型,包含D + else if (StringUtils.containsIgnoreCase(str, "D")) + { + classs.add(new Object[] { Double.valueOf(StringUtils.replaceIgnoreCase(str, "D", "")), Double.class }); + } + // 其他类型归类为整形 + else + { + classs.add(new Object[] { Integer.valueOf(str), Integer.class }); + } + } + return classs; + } + + /** + * 获取参数类型 + * + * @param methodParams 参数相关列表 + * @return 参数类型列表 + */ + public static Class[] getMethodParamsType(List methodParams) + { + Class[] classs = new Class[methodParams.size()]; + int index = 0; + for (Object[] os : methodParams) + { + classs[index] = (Class) os[1]; + index++; + } + return classs; + } + + /** + * 获取参数值 + * + * @param methodParams 参数相关列表 + * @return 参数值列表 + */ + public static Object[] getMethodParamsValue(List methodParams) + { + Object[] classs = new Object[methodParams.size()]; + int index = 0; + for (Object[] os : methodParams) + { + classs[index] = (Object) os[0]; + index++; + } + return classs; + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java new file mode 100644 index 0000000..5e13558 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java @@ -0,0 +1,21 @@ +package com.ruoyi.quartz.util; + +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 定时任务处理(禁止并发执行) + * + * @author ruoyi + * + */ +@DisallowConcurrentExecution +public class QuartzDisallowConcurrentExecution extends AbstractQuartzJob +{ + @Override + protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception + { + JobInvokeUtil.invokeMethod(sysJob); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java new file mode 100644 index 0000000..e975326 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java @@ -0,0 +1,19 @@ +package com.ruoyi.quartz.util; + +import org.quartz.JobExecutionContext; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 定时任务处理(允许并发执行) + * + * @author ruoyi + * + */ +public class QuartzJobExecution extends AbstractQuartzJob +{ + @Override + protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception + { + JobInvokeUtil.invokeMethod(sysJob); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java new file mode 100644 index 0000000..7f4213f --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java @@ -0,0 +1,113 @@ +package com.ruoyi.quartz.util; + +import org.quartz.CronScheduleBuilder; +import org.quartz.CronTrigger; +import org.quartz.Job; +import org.quartz.JobBuilder; +import org.quartz.JobDetail; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.TriggerBuilder; +import org.quartz.TriggerKey; +import com.ruoyi.common.constant.ScheduleConstants; +import com.ruoyi.common.exception.job.TaskException; +import com.ruoyi.common.exception.job.TaskException.Code; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 定时任务工具类 + * + * @author ruoyi + * + */ +public class ScheduleUtils +{ + /** + * 得到quartz任务类 + * + * @param sysJob 执行计划 + * @return 具体执行任务类 + */ + private static Class getQuartzJobClass(SysJob sysJob) + { + boolean isConcurrent = "0".equals(sysJob.getConcurrent()); + return isConcurrent ? QuartzJobExecution.class : QuartzDisallowConcurrentExecution.class; + } + + /** + * 构建任务触发对象 + */ + public static TriggerKey getTriggerKey(Long jobId, String jobGroup) + { + return TriggerKey.triggerKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 构建任务键对象 + */ + public static JobKey getJobKey(Long jobId, String jobGroup) + { + return JobKey.jobKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 创建定时任务 + */ + public static void createScheduleJob(Scheduler scheduler, SysJob job) throws SchedulerException, TaskException + { + Class jobClass = getQuartzJobClass(job); + // 构建job信息 + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(getJobKey(jobId, jobGroup)).build(); + + // 表达式调度构建器 + CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression()); + cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder); + + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(jobId, jobGroup)) + .withSchedule(cronScheduleBuilder).build(); + + // 放入参数,运行时的方法可以获取 + jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job); + + // 判断是否存在 + if (scheduler.checkExists(getJobKey(jobId, jobGroup))) + { + // 防止创建时存在数据问题 先移除,然后在执行创建操作 + scheduler.deleteJob(getJobKey(jobId, jobGroup)); + } + + scheduler.scheduleJob(jobDetail, trigger); + + // 暂停任务 + if (job.getStatus().equals(ScheduleConstants.Status.PAUSE.getValue())) + { + scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + } + + /** + * 设置定时任务策略 + */ + public static CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob job, CronScheduleBuilder cb) + throws TaskException + { + switch (job.getMisfirePolicy()) + { + case ScheduleConstants.MISFIRE_DEFAULT: + return cb; + case ScheduleConstants.MISFIRE_IGNORE_MISFIRES: + return cb.withMisfireHandlingInstructionIgnoreMisfires(); + case ScheduleConstants.MISFIRE_FIRE_AND_PROCEED: + return cb.withMisfireHandlingInstructionFireAndProceed(); + case ScheduleConstants.MISFIRE_DO_NOTHING: + return cb.withMisfireHandlingInstructionDoNothing(); + default: + throw new TaskException("The task misfire policy '" + job.getMisfirePolicy() + + "' cannot be used in cron schedule tasks", Code.CONFIG_ERROR); + } + } +} diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml new file mode 100644 index 0000000..e608e42 --- /dev/null +++ b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + select job_log_id, job_name, job_group, invoke_target, job_message, status, exception_info, create_time + from sys_job_log + + + + + + + + + + delete from sys_job_log where job_log_id = #{jobLogId} + + + + delete from sys_job_log where job_log_id in + + #{jobLogId} + + + + + truncate table sys_job_log + + + + insert into sys_job_log( + job_log_id, + job_name, + job_group, + invoke_target, + job_message, + status, + exception_info, + create_time + )values( + #{jobLogId}, + #{jobName}, + #{jobGroup}, + #{invokeTarget}, + #{jobMessage}, + #{status}, + #{exceptionInfo}, + sysdate() + ) + + + \ No newline at end of file diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml new file mode 100644 index 0000000..5605c44 --- /dev/null +++ b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + select job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark + from sys_job + + + + + + + + + + delete from sys_job where job_id = #{jobId} + + + + delete from sys_job where job_id in + + #{jobId} + + + + + update sys_job + + job_name = #{jobName}, + job_group = #{jobGroup}, + invoke_target = #{invokeTarget}, + cron_expression = #{cronExpression}, + misfire_policy = #{misfirePolicy}, + concurrent = #{concurrent}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where job_id = #{jobId} + + + + insert into sys_job( + job_id, + job_name, + job_group, + invoke_target, + cron_expression, + misfire_policy, + concurrent, + status, + remark, + create_by, + create_time + )values( + #{jobId}, + #{jobName}, + #{jobGroup}, + #{invokeTarget}, + #{cronExpression}, + #{misfirePolicy}, + #{concurrent}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + \ No newline at end of file diff --git a/ruoyi-segchk-web/pom.xml b/ruoyi-segchk-web/pom.xml new file mode 100644 index 0000000..3261d3c --- /dev/null +++ b/ruoyi-segchk-web/pom.xml @@ -0,0 +1,141 @@ + + + + ruoyi + com.ruoyi + 3.6.0 + + + 4.0.0 + jar + ruoyi-segchk-web + + + web服务入口 + + + + + + + org.springframework.boot + spring-boot-devtools + true + + + + + + + + + + + + + + + + io.springfox + springfox-boot-starter + + + + + io.swagger + swagger-models + 1.6.2 + + + + + mysql + mysql-connector-java + + + + + com.ruoyi + ruoyi-framework + + + + com.ruoyi + ruoyi-segchk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.1.RELEASE + + true + + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + false + ${project.artifactId} + + + + ${project.artifactId} + + + \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/docker/Dockerfile b/ruoyi-segchk-web/src/main/docker/Dockerfile new file mode 100644 index 0000000..184bcc2 --- /dev/null +++ b/ruoyi-segchk-web/src/main/docker/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:8-jre +VOLUME /tmp +ADD lecshop_web_applets-3.0.0-SNAPSHOT.jar app.jar +ENTRYPOINT ["java","-Duser.timezone=GMT+08","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.profiles.active=prod"] \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/AppletsAppApplication.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/AppletsAppApplication.java new file mode 100644 index 0000000..a92a839 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/AppletsAppApplication.java @@ -0,0 +1,83 @@ +package com.ruoyi; + + +import com.ruoyi.util.QrCodeController; +import com.ruoyi.common.utils.SnowflakeIdWorker; +import com.ruoyi.util.RedisCacheErrorHandler; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cache.interceptor.CacheErrorHandler; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.Environment; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * Created by 魔金商城 on 2019/5/1. + * 小程序app后端启动类 + */ +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +@EnableTransactionManagement +public class AppletsAppApplication { + + public static void main(String[] args) throws UnknownHostException { + System.out.println("start-------------"); + // SpringApplication.run(MallPortalApplication.class, args); + ConfigurableApplicationContext application = SpringApplication.run(AppletsAppApplication.class, args); + Environment env = application.getEnvironment(); + String ip = InetAddress.getLocalHost().getHostAddress(); + String port = env.getProperty("server.port"); + + System.out.println("\n----------------------------------------------------------\n\t" + + "Application mallplus-Boot is running! Access URLs:\n\t" + + "Local: \t\thttp://localhost:" + port + "/\n\t" + + "External: \thttp://" + ip + ":" + port + "/\n\t" + + "swagger-ui: \thttp://" + ip + ":" + port + "/swagger-ui.html\n\t" + + "https://gitee.com/zscat/mallplus/wikis/pages/preview?sort_id=2168368&doc_id=326093"+ + "-----------------页面请部署 mallplus-admin-web-----------------------------------------"); + } + /** + * redis 异常处理 + */ + @Bean + public CacheErrorHandler errorHandler() { + return new RedisCacheErrorHandler(); + } + + /** + * 序列号生成器 + */ + @Bean + public SnowflakeIdWorker snowflakeIdWorker() { + SnowflakeIdWorker snowflakeIdWorker = new SnowflakeIdWorker(0, 1); + return snowflakeIdWorker; + } + + @Bean + public CorsFilter corsFilter() { + final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + final CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); // 允许cookies跨域 + config.addAllowedOrigin("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin + config.addAllowedHeader("*");// #允许访问的头信息,*表示全部 + config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了 + config.addAllowedMethod("OPTIONS");// 允许提交请求的方法,*表示全部允许 + config.addAllowedMethod("HEAD"); + config.addAllowedMethod("GET");// 允许Get的请求方法 + config.addAllowedMethod("PUT"); + config.addAllowedMethod("POST"); + config.addAllowedMethod("DELETE"); + config.addAllowedMethod("PATCH"); + source.registerCorsConfiguration("/**", config); + return new CorsFilter(source); + } + + +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/AppletsLoginUtils.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/AppletsLoginUtils.java new file mode 100644 index 0000000..4b2bbfd --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/AppletsLoginUtils.java @@ -0,0 +1,97 @@ +package com.ruoyi.appletsutil; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.interceptor.AuthorityInterceptor; +import com.ruoyi.util.Claims; +import org.slf4j.ILoggerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + +/** + * 小程序登录工具类 + * + * @author SK + * @since 2018/6/13 + */ +public class AppletsLoginUtils { + private static AppletsLoginUtils ourInstance = new AppletsLoginUtils(); + + private static final Logger log = LoggerFactory.getLogger(AppletsLoginUtils.class); + + private AppletsLoginUtils() { + } + + public static AppletsLoginUtils getInstance() { + return ourInstance; + } + + /** + * 获得用户id + * + * @return 返回用户id + */ + public long getCustomerId(HttpServletRequest request) { + long customerId = 0; + if (!ObjectUtils.isEmpty(getClaims(getToken(request)))) { + customerId = getClaims(getToken(request)).getUserId(); + } + return customerId; + } + /** + * 获取token + * + * @param request request + * @return token + */ + private String getToken(HttpServletRequest request) { + // 认证信息在header 中的key + final String authHeader = request.getHeader("Authorization"); + log.debug("request.header--->{}", request.getHeaderNames().toString()); + if (Objects.isNull(authHeader) || !authHeader.startsWith("Bearer")) { + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + return authHeader.length() >= 7 ? authHeader.substring(7) : authHeader.substring(6); + } + /** + * 获取openId + * + * @return 返回openId + */ + public String getOpenId(HttpServletRequest request) { + return ((Claims) request.getAttribute("claims")).getOpenId(); + } + /** + * 获取小程序凭证实体 + * + * @param token token + * @return 小程序凭证实体 + */ + private Claims getClaims(String token) { + String claims = SpringUtils.getBean(RedisCache.class).getCacheObject(token); + return StringUtils.isEmpty(claims) ? null : JSONObject.parseObject(claims, Claims.class); + } + /** + * 获取unionId + * + * @return 返回unionId + */ + public String getUnionId(HttpServletRequest request) { + return ((Claims) request.getAttribute("claims")).getUnionId(); + } + + /** + * 获取小程序凭证实体 + * + * @return 小程序凭证实体 + */ + public Claims getClaims(HttpServletRequest request) { + return ((Claims) request.getAttribute("claims")); + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/BaseResponse.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/BaseResponse.java new file mode 100644 index 0000000..1976a13 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/BaseResponse.java @@ -0,0 +1,56 @@ +package com.ruoyi.appletsutil; + + +import com.ruoyi.util.md5.MessageSourceUtil; + +import java.io.Serializable; + +/** + * 基础返回 + * Created by 魔金商城 on 17/7/10. + */ +public class BaseResponse implements Serializable { + + /** + * 结果码 + */ + private String code; + /** + * 消息内容 + */ + private String message; + + public BaseResponse(String code) { + this.code = code; + this.message = MessageSourceUtil.getMessage(code); + } + + public BaseResponse(String code, String message) { + this.code = code; + this.message = message; + } + + public static BaseResponse SUCCESSFUL() { + return new BaseResponse(ResultCode.SUCCESSFUL); + } + + public static BaseResponse FAILED() { + return new BaseResponse(ResultCode.FAILED); + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/ErrorController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/ErrorController.java new file mode 100644 index 0000000..fa84563 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/ErrorController.java @@ -0,0 +1,39 @@ +package com.ruoyi.appletsutil; + + +import com.ruoyi.common.annotation.UnAuth; +import org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController; +import org.springframework.boot.web.servlet.error.ErrorAttributes; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +/** + * Created by 魔金商城 on 2019/5/25. + * 错误控制器 + */ +@RestController +public class ErrorController extends AbstractErrorController { + + /** + * 错误地址 + */ + private static final String ERROR_PATH = "/error"; + + public ErrorController(ErrorAttributes errorAttributes) { + super(errorAttributes); + } + + @Override + public String getErrorPath() { + return ERROR_PATH; + } + + @RequestMapping(ERROR_PATH) + @UnAuth + public Map handleError(HttpServletRequest request) { + return getErrorAttributes(request, true); + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/GlobalWebExceptionHandler.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/GlobalWebExceptionHandler.java new file mode 100644 index 0000000..723c041 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/GlobalWebExceptionHandler.java @@ -0,0 +1,59 @@ +package com.ruoyi.appletsutil; + +import com.ruoyi.common.exception.ServiceException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import javax.servlet.http.HttpServletRequest; + +/** + * Created by 魔金商城 on 17/7/10. + * 全局异常 + */ +@ControllerAdvice +public class GlobalWebExceptionHandler { + + /** + * 调试日志 + */ + private Logger logger = LoggerFactory.getLogger(GlobalWebExceptionHandler.class); + + /** + * 未认证异常(有可能是未关联用户 也有可能是微信未授权根据返回码判断) + */ + @ResponseStatus(HttpStatus.UNAUTHORIZED) + @ExceptionHandler(UnAuthorizedException.class) + @ResponseBody + public BaseResponse signatureExceptionHandler(HttpServletRequest request, UnAuthorizedException ex) { + logger.error("do [{}] on [{}] failed. exMsg:{}", request.getMethod(), request.getRequestURL(), + ex.getLocalizedMessage()); + logger.error("queryString:{}, parameterMap: {}", request.getQueryString(), request.getParameterMap(), ex); + + return new BaseResponse(ex.getErrorCode(), ex.getLocalizedMessage()); + } + + /** + * 业务异常 + */ + @ExceptionHandler(value = ServiceException.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + @ResponseBody + public BaseResponse serviceExceptionHandler(HttpServletRequest request, ServiceException ex) throws Exception { + if (AnnotationUtils.findAnnotation(ex.getClass(), ResponseStatus.class) != null) + throw ex; + + logger.error("do [{}] on [{}] failed. exMsg:{}", request.getMethod(), request.getRequestURL(), + ex.getLocalizedMessage()); + if (logger.isDebugEnabled()) { + logger.error("queryString:{}, parameterMap: {}", request.getQueryString(), request.getParameterMap(), ex); + } + + return new BaseResponse(ex.getMessage(), ex.getLocalizedMessage()); + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/ResultCode.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/ResultCode.java new file mode 100644 index 0000000..9855a31 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/ResultCode.java @@ -0,0 +1,34 @@ +package com.ruoyi.appletsutil; + +/** + * Created by 魔金商城 on 17/7/10. + * 结果返回吗 + */ +public interface ResultCode { + + /** + * 操作成功; + */ + String SUCCESSFUL = "R-00000"; + + /** + * 操作失败; + */ + String FAILED = "R-00001"; + + /** + * 微信未授权 + */ + String WX_NOT_AUTHORIZED = "R-00002"; + + /** + * 微信未关联用户 + */ + String WX_NOT_LINKD = "R-00003"; + + /** + * 小程序账号已绑定错误 + */ + String WX_ALREADY_BIND_ERROR = "R-00004"; + +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/UnAuthorizedException.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/UnAuthorizedException.java new file mode 100644 index 0000000..15b2018 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/appletsutil/UnAuthorizedException.java @@ -0,0 +1,33 @@ +package com.ruoyi.appletsutil; + +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.util.md5.MessageSourceUtil; + +/** + * Created by 魔金商城 on 2018/6/13. + * 微信小程序未授权异常 + */ +public class UnAuthorizedException extends ServiceException { + + /** + * 错误code + */ + private String errorCode; + + public UnAuthorizedException(String errorCode) { + this(errorCode, MessageSourceUtil.getMessage(errorCode)); + } + + public UnAuthorizedException(String errorCode, String message) { + super(message == null ? errorCode : message); + this.errorCode = errorCode; + } + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/config/SecurityConfig.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/config/SecurityConfig.java new file mode 100644 index 0000000..92fb81e --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/config/SecurityConfig.java @@ -0,0 +1,94 @@ +package com.ruoyi.config; + + +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +/** + * spring security配置 + * + * @author ruoyi + */ +@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + + /** + * 解决 无法直接注入 AuthenticationManager + * + * @return + * @throws Exception + */ + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + /** + * anyRequest | 匹配所有请求路径 + * access | SpringEl表达式结果为true时可以访问 + * anonymous | 匿名可以访问 + * denyAll | 用户不能访问 + * fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录) + * hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问 + * hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问 + * + * @ss.hasPermi | 如果有参数,参数表示权限,则其权限可以访问 + * hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问 + * hasRole | 如果有参数,参数表示角色,则其角色可以访问 + * permitAll | 用户可以任意访问 + * rememberMe | 允许通过remember-me登录的用户访问 + * authenticated | 用户登录后可访问 + */ + @Override + protected void configure(HttpSecurity httpSecurity) throws Exception { + httpSecurity + // CRSF禁用,因为不使用session + .csrf().disable() + + // 基于token,所以不需要session + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() + // 过滤请求 + .authorizeRequests() + // 对于登录login 验证码captchaImage 允许匿名访问 + .antMatchers("/login", "/captchaImage", "/baseinfoset","/infoset/**","/aliyun/oss/**").anonymous() + .antMatchers( + HttpMethod.GET, + "/*.html", + "/**/*.html", + "/**/*.css", + "/**/*.js" + ).permitAll() + .antMatchers("/**/**").anonymous() + .antMatchers("/common/download**").anonymous() + .antMatchers("/common/download/resource**").anonymous() + .antMatchers("/swagger-ui.html").anonymous() + .antMatchers("/swagger-resources/**").anonymous() + .antMatchers("/webjars/**").anonymous() + .antMatchers("/*/api-docs").anonymous() + .antMatchers("/druid/**").anonymous() + // 除上面外的所有请求全部需要鉴权认证 + .anyRequest().authenticated() + .and() + .headers().frameOptions().disable(); + + } + + + /** + * 强散列哈希加密实现 + */ + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } + + +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/config/WebConfigurer.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/config/WebConfigurer.java new file mode 100644 index 0000000..f85642c --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/config/WebConfigurer.java @@ -0,0 +1,26 @@ +package com.ruoyi.config; + +import com.ruoyi.interceptor.AuthorityInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * Created by 魔金商城 on 2019/5/13. + * 拦截器配置 + */ +@Configuration +public class WebConfigurer implements WebMvcConfigurer { + + /** + * 注入登录拦截器 + */ + @Autowired + private AuthorityInterceptor authorityInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(authorityInterceptor).excludePathPatterns("/**/**", "/v2/**", "/swagger-ui.html", "/webjars/**", "/swagger-resources/**"); + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/interceptor/AuthorityInterceptor.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/interceptor/AuthorityInterceptor.java new file mode 100644 index 0000000..ca4d164 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/interceptor/AuthorityInterceptor.java @@ -0,0 +1,170 @@ +package com.ruoyi.interceptor; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.appletsutil.AppletsLoginUtils; +import com.ruoyi.util.Claims; +import com.ruoyi.appletsutil.ResultCode; +import com.ruoyi.appletsutil.UnAuthorizedException; +import com.ruoyi.common.annotation.UnAuth; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.segchk.domain.WeChatCustomerLink; +import com.ruoyi.member.service.WeChatCustomerLinkService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Objects; + +/** + * Created by 魔金商城 on 2018/6/13. + * 访问拦截器 + */ +@Component +public class AuthorityInterceptor extends HandlerInterceptorAdapter { + + private static final Logger log = LoggerFactory.getLogger(AuthorityInterceptor.class); + /** + * 注入redis服务 + */ + @Autowired + private RedisCache redisService; + + /** + * 注入微信用户关联服务 + */ + @Autowired + @Lazy + private WeChatCustomerLinkService weChatCustomerLinkService; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String requestType = ((HttpServletRequest) request).getMethod(); + String fullUrl = ((HttpServletRequest) request).getRequestURL().toString(); + log.debug("fullUrl--->{}", fullUrl); + int startIntercept = fullUrl.replace("//", "a").indexOf("/") + 1; + String interfaceName = fullUrl.substring(startIntercept, fullUrl.length()); + if (!"OPTIONS".equals(requestType) && !interfaceName.contains("webjars") + && !interfaceName.contains("api-docs")) { + log.info(formMapKey(AppletsLoginUtils.getInstance().getCustomerId(request), fullUrl, requestType, + IpUtils.getIpAddr((HttpServletRequest) request), null, null) + + ",\"cost\":\""); + } + + // 如果不需要拦截 则直接返回 + if (!isNeedFilter(handler)) { + log.debug("Donot need authority....."); + return true; + } + + // 认证信息在header 中的key + final String authHeader = request.getHeader("Authorization"); + + + if (Objects.isNull(authHeader) || !authHeader.startsWith("Bearer ")) { + log.info("AuthorityInterceptor preHandle fail...."); + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + + // 获得凭证 + Claims claims = getAppletsClaimsFromRedis(authHeader.substring(7)); + + // 没有凭证 直接返回 + if (Objects.isNull(claims)) { + log.info("AuthorityInterceptor preHandle fail...."); + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + + // 校验有没有uid 如果没有uid 则直接返回 + if (!claims.hasCustomerId()) { + log.error("applets has not authorized"); + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + + // 如果没有会员id 则从数据库查询 是否有会员id + /*if (!claims.hasCustomerId()) { + // 小程序没有关联用户则提示用户去关联用户 + WeChatCustomerLink weChatCustomerLink = queryWeChatCustomerLinkByUnionId(claims.getUnionId()); + if (Objects.isNull(weChatCustomerLink)) { + log.error("applets has not linked member...."); + throw new UnAuthorizedException(ResultCode.WX_NOT_LINKD); + } else { + log.info("applets has unionId and has member...."); + // 将凭证信息返回redis + putClaimsToRedis(weChatCustomerLink, claims, authHeader.substring(7)); + //如果没有小程序的openId,则更新关联信息 + if (!weChatCustomerLink.hasAppletOpenId()) { + weChatCustomerLink.setAppletOpenId(claims.getOpenId()); + weChatCustomerLinkService.updateWeChatCustomerLink(weChatCustomerLink); + } + } + }*/ + + request.setAttribute("claims", claims); + + return true; + } + + private String formMapKey(Object userId, String mothedName, String requestType, + String ip, String params, String token) { + return "\"time\"" + ":\"" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date()) + + "\",\"name\"" + ":\"" + mothedName + "\",\"uid\":\"" + userId + + "\",\"type\":\"" + requestType + "\",\"ip\":\"" + ip + + "\",\"token\":\"" + token + "\",\"params\":\"" + params + "\""; + } + /** + * 将凭证放入redis + * + * @param weChatCustomerLink 会员和小程序的绑定关系 + * @param claims 凭证 + * @param token token + */ + /*private void putClaimsToRedis(WeChatCustomerLink weChatCustomerLink, Claims claims, String token) { + claims.setUserId(weChatCustomerLink.); + redisService.putToRedis(token, JSON.toJSONString(claims)); + }*/ + + /** + * 根据unionId查询会员和小程序的绑定关系 + * + * @param unionId 小程序唯一id + * @return 返回会员和小程序的绑定关系 + */ + private WeChatCustomerLink queryWeChatCustomerLinkByUnionId(String unionId) { + return weChatCustomerLinkService.queryWeChatCustomerLinkByUnionId(unionId); + } + + + /** + * 根据token从redis 获取uid和customerId + * + * @param token token + * @return 返回uid和customerId + */ + private Claims getAppletsClaimsFromRedis(String token) { + String claims = redisService.getCacheObject(token); + return StringUtils.isEmpty(claims) ? null : JSONObject.parseObject(redisService.getCacheObject(token), Claims.class); + } + + + /** + * 判断是否需要拦截 + */ + private boolean isNeedFilter(Object handler) { + if (handler instanceof HandlerMethod) { + HandlerMethod handlerMethod = (HandlerMethod) handler; + return handlerMethod.getMethod().getAnnotation(UnAuth.class) == null; + } + return false; + } + +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/login/OssController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/login/OssController.java new file mode 100644 index 0000000..e3044a3 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/login/OssController.java @@ -0,0 +1,128 @@ +package com.ruoyi.login; + + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.setting.bean.OssSetting; +import com.ruoyi.setting.bean.UploadData; +import com.ruoyi.setting.service.OssService; +import com.ruoyi.util.CommonConstant; +import io.swagger.annotations.*; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.Objects; + +/** + * Oss相关操作接口 + * https://github.com/shenzhuan/mallplus on 2018/4/26. + */ +@RestController +@Api(tags = "OssController", description = "Oss管理") +@RequestMapping("/aliyun/oss") +public class OssController { + @Resource + private OssService ossService; + + + /** + * 上传图片 + * + * @param name 上传文件的name 默认为image + * @param type 上传文件的类型 默认为图片 0 图片 1 视频 + * @return 返回图片在腾讯云的地址 + * @throws Exception + */ + @PostMapping("uploadToQqOSSYun") + @ApiOperation(value = "上传图片", notes = "上传图片(不需要认证)") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "String", name = "name", value = "上传文件的name 默认为image"), + @ApiImplicitParam(paramType = "form", dataType = "String", name = "type", value = "上传文件的类型 默认为图片 0 图片 1 视频"), + }) + @ApiResponses({ + @ApiResponse(code = 200, message = "返回图片在腾讯云的地址", response = String.class) + }) + public AjaxResult uploadToQqOSSYun(@RequestParam("file") MultipartFile multipartFile,MultipartHttpServletRequest request, String name, String type) throws Exception { + if (StringUtils.isEmpty(name)) { + name = "image"; + } + + // 默认上传图片 + if (StringUtils.isEmpty(type)) { + type = CommonConstant.UPLOAD_PIC; + } + if (Objects.isNull(multipartFile)) { + return AjaxResult.error(); + } + return AjaxResult.success(ossService.uploadToQqOss(Arrays.asList(UploadData.build(multipartFile.getInputStream(), multipartFile.getBytes(), multipartFile.getOriginalFilename(), type, multipartFile))).stream().findFirst().orElse("")); + } + + /** + * 上传图片 + * + * @param name 上传文件的name 默认为image + * @param type 上传文件的类型 默认为图片 0 图片 1 视频 + * @return 返回图片在阿里云的地址 + * @throws Exception + */ + @PostMapping("uploadToAliOss") + @ApiOperation(value = "上传图片", notes = "上传图片(不需要认证)") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "String", name = "name", value = "上传文件的name 默认为image"), + @ApiImplicitParam(paramType = "form", dataType = "String", name = "type", value = "上传文件的类型 默认为图片 0 图片 1 视频"), + }) + @ApiResponses({ + @ApiResponse(code = 200, message = "返回图片在阿里云的地址", response = String.class) + }) + public AjaxResult uploadToOSSYun(@RequestParam("file") MultipartFile multipartFile, String name, String type) throws Exception { + if (StringUtils.isEmpty(name)) { + name = "image"; + } + + // 默认上传图片 + if (StringUtils.isEmpty(type)) { + type = CommonConstant.UPLOAD_PIC; + } + + if (Objects.isNull(multipartFile)) { + return AjaxResult.error(); + } + return AjaxResult.success(ossService.uploadToOss(Arrays.asList(UploadData.build(multipartFile.getInputStream(), multipartFile.getBytes(), multipartFile.getOriginalFilename(), type, multipartFile))).stream().findFirst().orElse("")); + } + + + /** + * 查询云存储设置 + * + * @return 云存储设置信息 + */ + @GetMapping("/oss") + @PreAuthorize("@ss.hasPermi('setting:ossSetting:list')") + @ApiOperation(value = "查询阿里云存储设置", notes = "查询阿里云存储设置(需要认证)") + @ApiResponses({ + @ApiResponse(code = 200, message = "又拍云设置信息", response = OssSetting.class) + }) + public OssSetting queryUpYunSet() { + return ossService.queryOssSetting(); + } + + /** + * 修改又拍云设置 + * + * @param ossSetting 又拍云设置信息 + * @return 成功1 否则失败 + */ + @PutMapping("/oss") + @ApiOperation(value = "修改阿里云存储设置", notes = "修改阿里云存储设置(需要认证)") + @ApiResponses({ + @ApiResponse(code = 200, message = "成功1 否则失败", response = Integer.class) + }) + public int updateOss(@RequestBody OssSetting ossSetting) { + return ossService.updateOss(ossSetting); + } + +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/login/SegChkLoginController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/login/SegChkLoginController.java new file mode 100644 index 0000000..08215ba --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/login/SegChkLoginController.java @@ -0,0 +1,759 @@ +package com.ruoyi.login; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.segchk.domain.SegchkUserWebReq; +import com.ruoyi.util.*; +import com.ruoyi.appletsutil.ResultCode; +import com.ruoyi.appletsutil.UnAuthorizedException; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.UnAuth; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.SnowflakeIdWorker; +import com.ruoyi.segchk.domain.SegchkUserWechat; +import com.ruoyi.member.service.*; +import com.ruoyi.member.vo.BindParams; +import com.ruoyi.setting.bean.WechatPaySet; +import com.ruoyi.setting.service.ILsPaySettingService; +import com.ruoyi.util.bean.SegUserProfile; +import com.ruoyi.util.bean.UserInfoProfile; +import io.swagger.annotations.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 登录控制器 + * + * @author SK + * @since 2018/6/13 + */ +@Controller +@Api(description = "登录接口") +//@RequestMapping("/default/login") +public class SegChkLoginController { + + private static final Logger logger = LoggerFactory.getLogger(SegChkLoginController.class); + /** + * 注入微信小程序登录服务 + */ +// @Autowired +// private WeChatAppletLoginService weChatAppletLoginService; + + /** + * 注入redis服务 + */ + @Autowired + private RedisCache redisService; + + /** + * jwt密钥 + */ + @Value("${token.secret}") + private String jwtSecretKey; + +// 登录超时时长,单位天,-1永久有效 + @Value("${yzytest.login.loginexpire:#{1}}") + private Integer loginexpire; + + /** + * 注入登录处理service + */ + @Resource(name = "loginService") + private LoginService loginService; + + /** + * 注入注册服务 + */ + @Autowired + private RegisterService registerService; + + /** + * 注入注册聚合服务 + */ + @Autowired + private RegisterServiceApi registerServiceApi; + + /** + * 注入微信用户关联服务 + */ + @Autowired + private WeChatCustomerLinkService weChatCustomerLinkService; + /** + * 注入随机数生成器 + */ + @Autowired + private SnowflakeIdWorker snowflakeIdWorker; + /** + * 注入支付设置服务 + */ + @Autowired + private ILsPaySettingService paySetService; + /** + * 会员登录 + * + * + * @return -1 用户名或密码错误 -2 账号冻结 -3 账号锁定 1 成功 -4 验证码错误 + */ + @PostMapping("/login") + @UnAuth + @ResponseBody + @ApiOperation(value = "会员登录", notes = "会员登录(不需要认证)") + public AjaxResult login(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) { + Long userId = 0L; + if(!ObjectUtils.isEmpty(segchkUserWebReq) && "999999".equals(segchkUserWebReq.getRemark())){ + return loginService.login(segchkUserWebReq); + } +// Object cacheObject = redisService.getCacheObject(String.format("%s", "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUipPTc5ILMnJT8")); +// logger.warn(ObjectUtils.nullSafeToString(cacheObject)); + try { + if (ObjectUtils.isEmpty(getClaims(getToken(request)))) { +// 如果用户未登录,则要求用户使用手机号登录注册 + userId = getClaims(getToken(request)).getUserId(); + return AjaxResult.error(300, "请先登录注册"); + } + } + catch (Exception e){ + return AjaxResult.error(300, "请先登录注册"); + } + + Claims claims = getClaims(getToken(request)); + SegchkUserWebReq segchkUserWebReq1 = new SegchkUserWebReq(); + segchkUserWebReq1.setUserId(claims.getUserId()); + segchkUserWebReq1.setProviderId(claims.getProviderId()); + segchkUserWebReq1.setUserLevel(claims.getUserLevel()); + + AjaxResult login = loginService.login(segchkUserWebReq1); + login.put("token", getToken(request)); + + return login; + } + + /** + * 发送短信验证码 + * r + * + * @param mobile 手机号码 + * @return 0 成功 1 失败 -1 手机号码已经存在 + */ + @UnAuth + @RequestMapping(value = "/sendmobilecode") + @ResponseBody + @ApiOperation(value = "发送短信验证码", notes = "发送短信验证码(不需要认证)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "string", name = "mobile", value = "手机号码"), + }) + @ApiResponses({ + @ApiResponse(code = 200, message = "0 成功 1 失败 -1 手机号码已经存在", response = Integer.class) + }) + public AjaxResult sendSmsCode(String mobile) { +// 发送短信验证码 + logger.debug("sendmobilecode ---> phone:{}", mobile); + int ret = registerService.sendRegisterSmsCodeFortest(mobile, code -> redisService.setCacheObject(String.format("%s_%s", CommonConstant.APPLET_REGISTER_CODE_KEY, mobile), code, 5, TimeUnit.MINUTES)); + + if(ret != 0 ){ + return AjaxResult.error("500", "验证码发送失败,请稍后重试"); + } + return AjaxResult.success("验证码发送成功"); + + } + + /** + * 发送短信验证码测试 + * r + * + * @param mobile 手机号码 + * @return 0 成功 1 失败 -1 手机号码已经存在 + */ + @UnAuth + @RequestMapping(value = "/sendmobilecodetest") + @ResponseBody + @ApiOperation(value = "发送短信验证码", notes = "发送短信验证码(不需要认证)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "string", name = "mobile", value = "手机号码"), + }) + @ApiResponses({ + @ApiResponse(code = 200, message = "0 成功 1 失败 -1 手机号码已经存在", response = Integer.class) + }) + public AjaxResult sendmobilecodetest(String mobile) { +// 发送短信验证码 + logger.debug("sendmobilecode ---> phone:{}", mobile); + int ret = registerService.sendRegisterSmsCodeFortest(mobile, code -> redisService.setCacheObject(String.format("%s_%s", CommonConstant.SMS_TEST_KEY, mobile), code, 5, TimeUnit.MINUTES)); + + if(ret != 0 ){ + return AjaxResult.error("500", "验证码发送失败,请稍后重试"); + } + return AjaxResult.success("验证码发送成功"); + + } + + /** + * 用户注册 + * + * @return -1 手机验证码错误 -2 参数错误 0 失败 成功>0 -3 手机号码已存在 -10 推荐人不存在 + */ + @UnAuth + @RequestMapping("/register") + @ResponseBody + @ApiOperation(value = "用户注册", notes = "用户注册(不需要认证)", httpMethod = "POST") + + @ApiResponses({ + @ApiResponse(code = 200, message = "-1 手机验证码错误 -2 参数错误 0 失败 成功>0 -3 手机号码已存在 -10 推荐人不存在", response = Integer.class) + }) + public AjaxResult register(@RequestBody SegChkLoginController.RegisterData registerData) { + AjaxResult res = null; + logger.debug("register with---{}", registerData.toString()); + try { + res = registerServiceApi.registerCustomer(registerData.getMobile(), registerData.getCode() + , redisService.getCacheObject(String.format("%s_%s", CommonConstant.APPLET_REGISTER_CODE_KEY, registerData.getMobile())), registerData.getRecommendId(), registerData.getRecommendLevel(), registerData.getProviderId(), registerData.getRemark()); + + } catch (Exception e) { + e.printStackTrace(); + return res; + } +// 如果返回结果中不存在token,说明没有进行微信绑定 + return res; + } + + @UnAuth + @ResponseBody + @RequestMapping("/bindaccount") + @ApiOperation(value = "小程序获取登录信息", notes = "小程序获取登录信息(不需要认证)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "string", name = "code", value = "用户登录凭证"), + }) + public AjaxResult bindaccount(@RequestBody BindParams bindParams , HttpServletRequest request) { + logger.debug("bindaccount with: {}", bindParams.toString()); + WechatPaySet wechatAppletPaySet = paySetService.queryPaySet().getWechatAppletPaySet(); + WechatSetting wechatSetting = new WechatSetting(); + if(!StringUtils.isEmpty(bindParams.getRemark())){ + wechatSetting.setType(999999); + } + wechatSetting.setAppId(wechatAppletPaySet.getAppId()); +// wechatSetting.setAppId(appId); + wechatSetting.setAppSecret(wechatAppletPaySet.getAppSecret()); +// wechatSetting.setAppSecret(appSecrt); + if (!wechatSetting.checkAppletOAuthParams()) { +// log.error("getLoginInfo fail:checkAppletOAuthParams fail"); + return AjaxResult.error("getLoginInfo fail:checkAppletOAuthParams fail"); + } + + WeChatAppletLoginResponse weChatAppletLoginResponse = WeChatAppletUtils.getLoginInfo(bindParams.getCode(), wechatSetting); + if (Objects.isNull(weChatAppletLoginResponse)) { +// log.error("getLoginInfo fail: getLoginInfo fail"); + return AjaxResult.error("获取微信信息失败,请联系客服人员"); + } + Claims claims = null; + try { + claims = getClaims(getToken(request)); + } + catch (Exception e) { + e.printStackTrace(); + claims = null; + } + SegchkUserWechat segchkUserWechat = new SegchkUserWechat(); + segchkUserWechat.setUserId(Long.valueOf(bindParams.getUserId())); + segchkUserWechat.setOpenid(weChatAppletLoginResponse.getOpenid()); + segchkUserWechat.setUnionId(weChatAppletLoginResponse.getUnionid()); + segchkUserWechat.setProviderId(Long.valueOf(bindParams.getProviderId())); + segchkUserWechat.setNickName(bindParams.getNickName()); + + segchkUserWechat.setIconUrl(bindParams.getAvatar()); +// 将用户与微信openid绑定 + int ret = weChatCustomerLinkService.addSegchkUserWechat(segchkUserWechat, bindParams.getUserLevel()); + if(ret < 1){ + return AjaxResult.error(500, "微信绑定失败!"); + } +// 产生token + String token = registerServiceApi.createToke(CommonConstant.APPLET_LOGIN_KEY, Long.valueOf(bindParams.getUserId()), Long.valueOf(bindParams.getProviderId()), Integer.valueOf(bindParams.getUserLevel())); +// String token = snowflakeIdWorker.nextId()+""; + if(claims == null) { + claims = new Claims(); + claims.setUserId(Long.valueOf(bindParams.getUserId())); + claims.setOpenId(weChatAppletLoginResponse.getOpenid()); + claims.setProviderId(Long.valueOf(bindParams.getProviderId())); + claims.setUserLevel(Integer.valueOf(bindParams.getUserLevel())); + } +// 将用户的token进行缓存 + if(loginexpire == -1) { + redisService.setCacheObject(token, claims); + } + else{ + redisService.setCacheObject(token, claims, loginexpire, TimeUnit.HOURS); + } + StringBuilder sb = new StringBuilder(CommonConstant.APPLET_BIND_OPENID).append("-").append(token); + redisService.setCacheObject(sb.toString(), segchkUserWechat, 7200, TimeUnit.SECONDS); + + +// 测试,解析getuserprofile返回结果 + + try { + if(!ObjectUtils.isEmpty(bindParams.getProfileRes())) { + SegUserProfile segUserProfile = JSON.parseObject(bindParams.getProfileRes(), SegUserProfile.class); + logger.info("getUserProfile info is: ({})", segUserProfile.toString()); + UserInfoProfile userInfoProfile = JSON.parseObject(segUserProfile.getUserInfo(), UserInfoProfile.class); + logger.info("getUserInfo from userProfile is: ({})", userInfoProfile.toString()); + String decryptres = WeChatAppletUtils.getUserInfoFromUserProfile(weChatAppletLoginResponse.getSession_key(), segUserProfile); + logger.debug("getUserProfile decrypt res: ({})", decryptres); + } + } catch (Exception e){ + logger.error("getUserProfile wrong! {}", e.getMessage()); + e.printStackTrace(); + } + + return AjaxResult.success("绑定成功", token); + } + + /** + * 用户注册实体 + */ + @ApiModel(description = "用户注册实体") + private static class RegisterData extends BaseEntity { + + /** + * 手机号码 + */ + @ApiModelProperty(value = "手机号码") + private String mobile; + + + /** + * 手机验证码 + */ + @ApiModelProperty(value = "手机验证码") + private String code; + + /** + * 推荐码 + */ + @ApiModelProperty(value = "推荐码") + private String recommendId; + + /** + * 推荐码 + */ + @ApiModelProperty(value = "推荐人角色") + private String recommendLevel; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private String providerId; + + /** + * 授权code + */ + @ApiModelProperty(value = "授权code") + private String wechatCode; + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getRecommendId() { + return recommendId; + } + + public void setRecommendId(String recommendId) { + this.recommendId = recommendId; + } + + public String getRecommendLevel() { + return recommendLevel; + } + + public void setRecommendLevel(String recommendLevel) { + this.recommendLevel = recommendLevel; + } + + public String getProviderId() { + return providerId; + } + + public void setProviderId(String providerId) { + this.providerId = providerId; + } + + public String getWechatCode() { + return wechatCode; + } + + public void setWechatCode(String wechatCode) { + this.wechatCode = wechatCode; + } + + @Override + public String toString() { + return "RegisterData{" + + "mobile='" + mobile + '\'' + + ", code='" + code + '\'' + + ", recommendId='" + recommendId + '\'' + + ", recommendLevel='" + recommendLevel + '\'' + + ", providerId='" + providerId + '\'' + + ", wechatCode='" + wechatCode + '\'' + + '}'; + } + } + + /** + * 注册登录 + * + * @param loginParams 登录参数 + * @return -1 用户名或密码错误 -2 账号冻结 -3 账号锁定 1 成功 -4 验证码错误 + */ + /*@PostMapping("/logout") + @UnAuth + @ResponseBody + @ApiOperation(value = "会员登录", notes = "会员登录(不需要认证)") + @ApiResponses({ + @ApiResponse(code = 200, message = "result: -1 用户名或密码错误 -2 账号冻结 -3 账号锁定 1 成功 -4 验证码错误 token:放登录成功后的token", response = Map.class) + }) + public AjaxResult logout(@RequestBody LoginParams loginParams, HttpServletRequest request)*/ + + /** + * 会员登录 + * + * @param loginParams 登录参数 + * @return -1 用户名或密码错误 -2 账号冻结 -3 账号锁定 1 成功 -4 验证码错误 + */ + /*@PostMapping("/logout") + @UnAuth + @ResponseBody + @ApiOperation(value = "会员登录", notes = "会员登录(不需要认证)") + @ApiResponses({ + @ApiResponse(code = 200, message = "result: -1 用户名或密码错误 -2 账号冻结 -3 账号锁定 1 成功 -4 验证码错误 token:放登录成功后的token", response = Map.class) + }) + public AjaxResult logout(@RequestBody LoginParams loginParams, HttpServletRequest request) { + AppletLoginRedisParamResponse appletLoginRedisParamResponse = JSON.parseObject(redisService.getValue(getToken(request)),AppletLoginRedisParamResponse.class) ; + redisService.deleteObject(getToken(request)); + // redisService.deleteObject(appletLoginRedisParamResponse.); + return AjaxResult.success(); + }*/ + /** + * 小程序获取登录信息 + * + * @param 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 api,使用 code 换取 openid 和 session_key 等信息 + * @return 登录信息 + */ + /*@UnAuth + @ResponseBody + @RequestMapping("/getOpenId") + @ApiOperation(value = "小程序获取登录信息", notes = "小程序获取登录信息(不需要认证)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "string", name = "code", value = "用户登录凭证"), + }) + @ApiResponses({ + @ApiResponse(code = 200, message = "登录信息", response = AppletLoginInfo.class) + }) + public AjaxResult getOpenId(@RequestBody AppletLoginRedisParamResponse appletLoginRedisParamResponse , HttpServletRequest request) { + + WechatPaySet wechatAppletPaySet = paySetService.queryPaySet().getWechatAppletPaySet(); + WechatSetting wechatSetting = new WechatSetting(); + wechatSetting.setAppId(wechatAppletPaySet.getAppId()); + wechatSetting.setAppSecret(wechatAppletPaySet.getAppSecret()); + if (!wechatSetting.checkAppletOAuthParams()) { + log.error("getLoginInfo fail:checkAppletOAuthParams fail"); + return AjaxResult.error("getLoginInfo fail:checkAppletOAuthParams fail"); + } + WeChatAppletLoginResponse weChatAppletLoginResponse = WeChatAppletUtils.getLoginInfo(appletLoginRedisParamResponse.getCode(), wechatSetting); + if (Objects.isNull(weChatAppletLoginResponse)) { + log.error("getLoginInfo fail: getLoginInfo fail"); + return AjaxResult.error("getLoginInfo fail: getLoginInfo fail"); + } + UmsMember member = new UmsMember(); + member.setAppletOpenId(weChatAppletLoginResponse.getOpenid()); + long customerId = 0; + if (!ObjectUtils.isEmpty(getClaims(getToken(request)))) { + customerId = getClaims(getToken(request)).getCustomerId(); + } + member.setId(customerId); + return AjaxResult.success(memberService.updateUmsMember(member)); + }*/ + /** + * 小程序获取登录信息 + * + * @param 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 api,使用 code 换取 openid 和 session_key 等信息 + * @return 登录信息 + */ + /*@UnAuth + @ResponseBody + @RequestMapping("/mpWechatLogin") + @ApiOperation(value = "小程序获取登录信息", notes = "小程序获取登录信息(不需要认证)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "string", name = "code", value = "用户登录凭证"), + }) + @ApiResponses({ + @ApiResponse(code = 200, message = "登录信息", response = AppletLoginInfo.class) + }) + public AjaxResult mpWechatLogin(@RequestBody AppletLoginRedisParamResponse appletLoginRedisParamResponse , HttpServletRequest request) { + final StringBuilder sb = new StringBuilder(); + Map res = new HashMap<>(); + String token = snowflakeIdWorker.nextId() + ""; + appletLoginRedisParamResponse.setToken(token); + WechatPaySet wechatAppletPaySet = paySetService.queryPaySet().getWechatAppletPaySet(); + WechatSetting wechatSetting = new WechatSetting(); + wechatSetting.setAppId(wechatAppletPaySet.getAppId()); + wechatSetting.setAppSecret(wechatAppletPaySet.getAppSecret()); + if (!wechatSetting.checkAppletOAuthParams()) { + log.error("getLoginInfo fail:checkAppletOAuthParams fail"); + return AjaxResult.error("getLoginInfo fail:checkAppletOAuthParams fail"); + } + WeChatAppletLoginResponse weChatAppletLoginResponse = WeChatAppletUtils.getLoginInfo(appletLoginRedisParamResponse.getCode(), wechatSetting); + if (Objects.isNull(weChatAppletLoginResponse)) { + log.error("getLoginInfo fail: getLoginInfo fail"); + return AjaxResult.error("getLoginInfo fail: getLoginInfo fail"); + } + appletLoginRedisParamResponse.setSessionKey(weChatAppletLoginResponse.getSession_key()); + appletLoginRedisParamResponse.setOpenId(weChatAppletLoginResponse.getOpenid()); + UmsMember member =memberService.queryCustomerByappletOpenId(weChatAppletLoginResponse.getOpenid()); + if (member!=null){ + appletLoginRedisParamResponse.setCustomerId(member.getId()); + appletLoginRedisParamResponse.setToken(sb.toString()); + redisService.putToRedis(sb.toString(), JSON.toJSONString(appletLoginRedisParamResponse)); + // redisService.putToRedis(loginParams.getMobile(), sb.toString()); + res.put("access_token", sb.toString()); + res.put("refresh_token", sb.toString()); + res.put("member", member); + }else { + member = new UmsMember(); + member.setSource("5"); + member.setMobile("123456789"); + member.setAppletOpenId(weChatAppletLoginResponse.getOpenid()); + member.setPassword("123456"); + memberService.addCustomer(member); + redisService.putToRedis(sb.toString(), JSON.toJSONString(appletLoginRedisParamResponse)); + // redisService.putToRedis(loginParams.getMobile(), sb.toString()); + res.put("access_token", sb.toString()); + res.put("refresh_token", sb.toString()); + res.put("member", member); + } + return AjaxResult.success(res); + + }*/ + /** + * 小程序获取登录信息 + * + * @param code 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 api,使用 code 换取 openid 和 session_key 等信息 + * @return 登录信息 + */ + /*@UnAuth + @ResponseBody + @RequestMapping("/getlogininfo") + @ApiOperation(value = "小程序获取登录信息", notes = "小程序获取登录信息(不需要认证)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "string", name = "code", value = "用户登录凭证"), + }) + @ApiResponses({ + @ApiResponse(code = 200, message = "登录信息", response = AppletLoginInfo.class) + }) + public AppletLoginInfo getLoginInfo(String code, HttpServletRequest request) { + String unionId = null; + if (!StringUtils.isEmpty(getToken(request))) { + unionId = Objects.isNull(getClaims(getToken(request))) ? null : getClaims(getToken(request)).getUnionId(); + redisService.delValue(getToken(request)); + } + return weChatAppletLoginService.getLoginInfo(code, unionId, appletLoginRedisParamResponse -> { + redisService.putToRedis(appletLoginRedisParamResponse.getToken(), JSON.toJSONString(appletLoginRedisParamResponse)); + if (appletLoginRedisParamResponse.hasUnionId()) { + redisService.putToRedis(appletLoginRedisParamResponse.getUnionId(), appletLoginRedisParamResponse.getToken()); + } + }); + }*/ + + /** + * 处理用户信息 + * + * @param weChatAppletUserInfo 小程序用户信息实体 + * @return 登录信息 + */ + /*@UnAuth + @ResponseBody + @RequestMapping("/dealuserinfo") + @ApiOperation(value = "处理用户信息", notes = "处理用户信息(不需要认证)", httpMethod = "POST") + public AppletLoginInfo dealUserInfo(WeChatAppletUserInfo weChatAppletUserInfo, HttpServletRequest request) { + String token = getToken(request); + Claims claims = getClaims(token); + return weChatAppletLoginService.dealUserInfo(weChatAppletUserInfo, claims.getOpenId(), claims.getSessionKey(), appletLoginRedisParamResponse -> afterDealUserInfo(claims, appletLoginRedisParamResponse, token)); + }*/ + + /** + * 绑定账号 + * + * @param loginParams 登录参数 + */ + /*@RequestMapping("/bindaccount") + @ResponseBody + @UnAuth + @ApiOperation(value = "绑定账号", notes = "绑定账号(不需要认证)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "string", name = "username", value = "用户名"), + @ApiImplicitParam(paramType = "form", dataType = "string", name = "password", value = "密码"), + }) + @ApiResponses({ + @ApiResponse(code = 200, message = "返回码 -1 用户名或密码错误 -2 账号冻结 -3 账号锁定 1 成功 -4 验证码错误", response = Integer.class) + }) + public AjaxResult bindAccount(@ApiIgnore LoginParams loginParams, HttpServletRequest request) { + //回调 + loginParams.setConsumer(customer -> + alterLoginSuccess(customer.getId(), request) + ); + return AjaxResult.success(loginService.login(loginParams)); + }*/ + + + /** + * 解绑账号 + * + * @return 1成功 + */ + /*@RequestMapping("/unbindaccount") + @ResponseBody + @ApiOperation(value = "解绑账号", notes = "解绑账号(需要认证)", httpMethod = "POST") + @ApiResponses({ + @ApiResponse(code = 200, message = "1成功", response = Integer.class) + }) + public int unbindAccount(HttpServletRequest request) { + weChatAppletLoginService.unbindAccount(AppletsLoginUtils.getInstance().getCustomerId(request), AppletsLoginUtils.getInstance().getUnionId(request)); + Claims claims = AppletsLoginUtils.getInstance().getClaims(request); + claims.setCustomerId(CommonConstant.NO_CUSTOMER_ID); + redisService.putToRedis(getToken(request), JSONObject.toJSONString(claims)); + return 1; + }*/ + + + /** + * 获取token + * + * @param request request + * @return token + */ + private String getToken(HttpServletRequest request) { + // 认证信息在header 中的key + final String authHeader = request.getHeader("Authorization"); + + if (Objects.isNull(authHeader) || !authHeader.startsWith("Bearer")) { + logger.info("getClaims fail :Authorization fail "); + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + String token = authHeader.length() >= 7 ? authHeader.substring(7) : authHeader.substring(6); +// logger.warn("get toke info from {}---{}({})", authHeader, token, token.length()); + return token; + } + + /** + * 获取小程序凭证实体 + * + * @param token token + * @return 小程序凭证实体 + */ + private Claims getClaims(String token) { + + Object claims = redisService.getCacheObject(token); + logger.debug("getClaims---token:{} Claims:{}", token, claims); + return ObjectUtils.isEmpty(claims) ? null : (Claims) claims; + } + + private SegchkUserWechat getSegchkUserWechat(String token) { + StringBuilder sb = new StringBuilder(CommonConstant.APPLET_BIND_OPENID).append("-").append(token); + Object segchkUserWechat = redisService.getCacheObject(sb.toString()); + + return ObjectUtils.isEmpty(segchkUserWechat) ? null : (SegchkUserWechat) segchkUserWechat; + } + + /** + * 处理小程序凭证信息 + * + * @param claims 小程序凭证实体 + * @param appletLoginRedisParamResponse 小程序redis参数返回实体 + * @param token token + */ + /*private void afterDealUserInfo(Claims claims, AppletLoginRedisParamResponse appletLoginRedisParamResponse, String token) { + if (Objects.nonNull(appletLoginRedisParamResponse)) { + claims.setCustomerId(appletLoginRedisParamResponse.getCustomerId()); + claims.setUnionId(appletLoginRedisParamResponse.getUnionId()); + redisService.putToRedis(token, JSON.toJSONString(claims)); + if (appletLoginRedisParamResponse.hasUnionId()) { + redisService.putToRedis(appletLoginRedisParamResponse.getUnionId(), token); + } + } else { + log.error("afterDealUserInfo fail:appletLoginRedisParamResponse is null"); + } + }*/ + + /** + * 登录成功后处理的事 + * + * @param customerId 用户id + */ + /*private void alterLoginSuccess(long customerId, HttpServletRequest request) { + if (!ObjectUtils.isEmpty(customerId)) { + Claims claims = getClaims(getToken(request)); + // 校验有没有uid 如果没有uid 则直接返回 + if (!claims.hasUnionId()) { + log.error("applets has not authorized"); + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + //绑定账号 + try { + weChatAppletLoginService.bindAccount(claims.getOpenId(), claims.getUnionId(), customerId); + } catch (ServiceException e) { + throw e; + } catch (Exception e) { + //捕获异常,可能已经绑定过账号 + WeChatCustomerLink weChatCustomerLink = weChatCustomerLinkService.queryWeChatCustomerLinkByUnionId(claims.getUnionId()); + if (Objects.nonNull(weChatCustomerLink)) { + customerId = weChatCustomerLink.getCustomerId(); + } else { + customerId = CommonConstant.NO_CUSTOMER_ID; + } + } + if (customerId == CommonConstant.NO_CUSTOMER_ID) { + claims.setCustomerId(customerId); + redisService.putToRedis(getToken(request), JSONObject.toJSONString(claims)); + } + } + }*/ + + /** + * token测试方法 + * + * @param token token + */ + @UnAuth + @ResponseBody + @RequestMapping("/tokentest") + @ApiOperation(value = "处理用户信息", notes = "处理用户信息(不需要认证)", httpMethod = "GET") + public AjaxResult token_test(@RequestBody String token, HttpServletRequest request) { + Object cacheObject = redisService.getCacheObject(token); + logger.warn("get token: {} for value: {}", token, cacheObject); + logger.warn("tokentest get claim: {}", getClaims(token).toString()); + return AjaxResult.success(cacheObject); + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultIndexController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultIndexController.java new file mode 100644 index 0000000..f7e68cb --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultIndexController.java @@ -0,0 +1,511 @@ +package com.ruoyi.segchk; + +import com.ruoyi.appletsutil.ResultCode; +import com.ruoyi.appletsutil.UnAuthorizedException; +import com.ruoyi.common.annotation.UnAuth; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.service.ISegchkStoreIndexService; +import com.ruoyi.util.Claims; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; + +import static com.ruoyi.common.core.domain.AjaxResult.CODE_TAG; +import static com.ruoyi.common.core.domain.AjaxResult.DATA_TAG; + +/** + * seg首页推荐商户Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/default/index") +@Api("商城开放接口") +public class SegchkDefaultIndexController extends BaseController +{ +// private static final Logger logger = LoggerFactory.getLogger(SegchkDefaultIndexController.class); + + @Autowired + private ISegchkStoreIndexService segchkStoreIndexService; + + /** + * 注入redis服务 + */ + @Autowired + private RedisCache redisService; + + + @Value("${segchk.share.title:#{卡乐分享}}") + private String shareTitle; + + @Value("${segchk.share.desc:#{卡乐无限享受}}") + private String shareDesc; + + @Value("${segchk.recommendstore.distince:#{null}}") + private BigDecimal recomDist; + + @Value("${segchk.startid:#{null}}") + private Integer startid; + + @Value("${segchk.default_district:#{110100}}") + private Long defaultDistrict; + /** + * 根据用户当前所在地市行政id,返回运营商id 尹志颖 + * { + * "adcode": 110000 + * } + */ + @UnAuth + @GetMapping("/getProviderByadcode") + @ApiOperation(value = "查询运营商id", notes = "根据用户当前位置所在行政区代码或用户选择的行政区代码") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "Long", name = "adcode", value = "行政区代码"), + }) + @ApiResponses({ + @ApiResponse(code = 200, message = "拼团促销图片信息", response = Long.class) + }) + public AjaxResult get_provider_byadcode(Long adcode) + { + logger.debug("get_provider_byadcode with: {}", adcode); + AjaxResult ajax = new AjaxResult(); + HashMap paramsMap = new HashMap<>(); + paramsMap.put("districtId", adcode); + paramsMap.put("defaultDistrict", defaultDistrict); + HashMap provider = segchkStoreIndexService.getProvider(paramsMap); + ajax.put(CODE_TAG, 200); + PrvoiderDistrict prvoiderDistrict = new PrvoiderDistrict(); + prvoiderDistrict.setProvFlag((Integer) provider.get("provFlag")); + prvoiderDistrict.setProviderId((Long) provider.get("providerId")); + prvoiderDistrict.setPhoneNo((String) provider.get("phoneNo")); + prvoiderDistrict.setWechatId((String) provider.get("wechatId")); + if(prvoiderDistrict.getProvFlag() == 1){ +// 说明返回默认地区运营商 + prvoiderDistrict.setDistName(String.valueOf(provider.get("provName"))); + } + ajax.put(DATA_TAG, prvoiderDistrict); + logger.debug("getProviderByadcode res --- {}", ajax.toString()); + return ajax; + } + + /** + * 搜索商户,根据名称,标签,充值卡等 尹志颖 + * { + * { + * "providerId": 0,* + * "sortType": 0,* + * "storeId": 0, + * "storeName": "demoData",* + * "lableId": 0, + * "lableName": "demoData",* + * "typeId": 0, + * "userLon": 114.123456,* + * "userLat": 43.123456* + * } + * } + */ + @UnAuth + @RequestMapping(value = "/StoreSearch",method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "搜索商户", notes = "搜索商户(不需要认证)", httpMethod = "POST") + public TableDataInfo store_search(@RequestBody SegchkStoreWebReq segchkStoreWebReq) + { + logger.debug("store_search with: {}", segchkStoreWebReq.toString()); + startPage(); + segchkStoreWebReq.setUserDist(recomDist); + List list = segchkStoreIndexService.selectSegchkStoreSearch(segchkStoreWebReq); + return getDataTable(list); + } + + /** + * 查询seg标签列表 尹志颖 + * { + * "providerId": 4 + * } + */ + @UnAuth + @GetMapping("/lableListByProvider") + @ResponseBody + public TableDataInfo lable_list_by_provider(Long providerId) + { + logger.debug("lableListByProvider with: {}", providerId); + startPage(); + List list = segchkStoreIndexService.selectSegchkRecommendLableList(providerId); + return getDataTable(list); + } + + /** + * 查询seg标签列表 尹志颖 + * { + * "providerId": 4 + * } + */ + @UnAuth + @GetMapping("/lableListByProviderAll") + @ResponseBody + public TableDataInfo lable_list_by_provider_all(Long providerId) + { + logger.debug("lableListByProviderAll with: {}", providerId); + startPage(); + List list = segchkStoreIndexService.selectSegchkLableList(providerId); + return getDataTable(list); + } + + /** + * 根据运营商id查询seg首页推荐商户列表 尹志颖 + * { + * "providerId": 4, + * "sortType": 1, + * "userLon": 114.123456, + * "userLat": 43.123456 + * } + */ + @UnAuth + @RequestMapping(value = "/listByProvider",method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "根据运营商id查询seg首页推荐商户列表", notes = "不需要鉴权") + public TableDataInfo list_by_provider(@RequestBody SegchkRecommenderStoreWebReq segchkRecommenderStoreWebReq) + { + segchkRecommenderStoreWebReq.setUserDist(recomDist); + logger.debug("list_by_provider with: {}", segchkRecommenderStoreWebReq.toString()); + startPage(); + List list = segchkStoreIndexService.selectSegchkRecommenderStoreListByProvider(segchkRecommenderStoreWebReq); + System.out.println(list.size()); + return getDataTable(list); + } + + + /** + * 根据标签id,搜索商户列表 尹志颖 + * { + * "providerId": 2, + * "sortType": 0, + * "lableId": 1, + * "typeId": 2, + * "cardId": 2, 可选项,当用户在商户列表中,点选某个具体会员卡时才有效 + * "userLon": 116.25849, + * "userLat": 39.684333 + * } + */ + @UnAuth + @PostMapping("/listByProviderwithLable") + @ResponseBody + @ApiOperation(value = "根据标签id,搜索商户列表", notes = "不需要鉴权") + public TableDataInfo list_by_providerwith_lable(@RequestBody SegchkStoreWebReq segchkStoreWebReq) + { + + logger.debug("list_by_providerwith_lable with: {}", segchkStoreWebReq.toString()); + startPage(); + segchkStoreWebReq.setUserDist(recomDist); + List list = segchkStoreIndexService.selectSegchkStoreList(segchkStoreWebReq); + return getDataTable(list); + } + + /** + * 根据运营商id,返回轮播图列表 尹志颖 + * { + * "providerId": 3 + * } + */ + @UnAuth + @PostMapping("/getBannersByProvider") + @ResponseBody + @ApiOperation(value = "根据运营商id,返回轮播图列表", notes = "不需要鉴权") + public TableDataInfo get_banners_by_provider(Long providerId) + { + logger.debug("get_banners_by_provider with: {}", providerId); +// AjaxResult ajax = new AjaxResult(); + startPage(); + List segchkCarouseMgtList = segchkStoreIndexService.getBanners(providerId); +// ajax.put(CODE_TAG, 200); +// ajax.put(DATA_TAG, segchkCarouseMgtList); + return getDataTable(segchkCarouseMgtList); +// return ajax; + } + + + /** + * 根据运营商,商户id,查询商户详情 尹志颖 + * { + * "providerId": 4, + * "storeId": 124 + * } + */ + @UnAuth + @PostMapping("/storeDetails") + @ResponseBody + @ApiOperation(value = "根据运营商,商户id,查询商户详情", notes = "不需要鉴权") + public AjaxResult store_details(@RequestBody SegchkStoreWebReq segchkStoreWebReq, String recommenderId, String recommenderLevel, HttpServletRequest request) + { + logger.debug("store_details with: {}---{}---{}", segchkStoreWebReq.toString(), recommenderId, recommenderLevel); +// startPage(); + SegchkStoreBasicInfoWebResp segchkStoreBasicInfoWebResp = segchkStoreIndexService.selectSegchkStoreDetails(segchkStoreWebReq); + try { + Claims claims = getClaims(getToken(request)); + if (!ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 +// userId = getClaims(getToken(request)).getUserId(); + segchkStoreBasicInfoWebResp.setIsCollect(segchkStoreIndexService.isCollectByUser(segchkStoreWebReq.getProviderId(), Long.valueOf(segchkStoreWebReq.getStoreId()), getClaims(getToken(request)).getUserId())); + } + }catch (Exception e){ + e.printStackTrace(); + logger.error("storeDetails without user"); + } + + AjaxResult ajax = AjaxResult.success("获取成功", segchkStoreBasicInfoWebResp); + if(!StringUtils.isEmpty(recommenderId) && !StringUtils.isEmpty(recommenderLevel)){ + logger.debug("store_details recommender with: {}---{}", recommenderId, recommenderLevel); + int ret = segchkStoreIndexService.recommenderIsExit(recommenderId, recommenderLevel, segchkStoreWebReq.getProviderId().toString()); + if(ret > 1){ + ajax.put("recommenderId", recommenderId); + ajax.put("recommenderLevel", recommenderLevel); + } + logger.warn("store_details the recommender: ({}{}) is {} {} curprov({})", recommenderId, recommenderLevel, ret < 1 ? "not exit" : "exit", ret == 1 ? "with same provider" : "different with provider"); + } + return ajax; + } + + /** + * 查询seg商户评价列表 尹志颖 + */ + @UnAuth + @PostMapping("/storeCommentList") + @ResponseBody + @ApiOperation(value = "查询seg商户评价列表", notes = "不需要鉴权") + public TableDataInfo store_comment_list(@RequestBody SegchkStoreWebReq segchkStoreWebReq) + { + logger.debug("store_comment_list with: {}", segchkStoreWebReq.toString()); + startPage(); + List segchkServiceCommentWebRespList = segchkStoreIndexService.selectSegchkStoreComments(segchkStoreWebReq); + return getDataTable(segchkServiceCommentWebRespList); + } + + /** + * 查询seg商户评价列表 尹志颖 + */ + @UnAuth + @PostMapping("/shareInfo") + @ResponseBody + @ApiOperation(value = "查询seg商户评价列表", notes = "不需要鉴权") + public AjaxResult share_info(String page, String storeId, String providerId, String remark, HttpServletRequest request) + { + logger.debug("shareInfo page: {}", page); + ShareInfo shareInfo = new ShareInfo(); + shareInfo.setTitle(shareTitle); + shareInfo.setDesc(shareDesc); + StringBuilder sb = new StringBuilder(page); + if(!StringUtils.isEmpty(remark)){ + shareInfo.setPage(sb.append("?remark=").append(remark).toString()); + } + else { + Claims claims = null; + try { + claims = getClaims(getToken(request)); + sb.append("?&recC=").append(claims.getUserId()) + .append("&recV=").append(claims.getUserLevel()) + .append("&prov=").append(claims.getProviderId()) + .append((StringUtils.isEmpty(storeId) ? "" : "&store=" + storeId)); + shareInfo.setPage(sb.toString()); + } catch (Exception e) { + e.printStackTrace(); + sb.append("?") + .append((StringUtils.isEmpty(storeId) ? "" : "&store=" + storeId)) + .append((StringUtils.isEmpty(providerId) ? "" : "&prov=" + providerId)); + } + } + logger.debug("shareInfo res: {}", shareInfo.toString()); + return AjaxResult.success(shareInfo); + } + + /** + * 查询客服 尹志颖 + */ + @UnAuth + @PostMapping("/customService") + @ResponseBody + @ApiOperation(value = "查询客服", notes = "不需要鉴权") + public AjaxResult custom_service(Long providerId, HttpServletRequest request) + { + logger.debug("customService with: {}", providerId); + HashMap provider = segchkStoreIndexService.getCustomService(providerId); + CustomService customService = new CustomService(); + customService.setPhoneNo((String)provider.get("phoneNo")); + customService.setWechatId((String)provider.get("wechatId")); + logger.debug("customService res: {}", customService.toString()); + return AjaxResult.success(customService); + } + + + /** + * 获取小程序凭证实体 + * + * @param token token + * @return 小程序凭证实体 + */ + private Claims getClaims(String token) { + + Object claims = redisService.getCacheObject(token); + logger.debug("getClaims---token:{} Claims:{}", token, claims); + return ObjectUtils.isEmpty(claims) ? null : (Claims) claims; + } + + /** + * 获取token + * + * @param request request + * @return token + */ + private String getToken(HttpServletRequest request) { + // 认证信息在header 中的key + final String authHeader = request.getHeader("Authorization"); + + if (Objects.isNull(authHeader) || !authHeader.startsWith("Bearer")) { + logger.info("getClaims fail :Authorization fail "); + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + return authHeader.length() >= 7 ? authHeader.substring(7) : authHeader.substring(6); + } + + + private class ShareInfo extends BaseEntity { + private String title; + private String desc; + private String page; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getPage() { + return page; + } + + public void setPage(String page) { + this.page = page; + } + + @Override + public String toString() { + return "ShareInfo{" + + "title='" + title + '\'' + + ", desc='" + desc + '\'' + + ", page='" + page + '\'' + + '}'; + } + } + + private class PrvoiderDistrict extends BaseEntity { + private Integer provFlag; + private Long providerId; + private String distName; + private String wechatId; + private String phoneNo; + + public Integer getProvFlag() { + return provFlag; + } + + public void setProvFlag(Integer provFlag) { + this.provFlag = provFlag; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public String getDistName() { + + return distName; + } + + public void setDistName(String distName) { + this.distName = distName; + } + + public String getWechatId() { + return wechatId; + } + + public void setWechatId(String wechatId) { + this.wechatId = wechatId; + } + + public String getPhoneNo() { + return phoneNo; + } + + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + + @Override + public String toString() { + return "PrvoiderDistrict{" + + "provFlag=" + provFlag + + ", providerId=" + providerId + + ", distName='" + distName + '\'' + + ", wechatId='" + wechatId + '\'' + + ", phoneNo='" + phoneNo + '\'' + + '}'; + } + } + + private class CustomService extends BaseEntity { + private String phoneNo; + private String wechatId; + + public String getPhoneNo() { + return phoneNo; + } + + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + + public String getWechatId() { + return wechatId; + } + + public void setWechatId(String wechatId) { + this.wechatId = wechatId; + } + + @Override + public String toString() { + return "CustomService{" + + "phoneNo='" + phoneNo + '\'' + + ", wechatId='" + wechatId + '\'' + + '}'; + } + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultProviderController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultProviderController.java new file mode 100644 index 0000000..cdcd67a --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultProviderController.java @@ -0,0 +1,207 @@ +package com.ruoyi.segchk; + +import com.ruoyi.appletsutil.ResultCode; +import com.ruoyi.appletsutil.UnAuthorizedException; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.login.SegChkLoginController; +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.service.*; +import com.ruoyi.util.Claims; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * seg首页推荐商户Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/default/provider") +@Api("运营商小程序接口") +public class SegchkDefaultProviderController extends BaseController +{ + @Autowired + private ISegchkStoreIndexService segchkStoreIndexService; + + @Autowired + private ISegchkUserIndexService segchkUserIndexService; + + @Autowired + private ISegchkProviderIndexService segchkProviderIndexService; + @Autowired + private RedisCache redisService; + + + // 登录超时时长,单位天,-1永久有效 + @Value("${yzytest.login.loginexpire:#{1}}") + private Integer loginexpire; + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 查询seg用户中心信息 尹志颖 + * { + * "userId": 240,//* + * "providerId": 4,//* + * "userLevel": 2//* 0运营商,1商户,2用户 + * } + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:provider_info:query')") + @PostMapping("/storeUserInfo") + @ResponseBody + @ApiOperation(value = "查询seg运营商中心信息", notes = "需要鉴权") + public AjaxResult storeUserInfo(SegchkUserWebReq segchkUserWebReq) + { +// startPage(); + AjaxResult ajax = new AjaxResult(); + + ajax.put("code", 200); + + SegchkUserWebResp segchkUserWebResp = segchkUserWebReq.getUserLevel() == 2 ? + segchkUserIndexService.selectSegchkUserWebInfo(segchkUserWebReq) + : (segchkUserWebReq.getUserLevel() == 1 ? + segchkStoreIndexService.selectSegchkStoreWebInfo(segchkUserWebReq) : segchkProviderIndexService.selectSegchkProviderWebInfo(segchkUserWebReq)); + ajax.put("value", segchkUserWebResp); + return ajax; + } + + + /** + * 根据运营商id,角色等级,返回运营商下所有核消统计或售卡统计 尹志颖 + * { + * "providerId": 4,//* + * "staticMonth": "10",,//测试 + * "srcFlag": 0//*0核消汇总1售卡汇总 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:provider_service_sale:list')") + @PostMapping("/providerServiceAndSaleList") + @ResponseBody + @ApiOperation(value = "根据运营商id,角色等级,返回运营商下所有核消统计或售卡统计", notes = "需要鉴权") + public TableDataInfo providerServiceAndSaleList(@RequestBody SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkServiceAndSaleWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkServiceAndSaleWebReq.setProviderId(claims.getUserId()); + } + logger.debug("providerServiceAndSaleList with: {}", segchkServiceAndSaleWebReq.toString()); + startPage(); + List segchkServiceAndSaleWebRespList = segchkProviderIndexService.selectProviderServiceAndSaleList(segchkServiceAndSaleWebReq); + return getDataTable(segchkServiceAndSaleWebRespList); + } + + /** + * 根据运营商id,角色等级,返回运营商下核消统计或售卡统计 尹志颖 + * { + * "providerId": 4,//* + * "staticMonth": "2021-06-01",//* + * "srcFlag": 0//*0核消详情1售卡详情 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:provider_service_sale:query')") + @PostMapping("/providerServiceAndSaleDetails") + @ResponseBody + @ApiOperation(value = "根据运营商id,角色等级,返回运营商下核消统计或售卡统计", notes = "需要鉴权") + public TableDataInfo providerServiceAndSaleDetails(@RequestBody SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkServiceAndSaleWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkServiceAndSaleWebReq.setProviderId(claims.getUserId()); + } + logger.warn("providerServiceAndSaleDetails with: {}", segchkServiceAndSaleWebReq.toString()); + startPage(); + List segchkServiceAndSaleDetailWebRespList = segchkProviderIndexService.selectProviderServiceAndSaleDetails(segchkServiceAndSaleWebReq); + return getDataTable(segchkServiceAndSaleDetailWebRespList); + } + + + // 返回注册登录提示 + private AjaxResult LoginRequireAjax() { + return AjaxResult.error(300, "请先登录注册"); + } + + private TableDataInfo LoginRequireTableInfo() { + TableDataInfo tableDataInfo = new TableDataInfo(); + tableDataInfo.setCode(300); + tableDataInfo.setMsg("请先登录注册"); + return tableDataInfo; + } + + // 获取登录信息 + private Claims getLoing(HttpServletRequest request){ + String token = null; + try { + token = getToken(request); + }catch (Exception e){ + e.printStackTrace(); + return null; + } + Claims claims = getClaims(token); + if(!ObjectUtils.isEmpty(claims)){ + if(loginexpire == -1){ + redisService.setCacheObject(token, claims); + } + else { + redisService.setCacheObject(token, claims, loginexpire, TimeUnit.DAYS); + } + } + return claims; + } + + /** + * 获取token + * + * @param request request + * @return token + */ + private String getToken(HttpServletRequest request) { + // 认证信息在header 中的key + final String authHeader = request.getHeader("Authorization"); + + if (Objects.isNull(authHeader) || !authHeader.startsWith("Bearer")) { + logger.info("getClaims fail :Authorization fail "); + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + String token = authHeader.length() >= 7 ? authHeader.substring(7) : authHeader.substring(6); +// logger.warn("get toke info from {}---{}({})", authHeader, token, token.length()); + return token; + } + + /** + * 获取小程序凭证实体 + * + * @param token token + * @return 小程序凭证实体 + */ + private Claims getClaims(String token) { + + Object claims = redisService.getCacheObject(token); + logger.debug("getClaims---token:{} Claims:{}", token, claims); + return ObjectUtils.isEmpty(claims) ? null : (Claims) claims; + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultStoreController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultStoreController.java new file mode 100644 index 0000000..76240bd --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultStoreController.java @@ -0,0 +1,589 @@ +package com.ruoyi.segchk; + +import com.ruoyi.appletsutil.ResultCode; +import com.ruoyi.appletsutil.UnAuthorizedException; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.UnAuth; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.file.FileUtils; +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.service.*; +import com.ruoyi.util.Claims; +import com.ruoyi.util.CommonConstant; +import com.ruoyi.util.QRCodeUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +import static com.ruoyi.common.core.domain.AjaxResult.*; + +/** + * seg首页推荐商户Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/default/store") +@Api("商家小程序接口") +public class SegchkDefaultStoreController extends BaseController +{ + @Autowired + private ISegchkStoreIndexService segchkStoreIndexService; + + @Autowired + private ISegchkUserIndexService segchkUserIndexService; + + @Autowired + private ISegchkProviderIndexService segchkProviderIndexService; + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 注入redis服务 + */ + @Autowired + private RedisCache redisService; + + // 核消二维码保存路径 + @Value("${segchk.store_qr_path:#{null}}") + private String qrPath; + + // 核消二维码背景图片 + @Value("${segchk.store_poster_path:#{null}}") + private String posterPath; + + @Value("${segchk.storeurl:#{null}}") + private String SEGCHK_ST_URL; + + + @Value("${segchk.sto_height:#{200}}") + private Integer stoHeight; + + @Value("${segchk.sto_weight:#{200}}") + private Integer stoWeight; + + // 登录超时时长,单位天,-1永久有效 + @Value("${yzytest.login.loginexpire:#{1}}") + private Integer loginexpire; + +// 如果是一张新会员卡,在第一次核消是是否给商家返利 + @Value("${segchk.servicecheck.storereward.enable:false}") + private Boolean stoRewardWithChk; + + /** + * 查询seg用户中心信息 尹志颖 + * { + * "userId": 240,//* + * "providerId": 4,//* + * "userLevel": 2//* 0运营商,1商户,2用户 + * } + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:store_info:query')") + @PostMapping("/storeUserInfo") + @ResponseBody + @ApiOperation(value = "查询seg商家中心信息", notes = "需要鉴权") + public AjaxResult store_user_info(SegchkUserWebReq segchkUserWebReq) + { +// startPage(); + AjaxResult ajax = new AjaxResult(); + + ajax.put("code", 200); + + SegchkUserWebResp segchkUserWebResp = segchkUserWebReq.getUserLevel() == 2 ? + segchkUserIndexService.selectSegchkUserWebInfo(segchkUserWebReq) + : (segchkUserWebReq.getUserLevel() == 1 ? + segchkStoreIndexService.selectSegchkStoreWebInfo(segchkUserWebReq) : segchkProviderIndexService.selectSegchkProviderWebInfo(segchkUserWebReq)); + ajax.put("value", segchkUserWebResp); + return ajax; +// return getDataTable(segchkServiceCommentWebRespList); + } + + + + /** + * 根据商家id,运营商id,角色等级,返回核消统计或售卡统计 尹志颖 + * { + * "providerId": 4,//* + * "storeId": 123,//* + * "staticMonth": "6",//查询最近几个月汇总 + * "userLevel": 1,//测试 + * "srcFlag": 0//*0核消汇总1售卡汇总 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:store_service_sale:list')") + @PostMapping("/storeServiceAndSaleList") + @ResponseBody + @ApiOperation(value = "根据商家id,运营商id,角色等级,返回核消统计或售卡统计", notes = "需要鉴权") + public TableDataInfo store_service_and_sale_list(@RequestBody SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkServiceAndSaleWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkServiceAndSaleWebReq.setStoreId(claims.getUserId()); + segchkServiceAndSaleWebReq.setProviderId(claims.getProviderId()); + } + logger.debug("store_service_and_sale_list with: {}", segchkServiceAndSaleWebReq.toString()); + startPage(); + List segchkServiceAndSaleWebRespList = segchkStoreIndexService.selectStoreServiceAndSaleList(segchkServiceAndSaleWebReq); + return getDataTable(segchkServiceAndSaleWebRespList); + } + + /** + * 根据商家id,运营商id,角色等级,返回核消统计或售卡统计 尹志颖 + * { + * "providerId": 4, + * "storeId": 123, + * "staticMonth": "2021-06-01", + * "srcFlag": 0 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:store_service_sale:query')") + @PostMapping("/storeServiceAndSaleDetails") + @ResponseBody + @ApiOperation(value = "根据商家id,运营商id,角色等级,返回核消统计或售卡统计", notes = "需要鉴权") + public TableDataInfo store_service_and_sale_details(@RequestBody SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkServiceAndSaleWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkServiceAndSaleWebReq.setStoreId(claims.getUserId()); + segchkServiceAndSaleWebReq.setProviderId(claims.getProviderId()); + } + logger.debug("store_service_and_sale_details with: {}", segchkServiceAndSaleWebReq.toString()); + startPage(); + List segchkServiceAndSaleDetailWebRespList = segchkStoreIndexService.selectStoreServiceAndSaleDetails(segchkServiceAndSaleWebReq); + return getDataTable(segchkServiceAndSaleDetailWebRespList); + } + + + /** + * 根据商家id,运营商id,返回针对该商家的预约列表 尹志颖 + * { + * "providerId": 4,//* + * "storeId": 123,//* + * "staticMonth": "60"//测试 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:store_likego:list')") + @PostMapping("/storeUserLikeGoList") + @ResponseBody + @ApiOperation(value = "根据商家id,运营商id,返回针对该商家的预约列表", notes = "需要鉴权") + public TableDataInfo store_user_like_go_list(@RequestBody SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkServiceAndSaleWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkServiceAndSaleWebReq.setStoreId(claims.getUserId()); + segchkServiceAndSaleWebReq.setProviderId(claims.getProviderId()); + } + logger.debug("store_user_like_go_list with: {}", segchkServiceAndSaleWebReq.toString()); + startPage(); + List segchkUserLikeGoWebRespList = segchkStoreIndexService.selectStoreUserLikeGoList(segchkServiceAndSaleWebReq); + return getDataTable(segchkUserLikeGoWebRespList); + } + + + /** + * 根据用户id,运营商id,查询seg商户提现列表 尹志颖 + * { + * "userId": 84,//* + * "phoneNo": "demoData",//测试 + * "providerId": 3//* + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:store_cash:list')") + @PostMapping("/storeCashList") + @ResponseBody + @ApiOperation(value = "根据用户id,运营商id,查询seg商户提现列表", notes = "需要鉴权") + public TableDataInfo store_cash_list(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkUserWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkUserWebReq.setUserId(claims.getUserId()); + segchkUserWebReq.setProviderId(claims.getProviderId()); + } + logger.debug("store_cash_list with: {}", segchkUserWebReq.toString()); + startPage(); + List segchkUserWebSCRespList = segchkStoreIndexService.selectStoreCashList(segchkUserWebReq); + return getDataTable(segchkUserWebSCRespList); + } + + + /** + * 根据二维码参数,解析出预约卡信息及商家id,进行对比确认,如果不可核 消返回失败原因,如果成功返回成功信息 + * { + * "likegoId": 0,//*二维码中携带 + * "storeId": "demoData"//*提交请求时携带 + * } + */ + @RepeatSubmit + @ApiOperation(value = "商家核消操作", notes = "需要鉴权") +// @PreAuthorize("@ss.hasPermi('segchk:store_check:update')") + @PostMapping( "/ServiceCheckTest") + @ResponseBody + @Transactional(propagation = Propagation.REQUIRED) + public AjaxResult service_check_test(Long likegoId, String storeId, String remark, HttpServletRequest request) + { + + if(StringUtils.isEmpty(remark)){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + if(!storeId.equals(String.valueOf(claims.getUserId()))){ + logger.warn("ServiceCheckTest---storeid: {} is not then token: {}", storeId, claims); + return AjaxResult.error(300, "请先登录注册"); + } + } + AjaxResult ajax = new AjaxResult(); + logger.debug("ServiceCheckTest with: {}---{}---{}", likegoId.toString(), storeId, remark); + SegchkServiceOrderChkTestResp segchkServiceOrderChkTestResp = segchkUserIndexService.selectUserOrderPredInfo(likegoId); + segchkServiceOrderChkTestResp.setLikegoId(likegoId); + logger.debug("ServiceCheckTest check with: {}", segchkServiceOrderChkTestResp.toString()); + if(segchkServiceOrderChkTestResp.getStoreId()!= Long.parseLong(storeId)){ + ajax.put(CODE_TAG, "500"); + ajax.put(MSG_TAG, "预约单商家非本店商家!"); + } + else if(segchkServiceOrderChkTestResp.getMgtState() != 0){ + ajax.put(CODE_TAG, "500"); + ajax.put(MSG_TAG, segchkServiceOrderChkTestResp.getMgtState() == 1 ? "该预约单所用卡已失效" : "该预约单所用卡已使用"); + } + else if(segchkServiceOrderChkTestResp.getIsExpire() == 1){ + ajax.put(CODE_TAG, "500"); + ajax.put(MSG_TAG, "该预约单所用卡已失效"); + } + else if(segchkServiceOrderChkTestResp.getCardStatus() != 0){ + ajax.put(CODE_TAG, "500"); + ajax.put(MSG_TAG, "该预约单所用卡已失效"); + } + else if(segchkServiceOrderChkTestResp.getTotalCount() == 0){ + ajax.put(CODE_TAG, "500"); + ajax.put(MSG_TAG, "本店已不支持该类型卡"); + } + else if(segchkServiceOrderChkTestResp.getHasLeftCount() <= 0){ + ajax.put(CODE_TAG, "500"); + ajax.put(MSG_TAG, "该预约单在本店已无可用权益次数"); + } + else if(segchkServiceOrderChkTestResp.getCanFree() == 1){ + int ret = segchkUserIndexService.OrderCheckTransaction(segchkServiceOrderChkTestResp, likegoId, stoRewardWithChk); + ajax.put(CODE_TAG, "200"); + + segchkServiceOrderChkTestResp.setSegchkRecommenderStoreLableWebList(null); + ajax.put(DATA_TAG, segchkServiceOrderChkTestResp); + + StringBuilder sb = new StringBuilder(CommonConstant.APPLET_SERVICE_CHK).append(":").append(storeId).append("-").append(segchkServiceOrderChkTestResp.getUserId()); + logger.debug("ServiceCheckTest will store likego : {}:{}", sb.toString(), likegoId); + redisService.setCacheObject(sb.toString(), likegoId, 5, TimeUnit.MINUTES); + } + else { + int ret = segchkUserIndexService.OrderCheckTransaction(segchkServiceOrderChkTestResp, likegoId, stoRewardWithChk); + + if(ret != 3){ + ajax.put(CODE_TAG, "500"); + ajax.put(MSG_TAG, "核消失败"); + } + else{ + ajax.put(CODE_TAG, "200"); + ajax.put(MSG_TAG, "核消成功"); + List lables = segchkServiceOrderChkTestResp.getSegchkRecommenderStoreLableWebList(); + SegchkRecommenderStoreLableWeb lable = new SegchkRecommenderStoreLableWeb(); + lable.setLableId(0); + lable.setLableTypeId(1); + lable.setLableName("本店尊享"); + lables.add(lable); + segchkServiceOrderChkTestResp.setSegchkRecommenderStoreLableWebList(lables); + ajax.put(DATA_TAG, segchkServiceOrderChkTestResp); + StringBuilder sb = new StringBuilder(CommonConstant.APPLET_SERVICE_CHK).append(":").append(storeId).append("-").append(segchkServiceOrderChkTestResp.getUserId()); + logger.debug("ServiceCheckTest will store likego : {}:{}", sb.toString(), likegoId); + redisService.setCacheObject(sb.toString(), likegoId, 5, TimeUnit.MINUTES); + } + } + return ajax; + } + + @PostMapping("giveFreeCard") + @ResponseBody + @ApiOperation(value = "商家赠卡接口", notes = "需要鉴权") + public AjaxResult giveFreeCard(@RequestBody StoreSelfCard storeSelfCard, HttpServletRequest request) + { + logger.debug("giveFreeCard with --- {}", storeSelfCard.toString()); + SegchkStoreSelfMgt segchkStoreSelfMgt = new SegchkStoreSelfMgt(); + segchkStoreSelfMgt.setStoreId(storeSelfCard.getStoreId()); + if(StringUtils.isEmpty(storeSelfCard.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + segchkStoreSelfMgt.setProviderId(claims.getProviderId()); + segchkStoreSelfMgt.setStoreId(claims.getUserId()); + } + StringBuilder sb = new StringBuilder(CommonConstant.APPLET_SERVICE_CHK).append(":").append(segchkStoreSelfMgt.getStoreId()).append("-").append(storeSelfCard.getUserId()); + Long likegoId = redisService.getCacheObject(sb.toString()); + if(likegoId == null){ + logger.warn("giveFreeCard cannot get likegoId from redis for ({}:{})", segchkStoreSelfMgt.getStoreId(), storeSelfCard.getUserId()); + return AjaxResult.error(500, "赠卡失败"); + } + Long cardId = segchkStoreIndexService.getVipCardFromLikego(likegoId); + segchkStoreSelfMgt.setCardId(cardId); + segchkStoreSelfMgt.setUserId(storeSelfCard.getUserId()); + segchkStoreSelfMgt.setTypeId(storeSelfCard.getTypeId()); + segchkStoreSelfMgt.setFreeCount(storeSelfCard.getTotalCount()); + segchkStoreSelfMgt.setLableId(storeSelfCard.getTypeId() == 2 ? storeSelfCard.getLableId() : 0L); + segchkStoreSelfMgt.setFreeName(storeSelfCard.getTypeId() == 2 ? null : "赠卡"); + segchkStoreSelfMgt.setFreeContent(storeSelfCard.getFreeContent()); + segchkStoreSelfMgt.setLeftCount(storeSelfCard.getTotalCount()); + logger.debug("giveFreeCard with --- {}", segchkStoreSelfMgt.toString()); + Integer ret = segchkStoreIndexService.addStoreSelfCard(segchkStoreSelfMgt); + if(ret == 0){ + logger.error("giveFreeCard failed with --- {}", segchkStoreSelfMgt.toString()); + } + redisService.deleteObject(sb.toString()); + return ret > 0 ? AjaxResult.success("赠卡成功") : AjaxResult.error(500, "赠卡失败"); + } + /** + * 提现结果回调接口,接口微信的支付结果,更新充值结果, ret 0成功,其他失败 未测试 + * { + * "chargeId": "45435", + * "userLevel": "1/2/0", + * "ret": 1 + * } + */ +// @Log(title = "seg提现结果回调", businessType = BusinessType.UPDATE) + @PostMapping("/userCashResult") + @ResponseBody + @ApiOperation(value = "提现结果回调接口", notes = "需要鉴权") + public void userCashResult(String chargeId, int userLevel, int ret) + { + if(userLevel == 1) { + segchkStoreIndexService.cashRet(chargeId, ret); + } + else if(userLevel == 2){ + segchkUserIndexService.cashRet(chargeId, ret); + } + } + + + /** + * 根据信息,生成商户推广二维码 尹志颖 + * { + * "userId": 234,//* + * "providerId": 4,//* + * "userLevel": 0//测试用 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_likego:list')") + @UnAuth + @GetMapping("/storeShareQr") + @ResponseBody + @ApiOperation(value = "商户推广二维码", notes = "需要鉴权") + public AjaxResult store_share_qr(String storeId, String providerId, String remark, Integer qrw, Integer qrh, HttpServletRequest request, HttpServletResponse response) + { + if(StringUtils.isEmpty(remark)){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + storeId = String.valueOf(claims.getUserId()); + providerId = String.valueOf(claims.getProviderId()); + } + String urlstr = String.format(SEGCHK_ST_URL, storeId, "1") + (StringUtils.isEmpty(remark) ? "" : "&remark=" + remark); + logger.debug("storeShareQr with: prov:{}---store:{}---url:{}", storeId, providerId, urlstr); + createQRImg(response, urlstr, storeId, providerId, (ObjectUtils.isEmpty(qrw) ? stoWeight : qrw), (ObjectUtils.isEmpty(qrh) ? stoHeight : qrh)); + return AjaxResult.success("生成成功"); + } + + @UnAuth + @GetMapping("/storerecommend") + @ResponseBody + @ApiOperation(value = "商户推广二维码", notes = "需要鉴权") + public AjaxResult storerecommend(String recC, String recV, String prov, HttpServletRequest request, HttpServletResponse response) + { + + StoreRecommend storeRecommend = new StoreRecommend(); + storeRecommend.setProviderId(prov); + storeRecommend.setRecommendId(recC); + storeRecommend.setRecommendLevel(recV); + logger.debug("storerecommend res: {}", storeRecommend.toString()); + return AjaxResult.success("生成成功", storeRecommend); + } + + + + // 返回注册登录提示 + private AjaxResult LoginRequireAjax() { + return AjaxResult.error(300, "请先登录注册"); + } + + private TableDataInfo LoginRequireTableInfo() { + TableDataInfo tableDataInfo = new TableDataInfo(); + tableDataInfo.setCode(300); + tableDataInfo.setMsg("请先登录注册"); + return tableDataInfo; + } + + // 获取登录信息 + private Claims getLoing(HttpServletRequest request){ + String token = null; + try { + token = getToken(request); + }catch (Exception e){ + e.printStackTrace(); + return null; + } + Claims claims = getClaims(token); + if(!ObjectUtils.isEmpty(claims)){ + if(loginexpire == -1){ + redisService.setCacheObject(token, claims); + } + else { + redisService.setCacheObject(token, claims, loginexpire, TimeUnit.HOURS); + } + } + return claims; + } + + + /** + * 获取小程序凭证实体 + * + * @param token token + * @return 小程序凭证实体 + */ + private Claims getClaims(String token) { + + Object claims = redisService.getCacheObject(token); + logger.debug("getClaims---token:{} Claims:{}", token, claims); + return ObjectUtils.isEmpty(claims) ? null : (Claims) claims; + } + + /** + * 获取token + * + * @param request request + * @return token + */ + private String getToken(HttpServletRequest request) { + // 认证信息在header 中的key + final String authHeader = request.getHeader("Authorization"); + + if (Objects.isNull(authHeader) || !authHeader.startsWith("Bearer")) { + logger.info("getClaims fail :Authorization fail "); + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + return authHeader.length() >= 7 ? authHeader.substring(7) : authHeader.substring(6); + } + + /** + * 创建二维码图片 + * + * @param url 链接地址 + * @param width 宽 + * @param height 高 + */ + private void createQRImg(HttpServletResponse response, String url, String storeId, String providerId, Integer width, Integer height) { + logger.debug("createQRImg with: {}---w:{}---h:{}", url, width, height); + OutputStream outputStream = null; + try { + outputStream = response.getOutputStream(); + StringBuilder qrsb = new StringBuilder(qrPath); + qrsb.append(File.separator).append(providerId).append("_").append(storeId).append("qr.jpg"); + QRCodeUtils.createQrCode(url, width, height, "jpg", outputStream, qrsb.toString(), posterPath); + logger.debug("createQRImg qrPath: {}, posterPath: {}", qrPath, posterPath); + outputStream.flush(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + + private class StoreRecommend extends BaseEntity { + private String recommendId; + private String recommendLevel; + private String providerId; + + public String getRecommendId() { + return recommendId; + } + + public void setRecommendId(String recommendId) { + this.recommendId = recommendId; + } + + public String getRecommendLevel() { + return recommendLevel; + } + + public void setRecommendLevel(String recommendLevel) { + this.recommendLevel = recommendLevel; + } + + public String getProviderId() { + return providerId; + } + + public void setProviderId(String providerId) { + this.providerId = providerId; + } + + @Override + public String toString() { + return "StoreRecommend{" + + "recommendId='" + recommendId + '\'' + + ", recommendLevel='" + recommendLevel + '\'' + + ", providerId='" + providerId + '\'' + + '}'; + } + } + + +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultUserController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultUserController.java new file mode 100644 index 0000000..c65e830 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/segchk/SegchkDefaultUserController.java @@ -0,0 +1,1111 @@ +package com.ruoyi.segchk; + +import com.ruoyi.appletsutil.ResultCode; +import com.ruoyi.appletsutil.UnAuthorizedException; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.UnAuth; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.member.service.WeChatCustomerLinkService; +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.service.*; +import com.ruoyi.setting.bean.WechatPaySet; +import com.ruoyi.setting.service.ILsPaySettingService; +import com.ruoyi.util.*; +import com.ruoyi.util.bean.PrepayResult; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.math.BigDecimal; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +import static com.ruoyi.common.core.domain.AjaxResult.*; +import static com.ruoyi.common.utils.ip.IpUtils.getIpAddr; + +/** + * seg首页推荐商户Controller + * + * @author yinzhiying + * @date 2021-08-23 + */ +@RestController +@RequestMapping("/default/user") +@Api("用户小程序接口") +public class SegchkDefaultUserController extends BaseController +{ + @Autowired + private ISegchkStoreIndexService segchkStoreIndexService; + @Autowired + private ISegchkUserCollectService segchkUserCollectService; + + @Autowired + private ISegchkUserLikegoService segchkUserLikegoService; + + @Autowired + private ISegchkUserIndexService segchkUserIndexService; + + @Autowired + private ISegchkProviderIndexService segchkProviderIndexService; + + @Autowired + private ISegchkUserChargeService segchkUserChargeService; + + /** + * 注入支付设置服务 + */ + @Autowired + private ILsPaySettingService paySetService; + + /** + * 注入微信用户关联服务 + */ + @Autowired + private WeChatCustomerLinkService weChatCustomerLinkService; + /** + * 注入redis服务 + */ + @Autowired + private RedisCache redisService; + + + // 核消二维码保存路径 + @Value("${segchk.check_qr_path:#{null}}") + private String qrPath; + + // 核消二维码背景图片 + @Value("${segchk.check_poster_path:#{null}}") + private String posterPath; + + @Value("${segchk.chkurl:#{null}}") + private String SEGCHK_SC_URL; + + @Value("${segchk.chk_height:#{200}}") + private Integer chkHeight; + + @Value("${segchk.chk_weight:#{200}}") + private Integer chkWeight; + + // 登录超时时长,单位天,-1永久有效 + @Value("${yzytest.login.loginexpire:#{1}}") + private Integer loginexpire; + /** + * 新增保存seg用户收藏记录 + * { + * "collectType": "1",//* + * "providerId": 0,//* + * "userId": 0,//* + * "storeId": 0,//* + * "modTime": "2021-08-16 13:43:43", + * "mgtState": 0//* + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_collect:add')") + @UnAuth +// @Log(title = "seg用户收藏记录", businessType = BusinessType.INSERT) + @RepeatSubmit + @PostMapping("/addUserCollect") + @ResponseBody + @ApiOperation(value = "添加seg用户收藏记录", notes = "需要鉴权") + public AjaxResult add_user_collect(@RequestBody SegchkUserCollect segchkUserCollect, HttpServletRequest request) + { + if(!StringUtils.isEmpty(segchkUserCollect.getRemark())){ +// 测试 + if(!segchkUserCollect.isValid()){ + return AjaxResult.error("400", "请求信息异常"); + } + logger.debug("add_user_collect with: {}", segchkUserCollect.toString()); + return toAjax(segchkUserCollectService.insertSegchkUserCollect(segchkUserCollect)); + } + + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + if (claims.getUserLevel() != 2){ + return AjaxResult.error(400, "非会员用户不可以收藏"); + } + segchkUserCollect.setUserId(claims.getUserId()); + segchkUserCollect.setProviderId(claims.getProviderId()); + logger.debug("add_user_collect with: {}", segchkUserCollect.toString()); + return toAjax(segchkUserCollectService.insertSegchkUserCollect(segchkUserCollect)); + } + + + /** + * 删除seg用户收藏记录 + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_collect:remove')") + @UnAuth +// @Log(title = "删除seg用户收藏记录", businessType = BusinessType.DELETE) + @PostMapping( "/removeUserCollect") + @ResponseBody + @ApiOperation(value = "删除seg用户收藏记录", notes = "需要鉴权") + public AjaxResult removeUserCollect(@RequestBody RemoveIds removeIds, HttpServletRequest request) + { + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + logger.debug("removeUserCollect with: {}", removeIds.toString()); + return toAjax(segchkUserCollectService.deleteSegchkUserCollectByIds(removeIds.getIds())); + } + + /** + * 根据运营商id,用户id,商户id,查询该用户在该商户可使用的会员卡或优惠券 尹志颖 + * { + * "providerId": 4, + * "storeId": 128, + * "userId": 245 + * } + */ + @UnAuth +// @Log(title = "查询该用户在该商户可使用的会员卡或优惠券", businessType = BusinessType.GENCODE) + @PostMapping("/userOrderPredList") + @ResponseBody + public TableDataInfo UserOrderPredList(@RequestBody SegchkServiceOrderWebReq segchkServiceOrderWebReq, HttpServletRequest request) + { + startPage(); + if(!StringUtils.isEmpty(segchkServiceOrderWebReq.getRemark())){ + List segchkServiceOrderWebReqList = segchkUserIndexService.selectUserOrderPredCardListWebInfo(segchkServiceOrderWebReq); + return getDataTable(segchkServiceOrderWebReqList); + } + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkServiceOrderWebReq.setUserId(claims.getUserId()); + List segchkServiceOrderWebReqList = segchkUserIndexService.selectUserOrderPredCardListWebInfo(segchkServiceOrderWebReq); +// boolean anyMatch = segchkServiceOrderWebReqList.parallelStream().anyMatch(v -> v.getTypeId() == 0); + return getDataTable(segchkServiceOrderWebReqList); + } + + /** + * 新增保存seg用户想去记录 + * { + * "providerId": 4,//* + * "userId": 231,//* + * "storeId": 128,//* + * "cardId": 230,//* + * "cardType": 0 //* 0充值卡2优惠券1赠卡 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_likego:add')") + @UnAuth +// @Log(title = "seg用户想去记录", businessType = BusinessType.INSERT) + @RepeatSubmit + @PostMapping("/addOrderUserLikego") + @ResponseBody + @ApiOperation(value = "添加seg用户想去记录", notes = "需要鉴权") + public AjaxResult add_order_user_likego(@RequestBody SegchkUserLikego segchkUserLikego, HttpServletRequest request) + { + Long userId = 0L; + + if(StringUtils.isEmpty(segchkUserLikego.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + if(claims.getUserLevel() != 2){ + return AjaxResult.error(400, "未会员用户不允许预约!"); + } + segchkUserLikego.setUserId(claims.getUserId()); + segchkUserLikego.setProviderId(claims.getProviderId()); + } + logger.debug("add_order_user_likego with: {}", segchkUserLikego.toString()); + return toAjax(segchkUserLikegoService.insertSegchkUserLikego(segchkUserLikego)); + } + + + /** + * 根据预约id,返回预约单二维码 尹志颖 + * { + * "userId": 234,//* + * "providerId": 4,//* + * "userLevel": 0//测试用 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_likego:list')") + @UnAuth + @PostMapping("/userLikeGoQr") + @ResponseBody + @ApiOperation(value = "查询seg用户预约单列表", notes = "需要鉴权") + public AjaxResult user_like_go_qr(String likegoId, String remark, Integer qrw, Integer qrh, HttpServletRequest request, HttpServletResponse response) + { + SegchkUserLikego segchkUserLikego = new SegchkUserLikego(); + segchkUserLikego.setLikegoId(Long.valueOf(likegoId)); + if(StringUtils.isEmpty(remark)){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + segchkUserLikego.setUserId(claims.getUserId()); + segchkUserLikego.setProviderId(claims.getProviderId()); + } + startPage(); + logger.debug("userLikeGoQr with: {}", segchkUserLikego.toString()); + SegchkUserLikego segchkUserLikego1 = segchkUserIndexService.selectUserLikeGo(segchkUserLikego); + createQRImg(response, String.format(SEGCHK_SC_URL, likegoId, segchkUserLikego1.getStoreId()) + (StringUtils.isEmpty(remark) ? "" : "&remark=" + remark), (ObjectUtils.isEmpty(qrw) ? chkWeight : qrw), (ObjectUtils.isEmpty(qrh) ? chkHeight : qrh)); + return AjaxResult.success("生成成功"); + } + + /** + * 查询seg用户中心信息 尹志颖 + * { + * "userId": 240,//* + * "providerId": 4,//* + * "userLevel": 2//* 0运营商,1商户,2用户 + * } + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_info:query')") + @UnAuth + @PostMapping("/storeUserInfo") + @ResponseBody + @ApiOperation(value = "查询seg用户中心信息", notes = "需要鉴权") + public AjaxResult store_user_info(SegchkUserWebReq segchkUserWebReq) + { +// startPage(); + AjaxResult ajax = new AjaxResult(); + + ajax.put("code", 200); + + SegchkUserWebResp segchkUserWebResp = segchkUserWebReq.getUserLevel() == 2 ? + segchkUserIndexService.selectSegchkUserWebInfo(segchkUserWebReq) + : (segchkUserWebReq.getUserLevel() == 1 ? + segchkStoreIndexService.selectSegchkStoreWebInfo(segchkUserWebReq) : segchkProviderIndexService.selectSegchkProviderWebInfo(segchkUserWebReq)); + ajax.put("value", segchkUserWebResp); + return ajax; +// return getDataTable(segchkServiceCommentWebRespList); + } + + + /** + * 根据用户id,运营商id,查询seg用户核消列表 尹志颖 + * { + * "userId": 245,//* + * "providerId": 4//* + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_check:list')") + @UnAuth + @PostMapping("/storeServiceCheckList") + @ResponseBody + @ApiOperation(value = "查询seg用户核消列表", notes = "需要鉴权") + public TableDataInfo store_service_check_list(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) + { + if(StringUtils.isEmpty(segchkUserWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkUserWebReq.setUserId(claims.getUserId()); + segchkUserWebReq.setProviderId(claims.getProviderId()); + } + startPage(); + logger.debug("store_service_check_list with: {}", segchkUserWebReq.toString()); + List segchkUserWebSCRespList = segchkUserIndexService.selectUserServiceCHKList(segchkUserWebReq); + return getDataTable(segchkUserWebSCRespList); + } + + + /** + * 根据用户id,运营商id,查询seg用户可用会员卡列表或者优惠券列表 尹志颖 + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_card:list')") + @UnAuth + @PostMapping("/userCardList") + @ResponseBody + @ApiOperation(value = "查询seg用户可用会员卡列表或者优惠券列表", notes = "需要鉴权") + public TableDataInfo user_card_list(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) + { + if(StringUtils.isEmpty(segchkUserWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkUserWebReq.setUserId(claims.getUserId()); + segchkUserWebReq.setProviderId(claims.getProviderId()); + } + startPage(); + logger.debug("user_card_list with: {}", segchkUserWebReq.toString()); + List segchkUserWebSCRespList = segchkUserIndexService.selectUserCardList(segchkUserWebReq); + return getDataTable(segchkUserWebSCRespList); + } + + + /** + * 根据用户id,运营商id,查询seg用户收藏列表 尹志颖 + * { + * "userId": 439,//* + * "providerId": 4//* + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_collect:list')") + @UnAuth + @PostMapping("/userCollectList") + @ResponseBody + @ApiOperation(value = "查询seg用户收藏列表", notes = "需要鉴权") + public TableDataInfo user_collect_list(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkUserWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkUserWebReq.setUserId(claims.getUserId()); + segchkUserWebReq.setProviderId(claims.getProviderId()); + } + startPage(); + logger.debug("user_collect_list with: {}", segchkUserWebReq.toString()); + List segchkUserWebSCRespList = segchkUserIndexService.selectUserCollectList(segchkUserWebReq); + return getDataTable(segchkUserWebSCRespList); + } + + + /** + * 根据用户id,运营商id,查询seg用户预约单列表 尹志颖 + * { + * "userId": 234,//* + * "providerId": 4,//* + * "userLevel": 0//测试用 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_likego:list')") + @UnAuth + @PostMapping("/userLikeGOList") + @ResponseBody + @ApiOperation(value = "查询seg用户预约单列表", notes = "需要鉴权") + public TableDataInfo userLikeGOList(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkUserWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkUserWebReq.setUserId(claims.getUserId()); + segchkUserWebReq.setProviderId(claims.getProviderId()); + } + startPage(); + logger.debug("userLikeGOList with: {}", segchkUserWebReq.toString()); + List segchkUserWebSCRespList = segchkUserIndexService.selectUserLikGoList(segchkUserWebReq); + return getDataTable(segchkUserWebSCRespList); + } + + + /** + * 删除seg用户想去记录 + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_likego:remove')") +// @Log(title = "seg用户想去记录", businessType = BusinessType.DELETE) + @PostMapping( "/removeOrderUserLikego") + @ResponseBody + @ApiOperation(value = "删除seg用户想去记录", notes = "需要鉴权") + public AjaxResult removeOrderUserLikego(@RequestBody RemoveIds removeIds, HttpServletRequest request) + { + + if(StringUtils.isEmpty(removeIds.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + removeIds.setUserId(claims.getUserId()); + } + logger.debug("removeOrderUserLikego with: {}", removeIds.toString()); + return toAjax(segchkUserLikegoService.deleteSegchkUserLikegoByLikegoIds(Convert.toLongArray(removeIds.getIds()))); + } + + /** + * seg服务评价查询 + * { + * "commentId": 3//* + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_comment:query')") +// @Log(title = "seg服务评价查看", businessType = BusinessType.OTHER) + @PostMapping( "/getComment") + @ResponseBody + @ApiOperation(value = "seg服务评价查询", notes = "需要鉴权") + public AjaxResult get_comment(@RequestBody SegchkServiceCommentUserReq segchkServiceCommentUserReq, HttpServletRequest request) + { + if(StringUtils.isEmpty(segchkServiceCommentUserReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + } + logger.debug("get_comment with: {}", segchkServiceCommentUserReq.toString()); + AjaxResult ajax = new AjaxResult(); + SegchkServiceComment segchkServiceComment = segchkUserIndexService.selectSegchkServiceComment(segchkServiceCommentUserReq); + if(segchkServiceComment == null){ + ajax.put(CODE_TAG, "300"); + ajax.put(MSG_TAG, "未查到相关评价"); + } + else{ + ajax.put(CODE_TAG, "200"); + ajax.put(DATA_TAG, segchkServiceComment); + } + return ajax; + } + + + /** + * seg服务评价提交 + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_comment:add')") +// @Log(title = "seg服务评价提交", businessType = BusinessType.INSERT) + @PostMapping( "/addComment") + @ResponseBody + @ApiOperation(value = "seg服务评价提交", notes = "需要鉴权") + public AjaxResult addComment(@RequestBody SegchkServiceCommentUserReq segchkServiceCommentUserReq, HttpServletRequest request) + { + if(StringUtils.isEmpty(segchkServiceCommentUserReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + if (claims.getUserLevel() != 2){ + return AjaxResult.error(400, "非会员用户不允许提交评价"); + } + } + logger.debug("addComment with: {}", segchkServiceCommentUserReq.toString()); + return toAjax(segchkUserIndexService.insertSegchkServiceComment(segchkServiceCommentUserReq)); + } + + + /** + * 根据用户id,运营商id,查询seg用户充值列表 尹志颖 + * { + * "userId": 34,//* + * "providerId": 2//* + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_charge:list')") + @PostMapping("/userChargeList") + @ResponseBody + @ApiOperation(value = "查询seg用户充值列表", notes = "需要鉴权") + public TableDataInfo userChargeList(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkUserWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkUserWebReq.setUserId(claims.getUserId()); + segchkUserWebReq.setProviderId(claims.getProviderId()); + } + logger.debug("userChargeList with: {}", segchkUserWebReq.toString()); + startPage(); + List segchkUserWebSCRespList = segchkUserIndexService.selectUserChargeList(segchkUserWebReq); + return getDataTable(segchkUserWebSCRespList); + } + + + /** + * 根据用户id,运营商id,查询seg用户提现列表 尹志颖 + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_cash:list')") + @PostMapping("/userCashList") + @ResponseBody + @ApiOperation(value = "查询seg用户提现列表", notes = "需要鉴权") + public TableDataInfo userCashList(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkUserWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkUserWebReq.setUserId(claims.getUserId()); + segchkUserWebReq.setProviderId(claims.getProviderId()); + } + logger.debug("userCashList with: {}", segchkUserWebReq.toString()); + startPage(); + List segchkUserWebSCRespList = segchkUserIndexService.selectUserCashList(segchkUserWebReq); + return getDataTable(segchkUserWebSCRespList); + } + + + /** + * 根据用户id,运营商id,角色等级查询seg用户消息列表 尹志颖 + * { + * "userId": 392,//* + * "providerId": 4,//* + * "userLevel": 2,//* + * "phoneNo": 1//测试 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_msg:list')") + @PostMapping("/userMsgList") + @ResponseBody + @ApiOperation(value = "查询seg用户消息列表", notes = "需要鉴权") + public TableDataInfo userMsgList(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkUserWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireTableInfo(); + } + segchkUserWebReq.setUserId(claims.getUserId()); + segchkUserWebReq.setProviderId(claims.getProviderId()); + } + logger.debug("userMsgList with: {}", segchkUserWebReq.toString()); + startPage(); + List segchkUserWebSCRespList = segchkUserIndexService.selectUserMsgList(segchkUserWebReq); + return getDataTable(segchkUserWebSCRespList); + } + + + /** + * 用户进入余额充值页面时,根据用户id,运营商id查询可充值 的卡 + * { + * "userId": 465, + * "providerId": 4 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_charge:add')") + @PostMapping( "/userChargePre") + @ResponseBody + @ApiOperation(value = "查询seg用户可充值列表", notes = "需要鉴权") + public AjaxResult userChargePre(@RequestBody SegchkUserWebReq segchkUserWebReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkUserWebReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + if(!claims.getProviderId().equals(segchkUserWebReq.getProviderId())){ + logger.warn("userChargePre can not charg for user({}), because login prov({}) is not register prov({})", claims.getUserId(), segchkUserWebReq.getProviderId(), claims.getProviderId()); + return AjaxResult.error(400, "用户在漫游地区充值!"); + } + segchkUserWebReq.setUserLevel(claims.getUserLevel()); + segchkUserWebReq.setUserId(claims.getUserId()); + segchkUserWebReq.setProviderId(claims.getProviderId()); + + } + logger.debug("userChargePre with: {}", segchkUserWebReq.toString()); + List segchkUserChargeCards = segchkUserIndexService.SegchkUserChargePre(segchkUserWebReq); + AjaxResult ajax = new AjaxResult(); + + if(segchkUserChargeCards == null){ + ajax.put(CODE_TAG, "400"); + } + else{ + ajax.put(CODE_TAG, "200"); + ajax.put(DATA_TAG, segchkUserChargeCards); + } + return ajax; + } + + /** + * 用户进入余额充值页面时,根据用户id,运营商id查询可充值的卡,生成充值记录 未测试 + * { + * "userId": 465, + * "charge": 299.0, + * "accountUsed": 10.0, + * "cardTypeId": 1, + * "providerId": 4 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_charge:pre')") + @RepeatSubmit + @PostMapping( "/userChargeReq") + @ResponseBody + @ApiOperation(value = "seg用户可充值", notes = "需要鉴权") + public AjaxResult userChargeReq(@RequestBody SegchkUserCharge segchkUserCharge, HttpServletRequest request) + { + Claims claims = getLoing(request); + if(StringUtils.isEmpty(segchkUserCharge.getRemark())){ +// Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + segchkUserCharge.setUserId(claims.getUserId()); + segchkUserCharge.setProviderId(claims.getProviderId()); + } + else { + claims = new Claims(); + claims.setUserId(segchkUserCharge.getUserId()); + claims.setUserLevel(2); + claims.setProviderId(segchkUserCharge.getProviderId()); + } + logger.debug("userChargeReq with: {}", segchkUserCharge.toString()); + int ret_flag = 0;//未完成,1成功,2失败 + AjaxResult ajax = new AjaxResult(); + if(segchkUserCharge.getAccountUsed() != null && segchkUserCharge.getAccountUsed().compareTo(new BigDecimal(0.0)) == 1) { +// 用户选择使用余额买卡 + BigDecimal user_account = segchkUserIndexService.getAccount(segchkUserCharge); + if(user_account == null || user_account.compareTo(segchkUserCharge.getAccountUsed()) == -1){ +// 用户余额不足 + ajax.put(CODE_TAG, "500"); + ajax.put(MSG_TAG, "余额不足!"); + return ajax; + } + if(user_account.compareTo(segchkUserCharge.getCharge()) > -1){ +// 用户余额大于充值额度,用户可以直接使用 + segchkUserCharge.setAccountUsed(segchkUserCharge.getCharge()); + segchkUserCharge.setCharge(new BigDecimal(0.0)); + ret_flag = 1; + logger.warn("userChargeReq useraccount({}) is big than charge({}) ", user_account, segchkUserCharge.getCharge()); + } + else { +// 用户余额小于充值金额 + segchkUserCharge.setAccountUsed(user_account); + segchkUserCharge.setCharge(segchkUserCharge.getCharge().subtract(user_account)); + } + + } + segchkUserCharge.setRetFlag(ret_flag); +// 生成充值订单 + int ret = segchkUserIndexService.insertSegchkUserCharge(segchkUserCharge); + if(ret < 1){ +// 生成失败。返回提示 + ajax.put(CODE_TAG, "500"); + ajax.put(MSG_TAG, "充值失败!"); + } + else{ +// 生成订单成功 + SegchkUserWechat segchkUserWechat = null; + if(!StringUtils.isEmpty(segchkUserCharge.getCharge())){ +// 如果待生成订单需要用户调起支付时 + + segchkUserWechat = getSegchkUserWechat(request, segchkUserCharge.getSearchValue(), claims); + + if(ObjectUtils.isEmpty(segchkUserWechat)){ + return AjaxResult.error(500, "微信绑定失败!"); + } + } + if(ret_flag == 1){ + return AjaxResult.error(201, "充值成功"); + } + String ipAddr = getIpAddr(request); + CommonResponse prepayResultCommonResponse = segchkUserIndexService.wechatAppletPay( + segchkUserCharge.getChargeId().toString() + , segchkUserCharge.getUserId() + , segchkUserCharge.getProviderId() + , (StringUtils.isEmpty(ipAddr) ? ipAddr : ipAddr.split(",")[0].trim()), 2); + switch (prepayResultCommonResponse.getFlag()){ + case -1: return AjaxResult.error(500, "用户不存在"); + case -5: return AjaxResult.error(500, "微信生成订单出错"); + case -7: return AjaxResult.error(500, "没有设置网站地址"); + case -8: return AjaxResult.error(500, "缺少配置"); + case -10: return AjaxResult.error(500, "没有绑定微信"); + case 1: { + /*WechatApletPrepayResult wechatApletPrepayResult = new WechatApletPrepayResult(); + wechatApletPrepayResult.setAppId(prepayResultCommonResponse.getData().getAppid()); + wechatApletPrepayResult.setPaySign(prepayResultCommonResponse.getData().getPay_sign()); + wechatApletPrepayResult.setPackage_(prepayResultCommonResponse.getData().getPackage_()); + wechatApletPrepayResult.setNonceStr(prepayResultCommonResponse.getData().getNonce_str()); + wechatApletPrepayResult.setTimeStamp(prepayResultCommonResponse.getData().getTime_stamp());*/ + + return AjaxResult.success("充值成功", prepayResultCommonResponse); + } + default: return AjaxResult.error(600, "未知错误"); + } +// ajax.put(CODE_TAG, "200"); +// ajax.put(MSG_TAG, "充值成功!"); +// ajax.put(DATA_TAG, prepayResultCommonResponse); + } + return ajax; + } + + /** + * 充值结果回调接口,接口微信的支付结果,更新充值结果, ret 0成功,其他失败 + * { + * "chargeId": "demoData",//* + * "ret": 0//*0成功,其他失败 + * } + */ +// @Log(title = "seg用户充值结果回调", businessType = BusinessType.UPDATE) + @PostMapping( "/userChargeResult") + @ResponseBody + @ApiOperation(value = "seg用户充值结果回调", notes = "需要鉴权") + public void userChargeResult(String chargeId, int ret, HttpServletRequest request) + { + + segchkUserIndexService.chargeRet(chargeId, ret); + } + + /** + * 微信支付回调 + */ + @RequestMapping("/wechatnotify") + @UnAuth + @ApiIgnore + public void weChatNotify(HttpServletRequest request, HttpServletResponse response) throws IOException { + if (segchkUserIndexService.weChatAppletNotify(request.getInputStream()) > 0) { + sendMessage(response, WechatUtils.SUCCESS_RETURN); + } + } + + /** + * 用户点击提现时的反应 未测试 + * { + * "userId": 459, + * "cash": 5.6, + * "providerId": 4, + * "userLevel": 2 + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_cash:add')") + @PostMapping( "/userCashReq") + @ResponseBody + @ApiOperation(value = "seg用户提现请求", notes = "需要鉴权") + public AjaxResult userCashReq(@RequestBody SegchkUserCashOpsReq segchkUserCashOpsReq, HttpServletRequest request) + { + Claims claims = getLoing(request); + if(StringUtils.isEmpty(segchkUserCashOpsReq.getRemark())){ + + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + segchkUserCashOpsReq.setUserId(claims.getUserId()); + segchkUserCashOpsReq.setProviderId(claims.getProviderId()); + segchkUserCashOpsReq.setUserLevel(claims.getUserLevel()); + } + else { + claims = new Claims(); + claims.setUserLevel(segchkUserCashOpsReq.getUserLevel()); + claims.setUserId(segchkUserCashOpsReq.getUserId()); + claims.setProviderId(segchkUserCashOpsReq.getProviderId()); + } + logger.debug("userCashReq with: {}", segchkUserCashOpsReq.toString()); + AjaxResult ajax = new AjaxResult(); + if(segchkUserCashOpsReq.getUserLevel() == 0){ + return AjaxResult.error(301, "运营商无法线上提现"); + } + SegchkUserWechat segchkUserWechat = null; + segchkUserWechat = getSegchkUserWechat(request, segchkUserCashOpsReq.getSearchValue(), claims); + + if(ObjectUtils.isEmpty(segchkUserWechat)){ + return AjaxResult.error(500, "微信绑定失败!"); + } +// segchkUserCashOpsReq.setUserLevel(2); + segchkUserCashOpsReq.setSearchValue(segchkUserWechat.getOpenid()); + String ipAddr = getIpAddr(request); + int ret = segchkUserIndexService.getAccountForCash(segchkUserCashOpsReq, (StringUtils.isEmpty(ipAddr) ? ipAddr : ipAddr.split(",")[0].trim())); + switch (ret){ + case -1: return AjaxResult.error(401, "无余额信息"); + case -2: return AjaxResult.error(402, "无余额信息"); + case -3: return AjaxResult.error(403, "提现受限"); + case -4: return AjaxResult.error(404, "余额不足"); + case -5: + case -8: + case -11: + case -12: + case -9: return AjaxResult.error(405, "提现异常,请联系平台客服"); + case -10: return AjaxResult.error(410, "微信未绑定"); + case 1: { + return AjaxResult.error(200, "提现成功"); + } + default: ajax.put(CODE_TAG, "500");ajax.put(MSG_TAG, "未知错误");break; + } + return ajax; + } + + /** + * 设置用户信息 未测试 + * { + * "userId": 43,//* + * "passwd": "sfsdfds",//* + * "providerId": 2,//* + * "userLevel": 2//* + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_set:add')") +// @Log(title = "seg设置用户信息", businessType = BusinessType.UPDATE) + @PostMapping( "/SetInfo") + @ResponseBody + @ApiOperation(value = "seg设置用户信息", notes = "需要鉴权") + public AjaxResult SetInfo(@RequestBody SegchkUserSetInfoReq segchkUserSetInfoReq, HttpServletRequest request) + { + + if(StringUtils.isEmpty(segchkUserSetInfoReq.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + segchkUserSetInfoReq.setUserId(claims.getUserId()); + segchkUserSetInfoReq.setProviderId(claims.getProviderId()); + segchkUserSetInfoReq.setUserLevel(claims.getUserLevel()); + } + logger.debug("SetInfo with: {}", segchkUserSetInfoReq.toString()); + int ret = 0; + if(segchkUserSetInfoReq.getUserLevel() == 2) { + ret = segchkUserIndexService.updateUserInfo(segchkUserSetInfoReq); + } + else if(segchkUserSetInfoReq.getUserLevel() == 1){ + ret = segchkStoreIndexService.updateUserInfo(segchkUserSetInfoReq); + } + return toAjax(ret); + } + + + /** + * seg设置用户实名信息 未测试 + * { + * "userName": "demoData", + * "userId": 0, + * "providerId": 0, + * "IDcard": "demoData", + * "card1": "demoData", + * "card2": "demoData" + * } + */ +// @PreAuthorize("@ss.hasPermi('segchk:user_certicify:add')") +// @Log(title = "seg设置用户实名信息", businessType = BusinessType.UPDATE) + @PostMapping( "/userCerticify") + @ResponseBody + @ApiOperation(value = "seg设置用户实名信息", notes = "需要鉴权") + public AjaxResult user_certicify(@RequestBody SegchkUserCertificationInfo segchkUserCertificationInfo, HttpServletRequest request) + { + int ret = 0; + + if(StringUtils.isEmpty(segchkUserCertificationInfo.getRemark())){ + Claims claims = getLoing(request); + if (ObjectUtils.isEmpty(claims)) { +// 如果用户未登录,则要求用户使用手机号登录注册 + return LoginRequireAjax(); + } + segchkUserCertificationInfo.setUserId(claims.getUserId()); + segchkUserCertificationInfo.setProviderId(claims.getProviderId()); +// segchkUserCertificationInfo.setUserLevel(claims.getUserLevel()); + } + logger.debug("user_certicify with: {}", segchkUserCertificationInfo.toString()); + ret = segchkUserIndexService.userCerticify(segchkUserCertificationInfo); + return toAjax(ret); + } + + + /** + * 提现结果回调接口,接口微信的支付结果,更新充值结果, ret 0成功,其他失败 + * { + * "chargeId": "45435", + * "userLevel": "1/2/0", + * "ret": 1 + * } + */ +// @Log(title = "seg提现结果回调", businessType = BusinessType.UPDATE) + @PostMapping( "/userCashResult") + @ResponseBody + @ApiOperation(value = "seg提现结果回调", notes = "需要鉴权") + public void userCashResult(String chargeId, int userLevel, int ret, HttpServletRequest request) + { + if(userLevel == 1) { + segchkStoreIndexService.cashRet(chargeId, ret); + } + else if(userLevel == 2){ + segchkUserIndexService.cashRet(chargeId, ret); + } + } + +// 返回注册登录提示 + private AjaxResult LoginRequireAjax() { + return AjaxResult.error(300, "请先登录注册"); + } + + private TableDataInfo LoginRequireTableInfo() { + TableDataInfo tableDataInfo = new TableDataInfo(); + tableDataInfo.setCode(300); + tableDataInfo.setMsg("请先登录注册"); + return tableDataInfo; + } + +// 获取登录信息 + private Claims getLoing(HttpServletRequest request){ + String token = null; + try { + token = getToken(request); + }catch (Exception e){ + e.printStackTrace(); + return null; + } + Claims claims = getClaims(token); + if(!ObjectUtils.isEmpty(claims)){ + if(loginexpire == -1){ + redisService.setCacheObject(token, claims); + } + else { + redisService.setCacheObject(token, claims, loginexpire, TimeUnit.HOURS); + } + } + return claims; + } + + /** + * 获取小程序凭证实体 + * + * @param token token + * @return 小程序凭证实体 + */ + private Claims getClaims(String token) { + + Object claims = redisService.getCacheObject(token); + logger.debug("getClaims---token:{} Claims:{}", token, claims); + return ObjectUtils.isEmpty(claims) ? null : (Claims) claims; + } + + private SegchkUserWechat getSegchkUserWechat(HttpServletRequest request, String code, Claims claims) { + String token = getToken(request); + StringBuilder sb = new StringBuilder(CommonConstant.APPLET_BIND_OPENID).append("-").append(token); +// SegchkUserWechat segchkUserWechat = redisService.getCacheObject(sb.toString()); + SegchkUserWechat segchkUserWechat = weChatCustomerLinkService.getSegchkUserWechat(claims, sb.toString()); +// 暂时未解决重复获取openid问题 +// segchkUserWechat = null; + if(ObjectUtils.isEmpty(segchkUserWechat) || ObjectUtils.isEmpty(segchkUserWechat.getOpenid())){ +// redis没有用户微信openid时,重新获取 + segchkUserWechat = new SegchkUserWechat(); + WechatPaySet wechatAppletPaySet = paySetService.queryPaySet().getWechatAppletPaySet(); + WechatSetting wechatSetting = new WechatSetting(); + wechatSetting.setAppId(wechatAppletPaySet.getAppId()); + wechatSetting.setAppSecret(wechatAppletPaySet.getAppSecret()); + if (!wechatSetting.checkAppletOAuthParams()) { + logger.error("getLoginInfo fail:checkAppletOAuthParams fail"); + return null; + } + WeChatAppletLoginResponse weChatAppletLoginResponse = WeChatAppletUtils.getLoginInfo(code, wechatSetting); + if (Objects.isNull(weChatAppletLoginResponse)) { + logger.error("getLoginInfo fail: getLoginInfo fail"); + return null; + } + segchkUserWechat.setOpenid(weChatAppletLoginResponse.getOpenid()); + segchkUserWechat.setUnionId(weChatAppletLoginResponse.getUnionid()); +// redisService.setCacheObject(sb.toString(), segchkUserWechat, 7200, TimeUnit.SECONDS); + segchkUserWechat.setUserId(claims.getUserId()); + segchkUserWechat.setProviderId(claims.getProviderId()); + int ret = weChatCustomerLinkService.addSegchkUserWechat(segchkUserWechat, String.valueOf(claims.getUserLevel()), sb.toString()); + if(ret < 1){ + logger.error("addSegchkUserWechat failed with ({}) --- ({})", segchkUserWechat.toString(), claims); + } + logger.debug("getSegchkUserWechat update user wechat with ({})---({})", segchkUserWechat.toString(), claims); + } + logger.debug("getSegchkUserWechat get res ({})", ObjectUtils.isEmpty(segchkUserWechat) ? null : segchkUserWechat.toString()); + return ObjectUtils.isEmpty(segchkUserWechat) ? null : (SegchkUserWechat) segchkUserWechat; + + + } + /** + * 获取token + * + * @param request request + * @return token + */ + private String getToken(HttpServletRequest request) { + // 认证信息在header 中的key + final String authHeader = request.getHeader("Authorization"); + + if (Objects.isNull(authHeader) || !authHeader.startsWith("Bearer")) { + logger.info("getClaims fail :Authorization fail "); + throw new UnAuthorizedException(ResultCode.WX_NOT_AUTHORIZED); + } + return authHeader.length() >= 7 ? authHeader.substring(7) : authHeader.substring(6); + } + + /** + * 回传信息 + * + * @param message 信息 + */ + private void sendMessage(HttpServletResponse response, String message) { + logger.debug("sendMessage with: {}", message); + PrintWriter out = null; + try { + out = response.getWriter(); + out.println(message); + out.flush(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + out.close(); + } + + } + + private static class RemoveIds extends BaseEntity { + private Long userId; + private String ids; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + } + + /** + * 创建二维码图片 + * + * @param url 链接地址 + * @param width 宽 + * @param height 高 + */ + private void createQRImg(HttpServletResponse response, String url, Integer width, Integer height) { + logger.debug("createQRImg with: {}---w:{}---h:{}", url, width, height); + OutputStream outputStream = null; + try { + outputStream = response.getOutputStream(); + QRCodeUtils.createQrCode(url, width, height, "jpg", outputStream, qrPath, posterPath); + logger.debug("createQRImg qrPath: {}, posterPath: {}", qrPath, posterPath); + outputStream.flush(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/util/CommonController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/util/CommonController.java new file mode 100644 index 0000000..21fe1d9 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/util/CommonController.java @@ -0,0 +1,158 @@ +package com.ruoyi.util; + +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.file.FileUploadUtils; +import com.ruoyi.common.utils.file.FileUtils; +import com.ruoyi.framework.config.ServerConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 通用请求处理 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/default/common") +public class CommonController +{ + private static final Logger log = LoggerFactory.getLogger(CommonController.class); + + @Autowired + private ServerConfig serverConfig; + + /** + * 通用下载请求 + * + * @param fileName 文件名称 + * @param delete 是否删除 + */ + @GetMapping("/download") + public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) + { + try + { + if (!FileUtils.checkAllowDownload(fileName)) + { + throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); + } + String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); + String filePath = RuoYiConfig.getDownloadPath() + fileName; + + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, realFileName); + FileUtils.writeBytes(filePath, response.getOutputStream()); + if (delete) + { + FileUtils.deleteFile(filePath); + } + } + catch (Exception e) + { + log.error("下载文件失败", e); + } + } + + /** + * 通用上传请求 + */ + @PostMapping("/upload") + public AjaxResult uploadFile(MultipartFile file) throws Exception + { + if(file == null) { + log.warn("upload file is null!!!"); + return AjaxResult.error(500, "文件为空!"); + } + try + { + log.debug("upload with: {}", file.getOriginalFilename()); + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + // 上传并返回新文件名称 + + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + + /** + * 上传用户身份证照片 + */ + @PostMapping("/user_cert") + public AjaxResult userCert(MultipartFile file) throws Exception + { + if(file == null) { + log.warn("upload file is null!!!"); + return AjaxResult.error(500, "文件为空!"); + } + try + { + log.debug("upload userCert with: {}", file.getOriginalFilename()); + // 上传文件路径 + String filePath = RuoYiConfig.getProfile() + "/user_cert"; + // 上传并返回新文件名称 + + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 本地资源通用下载 + */ + @GetMapping("/download/resource") + public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) + throws Exception + { + try + { + if (!FileUtils.checkAllowDownload(resource)) + { + throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource)); + } + // 本地资源路径 + String localPath = RuoYiConfig.getProfile(); + // 数据库资源地址 + String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); + // 下载名称 + String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, downloadName); + FileUtils.writeBytes(downloadPath, response.getOutputStream()); + } + catch (Exception e) + { + log.error("下载文件失败", e); + } + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/util/HtmlController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/util/HtmlController.java new file mode 100644 index 0000000..38d0773 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/util/HtmlController.java @@ -0,0 +1,90 @@ +package com.ruoyi.util; + + +import com.ruoyi.common.annotation.UnAuth; +import com.ruoyi.segchk.service.ISegchkSystemSettingService; +import com.ruoyi.setting.service.BaseInfoSetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.servlet.http.HttpServletResponse; + +/** + * Created by 魔金商城 on 17/7/14. + * 生成html的控制器 + */ +@Api(description = "生成html接口") +@Controller +@RequestMapping("/default/html") +public class HtmlController { + + + /** + * 协议模版 + */ + private static final String PROTOCOL_TEMPLATE = "template"; + + + /** + * 注入基本信息服务接口 + */ +// @Autowired +// private BaseInfoSetService baseInfoSetService; + + @Autowired + private ISegchkSystemSettingService segchkSystemSettingService; + + /** + * 获取注册协议 + * + * @throws Exception 异常 + */ + @ApiOperation(value = "获取注册协议", notes = "获取注册协议(不需要认证)") + @RequestMapping(value = "/registerProtocol", method = RequestMethod.GET) + @UnAuth + public void register_protocol(HttpServletResponse response) throws Exception { + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(createHtml(PROTOCOL_TEMPLATE, segchkSystemSettingService.queryBaseInfoSet().getSiteRegisterProtocol())); + } + + /** + * 获取隐私协议 + * + * @throws Exception 异常 + */ + @ApiOperation(value = "获取隐私协议", notes = "获取隐私协议(不需要认证)") + @RequestMapping(value = "/userPrivacyAgreement", method = RequestMethod.GET) + @UnAuth + public void user_privacy_agreement(HttpServletResponse response) throws Exception { + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(createHtml(PROTOCOL_TEMPLATE, segchkSystemSettingService.queryBaseInfoSet().getUserPrivacyAgreement())); + } + + + /** + * 获取会员服务协议 + * + * @throws Exception 异常 + */ + @ApiOperation(value = "获取会员服务协议", notes = "获取会员服务协议(不需要认证)") + @RequestMapping(value = "/vipServiceAgreement", method = RequestMethod.GET) + @UnAuth + public void vip_service_agreement(HttpServletResponse response) throws Exception { + response.setContentType("text/html; charset=UTF-8"); + response.getWriter().print(createHtml(PROTOCOL_TEMPLATE, segchkSystemSettingService.queryBaseInfoSet().getVipServiceAgreement())); + } + + /** + * 生成html + * + * @param html 要替换的内容 + * @return 返回html + */ + private String createHtml(String template, String html) { + return template.replaceAll("template", html); + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/util/IndexController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/util/IndexController.java new file mode 100644 index 0000000..dcb9fa9 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/util/IndexController.java @@ -0,0 +1,33 @@ +package com.ruoyi.util; + +import com.ruoyi.common.core.controller.BaseController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class IndexController extends BaseController { + + @Value("${segchk.wxchecktxt:#{null}}") + private String wxchecktxt; + + @RequestMapping("PwPaX4PqzG.txt") + public String wxPrivateKey(){ + //直接返回你下载的授权文件里的内容就好 + logger.debug("wxPrivateKey with: {}", wxchecktxt); + return wxchecktxt; + } + + @RequestMapping("/default/PwPaX4PqzG.txt") + public String defaultwxPrivateKey(){ + //直接返回你下载的授权文件里的内容就好 + logger.debug("wxPrivateKey with: {}", wxchecktxt); + return wxchecktxt; + } + + @GetMapping("getWxAccessToken") + public String getWxAccessToken(){ + return null; + } +} diff --git a/ruoyi-segchk-web/src/main/java/com/ruoyi/util/QrCodeController.java b/ruoyi-segchk-web/src/main/java/com/ruoyi/util/QrCodeController.java new file mode 100644 index 0000000..528ce25 --- /dev/null +++ b/ruoyi-segchk-web/src/main/java/com/ruoyi/util/QrCodeController.java @@ -0,0 +1,118 @@ +package com.ruoyi.util; + +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.UnAuth; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.login.SegChkLoginController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import springfox.documentation.annotations.ApiIgnore; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; + +/** + * 二维码控制器 + * + * @author 魔金商城 created on 2020/6/23 + */ +@Controller +@Api(description = "二维码接口") +public class QrCodeController { + + private static final Logger logger = LoggerFactory.getLogger(QrCodeController.class); + + @Value("${segchk.qr_path}") + private String qrPath; + + @Value("${segchk.poster_path}") + private String posterPath; + + /** + * 创建二维码图片 + * + * @param url 地址 + * @param w 宽 + * @param h 高 + */ + @RepeatSubmit + @RequestMapping("/createqrcode") + @ResponseBody + @UnAuth + @ApiIgnore + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "form", dataType = "String", name = "url", value = "地址"), + @ApiImplicitParam(paramType = "form", dataType = "Integer", name = "w", value = "宽"), + @ApiImplicitParam(paramType = "form", dataType = "Integer", name = "h", value = "高"), + }) + public AjaxResult createQrCode(HttpServletResponse response, String url, Integer w, Integer h) { + createQRImg(response, url, w, h); + return AjaxResult.error(500,"ok"); + } + + + @PostMapping("qRCode") + public void qRCode(HttpServletResponse response, String savePath) { + + try { + PosterUtils.createPoster("标题", "recm=1&recV=2", "100.0", null, qrPath, savePath, "/pages/dfsdf"); + } catch (Exception e) { + e.printStackTrace(); + } + //获取生成海报的图片路径 +// qRCodeNew(storeId, response); + } + + /*private void qRCodeNew(String storeId, HttpServletResponse response) { + OutputStream outputStream = null; + try { + outputStream = response.getOutputStream(); + QRCodeUtils.qRCode(storeId, "jpg", qrPath, posterPath, outputStream); + outputStream.flush(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }*/ + + /** + * 创建二维码图片 + * + * @param url 链接地址 + * @param width 宽 + * @param height 高 + */ + private void createQRImg(HttpServletResponse response, String url, Integer width, Integer height) { + OutputStream outputStream = null; + try { + logger.debug("createQRImg qrPath: {}, posterPath: {}", qrPath, posterPath); + outputStream = response.getOutputStream(); + QRCodeUtils.createQrCode(url, width, height, "jpg", outputStream, qrPath, posterPath); + + outputStream.flush(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } +} diff --git a/ruoyi-segchk-web/src/main/resources/PwPaX4PqzG.txt b/ruoyi-segchk-web/src/main/resources/PwPaX4PqzG.txt new file mode 100644 index 0000000..436687d --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/PwPaX4PqzG.txt @@ -0,0 +1 @@ +1bc40f067f30d2f520200d504238a620 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/application-dev.yml b/ruoyi-segchk-web/src/main/resources/application-dev.yml new file mode 100644 index 0000000..7288d34 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/application-dev.yml @@ -0,0 +1,156 @@ +# 项目相关配置 商城端 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.0.0 + # 版权年份 + copyrightYear: 2019 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置F:\ideaproj\RuoYi-Vue\uploadPath + #,Linux配置 /root/yzychk_vue/uploadPath) + profile: F:\ideaproj\RuoYi-Vue\uploadPath\applet + # 获取ip地址开关 + addressEnabled: false + +server: + # 服务器的HTTP端口,默认为 8091 测试 9092 + port: 8091 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 800 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 30 + +# 数据源配置 +spring: + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 10MB + # 设置总上传的文件大小 + max-request-size: 20MB + # 服务模块 + devtools: + restart: + # 热部署开关 + enabled: true + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://192.168.2.30:8306/segchksaas?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: kaletest_yinzy + password: XMG2-Rel.2 + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: + login-password: + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 192.168.2.40 + # 端口,默认为6379 + port: 63795 + # 数据库索引 + database: 3 + # 密码 + password: seg_123456 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms +yzytest: + login: + smshost: http://api.ksd106.com:8088/SMSSend.aspx + smssign: + smstest: true + smsplatid: 3 +# 登录超时时长,单位天, -1永久有效 + loginexpire: 8 + +segchk: + # 提现额度 + cash: + # 商户提现额度 + store_threshold: 300.0 + # 用户提现额度 + user_threshold: 10.0 + sandbox: 1 + default_district: 140100 + recommendstore: + distince: 50 + qr_path: C:\Users\Public\Desktop\dome.jpg + poster_path: F:\ideaproj\RuoYi-Vue\ruoyi-segchk\src\main\resources\templates\posters\bg.jpg +# 核消二维码保存路径,测试使用。正常不打开 + check_qr_path: C:\Users\Public\Desktop\checkqr.jpg +# 核消二维码背景路径,可有,可无 +# check_poster_path: F:\ideaproj\RuoYi-Vue\ruoyi-segchk\src\main\resources\templates\posters\bg.jpg + + chkurl: '127.0.0.1:8091/default/store/ServiceCheckTest?likegoId=%s&storeId=%s' + chk_height: 350 + chk_weight: 350 + wxchecktxt: 1bc40f067f30d2f520200d504238a620 + + share: + title: 卡乐分享 + desc: 卡乐svip无限享受 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/application-prod.yml b/ruoyi-segchk-web/src/main/resources/application-prod.yml new file mode 100644 index 0000000..84ca494 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/application-prod.yml @@ -0,0 +1,159 @@ +# 项目相关配置 商城端 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.0.0 + # 版权年份 + copyrightYear: 2019 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置F:\ideaproj\RuoYi-Vue\uploadPath + #,Linux配置 /root/yzychk_vue/uploadPath) + profile: /home/seg_yinzy/data/applet + # 获取ip地址开关 + addressEnabled: false + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为 8091 测试 9092 + port: 9092 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 800 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 30 + +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://192.168.2.30:8306/segchksaas?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: segchksaas + password: 2wsx@WSX + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: + login-password: + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 192.168.2.40 + # 端口,默认为6379 + port: 63795 + # 数据库索引 + database: 2 + # 密码 + password: seg_123456 + # 连接超时时间 + timeout: 1000 + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 8 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 2 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: 300 + + +yzytest: + login: + smshost: http://api.ksd106.com:8088/SMSSend.aspx + smssign: + smstest: false + smsplatid: 3 + # 登录超时时长,单位天, -1永久有效 + loginexpire: 8 + +segchk: + # 提现额度 + cash: + # 商户提现额度 + store_threshold: 300.0 + # 用户提现额度 + user_threshold: 10.0 + sandbox: 1 + default_district: 410100 + recommendstore: + distince: 50 + qr_path: /home/seg_yinzy/data/applet/poster/dome.jpg + poster_path: /home/seg_yinzy/data/applet/poster/bg1.jpg + # 核消二维码保存路径,测试使用。正常不打开 + check_qr_path: /home/seg_yinzy/data/applet/poster/checkqr.jpg + # 核消二维码背景路径,可有,可无 + # check_poster_path: /home/segchk/data/resources/check/poster/bg1.jpg + + + chkurl: '/default/store/ServiceCheckTest?likegoId=%s&storeId=%s' + chk_height: 400 + chk_weight: 400 + + + + # 商户推广二维码 + store_qr_path: /home/seg_yinzy/data/applet/poster/storeqr + # 商户推广二维码背景路径,可有,可无 + store_poster_path: /home/seg_yinzy/data/applet/poster/bg1.jpg + + sto_height: 350 + sto_weight: 350 + storeurl: 'https://kale.segsvip.com/prod-wechat/default/store/storerecommend?recC=%s&recV=%s' + wxchecktxt: 1bc40f067f30d2f520200d504238a620 + + share: + title: 卡乐分享 + desc: 卡乐svip无限享受 diff --git a/ruoyi-segchk-web/src/main/resources/application-test.yml b/ruoyi-segchk-web/src/main/resources/application-test.yml new file mode 100644 index 0000000..da8389c --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/application-test.yml @@ -0,0 +1,158 @@ +# 项目相关配置 商城端 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.0.0 + # 版权年份 + copyrightYear: 2019 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置F:\ideaproj\RuoYi-Vue\uploadPath + #,Linux配置 /root/yzychk_vue/uploadPath) + profile: /home/seg_yinzy/data/applet + # 获取ip地址开关 + addressEnabled: false + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为 8091 测试 9092 + port: 9192 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 800 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 30 + +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://192.168.2.30:8306/kaletest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: segchksaas + password: 2wsx@WSX + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: + login-password: + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 192.168.2.40 + # 端口,默认为6379 + port: 63795 + # 数据库索引 + database: 2 + # 密码 + password: seg_123456 + # 连接超时时间 + timeout: 1000 + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 8 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 2 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: 300 + + +yzytest: + login: + smshost: http://api.ksd106.com:8088/SMSSend.aspx + smssign: + smstest: true + smsplatid: 3 +# 登录超时时长,单位天, -1永久有效 + loginexpire: 8 + +segchk: +# 提现额度 + cash: +# 商户提现额度 + store_threshold: 300.0 +# 用户提现额度 + user_threshold: 10.0 + default_district: 410100 + recommendstore: + distince: 50 + qr_path: /home/seg_yinzy/data/applet/poster/dome.jpg + poster_path: /home/seg_yinzy/data/applet/poster/bg1.jpg + # 核消二维码保存路径,测试使用。正常不打开 + check_qr_path: /home/seg_yinzy/data/applet/poster/checkqr.jpg + # 核消二维码背景路径,可有,可无 +# check_poster_path: /home/segchk/data/resources/check/poster/bg1.jpg + + + chkurl: '/default/store/ServiceCheckTest?likegoId=%s&storeId=%s' + chk_height: 400 + chk_weight: 400 + + + + # 商户推广二维码 + store_qr_path: /home/seg_yinzy/data/applet/poster/storeqr + # 商户推广二维码背景路径,可有,可无 + store_poster_path: /home/seg_yinzy/data/applet/poster/bg1.jpg + + sto_height: 350 + sto_weight: 350 + storeurl: 'https://kaletest.segsvip.com/prod-wechat/default/store/storerecommend?recC=%s&recV=%s' + wxchecktxt: 1bc40f067f30d2f520200d504238a620 + + share: + title: 卡乐分享 + desc: 卡乐svip无限享受 diff --git a/ruoyi-segchk-web/src/main/resources/application-uat.yml b/ruoyi-segchk-web/src/main/resources/application-uat.yml new file mode 100644 index 0000000..46af5b0 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/application-uat.yml @@ -0,0 +1,71 @@ +#配置数据源 +spring: + datasource: + druid: + master: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.jdbc.Driver + url: jdbc:mysql://172.22.4.2:3306/wsfmall_uat?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull + username: root + password: oywkpjEi9MW4NL9mR88YTydj9wHE5E + # 初始化连接大小 + initial-size: 5 + # 最小空闲连接数 + min-idle: 5 + max-active: 20 + max-wait: 30000 + # 可关闭的空闲连接间隔时间 + time-between-eviction-runs-millis: 60000 + # 配置连接在池中的最小生存时间 + min-evictable-idle-time-millis: 300000 + validation-query: select '1' from dual + test-while-idle: true + test-on-borrow: false + test-on-return: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + pool-prepared-statements: true + max-open-prepared-statements: 20 + max-pool-prepared-statement-per-connection-size: 20 + slave1: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.jdbc.Driver + url: jdbc:mysql://172.22.4.2:3306/wsfmall_uat?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull + username: root + password: oywkpjEi9MW4NL9mR88YTydj9wHE5E + # 初始化连接大小 + initial-size: 5 + # 最小空闲连接数 + min-idle: 5 + max-active: 20 + max-wait: 30000 + # 可关闭的空闲连接间隔时间 + time-between-eviction-runs-millis: 60000 + # 配置连接在池中的最小生存时间 + min-evictable-idle-time-millis: 300000 + validation-query: select '1' from dual + test-while-idle: true + test-on-borrow: false + test-on-return: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + pool-prepared-statements: true + max-open-prepared-statements: 20 + max-pool-prepared-statement-per-connection-size: 20 + redis: + host: 172.22.0.4 + port: 6379 + timeout: 100 + lettuce: + pool: + max-active: 8 + max-idle: 8 + min-idle: 2 + max-wait: 300 + password: sfakjfiju99jjf87LJSDDU8 + data: + elasticsearch: + cluster-nodes: 172.22.0.4:9300 + messages: + basename: messages/messages + servlet: + multipart: + max-file-size: 15MB \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/application.yml b/ruoyi-segchk-web/src/main/resources/application.yml new file mode 100644 index 0000000..50dc9d1 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/application.yml @@ -0,0 +1,121 @@ +# 项目相关配置 商城端 +#ruoyi: +# # 名称 +# name: RuoYi +# # 版本 +# version: 3.0.0 +# # 版权年份 +# copyrightYear: 2019 +# # 实例演示开关 +# demoEnabled: true +# # 文件路径 示例( Windows配置F:\ideaproj\RuoYi-Vue\uploadPath +# #,Linux配置 /root/yzychk_vue/uploadPath) +# profile: F:\ideaproj\RuoYi-Vue\uploadPath +# # 获取ip地址开关 +# addressEnabled: false + +# 开发环境配置 +#server: +# # 服务器的HTTP端口,默认为 8091 测试 9092 +# port: 8091 +# servlet: +# # 应用的访问路径 +# context-path: / +# tomcat: +# # tomcat的URI编码 +# uri-encoding: UTF-8 +# # tomcat最大线程数,默认为200 +# max-threads: 800 +# # Tomcat启动初始化的线程数,默认值25 +# min-spare-threads: 30 + +# 日志配置 +logging: + level: + com.ruoyi: debug + org.springframework: warn + +# Spring配置 +spring: + # 资源信息 + messages: + # 国际化资源文件路径 + basename: i18n/messages + profiles: + active: kaleprod +# # 文件上传 +# servlet: +# multipart: +# # 单个文件大小 +# max-file-size: 10MB +# # 设置总上传的文件大小 +# max-request-size: 20MB +# # 服务模块 +# devtools: +# restart: +# # 热部署开关 +# enabled: true +# # redis 配置 +# redis: +# # 地址 +# host: 10.1.192.113 +# # 端口,默认为6379 +# port: 63795 +# # 数据库索引 +# database: 0 +# # 密码 +# password: retinabd@2020 +# # 连接超时时间 +# timeout: 10s +# lettuce: +# pool: +# # 连接池中的最小空闲连接 +# min-idle: 0 +# # 连接池中的最大空闲连接 +# max-idle: 8 +# # 连接池的最大数据库连接数 +# max-active: 8 +# # #连接池最大阻塞等待时间(使用负值表示没有限制) +# max-wait: -1ms + +# token配置 +token: + # 令牌自定义标识 + header: Authorization + # 令牌密钥 + secret: abcdefghijklmnopqrstuvwxyz + # 令牌有效期(默认30分钟) + expireTime: 3000 + +# MyBatis配置 +mybatis: + # 搜索指定包别名 + typeAliasesPackage: com.ruoyi.**.domain + # 配置mapper的扫描,找到所有的mapper.xml映射文件 + mapperLocations: classpath*:mapper/**/*Mapper.xml + # 加载全局的配置文件 + configLocation: classpath:mybatis/mybatis-config.xml + +# PageHelper分页插件 +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql + +# Swagger配置 +swagger: + # 是否开启swagger + enabled: true + # 请求前缀 + pathMapping: /dev-api + +# 防止XSS攻击 +xss: + # 过滤开关 + enabled: true + # 排除链接(多个用逗号分隔) + excludes: /system/notice/* + # 匹配链接 + urlPatterns: /system/*,/monitor/*,/tool/* + diff --git a/ruoyi-segchk-web/src/main/resources/http-client.private.env.json b/ruoyi-segchk-web/src/main/resources/http-client.private.env.json new file mode 100644 index 0000000..542be06 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/http-client.private.env.json @@ -0,0 +1,60 @@ +{ + "dev": { + "name": "value", + "host": "http://localhost:8091", + "bindtoken": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzY0tDCwtLDQUSotTi3yTFGyMjUw1lEqKMovy0yBCBhB5HxSy1JzwLzUigKYVhNTC4taAAAAAP__.diChD7JjY3y8SBNTBE8ACoNWWIuz-r-mHESPfL73eZI", + "bindtoken1": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzYyNDQwNDLVUSotTi3yTFGyMjUw1lEqKMovy0yBCBhB5HxSy1JzwLzUigKYVmNzI9NaAAAAAP__.Y5uJzL55q9baNor4ScWmVg9UZyfHkTxZ0Oz79guiXXg", +// "token2": "APPLET_LOGIN_KEY_885553054366171136abcdefghijklmnopqrstuvwxyz", + "token3": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUipPTc5ILMnJT8_MU9JRykwsUbIyNDM2NDQ3sDAx0VEqLU4t8kxRsjLWUSooyi_LTIFwjSAyPqllqTlgXmpFAUyjCRDUAgAAAP__.5qRMCYs8YUoFJdSo_XSZiGlqJ13LGa20qJAT8GoiMHg", + "providertoken": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzY0MjC1MDTWUSotTi3yTFGyMtJRKijKL8tMgXNBMj6pZak5SlYGOkqpFQUwjZYmhsa1AAAAAP__.DkyBrM5f7G0eLi7DnYpgAqGTYnLaWRrpD3xemTa1s3k", + "store_search": + { + "providerId": 2, + "sortType": 0, + "storeName": "99", + "lableName": "99", + "typeId": 1, + "userLon": 114.123456, + "userLat": 43.123456 + } + }, + "prod-test": { + "name": "value", + "host": "https://kaletest.segsvip.com/prod-wechat", + "bindtoken": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzY0tDCwtLDQUSotTi3yTFGyMjUw1lEqKMovy0yBCBhB5HxSy1JzwLzUigKYVhNTC4taAAAAAP__.diChD7JjY3y8SBNTBE8ACoNWWIuz-r-mHESPfL73eZI", + "bindtoken1": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzYyNDQwNDLVUSotTi3yTFGyMjUw1lEqKMovy0yBCBhB5HxSy1JzwLzUigKYVmNzI9NaAAAAAP__.Y5uJzL55q9baNor4ScWmVg9UZyfHkTxZ0Oz79guiXXg", +// "token2": "APPLET_LOGIN_KEY_885553054366171136abcdefghijklmnopqrstuvwxyz", + "token3": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUipPTc5ILMnJT8_MU9JRykwsUbIyNDM2NDQ3sDAx0VEqLU4t8kxRsjLWUSooyi_LTIFwjSAyPqllqTlgXmpFAUyjCRDUAgAAAP__.5qRMCYs8YUoFJdSo_XSZiGlqJ13LGa20qJAT8GoiMHg", + "providertoken": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzY0MjC1MDTWUSotTi3yTFGyMtJRKijKL8tMgXNBMj6pZak5SlYGOkqpFQUwjZYmhsa1AAAAAP__.DkyBrM5f7G0eLi7DnYpgAqGTYnLaWRrpD3xemTa1s3k", + "store_search": + { + "providerId": 2, + "sortType": 0, + "storeName": "99", + "lableName": "99", + "typeId": 1, + "userLon": 114.123456, + "userLat": 43.123456 + } + }, + "prod": { + "name": "value", + "host": "https://kale.segsvip.com/prod-wechat", + "hostbak": "https://kale.segsvip.com/prod-api", + "bindtoken": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzY0tDCwtLDQUSotTi3yTFGyMjUw1lEqKMovy0yBCBhB5HxSy1JzwLzUigKYVhNTC4taAAAAAP__.diChD7JjY3y8SBNTBE8ACoNWWIuz-r-mHESPfL73eZI", + "bindtoken1": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzYyNDQwNDLVUSotTi3yTFGyMjUw1lEqKMovy0yBCBhB5HxSy1JzwLzUigKYVmNzI9NaAAAAAP__.Y5uJzL55q9baNor4ScWmVg9UZyfHkTxZ0Oz79guiXXg", + // "token2": "APPLET_LOGIN_KEY_885553054366171136abcdefghijklmnopqrstuvwxyz", + "token3": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUipPTc5ILMnJT8_MU9JRykwsUbIyNDM2NDQ3sDAx0VEqLU4t8kxRsjLWUSooyi_LTIFwjSAyPqllqTlgXmpFAUyjCRDUAgAAAP__.5qRMCYs8YUoFJdSo_XSZiGlqJ13LGa20qJAT8GoiMHg", + "providertoken": "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUnIMCPBxDYn38Xf39Iv3do1U0lHKTCxRsjI0MzY0MjC1MDTWUSotTi3yTFGyMtJRKijKL8tMgXNBMj6pZak5SlYGOkqpFQUwjZYmhsa1AAAAAP__.DkyBrM5f7G0eLi7DnYpgAqGTYnLaWRrpD3xemTa1s3k", + "store_search": + { + "providerId": 2, + "sortType": 0, + "storeName": "99", + "lableName": "99", + "typeId": 1, + "userLon": 114.123456, + "userLat": 43.123456 + } + } +} \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/logback-spring.xml b/ruoyi-segchk-web/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..a3cd82a --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/logback-spring.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + + + + ${INFO_LOG_FILE_NAME_PATTERN} + + 14 + + 30GB + + + 50MB + + + + ${FILE_LOG_PATTERN} + + + + + + + + ${ERROR_LOG_FILE_NAME_PATTERN} + + 30 + + 1GB + + + 10MB + + + + ${FILE_LOG_PATTERN} + + + + error + ACCEPT + DENY + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/messages/messages.properties b/ruoyi-segchk-web/src/main/resources/messages/messages.properties new file mode 100644 index 0000000..e9a2292 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/messages/messages.properties @@ -0,0 +1,6 @@ +#################################### +## \u7ED3\u679C\u7801\u4FE1\u606F\u5B9A\u4E49 ## +##################################### +R-00002=\u5C0F\u7A0B\u5E8F\u672A\u6388\u6743 +R-00003=\u5C0F\u7A0B\u5E8F\u672A\u548C\u7528\u6237\u7ED1\u5B9A +R-00004=\u7528\u6237\u7ED1\u5B9A\u5931\u8D25\uFF0C\u5DF2\u7ED1\u5B9A\u5176\u4ED6\u8D26\u6237 diff --git a/ruoyi-segchk-web/src/main/resources/messages/messages_en_US.properties b/ruoyi-segchk-web/src/main/resources/messages/messages_en_US.properties new file mode 100644 index 0000000..2d0dda9 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/messages/messages_en_US.properties @@ -0,0 +1,5 @@ +#################################### +## \u7ED3\u679C\u7801\u4FE1\u606F\u5B9A\u4E49 ## +##################################### +R-00002=\u5C0F\u7A0B\u5E8F\u672A\u6388\u6743 +R-00003=\u5C0F\u7A0B\u5E8F\u672A\u548C\u7528\u6237\u7ED1\u5B9A diff --git a/ruoyi-segchk-web/src/main/resources/messages/messages_zh_CN.properties b/ruoyi-segchk-web/src/main/resources/messages/messages_zh_CN.properties new file mode 100644 index 0000000..2d0dda9 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/messages/messages_zh_CN.properties @@ -0,0 +1,5 @@ +#################################### +## \u7ED3\u679C\u7801\u4FE1\u606F\u5B9A\u4E49 ## +##################################### +R-00002=\u5C0F\u7A0B\u5E8F\u672A\u6388\u6743 +R-00003=\u5C0F\u7A0B\u5E8F\u672A\u548C\u7528\u6237\u7ED1\u5B9A diff --git a/ruoyi-segchk-web/src/main/resources/mybatis/mybatis-config.xml b/ruoyi-segchk-web/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 0000000..5500599 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/ruoyi-segchk-web/src/main/resources/static/PwPaX4PqzG.txt b/ruoyi-segchk-web/src/main/resources/static/PwPaX4PqzG.txt new file mode 100644 index 0000000..436687d --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/static/PwPaX4PqzG.txt @@ -0,0 +1 @@ +1bc40f067f30d2f520200d504238a620 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/static/default/PwPaX4PqzG.txt b/ruoyi-segchk-web/src/main/resources/static/default/PwPaX4PqzG.txt new file mode 100644 index 0000000..436687d --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/static/default/PwPaX4PqzG.txt @@ -0,0 +1 @@ +1bc40f067f30d2f520200d504238a620 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/static/default/common/PwPaX4PqzG.txt b/ruoyi-segchk-web/src/main/resources/static/default/common/PwPaX4PqzG.txt new file mode 100644 index 0000000..436687d --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/static/default/common/PwPaX4PqzG.txt @@ -0,0 +1 @@ +1bc40f067f30d2f520200d504238a620 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/static/default/index/PwPaX4PqzG.txt b/ruoyi-segchk-web/src/main/resources/static/default/index/PwPaX4PqzG.txt new file mode 100644 index 0000000..436687d --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/static/default/index/PwPaX4PqzG.txt @@ -0,0 +1 @@ +1bc40f067f30d2f520200d504238a620 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/static/default/provider/PwPaX4PqzG.txt b/ruoyi-segchk-web/src/main/resources/static/default/provider/PwPaX4PqzG.txt new file mode 100644 index 0000000..436687d --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/static/default/provider/PwPaX4PqzG.txt @@ -0,0 +1 @@ +1bc40f067f30d2f520200d504238a620 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/static/default/store/PwPaX4PqzG.txt b/ruoyi-segchk-web/src/main/resources/static/default/store/PwPaX4PqzG.txt new file mode 100644 index 0000000..436687d --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/static/default/store/PwPaX4PqzG.txt @@ -0,0 +1 @@ +1bc40f067f30d2f520200d504238a620 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/static/default/user/PwPaX4PqzG.txt b/ruoyi-segchk-web/src/main/resources/static/default/user/PwPaX4PqzG.txt new file mode 100644 index 0000000..436687d --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/static/default/user/PwPaX4PqzG.txt @@ -0,0 +1 @@ +1bc40f067f30d2f520200d504238a620 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/static/img/bg.jpg b/ruoyi-segchk-web/src/main/resources/static/img/bg.jpg new file mode 100644 index 0000000..aaadb86 Binary files /dev/null and b/ruoyi-segchk-web/src/main/resources/static/img/bg.jpg differ diff --git a/ruoyi-segchk-web/src/main/resources/static/img/checkret1.png b/ruoyi-segchk-web/src/main/resources/static/img/checkret1.png new file mode 100644 index 0000000..25569f3 Binary files /dev/null and b/ruoyi-segchk-web/src/main/resources/static/img/checkret1.png differ diff --git a/ruoyi-segchk-web/src/main/resources/static/wxpk/PwPaX4PqzG.txt b/ruoyi-segchk-web/src/main/resources/static/wxpk/PwPaX4PqzG.txt new file mode 100644 index 0000000..436687d --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/static/wxpk/PwPaX4PqzG.txt @@ -0,0 +1 @@ +1bc40f067f30d2f520200d504238a620 \ No newline at end of file diff --git a/ruoyi-segchk-web/src/main/resources/templates/posters/bg.jpg b/ruoyi-segchk-web/src/main/resources/templates/posters/bg.jpg new file mode 100644 index 0000000..aaadb86 Binary files /dev/null and b/ruoyi-segchk-web/src/main/resources/templates/posters/bg.jpg differ diff --git a/ruoyi-segchk-web/src/main/resources/templates/posters/checkret1.png b/ruoyi-segchk-web/src/main/resources/templates/posters/checkret1.png new file mode 100644 index 0000000..25569f3 Binary files /dev/null and b/ruoyi-segchk-web/src/main/resources/templates/posters/checkret1.png differ diff --git a/ruoyi-segchk-web/src/main/resources/test.http b/ruoyi-segchk-web/src/main/resources/test.http new file mode 100644 index 0000000..d506744 --- /dev/null +++ b/ruoyi-segchk-web/src/main/resources/test.http @@ -0,0 +1,998 @@ +PUT http://{{hostbak}}/system/user/resetadminself +Accept: */* +Cache-Control: no-ca +Content-Type: application/x-www-form-urlencoded + +### +POST http://{{host}}/default/index/customService?providerId=2 +Accept: */* +Cache-Control: no-ca +Content-Type: application/x-www-form-urlencoded + +### +GET http://{{host}}/default/html/vipServiceAgreement +Accept: */* +Cache-Control: no-ca +Content-Type: application/x-www-form-urlencoded + +### +GET http://{{host}}/default/html/userPrivacyAgreement +Accept: */* +Cache-Control: no-ca +Content-Type: application/x-www-form-urlencoded + +### +GET http://{{host}}/default/html/registerProtocol +Accept: */* +Cache-Control: no-ca +Content-Type: application/x-www-form-urlencoded + +### +POST {{host}}/default/index/shareInfo +Accept: */* +Cache-Control: no-ca +Content-Type: application/x-www-form-urlencoded + +page=sss/sddd&remark=999999 + +### +POST {{host}}/qRCode +Accept: */* +Cache-Control: no-cache +Content-Type: application/x-www-form-urlencoded + +savePath=C:\Users\Administrator\Pictures\test\test.jpg + +### +### 测试图片上传 +POST {{host}}//default/common/upload +Accept: */* +Cache-Control: no-cache +Content-Type: multipart/form-data; charset=UTF-8; boundary=WebAppBoundary + +--WebAppBoundary +Content-Disposition: form-data; name="file"; filename="checkqr.jpg" + +< C:\Users\Public\Desktop/checkqr.jpg +--WebAppBoundary-- + +### +POST {{host}}/default/user/userLikeGoQr +Accept: */* +Cache-Control: no-cache +Content-Type: application/x-www-form-urlencoded + +likegoId=4&remark=999999&qrw=300&qrh=500 + +### +POST http://api.ksd106.com:8088/SMSSend.aspx +Content-Type: application/x-www-form-urlencoded + +Account=KSD8141161&Password=123456a&Mobile=18515184399&Content=测试验证码短信【河北赛格】&Extnum=&Time=* + +### +POST https://segchksaas.xyz//querybaseinfoset +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + +{} + +### +GET https://api.weixin.qq.com/sns/jscode2session?appid=wx2ce4e2083b3a871a&secret=adc865e9ab24ab23b534f9ca5c0960b3&js_code=053okall2BHyK74GMcol2S8Exc0okaln&grant_type=authorization_code +Accept: */* + +### +GET {{host}}//createqrcode?url="http://yxr8cu.natappfree.cc//tokentest?dfasdf=1+werwer=1231"&w=300&h=300 +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + + +### +############### 商家接口测试 #################### + +### 商家核消操作 +POST {{host}}//default/store/giveFreeCard +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 243, + "cardId": 242, + "lableId": 10, + "storeId": 144, + "typeId": 2, + "totalCount": 10, + "freeContent": "demoData", + "remark": "demoData" +} + +### 商家核消操作 +POST {{host}}//default/store/ServiceCheckTest?likegoId=16877&storeId=128&remark=999999 +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + + +### 根据用户id,运营商id,查询seg商户提现列表 +POST {{host}}//default/store/storeCashList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 84, + "phoneNo": "demoData", + "providerId": 3, + "remark": "999999" +} + +### +POST {{host}}/default/store/storeUserLikeGoList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "providerId": 4, + "storeId": 123, + "staticMonth": "180", + "remark": "999999" +} + +### +POST {{host}}//default/store/storeServiceAndSaleDetails +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "providerId": 4, + "storeId": 123, + "staticMonth": "2021-06-01", + "srcFlag": 0, + "remark": "999999" +} + +### 根据商家id,运营商id,角色等级,返回核消统计或售卡统计 +POST {{host}}//default/store/storeServiceAndSaleList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "providerId": 4, + "storeId": 123, + "staticMonth": "6", + "srcFlag": 0, + "remark": "999999" +} +############### END #################### + + + +############### 用户接口测试 #################### +### +POST {{host}}//default/user/userCashReq +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken1}} + +{ + "userId": 503, + "cash": 5, + "providerId": 2, + "userLevel": 2, + "remark": "999999" +} + +### +POST {{host}}//default/user/userChargeResult?chargeId=45459&ret=0 +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken1}} + + +### 用户充值操作 +#返回结果 +#{ +# "msg": "充值成功", +# "code": 200, +# "data": { +# "flag": 1, +# "data": { +# "return_code": "SUCCESS", +# "return_msg": "OK", +# "appid": "wx2ce4e2083b3a871a", +# "mch_id": "1614166120", +# "nonce_str": "wknhqpLNvr4F6CLI", +# "sign": "2519A7C975E5F38B95D0EE453C1A11D2", +# "result_code": "SUCCESS", +# "err_code": null, +# "err_code_des": null, +# "trade_type": "JSAPI", +# "prepay_id": "wx201612191353691146536bf76294620000", +# "code_url": null, +# "mweb_url": null, +# "time_stamp": "1632125538", +# "package_": "prepay_id=wx201612191353691146536bf76294620000", +# "sign_type": "MD5", +# "pay_sign": "087F0D138F3970B5228A3456E1A5496E" +# } +# } +#} +POST {{host}}//default/user/userChargeReq +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken1}} + +{ + "userId": 503, + "charge": 9.9, + "cardTypeId": 0, + "providerId": 2, + "remark": 999 +} + + +### 用户充值请求 +POST {{host}}//default/user/userChargePre +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken1}} + +{ + "userId": 465, + "providerId": 4, + "userLevel": 2 +} + +### 查询seg用户消息列表 +POST {{host}}//default/user/userMsgList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 392, + "providerId": 4, + "userLevel": 2, + "remark": "999999", + "phoneNo": 1 +} + +### 查询seg用户提现列表 +POST {{host}}//default/user/userCashList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 34, + "providerId": 2, + "remark": "999999" +} + +### 查询seg用户充值列表 +POST {{host}}//default/user/userChargeList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 34, + "providerId": 2, + "remark": "999999" +} + +### seg服务评价提交 +POST {{host}}//default/user/addComment +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "starLevel": 4.5, + "contentText": "测试评价9343", + "chkServiceId": 9343 +} + +### seg服务评价查询 +POST {{host}}//default/user/getComment +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "commentId": 3 +} + +### 删除seg用户想去记录 +POST {{host}}//default/user/removeOrderUserLikego +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 245, + "ids": "16733" +} + +### 查询seg用户收藏列表 +POST {{host}}//default/user/userLikeGOList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 245, + "providerId": 4, + "remark": "999999" +} + +### 查询seg用户收藏列表 "remark": "999999"测试标识 +#{ +# "total": 48,//用户收藏列表数量 +# "rows": [ +# { +# "collectId": 2002,//收藏id +# "providerId": 4,//运营商id +# "storeId": 134,//商家id,跳转商家详情使用 +# "storeName": "4商家名称018",//商家名称,展示使用 +# "storeIcon": "http://10.1.192.113:60902/profile/upload/2021/07/02/706f0a58-6031-4523-abbd-dc5dd823278c.jpg",//图标,展示使用 +# "serviceState": 0,//在线送达 +# "storeLon": 116.4980500000,//商家位置,导航时使用 +# "storeLat": 39.8831020000,//商家位置,导航时使用 +# "chkCount": 280,//核消数量 +# "starAvg": 2.71,//综合评价,展示使用 +# "modTime": "2021-07-16",//收藏时间,展示使用 +# "segchkRecommenderStoreLableWebList": [//商家标签列表 +# { +# "lableId": 0,//标签id +# "lableTypeId": 0,//一级标签id +# "lableName": "99",//标签名称,展示使用 +# }, +# { +# "lableId": 0, +# "lableTypeId": 1, +# "lableName": "美食", +# }, +# ... +# ] +# }, +# ... +# ], +# "code": 200, +# "msg": "查询成功" +#} +POST {{host}}//default/user/userCollectList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 439, + "providerId": 4, + "remark": "999999" +} + +### +### 查询seg用户可用会员卡列表或者优惠券列表 "userLevel": 0(查会员卡),1(查优惠券),"remark": "999999"测试标识 +#结果说明 +#{ +# "total": 3,//优惠券数量 +# "rows": [ +# { +# "cardName": "赠卡",//优惠券名称,展示使用 +# "storeName": "4商家名称028",//归属商家名称,展示使用 +# "leftCount": 49,//剩余次数,展示使用 +# "effectiveTime": "2021-07-13",//有效期,展示使用 +# "typeFlag": 1,// +# "cardStatus": "过期"//状态 +# }, +# ... +# ], +# "code": 200, +# "msg": "查询成功" +#} +# +#{ +# "total": 1,//卡包数量 +# "rows": [ +# { +# "cardName": "299",//会员卡名称,展示使用 +# "storeName": null,//商家名称,展示使用,查询优惠券时有效 +# "useCount": 31,//已使用权益次数,展示使用 +# "leftCount": 69,//剩余权益次数,展示使用 +# "effectiveTime": "2021-09-15",//有效期,展示使用 +# "typeFlag": 0,//卡券标识,0会员卡,1券(或赠卡) +# "cardStatus": "可用"//会员卡状态。是否可用,展示使用 +# } +# ], +# "code": 200, +# "msg": "查询成功" +#} +POST {{host}}//default/user/userCardList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 241, + "providerId": 4, + "userLevel": 0, + "remark": "999999" +} + +### +### 查询seg用户核消列表 +#结果说明 +#{ +# "total": 38,//用户核消列表数量 +# "rows": [//用户核消列表 +# { +# "providerId": 4,//运营商id +# "cardId": 244,//卡号或券号 +# "storeId": 119,//商家id +# "cardTypeId": 0,// +# "userId": 245,//用户id +# "modTime": "2021-07-12",//核消时间,展示使用 +# "chkServiceId": 11168,//核消id +# "commentId": 0,//评价id,0表示未评价,其他表示已评,展示使用 +# "cardTypeName": "99",//卡券名称,展示使用 +# "storeName": "4商家名称003",//商家名称,展示使用 +# "chkSource": 0// +# }, +# ... +# ], +# "code": 200, +# "msg": "查询成功" +#} +POST {{host}}//default/user/storeServiceCheckList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 245, + "providerId": 4, + "remark": "999999" +} + +### +### 添加seg用户想去记录 +POST {{host}}//default/user/addOrderUserLikego +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "providerId": 4, + "userId": 245, + "storeId": 128, + "cardId": 244, + "cardType": 0, + "remark": "999999" +} + +### +### 查询该用户在该商户可使用的会员卡或优惠券,remark为测试标识 +#返回结果 +#{ +# "total": 3,//可用卡券列表数量 +# "rows": [//可用卡券列表 +# { +# "providerId": 4,//运营商id +# "storeId": 128,//商家id +# "userId": 245,//用户id +# "cardId": 244,//卡号或券号 +# "lableId": 0,//子标签id +# "typeId": 0,//一级标签id +# "cardName": "99会员卡"//预约下拉中展示使用 +# }, +# ... +# ], +# "code": 200, +# "msg": "查询成功" +#} +### 查询该用户在该商户可使用的会员卡或优惠券,remark为测试标识 +POST {{host}}//default/user/userOrderPredList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "providerId": 11, + "storeId": 196, + "userId": 768, + "remark": "999999" +} + +### + +### 根据收藏id,删除收藏列表 ids:要删除的收藏列表id,删除多个时,使用逗号拼接 +POST {{host}}//default/user/removeUserCollect +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 0, + "ids": "23432,456" +} + +### +### seg用户收藏记录 +POST {{host}}//default/user/addUserCollect +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "collectType": "1", + "providerId": 2, + "userId": 8, + "storeId": 13, + "mgtState": 0, + "remark": "999999" +} + +############### END #################### + + + +############### 运营商接口测试 #################### + +### 根据运营商id,返回运营商下核消统计或售卡统计详情 +#无token时返回 +#{ +# "total": 0, +# "rows": null, +# "code": 300, +# "msg": "请先登录注册" +#} +#token用户信息不一致返回 +#{ +# "total": 0, +# "rows": null, +# "code": 301, +# "msg": "用户信息异常" +#} +#{ +# "total": 106,//该月份的统计 +# "rows": [ +# { +# "cardName": "99",//卡券名称,展示使用 +# "storeName": "2商家名称001",//商家名称,展示使用 +# "staticCount": 24//统计值 +# }, +# ... +# ], +# "code": 200, +# "msg": "查询成功" +#} +POST {{host}}//default/provider/providerServiceAndSaleDetails +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{providertoken}} + +{ + "providerId": 2, + "staticMonth": "2021-06-01", + "srcFlag": 0 +} + +### +### 根据运营商id,返回运营商下所有核消统计或售卡统计 +#返回结果说明 +#{//无token时 +# "total": 0, +# "rows": null, +# "code": 300, +# "msg": "请先登录注册" +#} +#{//token与用户标识不一致时 +# "total": 0, +# "rows": null, +# "code": 301, +# "msg": "用户信息异常" +#} +#查询成功 +#{ +# "total": 7,//统计月数 +# "rows": [ +# { +# "staticMonth": "202107",//具体月份,展示使用 +# "queryMon": "2021-07-01",//具体月份,详情查询时使用 +# "staticCount": 1062//统计值,展示使用 +# }, +# ... +# ], +# "code": 200, +# "msg": "查询成功" +#} +POST {{host}}//default/provider/providerServiceAndSaleList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{providertoken}} + +{ + "providerId": 3, + "staticMonth": "10", + "srcFlag": 1 +} + +### +GET {{host}}/register +Accept: application/json +Content-Type: application/json + +{ + "mobile": "13000000001", + "code": "1234", + "providerId": "2" +} + +### 无token登录 Authorization: Bearer {{providertoken}}使用token登录 +POST {{host}}/login +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{providertoken}} + +{ + "userId": 9, + "providerId": 2, + "userLevel": 1, + "cardID": "11111", + "remark": "999999" +} + +### 商家评价列表 +#返回结果说明 +#"{ +# ""total"": 151,//该商家的评价列表 +# ""rows"": [ +# { +# ""storeId"": 130,//商家id +# ""starLevel"": 4,//星级评价,展示使用 +# ""contentText"": ""content004542"",//评价内容 +# ""modTime"": ""2021-07-05"",//评价时间,展示使用 +# ""cardName"": ""299"",//卡券名称,展示使用 +# ""userName"": ""nick_name40221""//用户名称,展示使用 +# }, +# ... +# ], +# ""code"": 200, +# ""msg"": ""查询成功"" +#}" +POST {{host}}//default/index/storeCommentList +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + +{ + "providerId": 4, + "storeId": 130 +} + + + +############### END #################### + + +############### 小程序展示接口测试 #################### + + +### +### 根据运营商,商户id,查询商户详情 增加后拼接参数意味着是二维码分享?recommenderId=124&recommenderLevel=1 +#返回结果说明 +#{ +# "msg": "获取成功",// +# "recommenderId": "124",//推荐人id,只在在url后面带有该参数时才会返回该值 +# "code": 200, +# "data": { +# "providerId": 4,//运营商id +# "storeId": 124,//商家id +# "storeName": "4商家名称008",//商家名称,展示使用 +# "storePhone": "13000004008",//商家电话,展示联系时使用 +# "serviceState": "0",//商家在线状态 +# "salerId": 1,//对应销售id +# "storeAddr": "4商家名称008商家地址'",//商家地址,展示导航时使用 +# "storeLon": 116.6160200000,//商家位置,导航时使用 +# "storeLat": 39.8341900000,//商家位置,导航时使用 +# "onService": "2商家名称001商家地址",//商家营业信息,展示使用 +# "detail": "

详情1

dsfasdfsadfasdf

fsadfsadfdsafsd

adsfsadfsaf

详情2

sdafasdfsd



",//商家详情内容,展示使用 +# "storeCarousel1": "http://10.1.192.113:60902/profile/upload/2021/07/02/fefc46d3-dc55-4c45-af07-f21377386ba9.jpg",//商家轮播图,展示使用 +# "storeCarousel2": "http://10.1.192.113:60902/profile/upload/2021/07/02/ccc51e2e-036b-4d13-9028-adbe7bbfe176.jpg",//商家轮播图,展示使用 +# "storeCarousel3": "http://10.1.192.113:60902/profile/upload/2021/07/02/648f3997-bebf-4e27-8264-b6a2795c6b89.jpg",//商家轮播图,展示使用 +# "storeCarousel4": "http://10.1.192.113:60902/profile/upload/2021/07/02/61127f59-dd36-43ff-827b-baae7a0ea883.jpg",//商家轮播图,展示使用 +# "storeCarousel5": "http://10.1.192.113:60902/profile/upload/2021/07/02/cea01831-ab52-46ec-b8ce-dc9d64bdec6c.jpg",//商家轮播图,展示使用 +# "storeCarousel6": "http://10.1.192.113:60902/profile/upload/2021/07/02/09216bac-25fa-4112-a122-ccf140158b2d.jpg",//商家轮播图,展示使用 +# "chkCount": 262,//商家核消记录数 +# "starAvg": 2.90,//商家综合评价,展示使用 +# "segchkRecommenderStoreLableWebList": [//商家标签 +# { +# "lableSortId": 2,//标签id +# "lableTypeId": 2,//一级标签id +# "lableName": "团购",//标签名称,展示使用 +# }, +# ... +# ] +# }, +# "recommenderLevel": "1"//推荐人角色,只在在url后面带有该参数时才会返回该值 +#} +POST {{host}}//default/index/storeDetails?recommenderId=124&recommenderLevel=1 +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + +{ + "providerId": 4, + "storeId": 124 +} + +### +### 根据运营商id,返回轮播图列表 +#返回结果 +#{ +# "total": 6,//该运营商轮播图数量 +# "rows": [ +# { +# "providerId": 2,//运营商id,跳转商家详情使用 +# "storeId": 3,//商家id,跳转商家详情使用 +# "storeCarousel": "http://10.1.192.113:60902/profile/upload/2021/07/05/606861e9-02d2-4c66-8e44-31a20ba4112d.jpg",//商家首页轮播图,展示使用 +# "sortId": 0,//轮播图顺序 +# }, +# ... +# ], +# "code": 200, +# "msg": "查询成功" +#} +POST {{host}}//default/index/getBannersByProvider +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + +{ + "providerId": 3 +} + +### +### 根据标签id,会员卡类型id,搜索商户列表 +# +# + +#{ +# "providerId": 2, +# "sortType": 1, +# "lableId": 2, +# "typeId": 2, +# "cardId": 1, +# "userLon": 116.25849, +# "userLat": 39.684333 +#} +POST {{host}}//default/index/listByProviderwithLable +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + +{ + "providerId": 2, + "sortType": 1, + "userLon": 116.25849, + "userLat": 39.684333 +} + +### +### 根据运营商id查询seg首页推荐商户列表 +POST {{host}}//default/index/listByProvider +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + +{ + "providerId": 2, + "sortType": 3, + "userLon": 116.25849, + "userLat": 39.684333 +} + +### +### 搜索商户名称,根据名称,标签,充值卡等 +#请求参数 +#{ +# "providerId": 2, //*运营商id +# "sortType": 0, // 排序方式 0,默认排序,1热度,2评价,3距离 +# "storeName": "99", //*商家名称(即搜索内容) +# "lableName": "99", //*标签名称(即搜索内容) +# "userLon": 114.123456, //用户位置 +# "userLat": 43.123456 //用户位置 +#} +#返回结果 +#{ +# "total": 51,搜索的商家数量 +# "rows": [ +# { +# "providerId": 2,运营商id +# "storeId": 3,商家id,用于进行商家详情查询使用 +# "storeName": "2商家名称001", 商家名称,展示使用 +# "serviceState": "0",服务状态,在线 +# "storeSort": 3,商家展示顺序 +# "storeIcon": "http://10.1.192.113:60902/profile/upload/2021/07/02/706f0a58-6031-4523-abbd-dc5dd823278c.jpg", 商家小图片,列表模式时使用 +# "storeGificon": "http://10.1.192.113:60902/profile/upload/2021/07/02/e4c00b15-84f7-491d-bb34-bf5253f7f6b7.jpg", 商家大图片,大图模式时使用 +# "storeLon": 116.2667540000, 商家位置 +# "storeLat": 39.6789740000, +# "userDist": 0, 用户距离,展示使用 +# "chkCount": 89, 热度,展示使用 +# "starAvg": 3.16, 综合评价,展示使用 +# "salerId": 3, 销售id +# "lables": [ 商家支持的标签列表 +# { +# "lableId": 0, 标签id +# "lableTypeId": 2, 一级标签id +# "lableName": "团购", 标签名称,展示使用 +# }, +# ... +# ] +# }, +# ... +# ], +# "code": 200, +# "msg": "查询成功" +#} +POST {{host}}//default/index/StoreSearch +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + +{ + "providerId": 2, + "sortType": 0, + "lableId": 4, + "typeId": 1, + "storeName": "百元尊享", + "lableName": "百元尊享", + "userLon": 114.123456, + "userLat": 43.123456 +} + +###查询seg标签列表 +###返回值说明 +#"{ +# ""total"": 7,首页标签区域运营商的标签列表,超过8个时最后一个标签为更多 +# ""rows"": [ +# { +# ""lableId"": 0, 子标签id,查询使用 +# ""lableSortId"": 0, 标签显示顺序,一级标签下的显示顺序 +# ""lableTypeId"": 0, 一级标签id,查询使用 +# ""lableName"": ""9块9"", 标签名称,展示使用 +# ""lablePic"": ""http://10.1.192.113:60902/profile/upload/2021/07/05/4f8fb474-97d9-4547-afca-47a2ca1d5180.jpg"" 标签图标,展示使用 +# }, +# ... +# ], +# ""code"": 200, +# ""msg"": ""查询成功"" +#}" +GET {{host}}//default/index/lableListByProvider?providerId=2 +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + + +### +### 根据用户当前所在地市行政id,返回运营商id 尹志颖 +### 返回值说明 { +# "code": 200, +# data": { +# "provFlag": 1, 0说明用户所选或所在的地区已开放服务,1说明用户所在或所选地区未开放服务,提供的运营商为默认运营商 +# "providerId": 3 +# } +#} +GET {{host}}//default/index/getProviderByadcode?adcode=150100 +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + + + +### +### 测试微信账号绑定 +GET {{host}}//bindaccount +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{token1}} + +{ + "userId": "503", + "providerId": "2", + "userLevel": "2", + "code": "0312qnFa1cUYQB0X05Ja151Isp12qnFw" +} + +### 测试token取值 +GET {{host}}/tokentest +Accept: application/json +Content-Type: application/json + +{{bindtoken1}} + +### 用户利用token进行登录 +POST {{host}}/login +Accept: */* +Cache-Control: no-cache +Content-Type: application/json +Authorization: Bearer {{bindtoken}} + +{ + "userId": 3, + "providerId": 2, + "userLevel": 2, + "cardID": "11111" +} + +### 已有用户的登录注册标识 +GET {{host}}/register +Accept: application/json +Content-Type: application/json + +{ + "mobile": "13000020002", + "code": "1234", + "providerId": "2", + "remark": "999999" +} + +> {% client.global.set("token2", response.body.data.token); %} + +### 进行新用户注册 remark测试标识 +GET {{host}}/register +Accept: application/json +Content-Type: application/json + +{ + "mobile": "99999999999", + "code": "1234", + "recommendId": "5", + "recommendLevel": "1", + "providerId": "2", + "remark": "999999" +} + +> {% client.global.set("token1", response.body.data.token); %} + +### 发送短信验证码 +POST {{host}}/sendmobilecode?mobile=99999999999 +Accept: */* +Cache-Control: no-cache +Content-Type: application/json + diff --git a/ruoyi-segchk/pom.xml b/ruoyi-segchk/pom.xml new file mode 100644 index 0000000..eebdb48 --- /dev/null +++ b/ruoyi-segchk/pom.xml @@ -0,0 +1,151 @@ + + + + ruoyi + com.ruoyi + 3.6.0 + + + 4.0.0 + + ruoyi-segchk + + + 4.8.10.ALL + + + system系统模块 + + + + + + + + com.google.zxing + core + 3.4.0 + + + + com.alipay.sdk + alipay-sdk-java + ${alipay.version} + + + fastjson + com.alibaba + + + + + org.bouncycastle + bcprov-jdk16 + 1.46 + + + + dom4j + dom4j + 1.6.1 + + + + + com.github.qcloudsms + qcloudsms + 1.0.6 + + + com.aliyun + aliyun-java-sdk-core + 4.0.6 + + + + com.aliyun + aliyun-java-sdk-dysmsapi + 1.1.0 + + + + com.qcloud + cos_api + 5.6.8 + + + + com.aliyun.oss + aliyun-sdk-oss + 2.5.0 + + + + + + com.weixin.pay + wxpay-sdk + 0.0.1 + + + org.apache.httpcomponents + httpclient + + + + + + + com.ruoyi + ruoyi-system + + + + io.swagger + swagger-models + 1.6.2 + + + + org.apache.httpcomponents + httpclient + 4.5.6 + + + + org.apache.httpcomponents + httpcore + 4.4.12 + + + + org.apache.httpcomponents + httpmime + 4.5.6 + + + + com.twelvemonkeys.imageio + imageio-jpeg + 3.0-rc5 + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/domain/UmsMember.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/domain/UmsMember.java new file mode 100644 index 0000000..ea6ef55 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/domain/UmsMember.java @@ -0,0 +1,891 @@ +package com.ruoyi.member.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.util.ShareCodeUtils; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +/** + * 会员对象 ums_member + * + * @author 魔金商城 + * @date 2020-07-25 + */ +public class UmsMember extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 用户名 + */ + @Excel(name = "用户名") + private String username; + + /** + * 用户密码 + */ + @Excel(name = "用户密码") + private String password; + + /** + * 昵称 + */ + @Excel(name = "昵称") + private String nickname; + + /** + * 头像地址 + */ + @Excel(name = "头像地址") + private String image; + + /** + * 真实姓名 + */ + @Excel(name = "真实姓名") + private String relename; + + /** + * 身份证 + */ + @Excel(name = "身份证") + private String cardid; + + /** + * 性别 0 保密 1男 2女 默认0 + */ + @Excel(name = "性别 0 保密 1男 2女 默认0") + private String gender; + + /** + * 生日 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "生日", width = 30, dateFormat = "yyyy-MM-dd") + private Date birthday; + + /** + * 月收入 0 无收入 1 2000以下 2 2000-3999 3 4000-59994 6000-7999 5 8000以上 + */ + @Excel(name = "月收入 0 无收入 1 2000以下 2 2000-3999 3 4000-5999 4 6000-7999 5 8000以上") + private String monthlyIncome; + + /** + * 婚姻状况 0 保密 1未婚 2 已婚 默认0 保姆 + */ + @Excel(name = "婚姻状况 0 保密 1未婚 2 已婚 默认0 保姆") + private String marriageStatus; + + /** + * 手机号码 + */ + @Excel(name = "手机号码") + private String mobile; + + /** + * 邮箱地址 + */ + @Excel(name = "邮箱地址") + private String email; + + /** + * 更改中的邮箱(绑定新邮箱使用) + */ + @Excel(name = "更改中的邮箱", readConverterExp = "绑=定新邮箱使用") + private String modifiedEmail; + + /** + * 校验码(绑定新邮箱时使用) + */ + @Excel(name = "校验码", readConverterExp = "绑=定新邮箱时使用") + private String checkCode; + + /** + * 省 + */ + @Excel(name = "省") + private Long province; + + /** + * 市 + */ + @Excel(name = "市") + private Long city; + + /** + * 区 + */ + @Excel(name = "区") + private Long county; + + /** + * 详细地址 + */ + @Excel(name = "详细地址") + private String detailaddress; + + /** + * 兴趣爱好 + */ + @Excel(name = "兴趣爱好") + private String interest; + + /** + * 店铺id 平台的为0 默认为平台 + */ + @Excel(name = "店铺id 平台的为0 默认为平台") + private Long storeId; + + /** + * 1 普通用户 2 商家店铺用户 3 店铺员工 + */ + @Excel(name = "1 普通用户 2 商家店铺用户 3 店铺员工") + private String type; + + private String appletOpenId; + + private String appOpenId; + + private String h5OpenId; + /** + * 总的消费金额 + */ + @Excel(name = "总的消费金额") + private BigDecimal consumptionAmount; + + /** + * 预存款支付密码 + */ + @Excel(name = "预存款支付密码") + private String paypassword; + + /** + * 用户注册来源 1 pc 2app 3 手机h5 4 管理员后台新增 5applet + */ + @Excel(name = "用户注册来源 1 pc 2app 3 手机h5 4 管理员后台新增 ") + private String source; + + /** + * 用户状态 1 正常 2 冻结 3 未启用 默认1 + */ + @Excel(name = "用户状态 1 正常 2 冻结 3 未启用 默认1 ") + private String status; + + /** + * 会员签到次数 + */ + @Excel(name = "会员签到次数") + private int signNum; + + /** + * 手机是否验证 0 否 1 验证 默认0 + */ + @Excel(name = "手机是否验证 0 否 1 验证 默认0 ") + private String isMobileVerification; + + /** + * 邮箱是否验证 0 否 1 验证 默认0 + */ + @Excel(name = "邮箱是否验证 0 否 1 验证 默认0 ") + private String isEmailVerification; + + /** + * 错误登录的次数 + */ + @Excel(name = "错误登录的次数") + private int loginErrorCount; + + /** + * 删除标记 0 未删除 1删除 默认0 + */ + private int delFlag; + + /** + * 修改时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modifyTime; + + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date delTime; + + /** + * 锁定时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "锁定时间", width = 30, dateFormat = "yyyy-MM-dd") + private LocalDateTime lockTime; + + /** + * 最近登陆时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "最近登陆时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date lastLoginTime; + + /** + * 推荐人的会员id 如果没有 则为-1 默认为-1 + */ + @Excel(name = "推荐人的会员id 如果没有 则为-1 默认为-1") + private Long recommended = -1L; + + /** + * 二级推荐人的会员id (上级的上级) 如果没有 则为-1 默认为-1 + */ + @Excel(name = "二级推荐人的会员id ", readConverterExp = "上=级的上级") + private Long sRecommended = -1L; + + /** + * 会员自己的推荐码 + */ + @Excel(name = "会员自己的推荐码") + private String selfRecommendCode; + + /** + * 会员的佣金 + */ + @Excel(name = "会员的佣金") + private BigDecimal commission; + + /** + * 会员所属的店铺id + */ + @Excel(name = "会员所属的店铺id") + private Long beloneStoreId; + /** + * 用户积分 + */ + @ApiModelProperty(value = "用户积分") + private int customerPoint; + private int subSpreadCustomerCount; + /** + * 推荐人code 如果为空 则说明没有推荐人 + */ + private String recommondCode; + /** + * 自动注册渠道类型 + */ + @ApiModelProperty(value = "自动注册渠道类型") + private String channelType; + private UmsMemberLevel customerLevel; + + private BigDecimal allPredeposit; + + /** + * 构造app用户注册对象 + * + * @param mobile 手机号码 + * @param password 密码 + * @param recommondCode 推荐吗 + * @return 返回app用户注册对象 + */ + public static UmsMember buildAppRegisterCustomer(String mobile, String password, String recommondCode) { + UmsMember customer = new UmsMember(); + customer.username = mobile; + customer.password = password; + customer.mobile = mobile; + customer.type = "1"; + customer.source = "2"; + customer.isMobileVerification = "1"; + + customer.recommondCode = recommondCode; + return customer; + } + + /** + * 构造h5用户注册对象 + * + * @param mobile 手机号码 + * @param recommondCode 推荐吗 + * @return 返回app用户注册对象 + */ + public static UmsMember buildH5RegisterCustomer(String mobile, String recommondCode) { + UmsMember customer = new UmsMember(); + customer.username = mobile; + customer.password = "123456"; + customer.mobile = mobile; + customer.type = "1"; + customer.source = "3"; + customer.isMobileVerification = "1"; + + customer.recommondCode = recommondCode; + return customer; + } + + /** + * 构造代客下单自动注册对象 + * + * @param mobile 手机号码 + * @return 返回代客下单自动注册对象 + */ + public static UmsMember buildStoreShoppingRegisterCustomer(String mobile, long beloneStoreId) { + UmsMember customer = new UmsMember(); + customer.username = mobile; + customer.password = "123456"; + customer.mobile = mobile; + customer.type = "1"; + customer.source = "4"; + customer.status = "1"; + customer.storeId = 0L; + customer.isMobileVerification = "1"; + customer.beloneStoreId = beloneStoreId; + return customer; + + } + + public int getSubSpreadCustomerCount() { + return subSpreadCustomerCount; + } + + public void setSubSpreadCustomerCount(int subSpreadCustomerCount) { + this.subSpreadCustomerCount = subSpreadCustomerCount; + } + + public String getRecommondCode() { + return recommondCode; + } + + public void setRecommondCode(String recommondCode) { + this.recommondCode = recommondCode; + } + + public UmsMemberLevel getCustomerLevel() { + return customerLevel; + } + + public void setCustomerLevel(UmsMemberLevel customerLevel) { + this.customerLevel = customerLevel; + } + + /** + * 设置下级分销会员数量 + * + * @param subSpreadCustomerCount 下级分销会员数量 + * @return 返回当前对象 + */ + public UmsMember addSubSpreadCustomerCount(int subSpreadCustomerCount) { + this.subSpreadCustomerCount = subSpreadCustomerCount; + return this; + } + + /** + * 设置自己的推荐吗 + * + * @return 返回当前对象 + */ + public UmsMember addSelfRecommondCode() { + this.selfRecommendCode = ShareCodeUtils.toSerialCode(Long.parseLong(this.mobile)); + return this; + } + + /** + * 判断是否有推荐人 有返回true 没有返回false + * + * @return 有返回true 没有返回false + */ + @JsonIgnore + public boolean hasRecommonded() { + return !StringUtils.isEmpty(this.recommondCode) || this.recommended != -1; + } + + /** + * 后端添加用户设置默认值 + * + * @return 返回用户信息 + */ + public UmsMember setDefaultValuesForAdminAdd() { + this.storeId = 0L; + this.type = "1"; + this.source = "4"; + this.status = "1"; + this.isMobileVerification = "1"; + if (!StringUtils.isEmpty(this.email)) { + this.isEmailVerification = "1"; + } + + this.beloneStoreId = 0L; + return this; + } + + /** + * 设置归属门店id + * + * @param beloneStoreId 归属门店id + * @return 返回用户信息 + */ + public UmsMember setBelongStoreIdForStore(long beloneStoreId) { + this.beloneStoreId = beloneStoreId; + return this; + } + + /** + * 清除用户密码 + */ + public UmsMember clearPassword() { + this.password = "**********"; + if (!StringUtils.isEmpty(this.paypassword)) { + this.paypassword = "**********"; + } + return this; + } + + /** + * 获取会员对象 + * + * @param customerId 会员id + * @return 会员对象 + */ + public UmsMember setCustomerId(long customerId) { + this.id = customerId; + return this; + } + + /** + * 获得会员的会员等级id + * + * @return 返回会员的会员等级id + */ + @JsonIgnore + public long getCustomerLevelId() { + return Objects.isNull(this.customerLevel) ? -1 : this.customerLevel.getId(); + } + + /** + * 获得会员等级名称 + * + * @return 返回会员等级名称 + */ + @JsonIgnore + public String getCustomerLevelName() { + return Objects.isNull(this.customerLevel) ? "" : this.customerLevel.getName(); + } + + /** + * 检查更改金额 + * + * @param money 更改金额 + * @return true 可以更改 false 更改后总金额小于0,不可以更改 + */ + public boolean checkConsumptionAmount(BigDecimal money) { + if (money.intValue() >= 0) { + return true; + } + if (money.abs().compareTo(this.consumptionAmount) > 0) { + return false; + } + return true; + } + + /** + * 检查更改佣金金额 + * + * @param money 更改佣金金额 + * @return true 可以更改 false 更改后总金额小于0,不可以更改 + */ + public boolean checkCommission(BigDecimal money) { + if (money.intValue() >= 0) { + return true; + } + if (money.abs().compareTo(this.commission) > 0) { + return false; + } + return true; + } + + + /** + * 为用户添加用户名 + * + * @param username + * @return + */ + public UmsMember addUsername(String username) { + this.username = username; + return this; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getRelename() { + return relename; + } + + public void setRelename(String relename) { + this.relename = relename; + } + + public String getCardid() { + return cardid; + } + + public void setCardid(String cardid) { + this.cardid = cardid; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public Date getBirthday() { + return birthday; + } + + public void setBirthday(Date birthday) { + this.birthday = birthday; + } + + public String getMonthlyIncome() { + return monthlyIncome; + } + + public void setMonthlyIncome(String monthlyIncome) { + this.monthlyIncome = monthlyIncome; + } + + public String getMarriageStatus() { + return marriageStatus; + } + + public void setMarriageStatus(String marriageStatus) { + this.marriageStatus = marriageStatus; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getModifiedEmail() { + return modifiedEmail; + } + + public void setModifiedEmail(String modifiedEmail) { + this.modifiedEmail = modifiedEmail; + } + + public String getCheckCode() { + return checkCode; + } + + public void setCheckCode(String checkCode) { + this.checkCode = checkCode; + } + + public Long getProvince() { + return province; + } + + public void setProvince(Long province) { + this.province = province; + } + + public Long getCity() { + return city; + } + + public void setCity(Long city) { + this.city = city; + } + + public Long getCounty() { + return county; + } + + public void setCounty(Long county) { + this.county = county; + } + + public String getDetailaddress() { + return detailaddress; + } + + public void setDetailaddress(String detailaddress) { + this.detailaddress = detailaddress; + } + + public String getInterest() { + return interest; + } + + public void setInterest(String interest) { + this.interest = interest; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getAppletOpenId() { + return appletOpenId; + } + + public void setAppletOpenId(String appletOpenId) { + this.appletOpenId = appletOpenId; + } + + public String getAppOpenId() { + return appOpenId; + } + + public void setAppOpenId(String appOpenId) { + this.appOpenId = appOpenId; + } + + public String getH5OpenId() { + return h5OpenId; + } + + public void setH5OpenId(String h5OpenId) { + this.h5OpenId = h5OpenId; + } + + public BigDecimal getConsumptionAmount() { + return consumptionAmount; + } + + public void setConsumptionAmount(BigDecimal consumptionAmount) { + this.consumptionAmount = consumptionAmount; + } + + public String getPaypassword() { + return paypassword; + } + + public void setPaypassword(String paypassword) { + this.paypassword = paypassword; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public int getSignNum() { + return signNum; + } + + public void setSignNum(int signNum) { + this.signNum = signNum; + } + + public String getIsMobileVerification() { + return isMobileVerification; + } + + public void setIsMobileVerification(String isMobileVerification) { + this.isMobileVerification = isMobileVerification; + } + + public String getIsEmailVerification() { + return isEmailVerification; + } + + public void setIsEmailVerification(String isEmailVerification) { + this.isEmailVerification = isEmailVerification; + } + + public int getLoginErrorCount() { + return loginErrorCount; + } + + public void setLoginErrorCount(int loginErrorCount) { + this.loginErrorCount = loginErrorCount; + } + + public int getDelFlag() { + return delFlag; + } + + public void setDelFlag(int delFlag) { + this.delFlag = delFlag; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public Date getDelTime() { + return delTime; + } + + public void setDelTime(Date delTime) { + this.delTime = delTime; + } + + public LocalDateTime getLockTime() { + return lockTime; + } + + public void setLockTime(LocalDateTime lockTime) { + this.lockTime = lockTime; + } + + public Date getLastLoginTime() { + return lastLoginTime; + } + + public void setLastLoginTime(Date lastLoginTime) { + this.lastLoginTime = lastLoginTime; + } + + public Long getRecommended() { + return recommended; + } + + public void setRecommended(Long recommended) { + this.recommended = recommended; + } + + public Long getsRecommended() { + return sRecommended; + } + + public void setsRecommended(Long sRecommended) { + this.sRecommended = sRecommended; + } + + public String getSelfRecommendCode() { + return selfRecommendCode; + } + + public void setSelfRecommendCode(String selfRecommendCode) { + this.selfRecommendCode = selfRecommendCode; + } + + public BigDecimal getCommission() { + return commission; + } + + public void setCommission(BigDecimal commission) { + this.commission = commission; + } + + public Long getBeloneStoreId() { + return beloneStoreId; + } + + public void setBeloneStoreId(Long beloneStoreId) { + this.beloneStoreId = beloneStoreId; + } + + public int getCustomerPoint() { + return customerPoint; + } + + public void setCustomerPoint(int customerPoint) { + this.customerPoint = customerPoint; + } + + public String getChannelType() { + return channelType; + } + + public void setChannelType(String channelType) { + this.channelType = channelType; + } + + public BigDecimal getAllPredeposit() { + return allPredeposit; + } + + public void setAllPredeposit(BigDecimal allPredeposit) { + this.allPredeposit = allPredeposit; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/domain/UmsMemberLevel.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/domain/UmsMemberLevel.java new file mode 100644 index 0000000..3af9e36 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/domain/UmsMemberLevel.java @@ -0,0 +1,206 @@ +package com.ruoyi.member.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.Objects; + +/** + * 会员等级对象 ums_member_level + * + * @author 魔金商城 + * @date 2020-07-25 + */ +public class UmsMemberLevel extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 会员等级名称 + */ + @Excel(name = "会员等级名称") + private String name; + + /** + * 消费小值(包含该值) + */ + @Excel(name = "消费小值", readConverterExp = "包=含该值") + private Long minMoney; + + /** + * 消费金额最大值 不包含该值 + */ + @Excel(name = "消费金额最大值 不包含该值") + private Long maxMoney; + + /** + * 会员折扣 + */ + @Excel(name = "会员折扣") + private BigDecimal discount; + + /** + * 删除标记 0 未删除 1删除 默认0 + */ + private int delFlag; + + /** + * 修改时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modifyTime; + + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date delTime; + + /** + * 构造未知等级实体 + * + * @return 返回未知等级实体 + */ + public static UmsMemberLevel buildNoLevel() { + UmsMemberLevel customerLevel = new UmsMemberLevel(); + customerLevel.name = "非会员"; + return customerLevel; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getMinMoney() { + return minMoney; + } + + public void setMinMoney(Long minMoney) { + this.minMoney = minMoney; + } + + public Long getMaxMoney() { + return maxMoney; + } + + public void setMaxMoney(Long maxMoney) { + this.maxMoney = maxMoney; + } + + public BigDecimal getDiscount() { + return discount; + } + + public void setDiscount(BigDecimal discount) { + this.discount = discount; + } + + public int getDelFlag() { + return delFlag; + } + + public void setDelFlag(int delFlag) { + this.delFlag = delFlag; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public Date getDelTime() { + return delTime; + } + + public void setDelTime(Date delTime) { + this.delTime = delTime; + } + + /** + * 根据传入的金额判断 是否是当前等级 + * + * @param money 传入金金额 + * @return 判断规则 [0,100) 前闭后开 包含0 不包含100 + */ + public boolean isCurrentLevl(BigDecimal money) { + if (Objects.isNull(money)) { + return false; + } + return money.intValue() >= this.minMoney && money.intValue() < this.maxMoney; + } + + /** + * 判断传入的会员等级消费金额和当前的会员等级消费金额是否有交集 + * + * @param customerLevel 会员等级 + * @return 有返回true 没有返回false 传入的值为空 返回false + */ + public boolean hasIntersection(UmsMemberLevel customerLevel) { + if (Objects.isNull(customerLevel)) { + return false; + } + + // 如果传入的最小值比当前的最大值要大于等于 则肯定没有交集 + if (customerLevel.minMoney >= this.maxMoney) { + return false; + } + if (customerLevel.minMoney >= customerLevel.maxMoney) { + return true; + } + // 如果传入的最小值在当前会员等级最大值和最小值之间(不包含最大值 包含最小值) 则肯定会有交集 + if (customerLevel.minMoney >= this.minMoney && customerLevel.minMoney < this.maxMoney) { + return true; + } + + // 如果传入的最小值在比当前的最小值还小 则看传入的最大值 + if (customerLevel.minMoney < this.minMoney) { + if (customerLevel.maxMoney <= this.minMoney) { + return false; + } else { + return true; + } + } + return true; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("minMoney", getMinMoney()) + .append("maxMoney", getMaxMoney()) + .append("discount", getDiscount()) + .append("delFlag", getDelFlag()) + .append("createTime", getCreateTime()) + .append("modifyTime", getModifyTime()) + .append("delTime", getDelTime()) + .toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/mapper/WeChatCustomerLinkMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/mapper/WeChatCustomerLinkMapper.java new file mode 100644 index 0000000..b8b8090 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/mapper/WeChatCustomerLinkMapper.java @@ -0,0 +1,65 @@ +package com.ruoyi.member.mapper; + + +import com.ruoyi.segchk.domain.WeChatCustomerLink; +import org.springframework.stereotype.Repository; + +/** + * 微信用户关联数据库接口 + */ +@Repository +public interface WeChatCustomerLinkMapper { + + /** + * 根据openId查询关联实体 + * + * @param openId 微信用户唯一标识 + */ + + WeChatCustomerLink queryWeChatCustomerLinkByOpenId(String openId); + + + /** + * 根据customerId查询关联实体 + * + * @param customerId 用户id + */ + + WeChatCustomerLink queryWeChatCustomerLinkByCustomerId(long customerId); + + /** + * 根据unionId查询关联实体 + * + * @param unionId 微信联合登录id + */ + + WeChatCustomerLink queryWeChatCustomerLinkByUnionId(String unionId); + + /** + * 增加关联 + * + * @param weChatCustomerLink 关联实体 + * @return 1:成功 + */ + + int addWeChatCustomerLink(WeChatCustomerLink weChatCustomerLink); + + /** + * 删除关联 + * + * @param customerId 用户id + * @return 1:成功 + */ + + int deleteWeChatCustomerLink(long customerId); + + /** + * 更新微信用户关联 + * + * @param weChatCustomerLink 微信用户关联实体 + * @return 1成功 否则失败 + */ + + int updateWeChatCustomerLink(WeChatCustomerLink weChatCustomerLink); +} + diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/LoginService.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/LoginService.java new file mode 100644 index 0000000..7e71349 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/LoginService.java @@ -0,0 +1,21 @@ +package com.ruoyi.member.service; + + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.segchk.domain.SegchkUserWebReq; + +/** + * Created by 魔金商城 on 17/7/17. + * 登录接口 + */ +public interface LoginService { + + + /** + * segchk前端登录 (app,pc,mobile) + * + * @param segchkUserWebReq 登入参数 + * @return 返回码 -1 用户名或密码错误 -2 账号冻结 -3 账号锁定 1 成功 -4 验证码错误 + */ + AjaxResult login(SegchkUserWebReq segchkUserWebReq); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/RechargeService.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/RechargeService.java new file mode 100644 index 0000000..36f5547 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/RechargeService.java @@ -0,0 +1,36 @@ +package com.ruoyi.member.service; + + +import com.ruoyi.common.core.domain.AjaxResult; + +import java.math.BigDecimal; + +/** + * 充值服务 + */ +public interface RechargeService { + + /** + * 支付宝pc支付 + * + * @param money 充值金额 + * @param customerId 用户id + * @param type 支付类型 1:订单支付 2:预存款充值 + * @return 返回码和支付宝支付的html 返回码说明 -1:用户不存在 -2:生成充值记录出错 -5:支付宝生成订单出错 -7 没有设置网站地址 -8 缺少配置 -9 没有启用 1 成功 + */ + AjaxResult aliPagePay(String transCode, BigDecimal money, int payType, long customerId, int type); + + /** + * 微信扫码支付 + * + * @param money 充值金额 + * @param customerId 用户id + * @param ip 请求真实ip + * @param type 支付类型 1:订单支付 2:预存款充值 + * @return 返回码和支付宝支付的html 返回码说明 -1:用户不存在 -2:生成充值记录出错 -5:微信生成订单出错 -7 没有设置网站地址 -8 缺少配置 -9 没有启用 1 成功 + */ + AjaxResult wechatQRPay(String transCode, BigDecimal money, int payType, long customerId, String ip, int type); + + + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/RegisterService.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/RegisterService.java new file mode 100644 index 0000000..7cb153d --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/RegisterService.java @@ -0,0 +1,68 @@ +package com.ruoyi.member.service; + +import java.util.function.Consumer; + +/** + * Created by 魔金商城 on 17/11/18. + * 注册服务接口 + */ +public interface RegisterService { + + /** + * 发送注册短信验证码 + * + * @param mobile 手机号码 + * @param consumer 回调接口 + * @return 0 成功 1 失败 -1 手机号码已经存在 + */ + int sendRegisterSmsCode(String mobile, Consumer consumer); + /** + * 发送注册短信验证码 + * + * @param mobile 手机号码 + * @param consumer 回调接口 + * @return 0 成功 1 失败 -1 手机号码已经存在 + */ + int sendRegisterSmsCodeFortest(String mobile, Consumer consumer); + + /** + * 发送注册短信验证码(PC端用,带有图片验证码) + * + * @param mobile 手机号码 + * @param kaptcha 用户输入的图片验证码 + * @param oldKaptcha redis中的图片验证码 + * @param consumer 回调接口 + * @return 0 成功 1 失败 -4 手机号码已经存在 -1 图片验证码失效或不存在 -2 图片验证码为空 -3 图片证码不正确 + */ + int sendRegisterSmsCodeForPc(String mobile, String kaptcha, String oldKaptcha, Consumer consumer); + + /** + * 用户注册 + * + * @param mobile 手机号码 + * @param password 密码 + * @param code 用户输入的手机验证码 + * @param originCode 生成的手机验证码 + * @param recommondCode 推荐吗 + * @return -1 手机验证码错误 -2 参数错误 0 失败 成功>0 -3 手机号码已存在 -10 推荐人不存在 + */ + int registerCustomer(String mobile, String password, String code, String originCode, String recommondCode); + + /** + * 免密用户自动注册 + * + * @param phoneNo 手机号码 + * @return -1 手机验证码错误 -2 参数错误 0 失败 成功>0 -3 手机号码已存在 -10 推荐人不存在 + */ + Long unAuthRegister(String phoneNo, String channelType); + + /** + * 校验验证码 + * + * @param kaptcha 验证码 + * @param kaptchaInSession session中的验证码 + * @return -1 验证码失效或不存在 -2 验证码为空 -3验证码不正确 1 成功 + */ + int checkKaptcha(String kaptcha, String kaptchaInSession); + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/RegisterServiceApi.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/RegisterServiceApi.java new file mode 100644 index 0000000..47da24f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/RegisterServiceApi.java @@ -0,0 +1,38 @@ +package com.ruoyi.member.service; + +import com.ruoyi.common.core.domain.AjaxResult; + +/** + * 注册服务聚合接口 + */ +public interface RegisterServiceApi { + + /** + * 用户注册 + * + * @param mobile 手机号码 + * @param password 密码 + * @param code 用户输入的手机验证码 + * @param originCode 生成的手机验证码 + * @param recommondCode 推荐吗 + * @return -1 手机验证码错误 -2 参数错误 0 失败 成功>0 -3 手机号码已存在 -10 推荐人不存在 + */ +// int registerCustomer(String mobile, String password, String code, String originCode, String recommondCode); + + + /** + * 用户注册 + * + * @param mobile 手机号码 + * @param code 用户输入的手机验证码 + * @param originCode 生成的手机验证码 + * @param recommondId 推荐吗 + * @param recommondLevel 推荐角色 + * @param providerId + * @param remark + * @return -1 手机验证码错误 -2 参数错误 0 失败 成功>0 -3 手机号码已存在 -10 推荐人不存在 + */ + AjaxResult registerCustomer(String mobile, String code, String originCode, String recommondId, String recommondLevel, String providerId, String remark); + + String createToke(String subject, Long userId, Long providerId, Integer userLevel); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/SmsService.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/SmsService.java new file mode 100644 index 0000000..cae1b2e --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/SmsService.java @@ -0,0 +1,71 @@ +package com.ruoyi.member.service; + +import java.math.BigDecimal; + +/** + * Created by 魔金商城 on 17/11/18. + * 短信验证码服务接口 + */ +public interface SmsService { + + /** + * 发送短信 + * + * @param phone 手机号码 + * @param content 发送内容 + * @return 成功返回0 失败返回1 + */ + int sendSms(String phone, String content); + + /** + * 发送核销码短信 + * + * @param phone 手机号码 + * @param code 订单号 + * @param writeOffCode 核销码 + * @param storeName 店铺名称 + * @return 成功返回0 失败返回1 + */ + int sendWiteOffCodeSms(String phone, String code, String writeOffCode, String storeName); + + /** + * 发送虚拟商品订单核销码短信 + * + * @param phone 手机号码 + * @param code 订单号 + * @param writeOffCode 核销码 + * @param storeName 店铺名称 + * @return 成功返回0 失败返回1 + */ + int sendVirtualOrderWiteOffCodeSms(String phone, String code, String writeOffCode, String storeName); + + + /** + * 发送社区团购审核结果通知短信 + * + * @param phone 手机号码 + * @param submittime 通过时间 + * @return 成功返回0 失败返回1 + */ + int sendAuditTemplateOffCodeSms(String phone, String submittime); + + /** + * 发送社区团购结算短信 + * + * @param communityName 社区团购名称 + * @param price 佣金 + * @param phone 手机号码 + * @return 成功发挥0 失败返回1 + */ + int sendCommunityBuySettlementSms(String phone, String communityName, BigDecimal price); + + /** + * 社区团购提现申请打款通知 + * + * @param phone 手机号码 + * @param submittime 打款时间 + * @param price 金额 + * @return 成功返回0 失败返回1 + */ + int sendCommunityBuyWitudrawSms(String phone, String submittime, BigDecimal price); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/WeChatAppletLoginService.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/WeChatAppletLoginService.java new file mode 100644 index 0000000..f7307e7 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/WeChatAppletLoginService.java @@ -0,0 +1,66 @@ +package com.ruoyi.member.service; + + +import com.ruoyi.member.vo.AppletLoginInfo; +import com.ruoyi.member.vo.AppletLoginRedisParamResponse; +import com.ruoyi.util.WeChatAppletUserInfo; + +import java.util.function.Consumer; + +/** + * 微信小程序登录服务 + * + * @author SK + * @since 2018/6/13 + */ +public interface WeChatAppletLoginService { + + /** + * 小程序获取登录信息 + * + * @param code 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 api,使用 code 换取 openid 和 session_key 等信息 + * @param unionId 联合登录id + * @param claimsConsumer 回调 + * @return 登录信息 + */ + AppletLoginInfo getLoginInfo(String code, String unionId, Consumer claimsConsumer); + + /** + * 处理小程序用户信息 + * + * @param weChatAppletUserInfo 小程序用户信息实体 + * @param openId 微信用户标识 + * @param sessionKey 小程序sessionKey + * @param claimsConsumer 回调 + * @return 登录信息 + */ + AppletLoginInfo dealUserInfo(WeChatAppletUserInfo weChatAppletUserInfo, String openId, String sessionKey, Consumer claimsConsumer); + + + /** + * 检验用户是否已绑定 + * + * @param userName 用户名 + * @return -9已经绑定过 1:没有绑定 + */ + int checkCustomerBind(String userName); + + /** + * 绑定账号 + * + * @param openId 微信用户唯一标识 + * @param unionId 微信联合登录id + * @param customerId 用户id + * @return 1:成功 + */ + int bindAccount(String openId, String unionId, long customerId); + + /** + * 解绑账号 + * + * @param customerId 用户id + * @param unionId 联合登录id,用于redis缓存 + * @return 1:成功 + */ + int unbindAccount(long customerId, String unionId); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/WeChatCustomerLinkService.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/WeChatCustomerLinkService.java new file mode 100644 index 0000000..848c3ab --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/WeChatCustomerLinkService.java @@ -0,0 +1,86 @@ +package com.ruoyi.member.service; + + +import com.ruoyi.common.utils.RedisCahceKey; +import com.ruoyi.segchk.domain.SegchkUserWechat; +import com.ruoyi.segchk.domain.WeChatCustomerLink; +import com.ruoyi.util.Claims; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.stereotype.Repository; + +/** + * 微信用户关联服务接口 + */ +@Repository +public interface WeChatCustomerLinkService { + + /** + * 增加关联 + * + * @param weChatCustomerLink 关联实体 + * @return 1:成功 + */ + int addWeChatCustomerLink(WeChatCustomerLink weChatCustomerLink); + + /** + * 根据openId查询关联实体 + * + * @param openId 微信用户唯一标识 + */ + WeChatCustomerLink queryWeChatCustomerLinkByOpenId(String openId); + + + /** + * 根据用户id查询关联实体 + * + * @param customerId 用户id + */ + WeChatCustomerLink queryWeChatCustomerLinkByCustomerId(long customerId); + + /** + * 根据用户名查询关联实体 + * + * @param userName 用户名 + */ + WeChatCustomerLink queryWeChatCustomerLinkByUserName(String userName); + + /** + * 根据unionId查询关联实体 + * + * @param unionId 微信联合登录id + */ + WeChatCustomerLink queryWeChatCustomerLinkByUnionId(String unionId); + + + /** + * 解绑账号 + * + * @param customerId 用户id + * @param unionId 联合登录id,redis缓存使用 + * @return 1:成功 + */ + int unbindWeChatCustomerLink(long customerId, String unionId); + + + /** + * 更新微信用户关联 + * + * @param weChatCustomerLink 微信用户关联实体 + * @return 1成功 否则失败 + */ + int updateWeChatCustomerLink(WeChatCustomerLink weChatCustomerLink); + + /** + * 更新微信用户关联 + * + * @param segchkUserWechat 微信用户关联实体 + * @param userLevel + * @return 1成功 否则失败 + */ + int addSegchkUserWechat(SegchkUserWechat segchkUserWechat, String userLevel); + + int addSegchkUserWechat(SegchkUserWechat segchkUserWechat, String userLevel, String token); + + public SegchkUserWechat getSegchkUserWechat(Claims claims, String token); +} + diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/BindNewEmailServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/BindNewEmailServiceImpl.java new file mode 100644 index 0000000..e69de29 diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/LoginServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..41dd100 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/LoginServiceImpl.java @@ -0,0 +1,223 @@ +package com.ruoyi.member.service.impl; + + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.member.service.LoginService; +import com.ruoyi.member.service.RegisterService; +import com.ruoyi.segchk.domain.SegchkUserWebReq; +import com.ruoyi.segchk.domain.SegchkUserWebResp; +import com.ruoyi.segchk.domain.SegchkUserWechat; +import com.ruoyi.segchk.service.ISegchkProviderIndexService; +import com.ruoyi.segchk.service.ISegchkStoreIndexService; +import com.ruoyi.segchk.service.ISegchkUserIndexService; +import com.ruoyi.util.CommonConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; + +/** + * Created by 魔金商城 on 17/7/17. + * 登录服务接口 + */ +@Service("loginService") +public class LoginServiceImpl implements LoginService { + + /** + * 请求时间戳过期时间5分钟 + */ + private static final int REQUEST_TIME_OUT = 1000 * 60 * 5; + /** + * 注入会员服务接口 + */ +// @Autowired +// private IUmsMemberService customerService; + /** + * 注册接口 + */ + @Autowired + private RegisterService registerService; + + @Autowired + private ISegchkUserIndexService segchkUserIndexService; + + @Autowired + private ISegchkStoreIndexService segchkStoreIndexService; + + @Autowired + private ISegchkProviderIndexService segchkProviderIndexService; + /** + * 注入redis服务 + */ + @Autowired + private RedisCache redisService; + + /** + * jwt密钥 + */ + @Value("${token.secret}") + private String jwtSecretKey; +// @Autowired +// private ITStoreInfoService storeInfoService; + /** + * 密码工具类 + */ + @Autowired + private PasswordEncoder passwordEncoder; + @Value("${auth.salt:wsfmall}") + private String salt; + +// @Override + /*public AjaxResult login(LoginParams loginParams) { + log.debug("login and loginParams:{}", loginParams); + + if (Objects.isNull(loginParams)) { + log.info("login fail due to loginParams is null...."); + return AjaxResult.error(-6,"loginParams is null"); + } + + // 验证验证码 + if (!loginParams.validateCode()) { + log.info("login fail due to validateCode fail...."); + return AjaxResult.error(-6,"validateCode fail"); + } + + + // 根据用户名查询出用户信息 + UmsMember customer = customerService.queryCustomerByName(loginParams.getMobile()); + + log.debug("login member:{}", customer); + + // 用户不存在直接返回失败 + if (Objects.isNull(customer)) { + log.info("login fail due to member is not exist...."); + return AjaxResult.error(-4,"member is not exist"); + } + + // 登录次数 + int errorCount = customer.getLoginErrorCount(); + + // 判断用户账号是否正常 + if (!"1".equals(customer.getStatus())) { + log.info("login fail due to member status is error ...."); + return AjaxResult.error(-2,"账号冻结"); + } + + //判断用户的账号是否被锁定 + if (Objects.nonNull(customer.getLockTime())) { + if (LocalDateTime.now().isBefore(customer.getLockTime().plus(30, ChronoUnit.MINUTES))) { + // 账户被锁定或禁用 + log.info("login fail due to member is locked ...."); + return AjaxResult.error(-3,"账号锁定"); + } else { + // 30分钟后解锁用户 + customerService.unlockUser(customer.getId()); + errorCount = 0; + } + } +// -1 用户名或密码错误 -2 账号冻结 -3 账号锁定 1 成功 -4 验证码错误 + + // 判断用户密码是否正确 + if (!passwordEncoder.matches(loginParams.getPassword(), customer.getPassword())) { + log.info("login fail due to password is wrong...."); + + //增加登录失败的次数 + customerService.updateLoginErrorCount(customer.getId()); + + // 如果登录失败次数>= 6次 则锁定帐户 30分钟内不能登录 + if (errorCount + 1 >= 6) { + customerService.lockUser(customer.getId()); + return null; + } else { + return AjaxResult.error(-1,"用户名或密码错误"); + } + } + // 清除密码 + customer.clearPassword(); + + // 更新登录时间 + customerService.updateLoginTime(customer.getId()); + + //清除登录错误次数 + customerService.unlockUser(customer.getId()); + Map res = new HashMap<>(); + final StringBuilder sb = new StringBuilder(); + sb.append(Jwts.builder().setSubject(customer.getUsername()) + .compressWith(CompressionCodecs.DEFLATE) + .signWith(SignatureAlgorithm.HS256, jwtSecretKey) + .setIssuedAt(new Date()) + .claim("userName", customer.getUsername()) + .claim("nickName", customer.getNickname()) + .claim("releName", customer.getRelename()) + .claim("id", customer.getId()) + .setExpiration(Date.from(Instant.now().plus(1, ChronoUnit.HOURS))) // 有效期1小时 + .compact()); + if (customer != null) { + AppletLoginRedisParamResponse appletLoginRedisParamResponse = new AppletLoginRedisParamResponse(); + appletLoginRedisParamResponse.setCustomerId(customer.getId()); + appletLoginRedisParamResponse.setToken(sb.toString()); + redisService.putToRedis(sb.toString(), JSON.toJSONString(appletLoginRedisParamResponse),1, TimeUnit.DAYS); + redisService.putToRedis(loginParams.getMobile(), sb.toString()); + res.put("access_token", sb.toString()); + res.put("refresh_token", sb.toString()); + res.put("member", customer); + } + + log.debug("ok...login success....."); + + return AjaxResult.success(res); + }*/ + + + /** + * segchk前端登录 (app,pc,mobile) + * + * @param segchkUserWebReq 登入参数 + * @return 返回码 -1 用户名或密码错误 -2 账号冻结 -3 账号锁定 1 成功 -4 验证码错误 + */ + @Override + public AjaxResult login(SegchkUserWebReq segchkUserWebReq) { + AjaxResult ajaxResult = null; + SegchkUserWebResp segchkUserWebResp = null; + switch (segchkUserWebReq.getUserLevel()){ + case 0: { + segchkUserWebResp = segchkProviderIndexService.selectSegchkProviderWebInfo(segchkUserWebReq); + segchkUserWebResp.setUserLevel(0); + segchkUserWebResp.setUserId(segchkUserWebReq.getProviderId()); + break; + } + case 1: { + segchkUserWebResp = segchkStoreIndexService.selectSegchkStoreWebInfo(segchkUserWebReq); + segchkUserWebResp.setUserLevel(1); + break; + } + case 2: { + segchkUserWebResp = segchkUserIndexService.selectSegchkUserWebInfo(segchkUserWebReq); + segchkUserWebResp.setUserLevel(2); + break; + } + default: return AjaxResult.error("301", "用户身份异常"); + } + try { + segchkUserWebResp.setUserName(URLDecoder.decode(segchkUserWebResp.getUserName(), "utf-8")); + } catch (UnsupportedEncodingException e) { + + e.printStackTrace(); + } + ajaxResult = AjaxResult.success(segchkUserWebResp); + + return ajaxResult; + } + + private SegchkUserWechat getSegchkUserWechat(String token) { + StringBuilder sb = new StringBuilder(CommonConstant.APPLET_BIND_OPENID).append("-").append(token); + Object segchkUserWechat = redisService.getCacheObject(sb.toString()); + + return ObjectUtils.isEmpty(segchkUserWechat) ? null : (SegchkUserWechat) segchkUserWechat; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/RegisterServiceApiImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/RegisterServiceApiImpl.java new file mode 100644 index 0000000..f45ac19 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/RegisterServiceApiImpl.java @@ -0,0 +1,238 @@ +package com.ruoyi.member.service.impl; + + +//import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.SnowflakeIdWorker; +import com.ruoyi.member.service.RegisterService; +import com.ruoyi.member.service.RegisterServiceApi; +import com.ruoyi.segchk.domain.SegchkUserBasicInfo; +import com.ruoyi.segchk.domain.SegchkUserExtInfo; +import com.ruoyi.segchk.domain.SegchkUserLevelInfo; +import com.ruoyi.segchk.service.*; +import com.ruoyi.util.Claims; +import com.ruoyi.util.CommonConstant; +import io.jsonwebtoken.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * 注册服务聚合接口实现 + */ +@Service +public class RegisterServiceApiImpl implements RegisterServiceApi { + + + /** + * 日志 + */ + private Logger logger = LoggerFactory.getLogger(RegisterServiceApiImpl.class); + + + /** + * jwt密钥 + */ + @Value("${token.secret}") + private String jwtSecretKey; + + + // 登录超时时长,单位天,-1永久有效 + @Value("${yzytest.login.loginexpire:#{1}}") + private Integer loginexpire; + + /** + * 注入注册服务 + */ + @Autowired + private RegisterService registerService; + + @Autowired + private ISegchkUserIndexService segchkUserIndexService; + + @Autowired + private ISegchkStoreIndexService segchkStoreIndexService; + + @Autowired + private ISegchkProviderIndexService segchkProviderIndexService; + + /** + * 注入redis服务 + */ + @Autowired + private RedisCache redisService; + + @Autowired + private SnowflakeIdWorker snowflakeIdWorker; + + /** + * 用户注册 + * + * @param mobile 手机号码 + * @param code 用户输入的手机验证码 + * @param originCode 生成的手机验证码 + * @param recommondId 推荐吗 + * @param recommondLevel 推荐角色 + * @param providerId + * @param remark + * @return -1 手机验证码错误 -2 参数错误 0 失败 成功>0 -3 手机号码已存在 -10 推荐人不存在 + */ + @Override + @Transactional + public AjaxResult registerCustomer(String mobile, String code, String originCode, String recommondId, String recommondLevel, String providerId, String remark) { + + if(StringUtils.isEmpty(code)){ + logger.error("registerCustomer fail due to code is empty..."); + return AjaxResult.error(500, "验证码为空!"); + } + + if(StringUtils.isEmpty(mobile)){ + logger.error("registerCustomer fail due to mobile is empty..."); + return AjaxResult.error(500, "手机号码为空!"); + } + + if(StringUtils.isEmpty(providerId)){ + logger.error("registerCustomer fail due to providerId is empty..."); + return AjaxResult.error(500, "无法获取您的注册区域!"); + } + + // 校验验证码是否正确TODO + if (!code.equals(originCode)) { + logger.error("registerCustomer fail due to code is error with originCode..."); + return AjaxResult.error(500, "验证码错误!"); + } + + SegchkUserLevelInfo segchkUserLevelInfo = segchkUserIndexService.selectUserLevelByMobile(mobile); + SegchkUserExtInfo segchkUserExtInfo = null; + + if(ObjectUtils.isEmpty(segchkUserLevelInfo)){ + logger.debug("registerCustomer prov {} mobile: {{}} is a new user with recommender:{}---{}", providerId, mobile, recommondId, recommondLevel); + segchkUserLevelInfo = new SegchkUserLevelInfo(); +// 如果用户信息空,则添加新的用户 +// 添加新用户信息 + SegchkUserBasicInfo segchkUserBasicInfo = new SegchkUserBasicInfo(); + segchkUserBasicInfo.setPhoneNo(mobile); + segchkUserBasicInfo.setCardTypeId(-1L); + segchkUserBasicInfo.setHasWechat("0"); + segchkUserBasicInfo.setProviderId(Long.valueOf(providerId)); + segchkUserBasicInfo.setUserIcon(""); + int ret = segchkUserIndexService.addUserBasicInfo(segchkUserBasicInfo); + if(ret != 1){ + logger.error("registerCustomer fail due to register is wrong..."); + return AjaxResult.error(500, "注册异常,请联系客服!"); + } + + if(!StringUtils.isEmpty(recommondId) && !StringUtils.isEmpty(recommondLevel)){ +// 如果推荐人,推荐人角色都非空。要检查推荐人是否存在。否则推荐人设置为运营商 + + Map parmMap = new HashMap<>(); + parmMap.put("recommondId", recommondId); + parmMap.put("recommondLevel", recommondLevel); + parmMap.put("providerId", providerId); + ret = segchkUserIndexService.recommenderIsExit(parmMap); + + switch (ret){ + case 0:{ +// 推荐人不存在,归属平台推荐,注册到某一运营商即可 + logger.warn("registerCustomer recommender is not exit!!! will be register with platform on provider({})", providerId); + break; + } + case 1: { + logger.debug("registerCustomer recommender is exit!!!"); + segchkUserExtInfo = new SegchkUserExtInfo(); + segchkUserExtInfo.setProviderId(Long.valueOf(providerId)); + segchkUserExtInfo.setRecommendersLevel(recommondLevel); + segchkUserExtInfo.setUserRecommenders(Long.valueOf(recommondId)); + segchkUserExtInfo.setUserId(segchkUserBasicInfo.getUserId()); + int xxx = segchkUserIndexService.insertUserExtInfo(segchkUserExtInfo); + if(xxx < 1){ + logger.error("registerCustomer fail due to recommender binding is wrong..."); +// return AjaxResult.error(500, "推荐人绑定异常,请联系客服!"); + } + break; + } + case 2: { + logger.warn("registerCustomer user is different from recommender, will be register with platform on provider({})", providerId); + break; + } + } + } + + segchkUserLevelInfo.setProviderId(Long.valueOf(providerId)); + segchkUserLevelInfo.setUserId(segchkUserBasicInfo.getUserId()); + segchkUserLevelInfo.setUserLevel(2L); + } +// 如果是已经注册的用户。则直接返回用户信息 + + String openId = segchkUserIndexService.getWeChatInfoByUserId(segchkUserLevelInfo); + if("999999".equals(remark)){ + openId = code; + } + if(openId == null){ +// 说明用户之前没有绑定微信 + segchkUserLevelInfo.setToken(null); + } + else { + String token = createToken(CommonConstant.APPLET_LOGIN_KEY, segchkUserLevelInfo.getUserId(), segchkUserLevelInfo.getProviderId(), segchkUserLevelInfo.getUserLevel().intValue()); + segchkUserLevelInfo.setToken(token); + Claims claims = new Claims(); + claims.setUserId(segchkUserLevelInfo.getUserId()); + claims.setOpenId(openId); + claims.setProviderId(segchkUserLevelInfo.getProviderId()); + claims.setUserLevel(segchkUserLevelInfo.getUserLevel().intValue()); +// 将用户的token进行缓存 + if(loginexpire == -1) { + redisService.setCacheObject(token, claims); + } + else { + redisService.setCacheObject(token, claims, loginexpire, TimeUnit.DAYS); + } + } + logger.debug("registerCustomer res: ---{}---{}", segchkUserLevelInfo.toString(), (ObjectUtils.isEmpty(segchkUserExtInfo) ? null : segchkUserExtInfo.toString())); + return AjaxResult.success("注册成功", segchkUserLevelInfo); + } + + @Override + public String createToke(String subject, Long userId, Long providerId, Integer userLevel) { + String token = createToken(subject, userId, providerId, userLevel); + return token; + } + +// @Override +// @Transactional +// public int registerCustomer(String mobile, String password, String code, String originCode, String recommondCode) { +// logger.debug("registerCustomer and mobile :{} \r\n code:{} \r\n: originCode{} \r\n recommondCode:{}", mobile, code, originCode, recommondCode); +// if() +//// 根据手机号查询是否存在用户。可能是用户,商家,运营商。 +// segchkUserIndexService.getUserLoginInfo(); +// return res; +// } + + private String createToken(String subject, Long userId, Long providerId, int userLevel){ + final StringBuilder sb = new StringBuilder(); + sb.append(Jwts.builder().setSubject(subject) + .compressWith(CompressionCodecs.DEFLATE) + .signWith(SignatureAlgorithm.HS256, jwtSecretKey) + .setIssuedAt(new Date()) + .claim("userId", userId) + .claim("providerId", providerId) + .claim("userLevel", userLevel) + .setExpiration(Date.from(Instant.now().plus(1, ChronoUnit.HOURS))) // 有效期1小时 + .compact()); +// sb.append(CommonConstant.APPLET_LOGIN_KEY).append("_").append(snowflakeIdWorker.nextId()).append(jwtSecretKey); + return sb.toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/RegisterServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/RegisterServiceImpl.java new file mode 100644 index 0000000..c2930f5 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/RegisterServiceImpl.java @@ -0,0 +1,221 @@ +package com.ruoyi.member.service.impl; + + +import com.ruoyi.member.service.RegisterService; +import com.ruoyi.member.service.SmsService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Objects; +import java.util.function.Consumer; + +/** + * Created by 魔金商城 on 17/11/18. + * 注册接口 + */ +@Service +public class RegisterServiceImpl implements RegisterService { + + /** + * 调试日志 + */ + private Logger logger = LoggerFactory.getLogger(RegisterServiceImpl.class); + + + /** + * 注入短信接口 + */ + @Autowired + private SmsService smsService; + + + /** + * 短信测试标志,true/false + */ + @Value("${yzytest.login.smstest}") + private Boolean smstest; + + /** + * 注入会员服务接口 + */ +// @Autowired +// private IUmsMemberService customerService; + + + @Override + public int sendRegisterSmsCode(String mobile, Consumer consumer) { + + logger.debug("sendRegisterSmsCode and mobile:{}"); + // 如果要注册的手机号码存在 则直接返回 + /*if (customerService.isMobileExist(mobile) != 0) { + logger.error("sendRegisterSmsCode fail due to mobile :{} is exist...", mobile); + return -1; + }*/ + + // 生成的6位数数字 + String code = String.format("%06d", (int) (Math.random() * 1000000)); + + + if(true){ + code = "1234"; + } + else if (smsService.sendSms(mobile, code) == 1) { + // 短信验证码发送失败 + logger.error("send sms fail...."); + return 1; + } + // 发送成功后回调 + if (Objects.nonNull(consumer)) { + consumer.accept(code); + } + + return 0; + } + + /** + * 发送注册短信验证码 + * + * @param mobile 手机号码 + * @param consumer 回调接口 + * @return 0 成功 1 失败 -1 手机号码已经存在 + */ + @Override + public int sendRegisterSmsCodeFortest(String mobile, Consumer consumer) { + logger.debug("sendRegisterSmsCodeFortest and mobile:{}"); + // 如果要注册的手机号码存在 则直接返回 + /*if (customerService.isMobileExist(mobile) != 0) { + logger.error("sendRegisterSmsCode fail due to mobile :{} is exist...", mobile); + return -1; + }*/ + + // 生成的6位数数字 + String code = String.format("%06d", (int) (Math.random() * 1000000)); + + logger.warn("sendRegisterSmsCodeFortest smstest: {}", smstest); + if(smstest){ + code = "1234"; + } + else if (smsService.sendSms(mobile, code) == 1) { + // 短信验证码发送失败 + logger.error("send sms fail...."); + return 1; + } + // 发送成功后回调 + if (Objects.nonNull(consumer)) { + consumer.accept(code); + } + + return 0; + } + + @Override + public int sendRegisterSmsCodeForPc(String mobile, String kaptcha, String oldKaptcha, Consumer consumer) { + + logger.debug("sendRegisterSmsCode and mobile:{}"); + + + // 如果要注册的手机号码存在 则直接返回 + /*if (customerService.isMobileExist(mobile) != 0) { + logger.error("sendRegisterSmsCode fail due to mobile :{} is exist...", mobile); + return -4; + }*/ + + int checkKaptchaRes = checkKaptcha(kaptcha, oldKaptcha); + if (checkKaptchaRes != 1) { + logger.error("sendRegisterSmsCode fail due to kaptcha is error..."); + return checkKaptchaRes; + } + + // 生成的6位数数字 + String code = String.format("%06d", (int) (Math.random() * 1000000)); + + // 短信验证码发送失败 + if (smsService.sendSms(mobile, code) == 1) { + logger.error("send sms fail...."); + return 1; + } + + // 发送成功后回调 + if (Objects.nonNull(consumer)) { + consumer.accept(code); + } + + return 0; + } + + @Override + public int registerCustomer(String mobile, String password, String code, String originCode, String recommondCode) { + logger.debug("registerCustomer and mobile :{} \r\n code:{} \r\n: originCode:{} \r\n recommondCode:{}", mobile, code, originCode, recommondCode); + + if (StringUtils.isEmpty(code)) { + logger.error("registerCustomer fail due to code is empty..."); + return -1; + } + + if (StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)) { + logger.error("registerCustomer fail due to mobile or password is empty..."); + return -2; + } + + // 判断手机号码是否存在 + /*if (customerService.isMobileExist(mobile) != 0) { + logger.error("registerCustomer fail due to mobile is exist"); + return -3; + }*/ + + // 校验验证码是否正确TODO + if (!code.equals(originCode)) { + logger.error("registerCustomer fail due to code is error with originCode..."); + return -1; + } + + // 进行会员注册 +// return customerService.(UmsMember.buildAppRegisterCustomer(mobile, password, recommondCode)); + return 1; + } + + /** + * 免密用户自动注册 + * + * @param phoneNo 手机号码 + * @param channelType 渠道类型 + * @return -1 手机验证码错误 -2 参数错误 0 失败 成功>0 -3 手机号码已存在 -10 推荐人不存在 + */ + @Override + public Long unAuthRegister(String phoneNo, String channelType) { + logger.debug("registerCustomer and mobile :{}", phoneNo); + + // 判断手机号码是否存在 + /*if (customerService.isMobileExist(phoneNo) != 0) { + logger.error("registerCustomer fail due to mobile is exist"); + return -3L; + }*/ +// UmsMember customer = UmsMember.buildH5RegisterCustomer(phoneNo, null); +// customer.setChannelType(channelType); + // 进行会员注册 +// return customerService.autoAddCustomer(customer); + return 1L; + } + + @Override + public int checkKaptcha(String kaptcha, String kaptchaInSession) { + logger.debug("register checkKaptcha and kaptcha:{}\r\n kaptchaInSession:{}", kaptcha, kaptchaInSession); + if (StringUtils.isEmpty(kaptchaInSession)) { + logger.error("register checkKaptcha fail:kaptchaInSession is not exist "); + return -1; + } + if (StringUtils.isEmpty(kaptcha)) { + logger.error("register checkKaptcha fail:kaptcha is not exist "); + return -2; + } + if (!kaptcha.equals(kaptchaInSession)) { + logger.error("register checkKaptcha fail:kaptchaInSession is not equal to kaptcha "); + return -3; + } + return 1; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/SendTencentSms.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/SendTencentSms.java new file mode 100644 index 0000000..9663b74 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/SendTencentSms.java @@ -0,0 +1,45 @@ +package com.ruoyi.member.service.impl; + +import com.github.qcloudsms.SmsMultiSender; +import com.github.qcloudsms.SmsResultBase; +import com.github.qcloudsms.SmsSingleSender; +import com.ruoyi.setting.domain.LsSmsSetting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Tencent Cloud Sms Sendsms + * https://cloud.tencent.com/document/product/382/38778 + */ +public class SendTencentSms { + private static final Logger log = LoggerFactory.getLogger(SendTencentSms.class); + /** + * 按模板发送短信 支持单发和群发 + * + * @param smsSet 短信配置 + */ + public static int sendMessage(LsSmsSetting smsSet, String[] params, String phones) { + + String regex = ";"; + String[] phoneNumbers = phones.split(regex); + SmsResultBase result = null; + + try { + log.debug("url:{},phones:{},templateId:{},params:{}", smsSet.getUrl(), phones, smsSet.getTemplateId(), params); + // 是否单发 + if (phoneNumbers.length == 1) { + //APPID getInterfaceUrl + SmsSingleSender ssender = new SmsSingleSender(Integer.parseInt(smsSet.getUrl()), smsSet.getKey()); + result = ssender.sendWithParam("86", phoneNumbers[0], Integer.parseInt(smsSet.getTemplateId()), params, smsSet.getSign(), "", ""); + } else { + SmsMultiSender msender = new SmsMultiSender(Integer.parseInt(smsSet.getUrl()), smsSet.getKey()); + result = msender.sendWithParam("86", phoneNumbers, Integer.parseInt(smsSet.getTemplateId()), params, smsSet.getSign(), "", ""); + } + return 0; + } catch (Exception e) { + log.error("腾讯云短信发送失败,phoneNumbers={},smsSet={}", phoneNumbers, smsSet, e); + return 1; + } + } + +} \ No newline at end of file diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/SmsServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/SmsServiceImpl.java new file mode 100644 index 0000000..5b84835 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/SmsServiceImpl.java @@ -0,0 +1,300 @@ +package com.ruoyi.member.service.impl; + + +import com.ruoyi.member.service.SmsService; +import com.ruoyi.setting.domain.LsSmsSetting; +import com.ruoyi.setting.service.ILsSmsSettingService; +import com.ruoyi.util.SmsUtil; +import com.ruoyi.util.WechatUtils; +import com.ruoyi.util.bean.RequestParam; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; + +/** + * Created by 魔金商城 on 17/11/18. + * 发送短信接口实现 + */ +@Service +public class SmsServiceImpl implements SmsService { + + /** + * 团长审批状态 + */ + private static final String STATUS = "通过"; + /** + * 调试日志 + */ + private Logger logger = LoggerFactory.getLogger(SmsServiceImpl.class); + /** + * 注入短信设置服务接口 + */ + @Autowired + private ILsSmsSettingService smsSetService; + + /** + * 短信测试标志,true/false + */ + @Value("${yzytest.login.smsplatid}") + private Integer smsplatId; + + @Override + public int sendSms(String phone, String content) { + int result = 1; + logger.debug("sendSms and phone:{} \r\n content:{}", phone, content); + + // SmsSet smsSet = smsSetService.querySmsSet().get(0); + List smsSetList = smsSetService.selectLsSmsSettingList(null); + if (Objects.isNull(smsSetList)) { + logger.error("sendSms fail due to smsSet is null..."); + return result; + } + for (LsSmsSetting smsSet : smsSetList) { + // 阿里云短信 + if (smsSet.getId() == 1 && smsSet.getStatus()) { + RequestParam requestParam = convert(phone, smsSet); + requestParam.setTemplateCode(smsSet.getTemplateId()); + requestParam.setTemplateParam("{\"code\":\"" + content + "\"}"); + result = SmsUtil.newSendSms(requestParam); + } + else if (smsSet.getId() == 2 && smsSet.getStatus()) { // 腾讯云短信 + String[] params = new String[1]; + params[0] = content; + result = SendTencentSms.sendMessage(smsSet, params, phone); + } + else if(smsSet.getId() == smsplatId.longValue() && smsSet.getStatus() && smsSet.getTemplateId().equals("KSD_SMSCODE")){ +// 快速达短信平台发送短信 + List params = new ArrayList(); + params.add(new BasicNameValuePair("Account", smsSet.getKey())); + params.add(new BasicNameValuePair("Password", smsSet.getSecret())); + params.add(new BasicNameValuePair("Mobile", phone)); + params.add(new BasicNameValuePair("Content", smsSet.getSign().replace("content", content))); + params.add(new BasicNameValuePair("Extnum", null)); + params.add(new BasicNameValuePair("Time", null)); + logger.debug("sendsms KSD with: {}", smsSet.toString()); + String smsRet = executeHttpPost(smsSet.getUrl(), params); + if(smsRet.startsWith("SUCCESS")){ + result = 0; + } + else { + logger.error("{} send sms wrong with: {}", smsSet.getTemplateId(), smsRet); + } + } + } + return result; + } + + @Override + public int sendWiteOffCodeSms(String phone, String code, String writeOffCode, String storeName) { + logger.debug("sendWiteOffCodeSms and phone:{} \r\n code:{} \r\n writeOffCode:{} \r\n storeName:{}", phone, code, writeOffCode, storeName); + + List smsSetList = smsSetService.selectLsSmsSettingList(null); + + if (Objects.isNull(smsSetList)) { + logger.error("sendWiteOffCodeSms fail due to smsSet is null..."); + return 0; + } + for (LsSmsSetting smsSet : smsSetList) { + if (smsSet.getId() == 1 && smsSet.getStatus()) { + RequestParam requestParam = convert(phone, smsSet); + requestParam.setTemplateCode(smsSet.getWriteoffTemplateId()); + requestParam.setSmsParamString("{\"code\":\"" + code + "\",\"product\":\"\",\"storename\":\"" + storeName + "\",\"writeoffcode\":\"" + writeOffCode + "\"}"); + SmsUtil.newSendSms(requestParam); + } else if (smsSet.getId() == 2 && smsSet.getStatus()) { // 腾讯云短信 + String[] params = new String[3]; + params[0] = storeName; + params[1] = code; + params[2] = writeOffCode; + SendTencentSms.sendMessage(smsSet, params, phone); + } + } + + return 0; + } + + @Override + public int sendVirtualOrderWiteOffCodeSms(String phone, String code, String writeOffCode, String storeName) { + logger.debug("sendVirtualOrderWiteOffCodeSms and phone :{} \r\n code:{} \r\n writeOffCode:{} \r\n storeName:{}", phone, code, writeOffCode, storeName); + + List smsSetList = smsSetService.selectLsSmsSettingList(null); + + if (Objects.isNull(smsSetList)) { + logger.error("sendVirtualOrderWiteOffCodeSms fail due to smsSet is null..."); + return 0; + } + for (LsSmsSetting smsSet : smsSetList) { + //阿里云短信 + if (smsSet.getId() == 1 && smsSet.getStatus()) { + RequestParam requestParam = convert(phone, smsSet); + requestParam.setTemplateCode(smsSet.getVirtualOrderTemplateId()); + requestParam.setSmsParamString("{\"code\":\"" + code + "\",\"product\":\"\",\"storename\":\"" + storeName + "\",\"writeoffcode\":\"" + writeOffCode + "\"}"); + SmsUtil.newSendSmsCommon(requestParam); + } else if (smsSet.getId() == 2 && smsSet.getStatus()) { // 腾讯云短信 + String[] params = new String[3]; + params[0] = storeName; + params[1] = code; + params[2] = writeOffCode; + SendTencentSms.sendMessage(smsSet, params, phone); + } + } + return 0; + } + + /** + * 发送社区团购审核结果通知短信 + * + * @param phone 手机号码 + * @param submittime 通过时间 + * @return 成功返回0 失败返回1 + */ + @Override + public int sendAuditTemplateOffCodeSms(String phone, String submittime) { + logger.debug("sendAuditTemplateOffCodeSms and phone :{} \r\n submittime:{}", phone, submittime); + List smsSetList = smsSetService.selectLsSmsSettingList(null); + if (Objects.isNull(smsSetList)) { + logger.error("sendAuditTemplateOffCodeSms fail due to smsSet is null..."); + return 0; + } + for (LsSmsSetting smsSet : smsSetList) { + //阿里云短信 + if (smsSet.getId() == 1 && smsSet.getStatus()) { + RequestParam requestParam = convert(phone, smsSet); + requestParam.setTemplateCode(smsSet.getAuditTemplateId()); + requestParam.setSmsParamString("{\"submittime\":\"" + submittime + "\",\"product\":\"\",\"status\":\"" + STATUS + "\"}"); + SmsUtil.newSendSmsCommon(requestParam); + } else if (smsSet.getId() == 2 && smsSet.getStatus()) { // 腾讯云短信 + String[] params = new String[1]; + params[0] = submittime; + SendTencentSms.sendMessage(smsSet, params, phone); + } + } + return 0; + } + + @Override + public int sendCommunityBuySettlementSms(String phone, String communityName, BigDecimal price) { + + logger.debug("sendCommunityBuySettlementSms and communityName :{} \r\n price:{} \r\n phone:{}", communityName, price, phone); + + List smsSetList = smsSetService.selectLsSmsSettingList(null); + + if (Objects.isNull(smsSetList)) { + logger.error("sendCommunityBuySettlementSms fail due to smsSet is null..."); + return 0; + } + for (LsSmsSetting smsSet : smsSetList) { + //阿里云短信 + if (smsSet.getId() == 1 && smsSet.getStatus()) { + RequestParam requestParam = convert(phone, smsSet); + requestParam.setTemplateCode(smsSet.getSettlementTemplateId()); + requestParam.setSmsParamString("{\"communityname\":\"" + communityName + "\",\"product\":\"\",\"price\":\"" + price + "\"}"); + SmsUtil.newSendSmsCommon(requestParam); + } else if (smsSet.getId() == 2 && smsSet.getStatus()) { // 腾讯云短信 + String[] params = new String[2]; + params[0] = communityName; + params[1] = String.valueOf(price); + SendTencentSms.sendMessage(smsSet, params, phone); + } + } + return 0; + } + + @Override + public int sendCommunityBuyWitudrawSms(String phone, String submittime, BigDecimal price) { + + + logger.debug("sendCommunityBuyWitudrawSms and phone :{} \r\n submittime:{} \r\n price:{}", phone, submittime, price); + + List smsSetList = smsSetService.selectLsSmsSettingList(null); + + if (Objects.isNull(smsSetList)) { + logger.error("sendCommunityBuyWitudrawSms fail due to smsSet is null..."); + return 0; + } + for (LsSmsSetting smsSet : smsSetList) { + //阿里云短信 + if (smsSet.getId() == 1 && smsSet.getStatus()) { + RequestParam requestParam = convert(phone, smsSet); + requestParam.setTemplateCode(smsSet.getWithdrawTemplateId()); + requestParam.setSmsParamString("{\"submittime\":\"" + submittime + "\",\"product\":\"\",\"price\":\"" + price + "\"}"); + SmsUtil.newSendSmsCommon(requestParam); + } else if (smsSet.getId() == 2 && smsSet.getStatus()) { // 腾讯云短信 + String[] params = new String[2]; + params[0] = submittime; + params[1] = price.toString(); + SendTencentSms.sendMessage(smsSet, params, phone); + } + } + return 0; + } + + private RequestParam convert(String phone, LsSmsSetting smsSet) { + RequestParam requestParam = new RequestParam(); + requestParam.setPhoneNumbers(phone); + requestParam.setSignName(smsSet.getSign()); + requestParam.setInterfaceUrl(smsSet.getUrl()); + requestParam.setAccessKeyId(smsSet.getKey()); + requestParam.setAccessKeySecret(smsSet.getSecret()); + return requestParam; + } + + /** + * 执行POST方法请求数据 + * + * @param url 请求地址 + * @param params 请求参数 + * @return 返回数据 + */ + private String executeHttpPost(String url, List params) { + logger.debug("executeHttpPost and url:{}", url); + String result = null; + BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager( + RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(), + null, + null, + null + ); + + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(connManager) + .build(); + HttpPost httpRequest = new HttpPost(url); + + try { + httpRequest.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); + httpRequest.setHeader("Content-type", "application/x-www-form-urlencoded"); + //使用DefaultHttpClient类的execute方法发送HTTP GET请求,并返回HttpResponse对象。 + HttpResponse httpResponse = httpClient.execute(httpRequest);//其中HttpGet是HttpUriRequst的子类 + HttpEntity httpEntity = httpResponse.getEntity(); + result = EntityUtils.toString(httpEntity, "UTF-8");//取出应答字符串 + + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/WeChatAppletLoginServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/WeChatAppletLoginServiceImpl.java new file mode 100644 index 0000000..a04561e --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/WeChatAppletLoginServiceImpl.java @@ -0,0 +1,179 @@ +package com.ruoyi.member.service.impl; + +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SnowflakeIdWorker; +import com.ruoyi.segchk.domain.WeChatCustomerLink; +import com.ruoyi.util.*; +import com.ruoyi.member.service.WeChatAppletLoginService; +import com.ruoyi.member.service.WeChatCustomerLinkService; +import com.ruoyi.member.vo.AppletLoginInfo; +import com.ruoyi.member.vo.AppletLoginRedisParamResponse; +import com.ruoyi.setting.bean.WechatPaySet; +import com.ruoyi.setting.service.ILsPaySettingService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.util.Objects; +import java.util.function.Consumer; + +/** + * 微信小程序登录服务实现类 + * + * @author SK + * @since 2018/6/13 + */ +@Service +public class WeChatAppletLoginServiceImpl implements WeChatAppletLoginService { + /** + * 日志 + */ + private Logger log = LoggerFactory.getLogger(WeChatAppletLoginServiceImpl.class); + /** + * 注入微信用户关联服务 + */ + @Autowired + private WeChatCustomerLinkService weChatCustomerLinkService; + + /** + * 注入随机数生成器 + */ + @Autowired + private SnowflakeIdWorker snowflakeIdWorker; + + /** + * 注入支付设置服务 + */ + @Autowired + private ILsPaySettingService paySetService; + + + @Override + public AppletLoginInfo getLoginInfo(String code, String unionId, Consumer claimsConsumer) { + log.debug("getLoginInfo and code:{} \r\n unionId:{}", code, unionId); + AppletLoginRedisParamResponse appletLoginRedisParamResponse = new AppletLoginRedisParamResponse(); + String token = snowflakeIdWorker.nextId() + ""; + appletLoginRedisParamResponse.setToken(token); + WechatPaySet wechatAppletPaySet = paySetService.queryPaySet().getWechatAppletPaySet(); + WechatSetting wechatSetting = new WechatSetting(); + wechatSetting.setAppId(wechatAppletPaySet.getAppId()); + wechatSetting.setAppSecret(wechatAppletPaySet.getAppSecret()); + if (!wechatSetting.checkAppletOAuthParams()) { + log.error("getLoginInfo fail:checkAppletOAuthParams fail"); + return buildNotLinked(claimsConsumer, appletLoginRedisParamResponse, token, null); + } + WeChatAppletLoginResponse weChatAppletLoginResponse = WeChatAppletUtils.getLoginInfo(code, wechatSetting); + if (Objects.isNull(weChatAppletLoginResponse)) { + log.error("getLoginInfo fail: getLoginInfo fail"); + return buildNotLinked(claimsConsumer, appletLoginRedisParamResponse, token, null); + } + appletLoginRedisParamResponse.setSessionKey(weChatAppletLoginResponse.getSession_key()); + appletLoginRedisParamResponse.setOpenId(weChatAppletLoginResponse.getOpenid()); + if (!weChatAppletLoginResponse.hasUnionId()) { + weChatAppletLoginResponse.setUnionid(unionId); + } + if (!weChatAppletLoginResponse.hasUnionId()) { + log.info("getLoginInfo: no unionId"); + return buildNotLinked(claimsConsumer, appletLoginRedisParamResponse, token, null); + } + appletLoginRedisParamResponse.setUnionId(weChatAppletLoginResponse.getUnionid()); + WeChatCustomerLink weChatCustomerLink = weChatCustomerLinkService.queryWeChatCustomerLinkByUnionId(weChatAppletLoginResponse.getUnionid()); + if (Objects.isNull(weChatCustomerLink)) { + log.info("getLoginInfo: not linked"); + return buildNotLinked(claimsConsumer, appletLoginRedisParamResponse, token, weChatAppletLoginResponse.getUnionid()); + } + log.info("getLoginInfo: linked"); + //如果没有小程序的openId,则更新关联信息 + if (!weChatCustomerLink.hasAppletOpenId()) { + weChatCustomerLink.setAppletOpenId(weChatAppletLoginResponse.getOpenid()); + weChatCustomerLinkService.updateWeChatCustomerLink(weChatCustomerLink); + } + appletLoginRedisParamResponse.setCustomerId(weChatCustomerLink.getUserId()); + claimsConsumer.accept(appletLoginRedisParamResponse); + return AppletLoginInfo.buildLinked(token); + } + + + @Override + public AppletLoginInfo dealUserInfo(WeChatAppletUserInfo weChatAppletUserInfo, String openId, String sessionKey, Consumer claimsConsumer) { + log.debug("dealUserInfo and weChatAppletUserInfo:{} \r\n sessionKey:{} \r\n openId:{}", weChatAppletUserInfo, sessionKey, openId); + String unionId = WeChatAppletUtils.getUnionIdFromUserInfo(sessionKey, weChatAppletUserInfo); + if (StringUtils.isEmpty(unionId)) { + log.error("dealUserInfo fail : getUnionIdFromUserInfo fail"); + claimsConsumer.accept(null); + return AppletLoginInfo.buildNotLinked(); + } + AppletLoginRedisParamResponse appletLoginRedisParamResponse = new AppletLoginRedisParamResponse(); + appletLoginRedisParamResponse.setUnionId(unionId); + WeChatCustomerLink weChatCustomerLink = weChatCustomerLinkService.queryWeChatCustomerLinkByUnionId(unionId); + if (Objects.isNull(weChatCustomerLink)) { + log.info("dealUserInfo: not linked"); + claimsConsumer.accept(appletLoginRedisParamResponse); + return AppletLoginInfo.buildNotLinked().addUnionId(unionId); + } + log.info("dealUserInfo: linked"); + //如果没有小程序的openId,则更新关联信息 + if (!weChatCustomerLink.hasAppletOpenId()) { + weChatCustomerLink.setAppletOpenId(openId); + weChatCustomerLinkService.updateWeChatCustomerLink(weChatCustomerLink); + } + appletLoginRedisParamResponse.setCustomerId(weChatCustomerLink.getUserId()); + claimsConsumer.accept(appletLoginRedisParamResponse); + return AppletLoginInfo.buildLinked(); + } + + @Override + public int checkCustomerBind(String userName) { + log.debug("checkCustomerBind and userName:{} ", userName); + WeChatCustomerLink weChatCustomerLink = weChatCustomerLinkService.queryWeChatCustomerLinkByUserName(userName); + if (!ObjectUtils.isEmpty(weChatCustomerLink) && !StringUtils.isEmpty(weChatCustomerLink.getAppletOpenId())) { + log.error("checkCustomerBind fail : bind already"); + return -9; + } + return 1; + } + + @Override + public int bindAccount(String openId, String unionId, long customerId) { + log.debug("bindAccount and openId:{} \r\n unionId:{} \r\n customerId:{}", openId, unionId, customerId); + WeChatCustomerLink weChatCustomerLink = weChatCustomerLinkService.queryWeChatCustomerLinkByCustomerId(customerId); + if (!ObjectUtils.isEmpty(weChatCustomerLink) && !weChatCustomerLink.getUnionId().equals(unionId)) { + log.error("checkCustomerBind fail : bind already"); + throw new ServiceException("R-00004"); + } + if (Objects.isNull(weChatCustomerLink)) { + weChatCustomerLink = new WeChatCustomerLink(); + } + weChatCustomerLink.setUnionId(unionId); + weChatCustomerLink.setAppletOpenId(openId); + weChatCustomerLink.setUserId(customerId); + //如果数据库中有记录就更新记录 + if (-1 != weChatCustomerLink.getUserId()) { + return weChatCustomerLinkService.updateWeChatCustomerLink(weChatCustomerLink); + } + //否则新增 + return weChatCustomerLinkService.addWeChatCustomerLink(weChatCustomerLink); + } + + @Override + public int unbindAccount(long customerId, String unionId) { + log.debug("unbindAccount and customerId:{} \r\n unionId:{}", customerId, unionId); + return weChatCustomerLinkService.unbindWeChatCustomerLink(customerId, unionId); + } + + /** + * 构建未关联返回 + * + * @param claimsConsumer 回调 + * @param appletLoginRedisParamResponse 小程序redis参数返回实体类 + * @param token token + * @return 小程序登录信息 + */ + private AppletLoginInfo buildNotLinked(Consumer claimsConsumer, AppletLoginRedisParamResponse appletLoginRedisParamResponse, String token, String unionId) { + claimsConsumer.accept(appletLoginRedisParamResponse); + return AppletLoginInfo.buildNotLinked(token).addUnionId(unionId); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/WeChatCustomerLinkServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/WeChatCustomerLinkServiceImpl.java new file mode 100644 index 0000000..3699eda --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/service/impl/WeChatCustomerLinkServiceImpl.java @@ -0,0 +1,138 @@ +package com.ruoyi.member.service.impl; + + +import com.ruoyi.segchk.domain.SegchkUserWechat; +import com.ruoyi.segchk.service.ISegchkUserIndexService; +import com.ruoyi.segchk.domain.WeChatCustomerLink; +import com.ruoyi.member.mapper.WeChatCustomerLinkMapper; +import com.ruoyi.member.service.WeChatCustomerLinkService; +import com.ruoyi.common.utils.RedisCahceKey; +import com.ruoyi.util.Claims; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.CachePut; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +/** + * 微信用户关联服务实现类 + */ +@Service +public class WeChatCustomerLinkServiceImpl implements WeChatCustomerLinkService { + + /** + * 日志 + */ + private Logger logger = LoggerFactory.getLogger(WeChatCustomerLinkServiceImpl.class); + /** + * 注入微信用户数据库服务 + */ + @Autowired + private WeChatCustomerLinkMapper weChatCustomerLinkMapper; + /** + * 用户数据库服务 + */ + @Autowired + private ISegchkUserIndexService segchkUserIndexService; + + + /** + * 注入用户服务 + */ +// @Autowired +// private IUmsMemberService customerService; + + + @CacheEvict(value = RedisCahceKey.WE_CHAT_CUSTOMER_LINK, key = "'WE_CHAT_CUSTOMER_LINK'+#weChatCustomerLink.unionId") + @Override + public int addWeChatCustomerLink(WeChatCustomerLink weChatCustomerLink) { + logger.debug("addWeChatCustomerLink and weChatCustomerLink:{}", weChatCustomerLink); + return weChatCustomerLinkMapper.addWeChatCustomerLink(weChatCustomerLink); + } + + @Override + public WeChatCustomerLink queryWeChatCustomerLinkByOpenId(String openId) { + logger.debug("queryWeChatCustomerLinkByOpenId and openId:{}", openId); + return weChatCustomerLinkMapper.queryWeChatCustomerLinkByOpenId(openId); + } + + @Override + public WeChatCustomerLink queryWeChatCustomerLinkByCustomerId(long customerId) { + logger.debug("queryWeChatCustomerLinkByCustomerId and customerId:{}", customerId); + return weChatCustomerLinkMapper.queryWeChatCustomerLinkByCustomerId(customerId); + } + + @Override + public WeChatCustomerLink queryWeChatCustomerLinkByUserName(String userName) { + logger.debug("queryWeChatCustomerLinkByUserName and userName:{}", userName); +// UmsMember customer = null; +// UmsMember customer = customerService.queryCustomerByNameInWriteDataSource(userName); + /*if (ObjectUtils.isEmpty(customer)) { + logger.error("queryWeChatCustomerLinkByUserName fail: member is null"); + return null; + }*/ + return null; +// return weChatCustomerLinkMapper.queryWeChatCustomerLinkByCustomerId(customer.getCustomerLevelId()); + } + + @Cacheable(value = RedisCahceKey.WE_CHAT_CUSTOMER_LINK, key = "'WE_CHAT_CUSTOMER_LINK'+#unionId") + @Override + public WeChatCustomerLink queryWeChatCustomerLinkByUnionId(String unionId) { + logger.debug("queryWeChatCustomerLinkByUnionId and unionId:{}", unionId); + return weChatCustomerLinkMapper.queryWeChatCustomerLinkByUnionId(unionId); + } + + @CacheEvict(value = RedisCahceKey.WE_CHAT_CUSTOMER_LINK, key = "'WE_CHAT_CUSTOMER_LINK'+#unionId") + @Override + public int unbindWeChatCustomerLink(long customerId, String unionId) { + logger.debug("unbindWeChatCustomerLink and customerId:{} \r\n unionId:{}", customerId, unionId); + return weChatCustomerLinkMapper.deleteWeChatCustomerLink(customerId); + } + + @CacheEvict(value = RedisCahceKey.WE_CHAT_CUSTOMER_LINK, key = "'WE_CHAT_CUSTOMER_LINK'+#weChatCustomerLink.unionId") + @Override + public int updateWeChatCustomerLink(WeChatCustomerLink weChatCustomerLink) { + logger.debug("updateWeChatCustomerLink andweChatCustomerLink:{}", weChatCustomerLink); + return weChatCustomerLinkMapper.updateWeChatCustomerLink(weChatCustomerLink); + } + + /** + * 更新微信用户关联 + * + * @param segchkUserWechat 微信用户关联实体 + * @param userLevel + * @return 1成功 否则失败 + */ + @Override + public int addSegchkUserWechat(SegchkUserWechat segchkUserWechat, String userLevel) { + return segchkUserIndexService.updateWeChatInfoByUserId(segchkUserWechat, userLevel); + } + + /** + * 更新微信用户关联 + * + * @param segchkUserWechat 微信用户关联实体 + * @param userLevel + * @return 1成功 否则失败 + */ + @CacheEvict(value = RedisCahceKey.WE_CHAT_CUSTOMER_LINK, key = "'WE_CHAT_CUSTOMER_LINK'+#token") + @Override + public int addSegchkUserWechat(SegchkUserWechat segchkUserWechat, String userLevel, String token) { + return segchkUserIndexService.updateWeChatInfoByUserId(segchkUserWechat, userLevel); + } + + /** + * 获取微信用户关联 + * + * @param claims 微信用户关联实体 + * @param token + * @return 1成功 否则失败 + */ + @Cacheable(value = RedisCahceKey.WE_CHAT_CUSTOMER_LINK, key = "'WE_CHAT_CUSTOMER_LINK'+#token") + @Override + public SegchkUserWechat getSegchkUserWechat(Claims claims, String token) { + return segchkUserIndexService.queryWeChatInfoByUserId(claims); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/AppletLoginInfo.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/AppletLoginInfo.java new file mode 100644 index 0000000..f1d795a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/AppletLoginInfo.java @@ -0,0 +1,129 @@ +package com.ruoyi.member.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.StringUtils; + +/** + * 小程序登录信息 + * + * @author SK + * @since 2018/6/13 + */ +@ApiModel(description = "小程序登录信息") +public class AppletLoginInfo { + + /** + * token + */ + @ApiModelProperty(value = "token") + private String token; + + /** + * 是否关联用户 + */ + @ApiModelProperty(value = "是否关联用户") + private boolean isLink; + + /** + * 是否有unionId + */ + @ApiModelProperty(value = "是否有unionId") + private boolean hasUnionId; + + + /** + * 构建已关联用户实体 + * + * @param token token + * @return 小程序登录信息实体 + */ + public static AppletLoginInfo buildLinked(String token) { + AppletLoginInfo appletLoginInfo = new AppletLoginInfo(); + appletLoginInfo.isLink = true; + appletLoginInfo.token = token; + appletLoginInfo.hasUnionId = true; + return appletLoginInfo; + } + + /** + * 构建为关联用户实体 + * + * @param token token + * @return 小程序登录信息实体 + */ + public static AppletLoginInfo buildNotLinked(String token) { + AppletLoginInfo appletLoginInfo = new AppletLoginInfo(); + appletLoginInfo.isLink = false; + appletLoginInfo.token = token; + return appletLoginInfo; + } + + + /** + * 构建已关联用户实体 + * + * @return 小程序登录信息实体 + */ + public static AppletLoginInfo buildLinked() { + AppletLoginInfo appletLoginInfo = new AppletLoginInfo(); + appletLoginInfo.isLink = true; + appletLoginInfo.hasUnionId = true; + return appletLoginInfo; + } + + /** + * 构建为关联用户实体 + * + * @return 小程序登录信息实体 + */ + public static AppletLoginInfo buildNotLinked() { + AppletLoginInfo appletLoginInfo = new AppletLoginInfo(); + appletLoginInfo.isLink = false; + return appletLoginInfo; + } + + /** + * 添加unionId + * + * @param unionId 联合登录id + * @return 当前实体 + */ + public AppletLoginInfo addUnionId(String unionId) { + hasUnionId = !StringUtils.isEmpty(unionId); + return this; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public boolean isLink() { + return isLink; + } + + public void setLink(boolean link) { + isLink = link; + } + + public boolean isHasUnionId() { + return hasUnionId; + } + + public void setHasUnionId(boolean hasUnionId) { + this.hasUnionId = hasUnionId; + } + + @Override + public String toString() { + return "AppletLoginInfo{" + + "token='" + token + '\'' + + ", isLink=" + isLink + + ", hasUnionId=" + hasUnionId + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/AppletLoginRedisParamResponse.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/AppletLoginRedisParamResponse.java new file mode 100644 index 0000000..98f5ac5 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/AppletLoginRedisParamResponse.java @@ -0,0 +1,96 @@ +package com.ruoyi.member.vo; + +import org.springframework.util.StringUtils; + +/** + * 小程序redis参数返回实体类 + * + * @author SK + * @since 2018/6/13 + */ +public class AppletLoginRedisParamResponse { + + /** + * 小程序sessionKey + */ + private String sessionKey; + + /** + * token + */ + private String token; + + /** + * 联合登录id + */ + private String unionId; + + /** + * 用户id + */ + private long customerId = -1; + + /** + * 微信用户标识 + */ + private String openId; + + private String code; + + /** + * 判断是否有unionId + * + * @return 有返回true, 否则返回false + */ + public boolean hasUnionId() { + return !StringUtils.isEmpty(unionId); + } + + public String getSessionKey() { + return sessionKey; + } + + public void setSessionKey(String sessionKey) { + this.sessionKey = sessionKey; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getUnionId() { + return unionId; + } + + public void setUnionId(String unionId) { + this.unionId = unionId; + } + + public long getCustomerId() { + return customerId; + } + + public void setCustomerId(long customerId) { + this.customerId = customerId; + } + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/BindNewEmailRequest.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/BindNewEmailRequest.java new file mode 100644 index 0000000..430348b --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/BindNewEmailRequest.java @@ -0,0 +1,133 @@ +package com.ruoyi.member.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.StringUtils; + +/** + * 绑定新邮箱实体 + */ +@ApiModel(description = "绑定新邮箱实体") +public class BindNewEmailRequest { + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id") + private long customerId; + + /** + * 用户手机 + */ + @ApiModelProperty(value = "用户手机") + private String mobile; + + /** + * 新邮箱 + */ + @ApiModelProperty(value = "新邮箱") + private String email; + + /** + * 是否有凭证 + */ + @ApiModelProperty(value = "是否有凭证") + private String hasCert; + + /** + * 校验码 + */ + @ApiModelProperty(value = "校验码") + private String checkCode; + + /** + * 用户输入的图片验证码 + */ + @ApiModelProperty(value = "用户输入的图片验证码") + private String kaptcha; + + /** + * 存在redis中的图片验证码 + */ + @ApiModelProperty(value = "存在redis中的图片验证码") + private String oldKaptcha; + + /** + * 随机数 + */ + @ApiModelProperty(value = "随机数") + private String uuid; + + /** + * 判断是否有凭证 + * + * @return 有返回true + */ + public boolean hasOwnCert() { + return !StringUtils.isEmpty(this.hasCert); + } + + public long getCustomerId() { + return customerId; + } + + public void setCustomerId(long customerId) { + this.customerId = customerId; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getHasCert() { + return hasCert; + } + + public void setHasCert(String hasCert) { + this.hasCert = hasCert; + } + + public String getCheckCode() { + return checkCode; + } + + public void setCheckCode(String checkCode) { + this.checkCode = checkCode; + } + + public String getKaptcha() { + return kaptcha; + } + + public void setKaptcha(String kaptcha) { + this.kaptcha = kaptcha; + } + + public String getOldKaptcha() { + return oldKaptcha; + } + + public void setOldKaptcha(String oldKaptcha) { + this.oldKaptcha = oldKaptcha; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/BindNewMobileRequest.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/BindNewMobileRequest.java new file mode 100644 index 0000000..7d4e57f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/BindNewMobileRequest.java @@ -0,0 +1,105 @@ +package com.ruoyi.member.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.StringUtils; + +/** + * Created by 魔金商城 on 17/11/21. + * 重新绑定手机号码实体 + */ +@ApiModel(description = "重新绑定手机号码实体") +public class BindNewMobileRequest { + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id") + private long customerId; + + /** + * 重新绑定的手机号码 + */ + @ApiModelProperty(value = "重新绑定的手机号码") + private String mobile; + + /** + * 用户输入的验证码 + */ + @ApiModelProperty(value = "用户输入的验证码") + private String code; + + /** + * 发送给手机的验证码 + */ + @ApiModelProperty(value = "发送给手机的验证码") + private String originCode; + + /** + * 是否有凭证 + */ + @ApiModelProperty(value = "是否有凭证") + private String hasCert; + + /** + * 判断是否有凭证 + * + * @return 有返回true + */ + public boolean hasOwnCert() { + return !StringUtils.isEmpty(this.hasCert); + } + + /** + * 判断验证码是否正确 + * + * @return 正确返回0 + */ + public boolean validateCode() { + if (StringUtils.isEmpty(this.code)) { + return false; + } + + return this.code.equals(this.originCode); + } + + public long getCustomerId() { + return customerId; + } + + public void setCustomerId(long customerId) { + this.customerId = customerId; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getOriginCode() { + return originCode; + } + + public void setOriginCode(String originCode) { + this.originCode = originCode; + } + + public String getHasCert() { + return hasCert; + } + + public void setHasCert(String hasCert) { + this.hasCert = hasCert; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/BindParams.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/BindParams.java new file mode 100644 index 0000000..a5ec429 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/BindParams.java @@ -0,0 +1,139 @@ +package com.ruoyi.member.vo; + +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.function.Consumer; + + +/** + * 登入参数实体 + */ +@ApiModel(description = "登入参数实体") +public class BindParams extends BaseEntity { + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id") + private String userId; + + /** + * 运营商id + */ + @ApiModelProperty(value = "运营商id") + private String providerId; + + /** + * 用户角色 + */ + @ApiModelProperty(value = "用户角色") + private String userLevel; + + + /** + * 授权code + */ + @ApiModelProperty(value = "授权code") + private String code; + + /** + * 昵称 + */ + @ApiModelProperty(value = "昵称") + private String nickName; + + /** + * 头像 + */ + @ApiModelProperty(value = "头像") + private String avatar; + + /** + * getUserProfile返回 + */ + @ApiModelProperty(value = "getUserProfile返回") + private String profileRes; + + + /** + * 验证验证码 是否正确 (目前都不需要验证码) + * + * @return 正确返回true 否则返回false + */ + public boolean validateCode() { + + // 目前都不需要验证码 + return true; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getProviderId() { + return providerId; + } + + public void setProviderId(String providerId) { + this.providerId = providerId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getUserLevel() { + return userLevel; + } + + public void setUserLevel(String userLevel) { + this.userLevel = userLevel; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getProfileRes() { + return profileRes; + } + + public void setProfileRes(String profileRes) { + this.profileRes = profileRes; + } + + @Override + public String toString() { + return "BindParams{" + + "userId='" + userId + '\'' + + ", providerId='" + providerId + '\'' + + ", userLevel='" + userLevel + '\'' + + ", code='" + code + '\'' + + ", nickName='" + nickName + '\'' + + ", avatar='" + avatar + '\'' + + ", profileRes='" + profileRes + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/CustomerSearchCondition.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/CustomerSearchCondition.java new file mode 100644 index 0000000..b862df8 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/CustomerSearchCondition.java @@ -0,0 +1,178 @@ +package com.ruoyi.member.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by 魔金商城 on 17/5/19. + * 会员搜索条件 + */ +@ApiModel(description = "会员搜索条件") +public class CustomerSearchCondition { + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名") + private String userName; + + /** + * 用户的真实姓名 + */ + @ApiModelProperty(value = "用户的真实姓名") + private String releName; + + + /** + * 手机号码 + */ + @ApiModelProperty(value = "手机号码") + private String mobile; + + /** + * 邮箱 + */ + @ApiModelProperty(value = "邮箱") + private String email; + + /** + * 手机是否验证 0 否 1 验证 默认0 + */ + @ApiModelProperty(value = "手机是否验证 0 否 1 验证 默认0") + private String isMobileVerification; + + /** + * 邮箱是否验证 0 否 1 验证 默认0 + */ + @ApiModelProperty(value = "邮箱是否验证 0 否 1 验证 默认0") + private String isEmailVerification; + + /** + * 用户状态 1 正常 2 冻结 默认1 + */ + @ApiModelProperty(value = "用户状态 1 正常 2 冻结 默认1") + private String status; + + + /** + * 1 普通用户 2 商家店铺用户 + */ + @ApiModelProperty(value = "1 普通用户 2 商家店铺用户") + private String type; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private String createTime; + + /** + * 归属门店id + */ + @ApiModelProperty(value = "归属门店id") + private long beloneStoreId; + + + /** + * 获得搜索条件 + * + * @return 返回搜索套件 + */ + public Map getSearchParams() { + Map params = new HashMap<>(); + params.put("userName", userName); + params.put("releName", releName); + params.put("mobile", mobile); + params.put("email", email); + params.put("isMobileVerification", isMobileVerification); + params.put("isEmailVerification", isEmailVerification); + params.put("status", status); + params.put("type", type); + params.put("createTime", createTime); + params.put("beloneStoreId", beloneStoreId); + return params; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getReleName() { + return releName; + } + + public void setReleName(String releName) { + this.releName = releName; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getIsMobileVerification() { + return isMobileVerification; + } + + public void setIsMobileVerification(String isMobileVerification) { + this.isMobileVerification = isMobileVerification; + } + + public String getIsEmailVerification() { + return isEmailVerification; + } + + public void setIsEmailVerification(String isEmailVerification) { + this.isEmailVerification = isEmailVerification; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public long getBeloneStoreId() { + return beloneStoreId; + } + + public void setBeloneStoreId(long beloneStoreId) { + this.beloneStoreId = beloneStoreId; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/ForgetPwdRequest.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/ForgetPwdRequest.java new file mode 100644 index 0000000..2be9550 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/ForgetPwdRequest.java @@ -0,0 +1,174 @@ +package com.ruoyi.member.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.StringUtils; + +/** + * Created by 魔金商城 on 17/11/22. + * 忘记密码请求 + */ +@ApiModel(description = "忘记密码请求") +public class ForgetPwdRequest { + + /** + * 手机号码 + */ + @ApiModelProperty(value = "手机号码") + private String mobile; + + /** + * 验证码 + */ + @ApiModelProperty(value = "验证码") + private String code; + + /** + * 发送给手机的验证码 + */ + @ApiModelProperty(value = "发送给手机的验证码") + private String originCode; + + /** + * 凭证 + */ + @ApiModelProperty(value = "凭证") + private String certificate; + + /** + * 密码 + */ + @ApiModelProperty(value = "密码") + private String password; + + /** + * 随机数 + */ + @ApiModelProperty(value = "随机数") + private String uuid; + + /** + * 请求来自 1:pc + */ + @ApiModelProperty(value = "请求来自 1:pc") + private String requestFrom; + + /** + * 用户输入的图片验证码 + */ + @ApiModelProperty(value = "用户输入的图片验证码") + private String kaptcha; + + /** + * 存在redis中的图片验证码 + */ + @ApiModelProperty(value = "存在redis中的图片验证码") + private String oldKaptcha; + + /** + * 随机数(pc端图片验证码用) + */ + @ApiModelProperty(value = "随机数(pc端图片验证码用)") + private String uuidForPcKaptcha; + + /** + * 是否有凭证 + * + * @return 有返回true + */ + public boolean hasCertificate() { + return !StringUtils.isEmpty(certificate); + } + + /** + * 判断验证码是否正确 + * + * @return 正确返回true + */ + public boolean validateCode() { + if (StringUtils.isEmpty(this.code)) { + return false; + } + return this.code.equals(this.originCode); + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getOriginCode() { + return originCode; + } + + public void setOriginCode(String originCode) { + this.originCode = originCode; + } + + public String getCertificate() { + return certificate; + } + + public void setCertificate(String certificate) { + this.certificate = certificate; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getRequestFrom() { + return requestFrom; + } + + public void setRequestFrom(String requestFrom) { + this.requestFrom = requestFrom; + } + + public String getKaptcha() { + return kaptcha; + } + + public void setKaptcha(String kaptcha) { + this.kaptcha = kaptcha; + } + + public String getOldKaptcha() { + return oldKaptcha; + } + + public void setOldKaptcha(String oldKaptcha) { + this.oldKaptcha = oldKaptcha; + } + + public String getUuidForPcKaptcha() { + return uuidForPcKaptcha; + } + + public void setUuidForPcKaptcha(String uuidForPcKaptcha) { + this.uuidForPcKaptcha = uuidForPcKaptcha; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/LoginParams.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/LoginParams.java new file mode 100644 index 0000000..48a9065 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/LoginParams.java @@ -0,0 +1,113 @@ +package com.ruoyi.member.vo; + +import com.ruoyi.segchk.domain.SegchkUserBasicInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.function.Consumer; + + +/** + * 登入参数实体 + */ +@ApiModel(description = "登入参数实体") +public class LoginParams { + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名") + private String mobile; + + /** + * 密码 + */ + @ApiModelProperty(value = "密码") + private String password; + + /** + * 回调函数 + */ + @ApiModelProperty(value = "回调函数") + private Consumer consumer; + + /** + * 用户输入的验证码 + */ + @ApiModelProperty(value = "用户输入的验证码") + private String code; + + /** + * session中的验证码 + */ + @ApiModelProperty(value = "session中的验证码") + private String codeInSession; + + /** + * 登录来源 0 pc 1 app 2 mobile + */ + private int source; + + public void setFromApp() { + this.source = 1; + } + + /** + * 验证验证码 是否正确 (目前都不需要验证码) + * + * @return 正确返回true 否则返回false + */ + public boolean validateCode() { + + // 目前都不需要验证码 + return true; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Consumer getConsumer() { + return consumer; + } + + public void setConsumer(Consumer consumer) { + this.consumer = consumer; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getCodeInSession() { + return codeInSession; + } + + public void setCodeInSession(String codeInSession) { + this.codeInSession = codeInSession; + } + + public int getSource() { + return source; + } + + public void setSource(int source) { + this.source = source; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/QueryCriteria.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/QueryCriteria.java new file mode 100644 index 0000000..370e0d7 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/QueryCriteria.java @@ -0,0 +1,125 @@ +package com.ruoyi.member.vo; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.HashMap; +import java.util.Map; + +/** + * 会员预存款查询条件 + */ +@ApiModel(description = "会员预存款查询条件") +public class QueryCriteria { + + /** + * 会员id + */ + @ApiModelProperty(value = "会员id") + private long customerId; + + private int pageNum =0; + /** + * 会员名称 + */ + @ApiModelProperty(value = "会员名称") + private String userName; + + /** + * 交易单号 + */ + @ApiModelProperty(value = "交易单号") + private String transCode; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private String startTime; + + /** + * 结束时间 + */ + @ApiModelProperty(value = "结束时间") + private String endTime; + + /** + * 查询类型 1全部 2 收入 3支出 默认全部 + */ + @ApiModelProperty(value = "查询类型 1全部 2 收入 3支出 默认全部") + private String filterType = "1"; + + /** + * 获得查询条件 + * + * @return 返回查询条件 + */ + public Map getQueryMap() { + Map params = new HashMap<>(); + params.put("customerId", customerId); + params.put("userName", userName); + params.put("transCode", transCode); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("filterType", filterType); + params.put("pageNum", pageNum); + return params; + } + + public long getCustomerId() { + return customerId; + } + + public void setCustomerId(long customerId) { + this.customerId = customerId; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getTransCode() { + return transCode; + } + + public void setTransCode(String transCode) { + this.transCode = transCode; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public String getFilterType() { + return filterType; + } + + public void setFilterType(String filterType) { + this.filterType = filterType; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/UnAuthLoginParams.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/UnAuthLoginParams.java new file mode 100644 index 0000000..3eadbdc --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/UnAuthLoginParams.java @@ -0,0 +1,79 @@ +package com.ruoyi.member.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.function.Consumer; + +/** + * 免密登入参数实体 + */ +@ApiModel(description = "免密登入参数实体") +public class UnAuthLoginParams { + + /** + * 手机号 + */ + @ApiModelProperty(value = "手机号") + private String phoneNo; + /** + * 时间戳 + */ + @ApiModelProperty(value = "时间戳") + private Long timeStamp; + /** + * 请求签名 + */ + @ApiModelProperty(value = "请求签名") + private String sign; + + /** + * 渠道类型 + */ + @ApiModelProperty(value = "渠道类型") + private String channelType; + /** + * 回调函数 + */ + private Consumer consumer; + + public String getPhoneNo() { + return phoneNo; + } + + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + + public Long getTimeStamp() { + return timeStamp; + } + + public void setTimeStamp(Long timeStamp) { + this.timeStamp = timeStamp; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getChannelType() { + return channelType; + } + + public void setChannelType(String channelType) { + this.channelType = channelType; + } + + public Consumer getConsumer() { + return consumer; + } + + public void setConsumer(Consumer consumer) { + this.consumer = consumer; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/UpdatePayPwdBean.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/UpdatePayPwdBean.java new file mode 100644 index 0000000..a995915 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/UpdatePayPwdBean.java @@ -0,0 +1,173 @@ +package com.ruoyi.member.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.StringUtils; + +/** + * Created by 魔金商城 on 17/11/20. + * 修改支付密码实体 + */ +@ApiModel(description = "修改支付密码实体") +public class UpdatePayPwdBean { + + /** + * 会员id + */ + @ApiModelProperty(value = "会员id") + private long customerId; + + /** + * 用户输入的手机验证码 + */ + @ApiModelProperty(value = "用户输入的手机验证码") + private String code; + + /** + * 存起来的手机验证码 + */ + @ApiModelProperty(value = "存起来的手机验证码") + private String originCode; + + /** + * 密码 + */ + @ApiModelProperty(value = "密码") + private String password; + + /** + * 手机号码 + */ + @ApiModelProperty(value = "手机号码") + private String mobile; + + + /** + * 凭证 + */ + @ApiModelProperty(value = "凭证") + private String certificate; + + /** + * 请求来自 1:pc + */ + @ApiModelProperty(value = "请求来自 1:pc") + private String requestFrom; + + /** + * 用户输入的图片验证码 + */ + @ApiModelProperty(value = "用户输入的图片验证码") + private String kaptcha; + + /** + * 存在redis中的图片验证码 + */ + @ApiModelProperty(value = "存在redis中的图片验证码") + private String oldKaptcha; + + /** + * 随机数 + */ + @ApiModelProperty(value = "随机数") + private String uuid; + + + /** + * 是否有凭证 + * + * @return 有返回true + */ + public boolean hasCertificate() { + return !StringUtils.isEmpty(certificate); + } + + /** + * 校验用户输入的验证码是否正确 + * + * @return 正确返回true + */ + public boolean validateCode() { + return StringUtils.isEmpty(this.code) ? false : this.code.equals(this.originCode); + } + + public long getCustomerId() { + return customerId; + } + + public void setCustomerId(long customerId) { + this.customerId = customerId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getOriginCode() { + return originCode; + } + + public void setOriginCode(String originCode) { + this.originCode = originCode; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getCertificate() { + return certificate; + } + + public void setCertificate(String certificate) { + this.certificate = certificate; + } + + public String getRequestFrom() { + return requestFrom; + } + + public void setRequestFrom(String requestFrom) { + this.requestFrom = requestFrom; + } + + public String getKaptcha() { + return kaptcha; + } + + public void setKaptcha(String kaptcha) { + this.kaptcha = kaptcha; + } + + public String getOldKaptcha() { + return oldKaptcha; + } + + public void setOldKaptcha(String oldKaptcha) { + this.oldKaptcha = oldKaptcha; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/UpdatePwdBean.java b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/UpdatePwdBean.java new file mode 100644 index 0000000..1d71b98 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/member/vo/UpdatePwdBean.java @@ -0,0 +1,172 @@ +package com.ruoyi.member.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.StringUtils; + +/** + * Created by 魔金商城 on 17/11/20. + * 修改密码实体 + */ +@ApiModel(description = "修改密码实体") +public class UpdatePwdBean { + + /** + * 会员id + */ + @ApiModelProperty(value = "会员id") + private long customerId; + + /** + * 用户输入的手机验证码 + */ + @ApiModelProperty(value = "用户输入的手机验证码") + private String code; + + /** + * 存起来的手机验证码 + */ + @ApiModelProperty(value = "存起来的手机验证码") + private String originCode; + + /** + * 密码 + */ + @ApiModelProperty(value = "密码") + private String password; + + /** + * 手机号码 + */ + @ApiModelProperty(value = "手机号码") + private String mobile; + + /** + * 凭证 + */ + @ApiModelProperty(value = "凭证") + private String certificate; + + /** + * 请求来自 1:pc + */ + @ApiModelProperty(value = "请求来自 1:pc") + private String requestFrom; + + /** + * 用户输入的图片验证码 + */ + @ApiModelProperty(value = "用户输入的图片验证码") + private String kaptcha; + + /** + * 存在redis中的图片验证码 + */ + @ApiModelProperty(value = "存在redis中的图片验证码") + private String oldKaptcha; + + /** + * 随机数 + */ + @ApiModelProperty(value = "随机数") + private String uuid; + + + /** + * 是否有凭证 + * + * @return 有返回true + */ + public boolean hasCertificate() { + return !StringUtils.isEmpty(certificate); + } + + /** + * 校验用户输入的验证码是否正确 + * + * @return 正确返回true + */ + public boolean validateCode() { + return StringUtils.isEmpty(this.code) ? false : this.code.equals(this.originCode); + } + + public long getCustomerId() { + return customerId; + } + + public void setCustomerId(long customerId) { + this.customerId = customerId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getOriginCode() { + return originCode; + } + + public void setOriginCode(String originCode) { + this.originCode = originCode; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getCertificate() { + return certificate; + } + + public void setCertificate(String certificate) { + this.certificate = certificate; + } + + public String getRequestFrom() { + return requestFrom; + } + + public void setRequestFrom(String requestFrom) { + this.requestFrom = requestFrom; + } + + public String getKaptcha() { + return kaptcha; + } + + public void setKaptcha(String kaptcha) { + this.kaptcha = kaptcha; + } + + public String getOldKaptcha() { + return oldKaptcha; + } + + public void setOldKaptcha(String oldKaptcha) { + this.oldKaptcha = oldKaptcha; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/order/service/impl/PaySupplier.java b/ruoyi-segchk/src/main/java/com/ruoyi/order/service/impl/PaySupplier.java new file mode 100644 index 0000000..f29d612 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/order/service/impl/PaySupplier.java @@ -0,0 +1,16 @@ +package com.ruoyi.order.service.impl; + +/** + * Created by 魔金商城 on 17/12/22. + * 支付接口 + */ +@FunctionalInterface +public interface PaySupplier { + + /** + * 获得支付返回的参数结果 + * + * @return 返回支付参数结果 + */ + D getPayParams(T t, U u); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/order/vo/OrderItem.java b/ruoyi-segchk/src/main/java/com/ruoyi/order/vo/OrderItem.java new file mode 100644 index 0000000..4ea62d4 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/order/vo/OrderItem.java @@ -0,0 +1,9 @@ +package com.ruoyi.order.vo; + +/** + * Created by 魔金商城 on 17/11/13. + * 订单枚举 + */ +public enum OrderItem { + LOG, ATTR, SKUS, CANREFUND, CANRETRUN, EXPRESSURL, STORE_INFO, BACK_PROGRESS, CUSTOMER, COMMUNITYHEAD +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeRet.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeRet.java new file mode 100644 index 0000000..0b221a0 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeRet.java @@ -0,0 +1,47 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg充值卡管理对象 segchk_charge_card + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkChargeRet extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 充值id */ + @Excel(name = "充值id") + private Long chargeId; + + /** 卡id */ + @Excel(name = "卡id") + private Long cardId; + + public Long getChargeId() { + return chargeId; + } + + public void setChargeId(Long chargeId) { + this.chargeId = chargeId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + @Override + public String toString() { + return "SegchkChargeRet{" + + "chargeId=" + chargeId + + ", cardId=" + cardId + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeReward.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeReward.java new file mode 100644 index 0000000..fbc5a50 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkChargeReward.java @@ -0,0 +1,207 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.util.ObjectUtils; + +import java.math.BigDecimal; + +public class SegchkChargeReward extends BaseEntity { +// 会员卡类型id + private Integer cardTypeId; +// 会员卡id + private Long cardId; +// 对应用户id + private Long userId; +// 运营商id + private Long providerId; +// 充值id + private Long chargeId; +// 奖励id + private Long rewardId; +// 使用次数 + private Long useCount; +// 在目标商家核消次数 + private Long chkCount; +// 充值金额 + private BigDecimal charge; +// 余额使用额度 + private BigDecimal accountUsed; +// 推荐人id + private Long userRecommenders; +// 推荐人角色 + private Integer recommendersLevel; +// 持卡用户充值成功次数 + private Integer totalChargeCount; +// 奖励金额 + private BigDecimal reward; + + public Integer getCardTypeId() { + return cardTypeId; + } + + public void setCardTypeId(Integer cardTypeId) { + this.cardTypeId = cardTypeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public BigDecimal getCharge() { + return charge; + } + + public void setCharge(BigDecimal charge) { + this.charge = charge; + } + + public BigDecimal getAccountUsed() { + return accountUsed; + } + + public void setAccountUsed(BigDecimal accountUsed) { + this.accountUsed = accountUsed; + } + + public Long getUserRecommenders() { + return userRecommenders; + } + + public void setUserRecommenders(Long userRecommenders) { + this.userRecommenders = userRecommenders; + } + + public Integer getRecommendersLevel() { + return recommendersLevel; + } + + public void setRecommendersLevel(Integer recommendersLevel) { + this.recommendersLevel = recommendersLevel; + } + + public Integer getTotalChargeCount() { + return totalChargeCount; + } + + public void setTotalChargeCount(Integer totalChargeCount) { + this.totalChargeCount = totalChargeCount; + } + + public BigDecimal getReward() { + return reward; + } + + public void setReward(BigDecimal reward) { + this.reward = reward; + } + + public Long getChargeId() { + return chargeId; + } + + public void setChargeId(Long chargeId) { + this.chargeId = chargeId; + } + + public Long getRewardId() { + return rewardId; + } + + public void setRewardId(Long rewardId) { + this.rewardId = rewardId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Long getUseCount() { + return useCount; + } + + public void setUseCount(Long useCount) { + this.useCount = useCount; + } + + public Long getChkCount() { + return chkCount; + } + + public void setChkCount(Long chkCount) { + this.chkCount = chkCount; + } + + @Override + public String toString() { + return "SegchkChargeReward{" + + "cardTypeId=" + cardTypeId + + ", cardId=" + cardId + + ", userId=" + userId + + ", providerId=" + providerId + + ", chargeId=" + chargeId + + ", rewardId=" + rewardId + + ", useCount=" + useCount + + ", chkCount=" + chkCount + + ", charge=" + charge + + ", accountUsed=" + accountUsed + + ", userRecommenders=" + userRecommenders + + ", recommendersLevel=" + recommendersLevel + + ", totalChargeCount=" + totalChargeCount + + ", reward=" + reward + + '}'; + } + + public int validateForCheck(Long storeId){ +// 根据核消商家,判断是否可以返利 + if(ObjectUtils.isEmpty(this.getRecommendersLevel()) || this.getRecommendersLevel() == 2 || this.getRecommendersLevel() == 1){ +// 只要持卡用户推荐人不是平台。就不可以返利 + return -1; + } + else if(this.getUseCount() > 1 || this.getChkCount() > 1){ +// 该卡已发生过核消 + return -2; + } + else if(ObjectUtils.isEmpty(this.getReward())){ +// 该商家不支持该卡的核消,也不可以返利 + return -3; + } + else if(this.getReward().compareTo(new BigDecimal(0.0)) == 0){ +// 该商家不需要返利 + return -4; + } + return 0; + } + + public void mkReward() { + switch (this.getTotalChargeCount()){ + case 0: break; + case 1: { + this.setReward(this.getReward().divide(new BigDecimal("2"), 2, BigDecimal.ROUND_HALF_UP));break; + } + case 2: { + this.setReward(this.getReward().divide(new BigDecimal("3"), 2, BigDecimal.ROUND_HALF_UP));break; + } + default: { + this.setReward(new BigDecimal("0.0")); + break; + } + + } + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkMsgWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkMsgWebResp.java new file mode 100644 index 0000000..d477638 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkMsgWebResp.java @@ -0,0 +1,91 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg用户奖励对象 segchk_user_reward + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkMsgWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 消息类型,0系统消息,1交易消息,2提醒消息,3评价消息,4核消消息 */ + @Excel(name = "消息类型,0系统消息,1交易消息,2提醒消息,3评价消息,4核消消息") + private String msgType; + + /** 消息内容 */ + @Excel(name = "消息内容") + private String msgContent; + + /** 消息标题 */ + @Excel(name = "消息标题") + private String msgTitle; + + + /** 消息状态,0未发送,1,未读,2已读,3删除 */ + @Excel(name = "消息状态,0未发送,1,未读,2已读,3删除") + private String msgFlag; + + /** 接收时间 */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + @Excel(name = "接收时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") + private Date fromTime; + + public String getMsgType() { + return msgType; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public String getMsgContent() { + return msgContent; + } + + public void setMsgContent(String msgContent) { + this.msgContent = msgContent; + } + + public String getMsgTitle() { + return msgTitle; + } + + public void setMsgTitle(String msgTitle) { + this.msgTitle = msgTitle; + } + + public String getMsgFlag() { + return msgFlag; + } + + public void setMsgFlag(String msgFlag) { + this.msgFlag = msgFlag; + } + + public Date getFromTime() { + return fromTime; + } + + public void setFromTime(Date fromTime) { + this.fromTime = fromTime; + } + + @Override + public String toString() { + return "SegchkMsgWebResp{" + + "msgType='" + msgType + '\'' + + ", msgContent='" + msgContent + '\'' + + ", msgTitle='" + msgTitle + '\'' + + ", msgFlag='" + msgFlag + '\'' + + ", fromTime=" + fromTime + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java new file mode 100644 index 0000000..85d54ab --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java @@ -0,0 +1,182 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.List; + +/** + * seg返回首页推荐商户对象 segchk_recommender_storeweb + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkRecommenderStoreWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 商户显示序号 */ + @Excel(name = "商户显示序号") + private Integer storeSort; + + /** 商户列表模式时的图标 */ + @Excel(name = "商户列表模式时的图标") + private String storeIcon; + + /** 商户的大图标 */ + @Excel(name = "商户的大图标") + private String storeGificon; + + /** 商户经度 */ + @Excel(name = "商户经度") + private BigDecimal storeLon; + + /** 商户纬度 */ + @Excel(name = "商户纬度") + private BigDecimal storeLat; + + /** 商户累积核消次数 */ + @Excel(name = "商户累积核消次数") + private Integer chkCount; + + /** 商户平均星评 */ + @Excel(name = "商户平均星评") + private BigDecimal starAvg; + + /** 用户距离 */ + @Excel(name = "用户距离") + private BigDecimal userDist; + + + /** 商户标签列表 */ + @Valid + private List lables; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Integer getStoreSort() { + return storeSort; + } + + public void setStoreSort(Integer storeSort) { + this.storeSort = storeSort; + } + + public String getStoreIcon() { + return storeIcon; + } + + public void setStoreIcon(String storeIcon) { + this.storeIcon = storeIcon; + } + + public String getStoreGificon() { + return storeGificon; + } + + public void setStoreGificon(String storeGificon) { + this.storeGificon = storeGificon; + } + + public BigDecimal getStoreLon() { + return storeLon; + } + + public void setStoreLon(BigDecimal storeLon) { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLat() { + return storeLat; + } + + public void setStoreLat(BigDecimal storeLat) { + this.storeLat = storeLat; + } + + public Integer getChkCount() { + return chkCount; + } + + public void setChkCount(Integer chkCount) { + this.chkCount = chkCount; + } + + public BigDecimal getStarAvg() { + return starAvg; + } + + public void setStarAvg(BigDecimal starAvg) { + this.starAvg = starAvg; + } + + public List getLables() { + return lables; + } + + public void setLables(List lables) { + this.lables = lables; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + @Override + public String toString() { + return "SegchkRecommenderStoreWebResp{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", storeName=" + storeName + + ", storeSort=" + storeSort + + ", storeIcon='" + storeIcon + '\'' + + ", storeGificon='" + storeGificon + '\'' + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", chkCount=" + chkCount + + ", starAvg=" + starAvg + + ", lables=" + lables + + ", userDist=" + userDist + + '}'; + } + + public BigDecimal getUserDist() { + return userDist; + } + + public void setUserDist(BigDecimal userDist) { + this.userDist = userDist; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleDetailWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleDetailWebResp.java new file mode 100644 index 0000000..4cfe77a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleDetailWebResp.java @@ -0,0 +1,90 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceAndSaleDetailWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 会员卡号 */ + @Excel(name = "会员卡号") + private Long cardId; + + /** 卡类型名称 */ + @Excel(name = "卡类型名称") + private String cardName; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 统计结果 */ + @Excel(name = "统计结果") + private Long staticCount; + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public Long getStaticCount() { + return staticCount; + } + + public void setStaticCount(Long staticCount) { + this.staticCount = staticCount; + } + + @Override + public String toString() { + return "SegchkServiceAndSaleDetailWebResp{" + + "modTime=" + modTime + + ", cardId=" + cardId + + ", cardName='" + cardName + '\'' + + ", storeName='" + storeName + '\'' + + ", staticCount=" + staticCount + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebReq.java new file mode 100644 index 0000000..a1ebce6 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebReq.java @@ -0,0 +1,98 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceAndSaleWebReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商户id */ + @Excel(name = "商户id") + private Long storeId; + + /** 统计等级,0按月统计,1按月查询统计 */ + @Excel(name = "统计等级") + private Integer staticLevel; + + /** 统计月份,只在staticLevel为1时有效,0时为统计的月数 */ + @Excel(name = "统计月份") + private String staticMonth; + + /** 用户身份,0运营商,1商家 */ + @Excel(name = "用户身份") + private Integer userLevel; + + /** 数据源选择,0核消,1售卡 */ + @Excel(name = "数据源选择") + private Integer srcFlag; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Integer getStaticLevel() { + return staticLevel; + } + + public void setStaticLevel(Integer staticLevel) { + this.staticLevel = staticLevel; + } + + public String getStaticMonth() { + return staticMonth; + } + + public void setStaticMonth(String staticMonth) { + this.staticMonth = staticMonth; + } + + public Integer getUserLevel() { + return userLevel; + } + + public void setUserLevel(Integer userLevel) { + this.userLevel = userLevel; + } + + @Override + public String toString() { + return "SegchkServiceAndSaleWebReq{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", staticLevel='" + staticLevel + '\'' + + ", staticMonth='" + staticMonth + '\'' + + ", userLevel=" + userLevel + + '}'; + } + + public Integer getSrcFlag() { + return srcFlag; + } + + public void setSrcFlag(Integer srcFlag) { + this.srcFlag = srcFlag; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebResp.java new file mode 100644 index 0000000..245db7b --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebResp.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceAndSaleWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + + /** 统计月份,只在staticLevel为1时有效 */ + @Excel(name = "统计月份") + private String staticMonth; + + /** staticMonth与staticMonth同义,只是为yyyy-mm-01使用查询具备详单时使用 */ + @Excel(name = "统计月份") + private String queryMon; + + /** 统计结果 */ + @Excel(name = "统计结果") + private Long staticCount; + + public String getStaticMonth() { + return staticMonth; + } + + public void setStaticMonth(String staticMonth) { + this.staticMonth = staticMonth; + } + + public Long getStaticCount() { + return staticCount; + } + + public void setStaticCount(Long staticCount) { + this.staticCount = staticCount; + } + + public String getQueryMon() { + return queryMon; + } + + public void setQueryMon(String queryMon) { + this.queryMon = queryMon; + } + + @Override + public String toString() { + return "SegchkServiceAndSaleWebResp{" + + "staticMonth='" + staticMonth + '\'' + + ", queryMon='" + queryMon + '\'' + + ", staticCount=" + staticCount + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentUserReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentUserReq.java new file mode 100644 index 0000000..e3b70a2 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentUserReq.java @@ -0,0 +1,89 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg评价记录对象 SegchkServiceCommentUserReq + * + * @author yinzhiying + * @date 2021-07-30 + */ +public class SegchkServiceCommentUserReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 评价id */ + private Long commentId; + + /** 星级评价 */ + @Excel(name = "星级评价") + private Integer starLevel; + + /** 评价内容 */ + @Excel(name = "评价内容") + private String contentText; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 核消id,全表唯一 */ + @Excel(name = "核消id,全表唯一") + private Long chkServiceId; + + public Long getCommentId() { + return commentId; + } + + public void setCommentId(Long commentId) { + this.commentId = commentId; + } + + public Integer getStarLevel() { + return starLevel; + } + + public void setStarLevel(Integer starLevel) { + this.starLevel = starLevel; + } + + public String getContentText() { + return contentText; + } + + public void setContentText(String contentText) { + this.contentText = contentText; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public Long getChkServiceId() { + return chkServiceId; + } + + public void setChkServiceId(Long chkServiceId) { + this.chkServiceId = chkServiceId; + } + + @Override + public String toString() { + return "SegchkServiceCommentUserReq{" + + "commentId=" + commentId + + ", starLevel=" + starLevel + + ", contentText='" + contentText + '\'' + + ", modTime=" + modTime + + ", chkServiceId=" + chkServiceId + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentWebResp.java new file mode 100644 index 0000000..6efaa49 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentWebResp.java @@ -0,0 +1,116 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg评价记录对象 segchk_service_comment + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceCommentWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 星级评价 */ + @Excel(name = "星级评价") + private Integer starLevel; + + /** 评价内容 */ + @Excel(name = "评价内容") + private String contentText; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 充值卡id */ + @Excel(name = "充值卡名称") + private String cardName; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private String userName; + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Integer getStarLevel() { + return starLevel; + } + + public void setStarLevel(Integer starLevel) { + this.starLevel = starLevel; + } + + public String getContentText() { + return contentText; + } + + public void setContentText(String contentText) { + this.contentText = contentText; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + @Override + public String toString() { + return "SegchkServiceCommentWebResp{" + + "storeId=" + storeId + + ", starLevel=" + starLevel + + ", contentText='" + contentText + '\'' + + ", modTime=" + modTime + + ", providerId=" + providerId + + ", cardName='" + cardName + '\'' + + ", userName='" + userName + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkResp.java new file mode 100644 index 0000000..a33f110 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkResp.java @@ -0,0 +1,138 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceOrderChkResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id */ + @Excel(name = "运营商id") + private Long providerId; + + /** 商户id */ + @Excel(name = "商户id") + private Long storeId; + + /** 用户id */ + @Excel(name = "用户id") + private Long userId; + + /** 卡id */ + @Excel(name = "卡id") + private Long cardId; + + /** 会员卡或优惠券下的标签id */ + @Excel(name = "会员卡或优惠券下的标签id") + private Integer lableId; + + /** 卡类型 0 会员卡,1赠卡,2优惠券 */ + @Excel(name = "卡类型") + private Integer typeId; + + /** 卡名称 */ + @Excel(name = "卡名称") + private String cardName; + + /** 剩余次数 */ + @Excel(name = "卡名称") + private Integer leftCount; + + /** 是否支持 */ + @Excel(name = "是否支持") + private Integer isSupported; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Integer getLableId() { + return lableId; + } + + public void setLableId(Integer lableId) { + this.lableId = lableId; + } + + public Integer getTypeId() { + return typeId; + } + + public void setTypeId(Integer typeId) { + this.typeId = typeId; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public Integer getLeftCount() { + return leftCount; + } + + public void setLeftCount(Integer leftCount) { + this.leftCount = leftCount; + } + + public Integer getIsSupported() { + return isSupported; + } + + public void setIsSupported(Integer isSupported) { + this.isSupported = isSupported; + } + + @Override + public String toString() { + return "SegchkServiceOrderChkResp{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", userId=" + userId + + ", cardId=" + cardId + + ", lableId=" + lableId + + ", typeId=" + typeId + + ", cardName='" + cardName + '\'' + + ", leftCount=" + leftCount + + ", isSupported=" + isSupported + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java new file mode 100644 index 0000000..2f4b25f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java @@ -0,0 +1,136 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceOrderWebReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id */ + @Excel(name = "运营商id") + private Long providerId; + + /** 商户id */ + @Excel(name = "商户id") + private Long storeId; + + /** 用户id */ + @Excel(name = "用户id") + private Long userId; + + /** 卡id */ + @Excel(name = "卡id") + private Long cardId; + + /** 会员卡或优惠券下的标签id */ + @Excel(name = "会员卡或优惠券下的标签id") + private Integer lableId; + + /** 卡类型 0 会员卡,1赠卡,2优惠券 */ + @Excel(name = "卡类型") + private Integer typeId; + + /** 卡名称 */ + @Excel(name = "卡名称") + private String cardName; + + /** 用户卡片的剩余使用次数 */ + @Excel(name = "卡剩余次数") + private Integer leftCount; + + /** 该商家支持的核销次数 */ + @Excel(name = "商家支持次数") + private Integer stoerChkCount; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Integer getLableId() { + return lableId; + } + + public void setLableId(Integer lableId) { + this.lableId = lableId; + } + + public Integer getTypeId() { + return typeId; + } + + public void setTypeId(Integer typeId) { + this.typeId = typeId; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + @Override + public String toString() { + return "SegchkServiceOrderWebReq{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", userId=" + userId + + ", cardId=" + cardId + + ", lableId=" + lableId + + ", typeId=" + typeId + + ", cardName='" + cardName + '\'' + + '}'; + } + + public Integer getLeftCount() { + return leftCount; + } + + public void setLeftCount(Integer leftCount) { + this.leftCount = leftCount; + } + + public Integer getStoerChkCount() { + return stoerChkCount; + } + + public void setStoerChkCount(Integer stoerChkCount) { + this.stoerChkCount = stoerChkCount; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfoWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfoWebResp.java new file mode 100644 index 0000000..5bc83ea --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfoWebResp.java @@ -0,0 +1,325 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.List; + +/** + * seg商家详情页对象 SegchkStoreBasicInfoWebResp + * + * @author yinzhiying + * @date 2021-07-12 + */ +public class SegchkStoreBasicInfoWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 商家电话 */ + @Excel(name = "商家电话") + private String storePhone; + + /** 服务状态,0在线,1下线 */ + @Excel(name = "服务状态,0在线,1下线") + private String serviceState; + + /** 销售id */ + @Excel(name = "销售id") + private Integer salerId; + + /** 商家地址 */ + @Excel(name = "商家地址") + private String storeAddr; + + /** 商家经度 */ + @Excel(name = "商家经度") + private BigDecimal storeLon; + + /** 商家纬度 */ + @Excel(name = "商家纬度") + private BigDecimal storeLat; + + /** 商家运营时间 */ + @Excel(name = "商家运营时间") + private String onService; + + /** 商家描述详情 */ + @Excel(name = "商家描述详情") + private String detail; + + @Excel(name = "商家vr路径") + private String storeVR; + + /** 商家轮播图1路径,默认用于首页推荐轮播图 */ + @Excel(name = "商家轮播图1路径,默认用于首页推荐轮播图") + private String storeCarousel1; + + /** 商家轮播图2路径 */ + @Excel(name = "商家轮播图2路径") + private String storeCarousel2; + + /** 商家轮播图3路径 */ + @Excel(name = "商家轮播图3路径") + private String storeCarousel3; + + /** 商家轮播图4路径 */ + @Excel(name = "商家轮播图4路径") + private String storeCarousel4; + + /** 商家轮播图5路径 */ + @Excel(name = "商家轮播图5路径") + private String storeCarousel5; + + /** 商家轮播图6路径 */ + @Excel(name = "商家轮播图6路径") + private String storeCarousel6; + + /** 商户累积核消次数 */ + @Excel(name = "商户累积核消次数") + private Integer chkCount; + + /** 商户平均星评 */ + @Excel(name = "商户平均星评") + private BigDecimal starAvg; + + + /** 是否被收藏 */ + @Excel(name = "是否被收藏") + private Integer isCollect = 0; + + /** 商户标签列表 */ + @Valid + private List segchkRecommenderStoreLableWebList; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setStoreName(String storeName) + { + this.storeName = storeName; + } + + public String getStoreName() + { + return storeName; + } + public void setStorePhone(String storePhone) + { + this.storePhone = storePhone; + } + + public void setServiceState(String serviceState) + { + this.serviceState = serviceState; + } + + public String getServiceState() + { + return serviceState; + } + public void setSalerId(Integer salerId) + { + this.salerId = salerId; + } + + public Integer getSalerId() + { + return salerId; + } + + public void setStoreAddr(String storeAddr) + { + this.storeAddr = storeAddr; + } + + public String getStoreAddr() + { + return storeAddr; + } + public void setStoreLon(BigDecimal storeLon) + { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLon() + { + return storeLon; + } + public void setStoreLat(BigDecimal storeLat) + { + this.storeLat = storeLat; + } + + public BigDecimal getStoreLat() + { + return storeLat; + } + public void setOnService(String onService) + { + this.onService = onService; + } + + public String getOnService() + { + return onService; + } + public void setDetail(String detail) + { + this.detail = detail; + } + + public String getDetail() + { + return detail; + } + + public String getStorePhone() { + return storePhone; + } + + public String getStoreCarousel1() { + return storeCarousel1; + } + + public void setStoreCarousel1(String storeCarousel1) { + this.storeCarousel1 = storeCarousel1; + } + + public String getStoreCarousel2() { + return storeCarousel2; + } + + public void setStoreCarousel2(String storeCarousel2) { + this.storeCarousel2 = storeCarousel2; + } + + public String getStoreCarousel3() { + return storeCarousel3; + } + + public void setStoreCarousel3(String storeCarousel3) { + this.storeCarousel3 = storeCarousel3; + } + + public String getStoreCarousel4() { + return storeCarousel4; + } + + public void setStoreCarousel4(String storeCarousel4) { + this.storeCarousel4 = storeCarousel4; + } + + public String getStoreCarousel5() { + return storeCarousel5; + } + + public void setStoreCarousel5(String storeCarousel5) { + this.storeCarousel5 = storeCarousel5; + } + + public String getStoreCarousel6() { + return storeCarousel6; + } + + public void setStoreCarousel6(String storeCarousel6) { + this.storeCarousel6 = storeCarousel6; + } + + public List getSegchkRecommenderStoreLableWebList() { + return segchkRecommenderStoreLableWebList; + } + + public void setSegchkRecommenderStoreLableWebList(List segchkRecommenderStoreLableWebList) { + this.segchkRecommenderStoreLableWebList = segchkRecommenderStoreLableWebList; + } + + public Integer getChkCount() { + return chkCount; + } + + public void setChkCount(Integer chkCount) { + this.chkCount = chkCount; + } + + public BigDecimal getStarAvg() { + return starAvg; + } + + public void setStarAvg(BigDecimal starAvg) { + this.starAvg = starAvg; + } + + public Integer getIsCollect() { + return isCollect; + } + + public void setIsCollect(Integer isCollect) { + this.isCollect = isCollect; + } + + public String getStoreVR() { + return storeVR; + } + + public void setStoreVR(String storeVR) { + this.storeVR = storeVR; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("SegchkStoreBasicInfoWebResp{"); + sb.append("providerId=").append(providerId); + sb.append(", storeId=").append(storeId); + sb.append(", storeName='").append(storeName).append('\''); + sb.append(", storePhone='").append(storePhone).append('\''); + sb.append(", serviceState='").append(serviceState).append('\''); + sb.append(", salerId=").append(salerId); + sb.append(", storeAddr='").append(storeAddr).append('\''); + sb.append(", storeLon=").append(storeLon); + sb.append(", storeLat=").append(storeLat); + sb.append(", onService='").append(onService).append('\''); + sb.append(", detail='").append(detail).append('\''); + sb.append(", storeVR='").append(storeVR).append('\''); + sb.append(", storeCarousel1='").append(storeCarousel1).append('\''); + sb.append(", storeCarousel2='").append(storeCarousel2).append('\''); + sb.append(", storeCarousel3='").append(storeCarousel3).append('\''); + sb.append(", storeCarousel4='").append(storeCarousel4).append('\''); + sb.append(", storeCarousel5='").append(storeCarousel5).append('\''); + sb.append(", storeCarousel6='").append(storeCarousel6).append('\''); + sb.append(", chkCount=").append(chkCount); + sb.append(", starAvg=").append(starAvg); + sb.append(", isCollect=").append(isCollect); + sb.append(", segchkRecommenderStoreLableWebList=").append(segchkRecommenderStoreLableWebList); + sb.append('}'); + return sb.toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java new file mode 100644 index 0000000..8dd6873 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java @@ -0,0 +1,209 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.List; + +/** + * seg返回首页推荐商户对象 segchk_recommender_storeweb + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkStoreIndexWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 商家状态 */ + @Excel(name = "商家状态") + private String serviceState; + + /** 商户显示序号 */ + @Excel(name = "商户显示序号") + private Integer storeSort; + + /** 商户列表模式时的图标 */ + @Excel(name = "商户列表模式时的图标") + private String storeIcon; + + /** 商户的大图标 */ + @Excel(name = "商户的大图标") + private String storeGificon; + + /** 商户经度 */ + @Excel(name = "商户经度") + private BigDecimal storeLon; + + /** 商户纬度 */ + @Excel(name = "商户纬度") + private BigDecimal storeLat; + + /** 用户距离 */ + @Excel(name = "用户距离") + private BigDecimal userDist; + + /** 商户累积核消次数 */ + @Excel(name = "商户累积核消次数") + private Integer chkCount; + + /** 商户平均星评 */ + @Excel(name = "商户平均星评") + private BigDecimal starAvg; + + /** 在线状态 */ + @Excel(name = "对应的销售id") + private Integer salerId; + + + /** 商户标签列表 */ + @Valid + private List lables; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Integer getStoreSort() { + return storeSort; + } + + public void setStoreSort(Integer storeSort) { + this.storeSort = storeSort; + } + + public String getStoreIcon() { + return storeIcon; + } + + public void setStoreIcon(String storeIcon) { + this.storeIcon = storeIcon; + } + + public String getStoreGificon() { + return storeGificon; + } + + public void setStoreGificon(String storeGificon) { + this.storeGificon = storeGificon; + } + + public BigDecimal getStoreLon() { + return storeLon; + } + + public void setStoreLon(BigDecimal storeLon) { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLat() { + return storeLat; + } + + public void setStoreLat(BigDecimal storeLat) { + this.storeLat = storeLat; + } + + public Integer getChkCount() { + return chkCount; + } + + public void setChkCount(Integer chkCount) { + this.chkCount = chkCount; + } + + public BigDecimal getStarAvg() { + return starAvg; + } + + public void setStarAvg(BigDecimal starAvg) { + this.starAvg = starAvg; + } + + public List getLables() { + return lables; + } + + public void setLables(List lables) { + this.lables = lables; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + + public String getServiceState() { + return serviceState; + } + + public void setServiceState(String serviceState) { + this.serviceState = serviceState; + } + + public Integer getSalerId() { + return salerId; + } + + public void setSalerId(Integer salerId) { + this.salerId = salerId; + } + + @Override + public String toString() { + return "SegchkStoreIndexWebResp{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", storeName='" + storeName + '\'' + + ", serviceState='" + serviceState + '\'' + + ", storeSort=" + storeSort + + ", storeIcon='" + storeIcon + '\'' + + ", storeGificon='" + storeGificon + '\'' + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", chkCount=" + chkCount + + ", starAvg=" + starAvg + + ", salerId=" + salerId + + ", lables=" + lables + + ", userDist=" + userDist + + '}'; + } + + public BigDecimal getUserDist() { + return userDist; + } + + public void setUserDist(BigDecimal userDist) { + this.userDist = userDist; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreVrReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreVrReq.java new file mode 100644 index 0000000..013c95d --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreVrReq.java @@ -0,0 +1,118 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg 商家vr请求体 + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkStoreVrReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** vr标识,全局唯一 */ + private Long vrId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家ID,全局唯一 */ + @Excel(name = "商家ID,全局唯一") + private Long storeId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String vrUrl; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String thumbPath; + + /** 服务状态,0在线,1下线 */ + @Excel(name = "服务状态,0在线,1下线") + private String serviceState; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("vrId", getVrId()) + .append("providerId", getProviderId()) + .append("storeId", getStoreId()) + .append("vrUrl", getVrUrl()) + .append("thumbPath", getThumbPath()) + .append("serviceState", getServiceState()) + .append("modTime", getModTime()) + .toString(); + } + + public Long getVrId() { + return vrId; + } + + public void setVrId(Long vrId) { + this.vrId = vrId; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getVrUrl() { + return vrUrl; + } + + public void setVrUrl(String vrUrl) { + this.vrUrl = vrUrl; + } + + public String getThumbPath() { + return thumbPath; + } + + public void setThumbPath(String thumbPath) { + this.thumbPath = thumbPath; + } + + public String getServiceState() { + return serviceState; + } + + public void setServiceState(String serviceState) { + this.serviceState = serviceState; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreWebReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreWebReq.java new file mode 100644 index 0000000..5156fb3 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkStoreWebReq.java @@ -0,0 +1,179 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg返回首页推荐商户对象 segchk_recommender_storeweb + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkStoreWebReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 排序类型 */ + @Excel(name = "排序类型") + private Integer sortType; + + /** 商户id */ + @Excel(name = "商户id") + private Integer storeId; + + /** 商户名称 */ + @Excel(name = "商户名称") + private String storeName; + + /** 标签id */ + @Excel(name = "标签id") + private Integer lableId; + + /** 标签名称 */ + @Excel(name = "标签名称") + private String lableName; + + /** 标签类型id */ + @Excel(name = "标签类型id") + private Integer typeId; + + /** 充值卡id */ + @Excel(name = "充值卡id") + private Integer cardId; + + /** 充值卡名称 */ + @Excel(name = "充值卡名称") + private String cardName; + + /** 用户经度 */ + @Excel(name = "用户经度") + private BigDecimal userLon; + + /** 用户纬度 */ + @Excel(name = "用户纬度") + private BigDecimal userLat; + + /** 用户距离 */ + @Excel(name = "用户距离") + private BigDecimal userDist; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Integer getSortType() { + return sortType; + } + + public void setSortType(Integer sortType) { + this.sortType = sortType; + } + + public Integer getStoreId() { + return storeId; + } + + public void setStoreId(Integer storeId) { + this.storeId = storeId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public Integer getLableId() { + return lableId; + } + + public void setLableId(Integer lableId) { + this.lableId = lableId; + } + + public String getLableName() { + return lableName; + } + + public void setLableName(String lableName) { + this.lableName = lableName; + } + + public Integer getTypeId() { + return typeId; + } + + public void setTypeId(Integer typeId) { + this.typeId = typeId; + } + + public Integer getCardId() { + return cardId; + } + + public void setCardId(Integer cardId) { + this.cardId = cardId; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public BigDecimal getUserLon() { + return userLon; + } + + public void setUserLon(BigDecimal userLon) { + this.userLon = userLon; + } + + public BigDecimal getUserLat() { + return userLat; + } + + public void setUserLat(BigDecimal userLat) { + this.userLat = userLat; + } + + public BigDecimal getUserDist() { + return userDist; + } + + public void setUserDist(BigDecimal userDist) { + this.userDist = userDist; + } + + @Override + public String toString() { + return "SegchkStoreWebReq{" + + "providerId=" + providerId + + ", sortType=" + sortType + + ", storeId=" + storeId + + ", storeName='" + storeName + '\'' + + ", lableId=" + lableId + + ", lableName='" + lableName + '\'' + + ", typeId=" + typeId + + ", cardId=" + cardId + + ", cardName='" + cardName + '\'' + + ", userLon=" + userLon + + ", userLat=" + userLat + + ", userDist=" + userDist + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccountCheck.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccountCheck.java new file mode 100644 index 0000000..b2c4024 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccountCheck.java @@ -0,0 +1,76 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg用户余额信息对象 segchk_user_account + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserAccountCheck extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 余额 */ + @Excel(name = "余额") + private BigDecimal account; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 余额id */ + @Excel(name = "余额id") + private Long accountId; + + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public BigDecimal getAccount() { + return account; + } + + public void setAccount(BigDecimal account) { + this.account = account; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + @Override + public String toString() { + return "SegchkUserAccountCheck{" + + "userId=" + userId + + ", account=" + account + + ", providerId=" + providerId + + ", accountId=" + accountId + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsResp.java new file mode 100644 index 0000000..76f541d --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsResp.java @@ -0,0 +1,49 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg用户提现记录对象 segchk_user_cash + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserCashOpsResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 提现额 */ + @Excel(name = "提现额") + private BigDecimal account; + + /** 提现id,全表唯一 */ + @Excel(name = "提现id,全表唯一") + private Long cashId; + + public BigDecimal getAccount() { + return account; + } + + public void setAccount(BigDecimal account) { + this.account = account; + } + + public Long getCashId() { + return cashId; + } + + public void setCashId(Long cashId) { + this.cashId = cashId; + } + + @Override + public String toString() { + return "SegchkUserCashOpsResp{" + + "account=" + account + + ", cashId=" + cashId + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashWebResp.java new file mode 100644 index 0000000..2390fee --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashWebResp.java @@ -0,0 +1,66 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * seg用户奖励对象 segchk_user_reward + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserCashWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal cash; + + /** 奖励卡号 */ + @Excel(name = "奖励卡号") + private String retFlag; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") + private Date modTime; + + + public BigDecimal getCash() { + return cash; + } + + public void setCash(BigDecimal cash) { + this.cash = cash; + } + + public String getRetFlag() { + return retFlag; + } + + public void setRetFlag(String retFlag) { + this.retFlag = retFlag; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + @Override + public String toString() { + return "SegchkUserCashWebResp{" + + "cash=" + cash + + ", retFlag='" + retFlag + '\'' + + ", modTime=" + modTime + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeCard.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeCard.java new file mode 100644 index 0000000..b27b0eb --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeCard.java @@ -0,0 +1,153 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg用户充值可选卡对象 SegchkUserChargeCard + * + * @author yinzhiying + * @date 2021-07-30 + */ +public class SegchkUserChargeCard extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id */ + @Excel(name = "运营商id") + private Long providerId; + + /** 卡类型id */ + @Excel(name = "卡类型id") + private Long cardTypeId; + + /** 会员卡id */ + @Excel(name = "会员卡id") + private Long cardId; + + /** 会员卡名称 */ + @Excel(name = "会员卡名称") + private String cardTypeName; + + /** 已购买次数 */ + @Excel(name = "已购买次数") + private Integer hadBuy; + + /** 可购买次数 */ + @Excel(name = "可购买次数") + private Integer buyCount; + + /** 会员卡面值 */ + @Excel(name = "会员卡面值") + private BigDecimal cardTypeValue; + + /** 是否可以购买,0可,1有卡正在使用,2购买次数超限 */ + @Excel(name = "是否可以购买") + private Integer canBuy; + + /** 会员卡权益次数 */ + @Excel(name = "会员卡权益次数") + private Integer cardTypeChkcount; + + /** 会员卡有效天数 */ + @Excel(name = "会员卡有效天数") + private Integer effectiveTime; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getCardTypeId() { + return cardTypeId; + } + + public void setCardTypeId(Long cardTypeId) { + this.cardTypeId = cardTypeId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public String getCardTypeName() { + return cardTypeName; + } + + public void setCardTypeName(String cardTypeName) { + this.cardTypeName = cardTypeName; + } + + public Integer getHadBuy() { + return hadBuy; + } + + public void setHadBuy(Integer hadBuy) { + this.hadBuy = hadBuy; + } + + public Integer getBuyCount() { + return buyCount; + } + + public void setBuyCount(Integer buyCount) { + this.buyCount = buyCount; + } + + public BigDecimal getCardTypeValue() { + return cardTypeValue; + } + + public void setCardTypeValue(BigDecimal cardTypeValue) { + this.cardTypeValue = cardTypeValue; + } + + public Integer getCanBuy() { + return canBuy; + } + + public void setCanBuy(Integer canBuy) { + this.canBuy = canBuy; + } + + public Integer getCardTypeChkcount() { + return cardTypeChkcount; + } + + public void setCardTypeChkcount(Integer cardTypeChkcount) { + this.cardTypeChkcount = cardTypeChkcount; + } + + public Integer getEffectiveTime() { + return effectiveTime; + } + + public void setEffectiveTime(Integer effectiveTime) { + this.effectiveTime = effectiveTime; + } + + @Override + public String toString() { + return "SegchkUserChargeCard{" + + "providerId=" + providerId + + ", cardTypeId=" + cardTypeId + + ", cardId=" + cardId + + ", cardTypeName='" + cardTypeName + '\'' + + ", hadBuy=" + hadBuy + + ", buyCount=" + buyCount + + ", cardTypeValue=" + cardTypeValue + + ", canBuy=" + canBuy + + ", cardTypeChkcount=" + cardTypeChkcount + + ", effectiveTime=" + effectiveTime + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeWebResp.java new file mode 100644 index 0000000..201c238 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeWebResp.java @@ -0,0 +1,78 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * seg用户奖励对象 segchk_user_reward + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserChargeWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal charge; + + /** 奖励类型 */ + @Excel(name = "奖励类型") + private String cardName; + + /** 奖励卡号 */ + @Excel(name = "奖励卡号") + private String retFlag; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") + private Date modTime; + + public BigDecimal getCharge() { + return charge; + } + + public void setCharge(BigDecimal charge) { + this.charge = charge; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getRetFlag() { + return retFlag; + } + + public void setRetFlag(String retFlag) { + this.retFlag = retFlag; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + @Override + public String toString() { + return "SegchkUserChargeWebResp{" + + "charge=" + charge + + ", cardName='" + cardName + '\'' + + ", retFlag=" + retFlag + + ", modTime=" + modTime + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollectWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollectWebResp.java new file mode 100644 index 0000000..259ca96 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollectWebResp.java @@ -0,0 +1,185 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * seg会员卡对象 segchk_user_vip + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserCollectWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 收藏id */ + @Excel(name = "收藏id") + private Long collectId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id */ + @Excel(name = "商家id,全局惟一") + private Long storeId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 商家图标 */ + @Excel(name = "会员卡类型,0--9块9,1---99") + private String storeIcon; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long serviceState; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal storeLon; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal storeLat; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long chkCount; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal starAvg; + + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 商户标签列表 */ + @Valid + private List segchkRecommenderStoreLableWebList; + + public Long getCollectId() { + return collectId; + } + + public void setCollectId(Long collectId) { + this.collectId = collectId; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public String getStoreIcon() { + return storeIcon; + } + + public void setStoreIcon(String storeIcon) { + this.storeIcon = storeIcon; + } + + public Long getServiceState() { + return serviceState; + } + + public void setServiceState(Long serviceState) { + this.serviceState = serviceState; + } + + public BigDecimal getStoreLon() { + return storeLon; + } + + public void setStoreLon(BigDecimal storeLon) { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLat() { + return storeLat; + } + + public void setStoreLat(BigDecimal storeLat) { + this.storeLat = storeLat; + } + + public Long getChkCount() { + return chkCount; + } + + public void setChkCount(Long chkCount) { + this.chkCount = chkCount; + } + + public BigDecimal getStarAvg() { + return starAvg; + } + + public void setStarAvg(BigDecimal starAvg) { + this.starAvg = starAvg; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public List getSegchkRecommenderStoreLableWebList() { + return segchkRecommenderStoreLableWebList; + } + + public void setSegchkRecommenderStoreLableWebList(List segchkRecommenderStoreLableWebList) { + this.segchkRecommenderStoreLableWebList = segchkRecommenderStoreLableWebList; + } + + @Override + public String toString() { + return "SegchkUserCollectWebResp{" + + "collectId=" + collectId + + ", providerId=" + providerId + + ", storeId=" + storeId + + ", storeName='" + storeName + '\'' + + ", storeIcon='" + storeIcon + '\'' + + ", serviceState=" + serviceState + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", chkCount=" + chkCount + + ", starAvg=" + starAvg + + ", modTime=" + modTime + + ", segchkRecommenderStoreLableWebList=" + segchkRecommenderStoreLableWebList + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikeGoWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikeGoWebResp.java new file mode 100644 index 0000000..593df8a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikeGoWebResp.java @@ -0,0 +1,263 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * seg会员卡对象 segchk_user_vip + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserLikeGoWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 想去id */ + @Excel(name = "想去id") + private Long likegoId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id */ + @Excel(name = "商家id,全局惟一") + private Long storeId; + + /** 会员卡id */ + @Excel(name = "会员卡id,充值卡或自定义卡") + private Long cardId; + + /** 用户id */ + @Excel(name = "用户id,全局惟一") + private Long userId; + + /** 用户手机尾号 */ + @Excel(name = "用户手机尾号") + private String phoneNo; + + /** 用户昵称 */ + @Excel(name = "用户昵称") + private String nickName; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 卡名称 */ + @Excel(name = "卡名称") + private String cardName; + + /** 二维码 */ + @Excel(name = "二维码") + private String qrCode; + + /** 商家小图标 */ + @Excel(name = "商家小图标") + private String storeIcon; + + /** 商家服务状态,是否在线 */ + @Excel(name = "商家服务状态") + private Long serviceState; + + /** 商家经度 */ + @Excel(name = "商家经度") + private BigDecimal storeLon; + + /** 商家纬度 */ + @Excel(name = "商家纬度") + private BigDecimal storeLat; + + /** 商家累积核次数 */ + @Excel(name = "商家累积核次数") + private Long chkCount; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal starAvg; + + + /** 预约时间 */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + @Excel(name = "预约时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") + private Date modTime; + + /** 商户标签列表 */ + @Valid + private List segchkRecommenderStoreLableWebList; + + public Long getLikegoId() { + return likegoId; + } + + public void setLikegoId(Long likegoId) { + this.likegoId = likegoId; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getQrCode() { + return qrCode; + } + + public void setQrCode(String qrCode) { + this.qrCode = qrCode; + } + + public String getStoreIcon() { + return storeIcon; + } + + public void setStoreIcon(String storeIcon) { + this.storeIcon = storeIcon; + } + + public Long getServiceState() { + return serviceState; + } + + public void setServiceState(Long serviceState) { + this.serviceState = serviceState; + } + + public BigDecimal getStoreLon() { + return storeLon; + } + + public void setStoreLon(BigDecimal storeLon) { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLat() { + return storeLat; + } + + public void setStoreLat(BigDecimal storeLat) { + this.storeLat = storeLat; + } + + public Long getChkCount() { + return chkCount; + } + + public void setChkCount(Long chkCount) { + this.chkCount = chkCount; + } + + public BigDecimal getStarAvg() { + return starAvg; + } + + public void setStarAvg(BigDecimal starAvg) { + this.starAvg = starAvg; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public List getSegchkRecommenderStoreLableWebList() { + return segchkRecommenderStoreLableWebList; + } + + public void setSegchkRecommenderStoreLableWebList(List segchkRecommenderStoreLableWebList) { + this.segchkRecommenderStoreLableWebList = segchkRecommenderStoreLableWebList; + } + + public String getPhoneNo() { + return phoneNo; + } + + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + @Override + public String toString() { + return "SegchkUserLikeGoWebResp{" + + "likegoId=" + likegoId + + ", providerId=" + providerId + + ", storeId=" + storeId + + ", cardId=" + cardId + + ", userId=" + userId + + ", phoneNo='" + phoneNo + '\'' + + ", nickName='" + nickName + '\'' + + ", storeName='" + storeName + '\'' + + ", cardName='" + cardName + '\'' + + ", qrCode='" + qrCode + '\'' + + ", storeIcon='" + storeIcon + '\'' + + ", serviceState=" + serviceState + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", chkCount=" + chkCount + + ", starAvg=" + starAvg + + ", modTime=" + modTime + + ", segchkRecommenderStoreLableWebList=" + segchkRecommenderStoreLableWebList + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserSetInfoReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserSetInfoReq.java new file mode 100644 index 0000000..60658e6 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserSetInfoReq.java @@ -0,0 +1,104 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户修改信息对象 SegchkUserSetInfoReq + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserSetInfoReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 密码 */ + @Excel(name = "密码") + private String passwd; + + /** 密码id,全表唯一 */ + @Excel(name = "密码id,全表唯一") + private Long pwdId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 用户手机号 */ + @Excel(name = "用户手机号") + private String phoneNo; + + /** 用户等级 */ + @Excel(name = "用户等级") + private Integer userLevel; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setPasswd(String passwd) + { + this.passwd = passwd; + } + + public void setPwdId(Long pwdId) + { + this.pwdId = pwdId; + } + + public Long getPwdId() + { + return pwdId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + public String getPasswd() { + return passwd; + } + + public String getPhoneNo() { + return phoneNo; + } + + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + + public Integer getUserLevel() { + return userLevel; + } + + public void setUserLevel(Integer userLevel) { + this.userLevel = userLevel; + } + + @Override + public String toString() { + return "SegchkUserSetInfoReq{" + + "userId=" + userId + + ", passwd='" + passwd + '\'' + + ", pwdId=" + pwdId + + ", providerId=" + providerId + + ", phoneNo='" + phoneNo + '\'' + + ", userLevel=" + userLevel + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebCardResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebCardResp.java new file mode 100644 index 0000000..5c77742 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebCardResp.java @@ -0,0 +1,185 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserWebCardResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + + /** 运营商id */ + @Excel(name = "运营商id") + private String providerId; + + /** 卡名称 */ + @Excel(name = "卡名称") + private String cardName; + + /** 卡提供商(商家名称) */ + @Excel(name = "卡提供商") + private String storeName; + + /** 商家id */ + @Excel(name = "商家id") + private String storeId; + + + /** 使用次数 */ + @Excel(name = "使用次数") + private Integer useCount; + + /** 剩余次数 */ + @Excel(name = "剩余次数") + private Integer leftCount; + + /** 有效期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd") + private Date effectiveTime; + + /** 卡券标识,0会员卡,1券(或赠卡) */ + @Excel(name = "卡券标识") + private Integer typeFlag; + + /** 卡券状态 */ + @Excel(name = "卡券状态") + private String cardStatus; + + /** 卡券说明 */ + @Excel(name = "卡券说明") + private String cardContent; + + /** 卡券说明 */ + @Excel(name = "卡券说明") + private String bgUrl; + + /** 卡券字体颜色 */ + @Excel(name = "卡券字体颜色") + private String contentColor; + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public Integer getUseCount() { + return useCount; + } + + public void setUseCount(Integer useCount) { + this.useCount = useCount; + } + + public Integer getLeftCount() { + return leftCount; + } + + public void setLeftCount(Integer leftCount) { + this.leftCount = leftCount; + } + + public Date getEffectiveTime() { + return effectiveTime; + } + + public void setEffectiveTime(Date effectiveTime) { + this.effectiveTime = effectiveTime; + } + + public Integer getTypeFlag() { + return typeFlag; + } + + public void setTypeFlag(Integer typeFlag) { + this.typeFlag = typeFlag; + } + + public String getCardStatus() { + return cardStatus; + } + + public void setCardStatus(String cardStatus) { + this.cardStatus = cardStatus; + } + + public String getCardContent() { + return cardContent; + } + + public void setCardContent(String cardContent) { + this.cardContent = cardContent; + } + + + + public String getBgUrl() { + return bgUrl; + } + + public void setBgUrl(String bgUrl) { + this.bgUrl = bgUrl; + } + + public String getContentColor() { + return contentColor; + } + + public void setContentColor(String contentColor) { + this.contentColor = contentColor; + } + + public String getStoreId() { + return storeId; + } + + public void setStoreId(String storeId) { + this.storeId = storeId; + } + + public String getProviderId() { + return providerId; + } + + public void setProviderId(String providerId) { + this.providerId = providerId; + } + + @Override + public String toString() { + return "SegchkUserWebCardResp{" + + "providerId='" + providerId + '\'' + + ", cardName='" + cardName + '\'' + + ", storeName='" + storeName + '\'' + + ", storeId='" + storeId + '\'' + + ", useCount=" + useCount + + ", leftCount=" + leftCount + + ", effectiveTime=" + effectiveTime + + ", typeFlag=" + typeFlag + + ", cardStatus='" + cardStatus + '\'' + + ", cardContent='" + cardContent + '\'' + + ", bgUrl='" + bgUrl + '\'' + + ", contentColor='" + contentColor + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebReq.java new file mode 100644 index 0000000..0c5c3b2 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebReq.java @@ -0,0 +1,112 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserWebReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 用户手机号 */ + @Excel(name = "用户手机号") + private String phoneNo; + + /** 微信唯一识别号 */ + @Excel(name = "微信唯一识别号") + private String openid; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 用户身份,0运营商,1商家,2用户 */ + @Excel(name = "用户身份") + private Integer userLevel; + + /** 身份证号码 */ + @Excel(name = "身份证号码") + private String cardID; + + /** 查询用户卡类型,0会员卡,1优惠券 */ + @Excel(name = "查询用户卡类型") + private Integer cardFlag; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getPhoneNo() { + return phoneNo; + } + + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public String getCardID() { + return cardID; + } + + public void setCardID(String cardID) { + this.cardID = cardID; + } + + public Integer getUserLevel() { + return userLevel; + } + + public void setUserLevel(Integer userLevel) { + this.userLevel = userLevel; + } + + public Integer getCardFlag() { + return cardFlag; + } + + public void setCardFlag(Integer cardFlag) { + this.cardFlag = cardFlag; + } + + @Override + public String toString() { + return "SegchkUserWebReq{" + + "userId=" + userId + + ", phoneNo='" + phoneNo + '\'' + + ", openid='" + openid + '\'' + + ", providerId=" + providerId + + ", userLevel=" + userLevel + + ", cardID='" + cardID + '\'' + + ", cardFlag=" + cardFlag + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebResp.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebResp.java new file mode 100644 index 0000000..1840d66 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebResp.java @@ -0,0 +1,307 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 用户角色 */ + @Excel(name = "用户角色") + private Integer userLevel; + + /** 用户手机号 */ + @Excel(name = "用户手机号") + private String phoneNo; + + /** 用户名称 */ + @Excel(name = "用户名称") + private String userName; + + /** 微信唯一识别号 */ + @Excel(name = "微信唯一识别号") + private String openid; + + /** 注册地区 */ + @Excel(name = "注册地区") + private String districtName; + + /** 推荐人id */ + @Excel(name = "推荐人id") + private String recommenderId; + + /** 推荐人角色 */ + @Excel(name = "推荐人角色") + private String recommenderLevel; + + /** 推荐人名称 */ + @Excel(name = "推荐人名称") + private String recommenderName; + + /** 用户头像 */ + @Excel(name = "用户头像") + private String userIcon; + + /** 是否实名认证 */ + @Excel(name = "是否实名认证") + private Integer iscertified; + + /** 账号余额 */ + @Excel(name = "账号余额") + private BigDecimal account = BigDecimal.valueOf(0.0); + + /** 核消次数 */ + @Excel(name = "核消次数") + private Long chkCount; + + /** 充值次数 */ + @Excel(name = "充值次数") + private Long chargeCount; + + /** 提现次数 */ + @Excel(name = "提现次数") + private Long cashCount; + + /** 未读消息数量 */ + @Excel(name = "未读消息数量") + private Long msgCount; + + /** 可用卡数量 */ + @Excel(name = "可用卡数量") + private Long cardCount; + + /** 优惠券数量 */ + @Excel(name = "优惠券数量") + private Long storeCardCount; + + /** 商家数量 */ + @Excel(name = "商家数量") + private Long storeCount; + + /** 有效预约单数量 */ + @Excel(name = "预约单数量") + private Long likegoCount; + + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getPhoneNo() { + return phoneNo; + } + + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getUserIcon() { + return userIcon; + } + + public void setUserIcon(String userIcon) { + this.userIcon = userIcon; + } + + public Integer getIscertified() { + return iscertified; + } + + public void setIscertified(Integer iscertified) { + this.iscertified = iscertified; + } + + public BigDecimal getAccount() { + return account; + } + + public void setAccount(BigDecimal account) { + this.account = account; + } + + public Long getChkCount() { + return chkCount; + } + + public void setChkCount(Long chkCount) { + this.chkCount = chkCount; + } + + public Long getChargeCount() { + return chargeCount; + } + + public void setChargeCount(Long chargeCount) { + this.chargeCount = chargeCount; + } + + public Long getCashCount() { + return cashCount; + } + + public void setCashCount(Long cashCount) { + this.cashCount = cashCount; + } + + public Long getMsgCount() { + return msgCount; + } + + public void setMsgCount(Long msgCount) { + this.msgCount = msgCount; + } + + public Long getCardCount() { + return cardCount; + } + + public void setCardCount(Long cardCount) { + this.cardCount = cardCount; + } + + public Long getStorecardCount() { + return storeCardCount; + } + + public void setStorecardCount(Long storecardCount) { + this.storeCardCount = storecardCount; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreCardCount() { + return storeCardCount; + } + + public void setStoreCardCount(Long storeCardCount) { + this.storeCardCount = storeCardCount; + } + + public Long getStoreCount() { + return storeCount; + } + + public void setStoreCount(Long storeCount) { + this.storeCount = storeCount; + } + + public Long getLikegoCount() { + return likegoCount; + } + + public void setLikegoCount(Long likegoCount) { + this.likegoCount = likegoCount; + } + + public Integer getUserLevel() { + return userLevel; + } + + public void setUserLevel(Integer userLevel) { + this.userLevel = userLevel; + } + + public String getDistrictName() { + return districtName; + } + + public void setDistrictName(String districtName) { + this.districtName = districtName; + } + + public String getRecommenderId() { + return recommenderId; + } + + public void setRecommenderId(String recommenderId) { + this.recommenderId = recommenderId; + } + + public String getRecommenderLevel() { + return recommenderLevel; + } + + public void setRecommenderLevel(String recommenderLevel) { + this.recommenderLevel = recommenderLevel; + } + + public String getRecommenderName() { + return recommenderName; + } + + public void setRecommenderName(String recommenderName) { + this.recommenderName = recommenderName; + } + + @Override + public String toString() { + return "SegchkUserWebResp{" + + "providerId=" + providerId + + ", userId=" + userId + + ", userLevel=" + userLevel + + ", phoneNo='" + phoneNo + '\'' + + ", userName='" + userName + '\'' + + ", openid='" + openid + '\'' + + ", districtName='" + districtName + '\'' + + ", recommenderId='" + recommenderId + '\'' + + ", recommenderLevel='" + recommenderLevel + '\'' + + ", recommenderName='" + recommenderName + '\'' + + ", userIcon='" + userIcon + '\'' + + ", iscertified=" + iscertified + + ", account=" + account + + ", chkCount=" + chkCount + + ", chargeCount=" + chargeCount + + ", cashCount=" + cashCount + + ", msgCount=" + msgCount + + ", cardCount=" + cardCount + + ", storeCardCount=" + storeCardCount + + ", storeCount=" + storeCount + + ", likegoCount=" + likegoCount + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/StoreSelfCard.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/StoreSelfCard.java new file mode 100644 index 0000000..2c7c288 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/StoreSelfCard.java @@ -0,0 +1,94 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.core.domain.BaseEntity; + +public class StoreSelfCard extends BaseEntity { + + private Long likegoId; + private Long userId; + private Long cardId; + private Long lableId; + private Long storeId; + private Integer typeId; + private Integer totalCount; + private String freeContent; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Integer getTypeId() { + return typeId; + } + + public void setTypeId(Integer typeId) { + this.typeId = typeId; + } + + public Integer getTotalCount() { + return totalCount; + } + + public void setTotalCount(Integer totalCount) { + this.totalCount = totalCount; + } + + public String getFreeContent() { + return freeContent; + } + + public void setFreeContent(String freeContent) { + this.freeContent = freeContent; + } + + public Long getLableId() { + return lableId; + } + + public void setLableId(Long lableId) { + this.lableId = lableId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + + public Long getLikegoId() { + return likegoId; + } + + public void setLikegoId(Long likegoId) { + this.likegoId = likegoId; + } + @Override + public String + toString() { + return "StoreSelfCard{" + + "likegoId=" + likegoId + + "userId=" + userId + + ", cardId=" + cardId + + ", lableId=" + lableId + + ", storeId=" + storeId + + ", typeId=" + typeId + + ", totalCount=" + totalCount + + ", freeContent='" + freeContent + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/WeChatCustomerLink.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/WeChatCustomerLink.java new file mode 100644 index 0000000..8530871 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/domain/WeChatCustomerLink.java @@ -0,0 +1,128 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.ruoyi.util.CommonConstant; +import org.springframework.util.StringUtils; + +import java.io.Serializable; + +/** + * 微信用户关联实体类 + */ +public class WeChatCustomerLink implements Serializable { + /** + * 主键 + */ + private long id = -1; + /** + * 联合登录id + */ + private String unionId; + /** + * 微信用户唯一标识 + */ + private String openId; + /** + * 小程序openId + */ + private String appletOpenId; + /** + * providerId + */ + private String providerId; + /** + * 用户id + */ + private Long userId = CommonConstant.NO_CUSTOMER_ID; + + public WeChatCustomerLink() { + } + + public WeChatCustomerLink(String openId, String unionId) { + this.openId = openId; + this.unionId = unionId; + } + + /** + * 是否绑定 绑定返回true + */ + @JsonIgnore + public boolean isBind() { + return this.userId != CommonConstant.NO_CUSTOMER_ID; + } + + /** + * 判断是否有openId + * + * @return 有返回true, 否则返回false + */ + public boolean hasOpenId() { + return !StringUtils.isEmpty(openId); + } + + /** + * 判断是否有小程序openId + * + * @return 有返回true, 否则返回false + */ + public boolean hasAppletOpenId() { + return !StringUtils.isEmpty(appletOpenId); + } + + public String getUnionId() { + return unionId; + } + + public void setUnionId(String unionId) { + this.unionId = unionId; + } + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + + public String getAppletOpenId() { + return appletOpenId; + } + + public void setAppletOpenId(String appletOpenId) { + this.appletOpenId = appletOpenId; + } + + public long getUserId() { + return userId; + } + + public void setUserId(long userId) { + this.userId = userId; + } + + public String getProviderId() { + return providerId; + } + + public void setProviderId(String providerId) { + this.providerId = providerId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + @Override + public String toString() { + return "WeChatCustomerLink{" + + "id=" + id + + ", unionId='" + unionId + '\'' + + ", openId='" + openId + '\'' + + ", appletOpenId='" + appletOpenId + '\'' + + ", providerId='" + providerId + '\'' + + ", userId=" + userId + + '}'; + } +} + diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderIndexMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderIndexMapper.java new file mode 100644 index 0000000..72183f5 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderIndexMapper.java @@ -0,0 +1,66 @@ +package com.ruoyi.segchk.mapper; + +import com.ruoyi.segchk.domain.*; + +import java.util.List; + +/** + * seg运营商管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkProviderIndexMapper +{ + + /** + * 查询运营商个人中心信息 + * + * @param segchkUserWebReq 查询实体对象 + * @return 结果 + */ + public SegchkUserWebResp selectSegchkProviderWebInfo(SegchkUserWebReq segchkUserWebReq); + + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreServiceList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreSaleList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreServiceDetails(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreSaleDetails(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 返回运营商openid + * + * @param providerId 运营商id + * @return 结果 + */ + public String selectProviderOpenIdById(Long providerId); + + public String selectSegchkProviderName(String providerId); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreIndexMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreIndexMapper.java new file mode 100644 index 0000000..44dcfdc --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreIndexMapper.java @@ -0,0 +1,154 @@ +package com.ruoyi.segchk.mapper; + +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.domain.WeChatCustomerLink; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public interface SegchkStoreIndexMapper { + /** + * 以会员卡为主标签,结合其他如关键字标签,优惠券标签显示商家列表 + * @param segchkStoreWebReq 根据运营商,商户,标签等查询相应的商户列表 + * @return + */ + public List selectSegchkStoreList(SegchkStoreWebReq segchkStoreWebReq); + + /** + * 以会员卡为主标签,结合其他如关键字标签,优惠券标签显示商家列表 + * @param segchkStoreWebReq 根据运营商,商户,标签等查询相应的商户列表 + * @return + */ + public List selectSegchkStoreListByOneLable(SegchkStoreWebReq segchkStoreWebReq); + + + /** + * 以会员卡为主标签,结合其他如关键字标签,优惠券标签显示商家列表 + * @param segchkStoreWebReq 根据运营商,商户,标签等查询相应的商户列表 + * @return + */ + public List selectSegchkStoreListByAll(SegchkStoreWebReq segchkStoreWebReq); + + /** + * 标签列表 + * + * @param providerId 运营商id + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreRecommendLableList(Long providerId); + + /** + * 标签列表 + * + * @param providerId 运营商id + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreLableList(Long providerId); + + /** + * 商户查找 + * + * @param segchkStoreWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreSearch(SegchkStoreWebReq segchkStoreWebReq); + + public SegchkStoreBasicInfoWebResp selectSegchkStoreDetails(SegchkStoreWebReq segchkStoreWebReq); + + public List selectSegchkStoreComments(SegchkStoreWebReq segchkStoreWebReq); + + + /** + * 根据商户id,查询商户个人中心信息 + * + * @param segchkUserWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public SegchkUserWebResp selectSegchkStoreWebInfo(SegchkUserWebReq segchkUserWebReq); + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreServiceList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreSaleList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreServiceDetails(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreSaleDetails(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据商户id,查询商户提现记录 + * + * @param segchkUserWebReq@return seg首页轮播图管理 + */ + public List selectStoreCashList(SegchkUserWebReq segchkUserWebReq); + + /** + * 根据商户id,查询商户的预约列表 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectStoreUserLikeGoList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据行政区域id,查询对应运营商id,如果没有,则返回默认运营商id + * + * @param params 行政区代码,以及默认展示行政地区代码 + * @return seg首页轮播图管理 + */ + public HashMap selectSegchkProviderBycode(Map params); + + public List selectSegchkCarouseStoreList(SegchkCarouseMgt segchkCarouseMgt); + + + /** + * 根据运营商返回seg首页推荐商户实体列表 + * + * @param segchkRecommenderStoreWebReq seg首页推荐商户运营商id + * @return 结果 + */ + public List selectSegchkRecommenderStoreListWeb(SegchkRecommenderStoreWebReq segchkRecommenderStoreWebReq); + + + /** + * 返回商户openid + * + * @param storeId 商户id + * @return 结果 + */ + public WeChatCustomerLink selectStoreOpenIdById(Long storeId); + + public Integer isCollectByUser(Map params); + + public String selectSegchkStoreName(String storeId); + + public int addAccountByReward(SegchkChargeReward segchkChargeReward); + + Long getVipCardFromLikego(Long likegoId); + + public int addCommentAccByComment(Long commentId); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkUserIndexMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkUserIndexMapper.java new file mode 100644 index 0000000..90f09fd --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/mapper/SegchkUserIndexMapper.java @@ -0,0 +1,136 @@ +package com.ruoyi.segchk.mapper; + +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.domain.WeChatCustomerLink; + +import java.util.List; +import java.util.Map; + +public interface SegchkUserIndexMapper { + /** + * 查询seg用户基本信息 + * + * @param segchkUserWebReq 前端查询用户中心对象实体 + * @return seg用户基本信息 + */ + public SegchkUserWebResp selectSegchkUserWebInfo(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户核消列表 + * + * @param segchkUserWebReq 前端查询用户中心对象实体 + * @return seg用户基本信息 + */ + public List selectUserServiceCHKList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户会员卡列表 + * + * @param segchkUserWebReq 前端查询用户中心对象实体 + * @return seg用户基本信息 + */ + public List selectUserCardList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户赠卡及优惠券列表 + * + * @param segchkUserWebReq 前端查询用户中心对象实体 + * @return seg用户基本信息 + */ + public List selectUserPerformanceList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户收藏列表 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + public List selectUserCollectList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户预约列表 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + public List selectUserLikGoList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户充值列表 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + public List selectUserChargeList(SegchkUserWebReq segchkUserWebReq); + + + /** + * 查询seg用户提现列表 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + public List selectUserCashList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户消息列表 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + public List selectUserMsgList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户预约时可用卡列表 + * + * @param segchkServiceOrderWebReq + * @return seg用户扩展信息 + */ + public List selectUserOrderPredCardListWebInfo(SegchkServiceOrderWebReq segchkServiceOrderWebReq); + + /** + * 查询seg用户预约时可用卡列表 + * + * @param segchkServiceOrderWebReq + * @return seg用户扩展信息 + */ + public List selecttest(SegchkServiceOrderWebReq segchkServiceOrderWebReq); + + /** + * 查询seg用户我想去订单的有效信息 + * + * @param likegoId + * @return seg用户扩展信息 + */ + public SegchkServiceOrderChkTestResp selectUserOrderPredInfo(Long likegoId); + + /** + * 查询seg用户可以充值的卡信息 + * + * @param segchkUserWebReq + * @return seg用户扩展信息 + */ + public List selectSegchkUserChargePre(SegchkUserWebReq segchkUserWebReq); + + public SegchkUserLevelInfo selectUserLevelByMobile(String phoneno); + + public int userIsExit(Map parmMap); + + public int providerIsExit(Map parmMap); + public int storeIsExit(Map parmMap); + + public int recommenderIsExit(Map parmMap); + + int updateSegchkProviderWechat(SegchkUserWechat segchkUserWechat); + + public int updateSegchkStoreWechat(SegchkUserWechat segchkUserWechat); + + public int updateSegchkUserWechat(SegchkUserWechat segchkUserWechat); + + public WeChatCustomerLink getUserWechatOpenId(Long userId); + + public String selectSegchkUserName(String userId); + + public SegchkChargeReward selectSegchkRewardInfoForCharge(Map paramsMap); + + int addAccountByReward(SegchkChargeReward segchkChargeReward); + + Map getCardInfo(Map paramsMap); + + SegchkChargeReward selectSegchkRewardInfoForCheck(Map params); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkProviderIndexService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkProviderIndexService.java new file mode 100644 index 0000000..eda3586 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkProviderIndexService.java @@ -0,0 +1,49 @@ +package com.ruoyi.segchk.service; + +import com.ruoyi.segchk.domain.*; + +import java.util.List; + +/** + * seg用户基本信息Service接口 + * + * @author yinzhiying + * @date 2021-07-01 + */ +public interface ISegchkProviderIndexService +{ + + /** + * 查询运营商个人中心信息 + * + * @param segchkUserWebReq 查询实体对象 + * @return 结果 + */ + public SegchkUserWebResp selectSegchkProviderWebInfo(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询运营商下核消,售卡统计 + * + * @param segchkServiceAndSaleWebReq 查询实体对象 + * @return 结果 + */ + public List selectProviderServiceAndSaleList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 查询运营商下核消,售卡统计详情 + * + * @param segchkServiceAndSaleWebReq 查询实体对象 + * @return 结果 + */ + public List selectProviderServiceAndSaleDetails(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 返回运营商openid + * + * @param userId 运营商id + * @return 结果 + */ + public String selectWeChatInfoByProviderId(Long userId); + + public String selectSegchkProviderName(String recommenderId); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkStoreIndexService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkStoreIndexService.java new file mode 100644 index 0000000..a4b7f5e --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkStoreIndexService.java @@ -0,0 +1,191 @@ +package com.ruoyi.segchk.service; + +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.domain.WeChatCustomerLink; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * seg首页轮播图管理Service接口 + * + * @author yinzhiying + * @date 2021-07-01 + */ +public interface ISegchkStoreIndexService +{ + /** + * 商户列表 + * + * @param segchkStoreWebReq seg首页轮播图管理ID + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreList(SegchkStoreWebReq segchkStoreWebReq); + + /** + * 标签列表 + * + * @param providerId 运营商id + * @return seg首页轮播图管理 + */ + public List selectSegchkRecommendLableList(Long providerId); + + /** + * 全量标签列表 + * + * @param providerId 运营商id + * @return seg首页轮播图管理 + */ + public List selectSegchkLableList(Long providerId); + + /** + * 商户查找 + * + * @param segchkStoreWebReq 搜索对象 + * @return 商户查找 + */ + public List selectSegchkStoreSearch(SegchkStoreWebReq segchkStoreWebReq); + + + /** + * 商户详情页展示 + * + * @param segchkStoreWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public SegchkStoreBasicInfoWebResp selectSegchkStoreDetails(SegchkStoreWebReq segchkStoreWebReq); + + /** + * 根据商户id,查询商户相关评价列表 + * + * @param segchkStoreWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectSegchkStoreComments(SegchkStoreWebReq segchkStoreWebReq); + + /** + * 根据商户id,查询商户个人中心信息 + * + * @param segchkUserWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public SegchkUserWebResp selectSegchkStoreWebInfo(SegchkUserWebReq segchkUserWebReq); + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectStoreServiceAndSaleList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据商户id,查询商户核消详情,或售卡详情 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectStoreServiceAndSaleDetails(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + /** + * 根据商户id,查询商户提现记录 + * + * @param segchkUserWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectStoreCashList(SegchkUserWebReq segchkUserWebReq); + + + /** + * 根据商户id,查询商户的预约列表 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + public List selectStoreUserLikeGoList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq); + + + /** + * 根据行政区域id,查询对应运营商id,如果没有,则返回默认运营商id + * + * @param adcode 行政区代码 + * @return seg首页轮播图管理 + */ + public HashMap getProvider(Map adcode); + + /** + * 根据提现id,进行提现结果保存,及余额更新 + * + * @param chargeId 行政区代码 + * @param ret 行政区代码 + * @return seg首页轮播图管理 + */ + public void cashRet(String chargeId, int ret); + + /** + * 根据运营商id,获取相应的轮播图列表 + * + * @param providerId 运营商id + * @return seg首页轮播图管理 + */ + public List getBanners(Long providerId); + + /** + * 根据用户提交信息进行修改 + * + * @param segchkUserSetInfoReq 用户评价提交实体 + * @return 更新结果 + */ + public int updateUserInfo(SegchkUserSetInfoReq segchkUserSetInfoReq); + + + /** + * 返回seg首页推荐商户信息 + * + * @param segchkRecommenderStoreWebReq seg首页推荐商户ID + * @return 结果 + */ + public List selectSegchkRecommenderStoreListByProvider(SegchkRecommenderStoreWebReq segchkRecommenderStoreWebReq); + + /** + * 返回商户openid + * + * @param userId 商户id + * @return 结果 + */ + public WeChatCustomerLink selectWeChatInfoByStoreId(Long userId); + + + /** + * 验证推荐人是否存在 + * + * @param recommenderId 推荐人id + * @param recommenderLevel 推荐人角色 + * @return 结果 + */ + int recommenderIsExit(String recommenderId, String recommenderLevel, String providerId); + + + /** + * 检查该商户是否已被当前用户收藏 + * + * @param providerId 推荐人id + * @param storeId 推荐人角色 + * @param userId 推荐人角色 + * @return 是否收藏,1已收藏,0未收藏 + */ + Integer isCollectByUser(Long providerId, Long storeId, Long userId); + + public String selectSegchkStoreName(String storeId); + + Integer addStoreSelfCard(SegchkStoreSelfMgt segchkStoreSelfMgt); + + public int addAccountByReward(SegchkChargeReward segchkChargeReward); + + Long getVipCardFromLikego(Long likegoId); + + HashMap getCustomService(Long providerId); + + public int addCommentAccByComment(Long commentId); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserCashService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserCashService.java new file mode 100644 index 0000000..f5667d6 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserCashService.java @@ -0,0 +1,63 @@ +package com.ruoyi.segchk.service; + +import com.ruoyi.segchk.domain.SegchkUserCash; + +import java.util.List; + +/** + * seg用户提现记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserCashService +{ + /** + * 查询seg用户提现记录 + * + * @param cashId seg用户提现记录主键 + * @return seg用户提现记录 + */ + public SegchkUserCash selectSegchkUserCashByCashId(Long cashId); + + /** + * 查询seg用户提现记录列表 + * + * @param segchkUserCash seg用户提现记录 + * @return seg用户提现记录集合 + */ + public List selectSegchkUserCashList(SegchkUserCash segchkUserCash); + + /** + * 新增seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + public int insertSegchkUserCash(SegchkUserCash segchkUserCash); + + /** + * 修改seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + public int updateSegchkUserCash(SegchkUserCash segchkUserCash); + + /** + * 批量删除seg用户提现记录 + * + * @param cashIds 需要删除的seg用户提现记录主键集合 + * @return 结果 + */ + public int deleteSegchkUserCashByCashIds(Long[] cashIds); + + /** + * 删除seg用户提现记录信息 + * + * @param cashId seg用户提现记录主键 + * @return 结果 + */ + public int deleteSegchkUserCashByCashId(Long cashId); + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserCollectService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserCollectService.java new file mode 100644 index 0000000..d3ddda2 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserCollectService.java @@ -0,0 +1,70 @@ +package com.ruoyi.segchk.service; + +import com.ruoyi.segchk.domain.SegchkUserCollect; + +import java.util.List; + +/** + * seg用户收藏记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserCollectService +{ + /** + * 查询seg用户收藏记录 + * + * @param collectId seg用户收藏记录主键 + * @return seg用户收藏记录 + */ + public SegchkUserCollect selectSegchkUserCollectByCollectId(Long collectId); + + /** + * 查询seg用户收藏记录列表 + * + * @param segchkUserCollect seg用户收藏记录 + * @return seg用户收藏记录集合 + */ + public List selectSegchkUserCollectList(SegchkUserCollect segchkUserCollect); + + /** + * 新增seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + public int insertSegchkUserCollect(SegchkUserCollect segchkUserCollect); + + /** + * 修改seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + public int updateSegchkUserCollect(SegchkUserCollect segchkUserCollect); + + /** + * 批量删除seg用户收藏记录 + * + * @param collectIds 需要删除的seg用户收藏记录主键集合 + * @return 结果 + */ + public int deleteSegchkUserCollectByCollectIds(Long[] collectIds); + + /** + * 删除seg用户收藏记录信息 + * + * @param collectId seg用户收藏记录主键 + * @return 结果 + */ + public int deleteSegchkUserCollectByCollectId(Long collectId); + + /** + * 批量删除seg用户收藏记录 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSegchkUserCollectByIds(String ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserIndexService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserIndexService.java new file mode 100644 index 0000000..b7d487a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserIndexService.java @@ -0,0 +1,295 @@ +package com.ruoyi.segchk.service; + +import com.ruoyi.segchk.domain.*; +import com.ruoyi.util.Claims; +import com.ruoyi.util.CommonResponse; +import com.ruoyi.util.bean.PrepayResult; +import com.ruoyi.util.bean.WxTransferResult; + +import java.io.InputStream; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * seg用户基本信息Service接口 + * + * @author yinzhiying + * @date 2021-07-01 + */ +public interface ISegchkUserIndexService +{ + /** + * 查询seg用户中心信息 + * + * @param segchkUserWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + public SegchkUserWebResp selectSegchkUserWebInfo(SegchkUserWebReq segchkUserWebReq); + + + /** + * 查询seg用户核消列表 + * + * @param segchkUserWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + public List selectUserServiceCHKList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户可用会员卡列表 + * + * @param segchkUserWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + public List selectUserCardList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户收藏列表 + * + * @param segchkUserWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + public List selectUserCollectList(SegchkUserWebReq segchkUserWebReq); + + + /** + * 查询seg用户预约列表 + * + * @param segchkUserWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + public List selectUserLikGoList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户充值列表 + * + * @param segchkUserWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + public List selectUserChargeList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户提现列表 + * + * @param segchkUserWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + public List selectUserCashList(SegchkUserWebReq segchkUserWebReq); + + /** + * 查询seg用户消息列表 + * + * @param segchkUserWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + public List selectUserMsgList(SegchkUserWebReq segchkUserWebReq); + + + /** + * 查询seg用户预约可用卡券列表 + * + * @param segchkServiceOrderWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + public List selectUserOrderPredCardListWebInfo(SegchkServiceOrderWebReq segchkServiceOrderWebReq); + + /** + * 根据用户核消二维码提取出来相应的信息进行核消,1、检查核卡是否可以核消(防止该卡已经在该商家不能再次核消),2、检查该预约id,是否已经使用(防止多次预约核消使用) + * + * @param segchkUserLikego seg用户想去记录实体 + * @return 结果 + */ + public void CheckUserServiceChk(SegchkUserLikego segchkUserLikego); + + public SegchkServiceOrderChkTestResp selectUserOrderPredInfo(Long likeGoId); + + /** + * 根据核查结果进行核消。说明已经满足核消条件 + * + * @param segchkServiceOrderChkTestResp 核消检查信息 + * @param likegoId 预约单id + * @param stoRewardWithChk + * @return 结果 + */ + public int OrderCheckTransaction(SegchkServiceOrderChkTestResp segchkServiceOrderChkTestResp, Long likegoId, Boolean stoRewardWithChk); + + /** + * 根据支付回调结果,进行相应的更新 + * + * @param chargeId 核消检查信息 + * @param ret 预约单id + * @return 结果 + */ + public void chargeRet(String chargeId, int ret); + + + /** + * 根据用户充值等信息获取相关的返利信息 + * + * @param params 充值信息 + * @return 结果 + */ + int makeChargeReward(Map params); + + /** + * 根据支用户id,运营商id,查询该用户可购买的卡 + * + * @param segchkUserWebReq 用户请示信息体 + * @return 结果 + */ + public List SegchkUserChargePre(SegchkUserWebReq segchkUserWebReq); + + + /** + * 根据支用户id,运营商id,用户充值时可用余额 + * + * @param segchkUserCharge 用户请示信息体 + * @return 结果 + */ + public BigDecimal getAccount(SegchkUserCharge segchkUserCharge); + + /** + * 根据用户id(或者商户id),运营商id,用户身份查询用户余额 + * + * @param segchkUserCashOpsReq 用户请示信息体 + * @param ip + * @return 结果 + */ + public int getAccountForCash(SegchkUserCashOpsReq segchkUserCashOpsReq, String ip); + + /** + * 根据提现id,进行提现结果保存,及余额更新 + * + * @param chargeId 行政区代码 + * @param ret 行政区代码 + * @return seg首页轮播图管理 + */ + public void cashRet(String chargeId, int ret); + + /** + * 新增用户评价 + * + * @param segchkServiceComment 用户评价提交实体 + * @return seg首页轮播图管理 + */ + public int insertSegchkServiceComment(SegchkServiceCommentUserReq segchkServiceComment); + + /** + * 根据评价id,查询用户评价 + * + * @param segchkServiceCommentUserReq 用户评价提交实体 + * @return seg首页轮播图管理 + */ + public SegchkServiceComment selectSegchkServiceComment(SegchkServiceCommentUserReq segchkServiceCommentUserReq); + + /** + * 根据用户提交信息进行修改 + * + * @param segchkUserSetInfoReq 用户评价提交实体 + * @return 更新结果 + */ + public int updateUserInfo(SegchkUserSetInfoReq segchkUserSetInfoReq); + + /** + * 根据用户提交信息实名设置 + * + * @param segchkUserCertificationInfo 用户提交实体 + * @return 更新结果 + */ + public int userCerticify(SegchkUserCertificationInfo segchkUserCertificationInfo); + + /** + * 根据用户信息返回用户身份 + * + * @param phoneno 用户信息 + * @return 更新结果 + */ + public SegchkUserLevelInfo selectUserLevelByMobile(String phoneno); + + /** + * 根据用户信息注册用户基本信息表 + * + * @param segchkUserBasicInfo 用户信息 + * @return 插入结果 + */ + public int addUserBasicInfo(SegchkUserBasicInfo segchkUserBasicInfo); + + /** + * 根据推荐人信息,检查推荐人是否存在 + * + * @param parmMap 推荐人信息 + * @return 查询记录数 + */ + public int recommenderIsExit(Map parmMap); + + /** + * 根据推荐人信息,更新用户扩展信息表 + * + * @param segchkUserExtInfo 推荐人信息 + * @return 查询记录数 + */ + public int insertUserExtInfo(SegchkUserExtInfo segchkUserExtInfo); + + + /** + * 根据用户基本信息查找用户微信信息 + * + * @param segchkUserLevelInfo 用户基本信息 + * @return 查询记录数 + */ + public String getWeChatInfoByUserId(SegchkUserLevelInfo segchkUserLevelInfo); + + /** + * 根据用户信息,更新用户微信信息表 + * + * @param segchkUserWechat 用户基本信息 + * @param userLevel + * @return 查询记录数 + */ + public int updateWeChatInfoByUserId(SegchkUserWechat segchkUserWechat, String userLevel); + + /** + * 微信小程序支付 + * + * @param orderCode 订单code + * @param userId 用户id + * @param ip 请求真实ip + * @param type 支付类型 1:订单支付 2:预存款充值 ---> 1用户支付,2商户支付 + * @return 返回码和支付宝支付的html 返回码说明 -1:用户不存在 -3:没有待支付的订单 -5:微信生成订单出错 -7 没有设置网站地址 -8 缺少配置 -9 没有启用 1 成功 + */ + CommonResponse wechatAppletPay(String orderCode, Long userId, Long providerId, String ip, int type); + + /** + * 微信小程序提现 + * + * @param orderCode 订单code + * @param userId 用户id + * @param providerId 用户id + * @param ip 请求真实ip + * @param type 支付类型 1:订单支付 2:预存款充值 ---> 1用户支付,2商户支付 + * @param openId + * @return 返回码和支付宝支付的html 返回码说明 -1:用户不存在 -3:没有待支付的订单 -5:微信生成订单出错 -7 没有设置网站地址 -8 缺少配置 -9 没有启用 1 成功 + */ + CommonResponse wechatAppletTransfers(String orderCode, Long userId, Long providerId, String ip, int type, String openId); + + /** + * 微信回调(小程序) 回调 + * + * @param inputStream 微信回调参数 + * @return 返回码 1:成功 -1:没有订单 + */ + int weChatAppletNotify(InputStream inputStream); + + /** + * 根据预约单,查询相关信息 + * + * @param segchkUserLikego 包含预约单id + * @return SegchkUserLikego + */ + public SegchkUserLikego selectUserLikeGo(SegchkUserLikego segchkUserLikego); + + int insertSegchkUserCharge(SegchkUserCharge segchkUserCharge); + + SegchkUserWechat queryWeChatInfoByUserId(Claims claims); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserLikegoService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserLikegoService.java new file mode 100644 index 0000000..087870e --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserLikegoService.java @@ -0,0 +1,62 @@ +package com.ruoyi.segchk.service; + +import com.ruoyi.segchk.domain.SegchkUserLikego; + +import java.util.List; + +/** + * seg用户想去记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserLikegoService +{ + /** + * 查询seg用户想去记录 + * + * @param likegoId seg用户想去记录主键 + * @return seg用户想去记录 + */ + public SegchkUserLikego selectSegchkUserLikegoByLikegoId(Long likegoId); + + /** + * 查询seg用户想去记录列表 + * + * @param segchkUserLikego seg用户想去记录 + * @return seg用户想去记录集合 + */ + public List selectSegchkUserLikegoList(SegchkUserLikego segchkUserLikego); + + /** + * 新增seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + public int insertSegchkUserLikego(SegchkUserLikego segchkUserLikego); + + /** + * 修改seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + public int updateSegchkUserLikego(SegchkUserLikego segchkUserLikego); + + /** + * 批量删除seg用户想去记录 + * + * @param likegoIds 需要删除的seg用户想去记录主键集合 + * @return 结果 + */ + public int deleteSegchkUserLikegoByLikegoIds(Long[] likegoIds); + + /** + * 删除seg用户想去记录信息 + * + * @param likegoId seg用户想去记录主键 + * @return 结果 + */ + public int deleteSegchkUserLikegoByLikegoId(Long likegoId); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserWechatService.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserWechatService.java new file mode 100644 index 0000000..b1ec5f0 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/ISegchkUserWechatService.java @@ -0,0 +1,62 @@ +package com.ruoyi.segchk.service; + +import com.ruoyi.segchk.domain.SegchkUserWechat; + +import java.util.List; + +/** + * seg用户微信信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserWechatService +{ + /** + * 查询seg用户微信信息 + * + * @param userId seg用户微信信息主键 + * @return seg用户微信信息 + */ + public SegchkUserWechat selectSegchkUserWechatByUserId(Long userId); + + /** + * 查询seg用户微信信息列表 + * + * @param segchkUserWechat seg用户微信信息 + * @return seg用户微信信息集合 + */ + public List selectSegchkUserWechatList(SegchkUserWechat segchkUserWechat); + + /** + * 新增seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + public int insertSegchkUserWechat(SegchkUserWechat segchkUserWechat); + + /** + * 修改seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + public int updateSegchkUserWechat(SegchkUserWechat segchkUserWechat); + + /** + * 批量删除seg用户微信信息 + * + * @param userIds 需要删除的seg用户微信信息主键集合 + * @return 结果 + */ + public int deleteSegchkUserWechatByUserIds(Long[] userIds); + + /** + * 删除seg用户微信信息信息 + * + * @param userId seg用户微信信息主键 + * @return 结果 + */ + public int deleteSegchkUserWechatByUserId(Long userId); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImpl.java new file mode 100644 index 0000000..6ba3dcf --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/ISegchkStoreIndexServiceImpl.java @@ -0,0 +1,393 @@ +package com.ruoyi.segchk.service.impl; + +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.mapper.SegchkIndexStoreAccountMapper; +import com.ruoyi.segchk.mapper.SegchkStoreCashMapper; +import com.ruoyi.segchk.mapper.SegchkStoreIndexMapper; +import com.ruoyi.segchk.mapper.SegchkStoreSecurityMapper; +import com.ruoyi.segchk.service.*; +import com.ruoyi.segchk.domain.WeChatCustomerLink; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class ISegchkStoreIndexServiceImpl implements ISegchkStoreIndexService { + + private static final Logger logger = LoggerFactory.getLogger(ISegchkStoreIndexServiceImpl.class); + + @Autowired + private SegchkStoreIndexMapper segchkStoreIndexMapper; + + @Autowired + private SegchkStoreCashMapper segchkStoreCashMapper; + + @Autowired + private SegchkIndexStoreAccountMapper segchkIndexStoreAccountMapper; + + @Autowired + private SegchkStoreSecurityMapper segchkStoreSecurityMapper; + + @Autowired + private ISegchkUserIndexService segchkUserIndexService; + + @Autowired + private ISegchkProviderMgtService segchkProviderMgtService; + + @Autowired + private ISegchkPreferenceLableService segchkPreferenceLableService; + + @Autowired + private ISegchkStoreSelfMgtService segchkStoreSelfMgtService; + /** + * 根据标签id,商户列表 + * + * @param segchkStoreWebReq seg首页轮播图管理ID + * @return seg首页轮播图管理 + */ + @Override + public List selectSegchkStoreList(SegchkStoreWebReq segchkStoreWebReq) { + + if(segchkStoreWebReq.getSortType() == null){ + segchkStoreWebReq.setSortType(0); + } + boolean cardempty = ObjectUtils.isEmpty(segchkStoreWebReq.getCardId()); + boolean lableempty = ObjectUtils.isEmpty(segchkStoreWebReq.getTypeId()); + if(cardempty && lableempty) { +// 全空,说明查询所有商家列表 + logger.debug("selectSegchkStoreList all with: {}", segchkStoreWebReq.toString()); + return segchkStoreIndexMapper.selectSegchkStoreListByAll(segchkStoreWebReq); + } + else if(!lableempty && cardempty){ +// 标签不为空,全部会员卡 + logger.debug("selectSegchkStoreList one non-card lable with: {}", segchkStoreWebReq.toString()); + return segchkStoreIndexMapper.selectSegchkStoreListByOneLable(segchkStoreWebReq); + } + + else if(lableempty && !cardempty){ +// 查询指定会员卡,全部标签 + segchkStoreWebReq.setLableId(segchkStoreWebReq.getCardId()); + segchkStoreWebReq.setTypeId(0); + segchkStoreWebReq.setCardId(null); + logger.debug("selectSegchkStoreList one card lable with: {}", segchkStoreWebReq.toString()); + return segchkStoreIndexMapper.selectSegchkStoreListByOneLable(segchkStoreWebReq); + } + logger.debug("selectSegchkStoreList some lable with: {}", segchkStoreWebReq.toString()); + return segchkStoreIndexMapper.selectSegchkStoreList(segchkStoreWebReq); + } + + /** + * 标签列表 + * + * @param providerId 运营商id + * @return seg首页轮播图管理 + */ + @Override + public List selectSegchkRecommendLableList(Long providerId) { + logger.debug("selectSegchkRecommendLableList with: {}", providerId); + return segchkStoreIndexMapper.selectSegchkStoreRecommendLableList(providerId); + } + + /** + * 全量标签列表 + * + * @param providerId 运营商id + * @return seg首页轮播图管理 + */ + @Override + public List selectSegchkLableList(Long providerId) { + logger.debug("selectSegchkLableList with {}", providerId); + return segchkStoreIndexMapper.selectSegchkStoreLableList(providerId); + } + + /** + * 商户查找 + * + * @param segchkStoreWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + @Override + public List selectSegchkStoreSearch(SegchkStoreWebReq segchkStoreWebReq) { + logger.debug("selectSegchkStoreSearch with: {}", segchkStoreWebReq.toString()); + segchkStoreWebReq.setSortType(0); + List segchkStoreIndexWebResps = segchkStoreIndexMapper.selectSegchkStoreSearch(segchkStoreWebReq); + boolean card_empty = ObjectUtils.isEmpty(segchkStoreWebReq.getCardId()); + boolean lable_empty = ObjectUtils.isEmpty(segchkStoreWebReq.getTypeId()); + List resps = segchkStoreIndexWebResps.parallelStream().filter(store -> { + List lables = store.getLables(); + boolean cardflag = card_empty ? true : lables.parallelStream().anyMatch(lable -> lable.getLableTypeId() == 0 && lable.getLableId() == segchkStoreWebReq.getCardId()); + boolean lableflag = lable_empty ? true : lables.parallelStream().anyMatch(lable -> lable.getLableTypeId() == segchkStoreWebReq.getTypeId() && lable.getLableId() == segchkStoreWebReq.getLableId()); + return cardflag && lableflag; + }).collect(Collectors.toList()); + return resps; + } + + /** + * 商户详情页展示 + * + * @param segchkStoreWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + @Override + public SegchkStoreBasicInfoWebResp selectSegchkStoreDetails(SegchkStoreWebReq segchkStoreWebReq) { + logger.debug("selectSegchkStoreDetails with: {}", segchkStoreWebReq.toString()); + return segchkStoreIndexMapper.selectSegchkStoreDetails(segchkStoreWebReq); + } + + /** + * 根据商户id,查询商户相关评价列表 + * + * @param segchkStoreWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + @Override + public List selectSegchkStoreComments(SegchkStoreWebReq segchkStoreWebReq) { + logger.debug("selectSegchkStoreComments with: {}", segchkStoreWebReq.toString()); + return segchkStoreIndexMapper.selectSegchkStoreComments(segchkStoreWebReq); + } + + /** + * 根据商户id,查询商户个人中心信息 + * + * @param segchkUserWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + @Override + public SegchkUserWebResp selectSegchkStoreWebInfo(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectSegchkStoreWebInfo with: {}", segchkUserWebReq.toString()); + SegchkUserWebResp segchkUserWebResp = segchkStoreIndexMapper.selectSegchkStoreWebInfo(segchkUserWebReq); + segchkUserWebResp.setProviderId(segchkUserWebReq.getProviderId()); + segchkUserWebResp.setUserId(segchkUserWebReq.getUserId()); + return segchkUserWebResp; + } + + /** + * 根据商户id,查询商户核消统计,或售卡统计 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + * + * { + * "providerId": 4, + * "storeId": 123, + * "staticLevel": 0, + * "staticMonth": "6", + * "userLevel": 1, + * "srcFlag": 0 + * } + */ + @Override + public List selectStoreServiceAndSaleList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq) { + logger.debug("selectStoreServiceAndSaleList with: {}", segchkServiceAndSaleWebReq.toString()); + if(segchkServiceAndSaleWebReq.getSrcFlag() == 0) + return segchkStoreIndexMapper.selectSegchkStoreServiceList(segchkServiceAndSaleWebReq); + else + return segchkStoreIndexMapper.selectSegchkStoreSaleList(segchkServiceAndSaleWebReq); + } + + /** + * 根据商户id,查询商户核消详情,或售卡详情 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + @Override + public List selectStoreServiceAndSaleDetails(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq) { + logger.debug("selectStoreServiceAndSaleDetails with: {}", segchkServiceAndSaleWebReq.toString()); + if(segchkServiceAndSaleWebReq.getSrcFlag() == 0) + return segchkStoreIndexMapper.selectSegchkStoreServiceDetails(segchkServiceAndSaleWebReq); + else + return segchkStoreIndexMapper.selectSegchkStoreSaleDetails(segchkServiceAndSaleWebReq); + } + + /** + * 根据商户id,查询商户提现记录 + * + * @param segchkUserWebReq@return seg首页轮播图管理 + */ + @Override + public List selectStoreCashList(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectStoreCashList with: {}", segchkUserWebReq.toString()); + return segchkStoreIndexMapper.selectStoreCashList(segchkUserWebReq); + } + + /** + * 根据商户id,查询商户的预约列表 + * + * @param segchkServiceAndSaleWebReq 搜索对象 + * @return seg首页轮播图管理 + */ + @Override + public List selectStoreUserLikeGoList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq) { + logger.debug("selectStoreUserLikeGoList with: {}", segchkServiceAndSaleWebReq.toString()); + return segchkStoreIndexMapper.selectStoreUserLikeGoList(segchkServiceAndSaleWebReq); + } + + /** + * 根据行政区域id,查询对应运营商id,如果没有,则返回默认运营商id + * + * @param adcode 行政区代码 + * @return seg首页轮播图管理 + */ + @Override + public HashMap getProvider(Map adcode) { + logger.debug("getProvider with: {}", adcode); + return segchkStoreIndexMapper.selectSegchkProviderBycode(adcode); + } + + /** + * 根据提现id,进行提现结果保存,及余额更新 + * + * @param chargeId 行政区代码 + * @param ret 行政区代码 + * @return seg首页轮播图管理 + */ + @Override + public void cashRet(String chargeId, int ret) { + logger.debug("cashRet with: {}---{}", chargeId, ret); + int opsRet = 0; + SegchkStoreCash segchkStoreCash = new SegchkStoreCash(); + segchkStoreCash.setCashId(Long.valueOf(chargeId)); + segchkStoreCash.setRetFlag(ret == 0 ? "1" : "2"); + opsRet = segchkStoreCashMapper.updateSegchkStoreCash(segchkStoreCash); + if(ret != 0){ + opsRet += segchkIndexStoreAccountMapper.deleteSegchkStoreAccountByCash(segchkStoreCash); + } + } + + /** + * 根据运营商id,获取相应的轮播图列表 + * + * @param providerId 运营商id + * @return seg首页轮播图管理 + */ + @Override + public List getBanners(Long providerId) { + logger.debug("getBanners with: {}", providerId); + SegchkCarouseMgt segchkCarouseMgt = new SegchkCarouseMgt(); + segchkCarouseMgt.setProviderId(providerId); + segchkCarouseMgt.setMgtState(0); + List segchkCarouseMgtList = segchkStoreIndexMapper.selectSegchkCarouseStoreList(segchkCarouseMgt); + return segchkCarouseMgtList; + } + + /** + * 根据用户提交信息进行修改 + * + * @param segchkUserSetInfoReq 用户评价提交实体 + * @return 更新结果 + */ + @Override + public int updateUserInfo(SegchkUserSetInfoReq segchkUserSetInfoReq) { + logger.debug("updateUserInfo with: {}", segchkUserSetInfoReq.toString()); + SegchkStoreSecurity segchkStoreSecurity = new SegchkStoreSecurity(); + segchkStoreSecurity.setPasswd(segchkUserSetInfoReq.getPasswd()); + segchkStoreSecurity.setProviderId(segchkUserSetInfoReq.getProviderId()); + segchkStoreSecurity.setStoreId(segchkUserSetInfoReq.getUserId()); + return segchkStoreSecurityMapper.insertSegchkStoreSecurity(segchkStoreSecurity); + } + + + /** + * 返回seg首页推荐商户信息 + * + * @param segchkRecommenderStoreWebReq seg首页推荐商户ID + * @return 结果 + */ + @Override + public List selectSegchkRecommenderStoreListByProvider(SegchkRecommenderStoreWebReq segchkRecommenderStoreWebReq) { + logger.debug("selectSegchkRecommenderStoreListByProvider with: {}", segchkRecommenderStoreWebReq.toString()); + return segchkStoreIndexMapper.selectSegchkRecommenderStoreListWeb(segchkRecommenderStoreWebReq); + } + + /** + * 返回商户openid + * + * @param storeId 商户id + * @return 结果 + */ + @Override + public WeChatCustomerLink selectWeChatInfoByStoreId(Long storeId) { + logger.debug("selectWeChatInfoByStoreId with: {}", storeId); + return segchkStoreIndexMapper.selectStoreOpenIdById(storeId); + } + + /** + * 验证推荐人是否存在 + * + * @param recommenderId 推荐人id + * @param recommenderLevel 推荐人角色 + * @return 结果 + */ + @Override + public int recommenderIsExit(String recommenderId, String recommenderLevel, String providerId) { + logger.debug("recommenderIsExit with: {}---{}---{}", recommenderId, recommenderLevel, providerId); + Map parmMap = new HashMap<>(); + parmMap.put("recommondId", recommenderId); + parmMap.put("recommondLevel", recommenderLevel); + parmMap.put("providerId", providerId); + return segchkUserIndexService.recommenderIsExit(parmMap); + } + + /** + * 检查该商户是否已被当前用户收藏 + * + * @param providerId 推荐人id + * @param storeId 推荐人角色 + * @param userId 推荐人角色 + * @return 是否收藏,1已收藏,0未收藏 + */ + @Override + public Integer isCollectByUser(Long providerId, Long storeId, Long userId) { + logger.debug("isCollectByUser with: {}---{}---{}", providerId, storeId, userId); + Map params = new HashMap<>(); + params.put("providerId", providerId); + params.put("storeId", storeId); + params.put("userId", userId); + return segchkStoreIndexMapper.isCollectByUser(params); + } + + @Override + public String selectSegchkStoreName(String storeId) { + return segchkStoreIndexMapper.selectSegchkStoreName(storeId); + } + + @Override + public Integer addStoreSelfCard(SegchkStoreSelfMgt segchkStoreSelfMgt) { + if(segchkStoreSelfMgt.getTypeId() == 2){ +// 说明是优惠券 + SegchkPreferenceLable segchkPreferenceLable = segchkPreferenceLableService.selectSegchkPreferenceLableByPreferenceId(segchkStoreSelfMgt.getLableId()); + segchkStoreSelfMgt.setFreeName(segchkPreferenceLable.getPreferenceName()); + } + return segchkStoreSelfMgtService.insertSegchkStoreSelfMgt(segchkStoreSelfMgt); + } + + @Override + public int addAccountByReward(SegchkChargeReward segchkChargeReward) { + return segchkStoreIndexMapper.addAccountByReward(segchkChargeReward); + } + + @Override + public Long getVipCardFromLikego(Long likegoId) { + return segchkStoreIndexMapper.getVipCardFromLikego(likegoId); + } + + @Override + public HashMap getCustomService(Long providerId) { + return segchkProviderMgtService.getCustomService(providerId); + } + + @Override + public int addCommentAccByComment(Long commentId) { + int ret = segchkStoreIndexMapper.addCommentAccByComment(commentId); + logger.debug("addCommentAccByComment with ({}) {}", commentId, (ret > 0 ? "successed" : "failed")); + return ret; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderIndexServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderIndexServiceImpl.java new file mode 100644 index 0000000..fa00c62 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderIndexServiceImpl.java @@ -0,0 +1,78 @@ +package com.ruoyi.segchk.service.impl; + +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.mapper.SegchkProviderIndexMapper; +import com.ruoyi.segchk.service.ISegchkProviderIndexService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * seg运营商管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-07-01 + */ +@Service +public class SegchkProviderIndexServiceImpl implements ISegchkProviderIndexService +{ + @Autowired + private SegchkProviderIndexMapper segchkProviderIndexMapper; + + + /** + * 查询运营商个人中心信息 + * + * @param segchkUserWebReq 查询实体对象 + * @return 结果 + */ + @Override + public SegchkUserWebResp selectSegchkProviderWebInfo(SegchkUserWebReq segchkUserWebReq) { + return segchkProviderIndexMapper.selectSegchkProviderWebInfo(segchkUserWebReq); + } + + /** + * 查询运营商下核消,售卡统计 + * + * @param segchkServiceAndSaleWebReq 查询实体对象 + * @return 结果 + */ + @Override + public List selectProviderServiceAndSaleList(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq) { + if(segchkServiceAndSaleWebReq.getSrcFlag() == 0) + return segchkProviderIndexMapper.selectSegchkStoreServiceList(segchkServiceAndSaleWebReq); + else + return segchkProviderIndexMapper.selectSegchkStoreSaleList(segchkServiceAndSaleWebReq); + } + + /** + * 查询运营商下核消,售卡统计详情 + * + * @param segchkServiceAndSaleWebReq 查询实体对象 + * @return 结果 + */ + @Override + public List selectProviderServiceAndSaleDetails(SegchkServiceAndSaleWebReq segchkServiceAndSaleWebReq) { + if(segchkServiceAndSaleWebReq.getSrcFlag() == 0) + return segchkProviderIndexMapper.selectSegchkStoreServiceDetails(segchkServiceAndSaleWebReq); + else + return segchkProviderIndexMapper.selectSegchkStoreSaleDetails(segchkServiceAndSaleWebReq); + } + + /** + * 返回运营商openid + * + * @param providerId 运营商id + * @return 结果 + */ + @Override + public String selectWeChatInfoByProviderId(Long providerId) { + return segchkProviderIndexMapper.selectProviderOpenIdById(providerId); + } + + @Override + public String selectSegchkProviderName(String providerId) { + return segchkProviderIndexMapper.selectSegchkProviderName(providerId); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCashServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCashServiceImpl.java new file mode 100644 index 0000000..376359b --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCashServiceImpl.java @@ -0,0 +1,100 @@ +package com.ruoyi.segchk.service.impl; + +import com.ruoyi.segchk.domain.SegchkUserCash; +import com.ruoyi.segchk.mapper.SegchkUserCashMapper; +import com.ruoyi.segchk.service.ISegchkUserCashService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * seg用户提现记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserCashServiceImpl implements ISegchkUserCashService +{ + + private static final Logger logger = LoggerFactory.getLogger(SegchkUserCashServiceImpl.class); + + @Autowired + private SegchkUserCashMapper segchkUserCashMapper; + + /** + * 查询seg用户提现记录 + * + * @param cashId seg用户提现记录主键 + * @return seg用户提现记录 + */ + @Override + public SegchkUserCash selectSegchkUserCashByCashId(Long cashId) + { + return segchkUserCashMapper.selectSegchkUserCashByCashId(cashId); + } + + /** + * 查询seg用户提现记录列表 + * + * @param segchkUserCash seg用户提现记录 + * @return seg用户提现记录 + */ + @Override + public List selectSegchkUserCashList(SegchkUserCash segchkUserCash) + { + return segchkUserCashMapper.selectSegchkUserCashList(segchkUserCash); + } + + /** + * 新增seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + @Override + public int insertSegchkUserCash(SegchkUserCash segchkUserCash) + { + return segchkUserCashMapper.insertSegchkUserCash(segchkUserCash); + } + + /** + * 修改seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + @Override + public int updateSegchkUserCash(SegchkUserCash segchkUserCash) + { + return segchkUserCashMapper.updateSegchkUserCash(segchkUserCash); + } + + /** + * 批量删除seg用户提现记录 + * + * @param cashIds 需要删除的seg用户提现记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCashByCashIds(Long[] cashIds) + { + return segchkUserCashMapper.deleteSegchkUserCashByCashIds(cashIds); + } + + /** + * 删除seg用户提现记录信息 + * + * @param cashId seg用户提现记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCashByCashId(Long cashId) + { + return segchkUserCashMapper.deleteSegchkUserCashByCashId(cashId); + } + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCollectServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCollectServiceImpl.java new file mode 100644 index 0000000..ea6e280 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCollectServiceImpl.java @@ -0,0 +1,107 @@ +package com.ruoyi.segchk.service.impl; + +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.segchk.domain.SegchkUserCollect; +import com.ruoyi.segchk.mapper.SegchkUserCollectMapper; +import com.ruoyi.segchk.service.ISegchkUserCollectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * seg用户收藏记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserCollectServiceImpl implements ISegchkUserCollectService +{ + @Autowired + private SegchkUserCollectMapper segchkUserCollectMapper; + + /** + * 查询seg用户收藏记录 + * + * @param collectId seg用户收藏记录主键 + * @return seg用户收藏记录 + */ + @Override + public SegchkUserCollect selectSegchkUserCollectByCollectId(Long collectId) + { + return segchkUserCollectMapper.selectSegchkUserCollectByCollectId(collectId); + } + + /** + * 查询seg用户收藏记录列表 + * + * @param segchkUserCollect seg用户收藏记录 + * @return seg用户收藏记录 + */ + @Override + public List selectSegchkUserCollectList(SegchkUserCollect segchkUserCollect) + { + return segchkUserCollectMapper.selectSegchkUserCollectList(segchkUserCollect); + } + + /** + * 新增seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + @Override + public int insertSegchkUserCollect(SegchkUserCollect segchkUserCollect) + { + return segchkUserCollectMapper.insertSegchkUserCollect(segchkUserCollect); + } + + /** + * 修改seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + @Override + public int updateSegchkUserCollect(SegchkUserCollect segchkUserCollect) + { + return segchkUserCollectMapper.updateSegchkUserCollect(segchkUserCollect); + } + + /** + * 批量删除seg用户收藏记录 + * + * @param collectIds 需要删除的seg用户收藏记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCollectByCollectIds(Long[] collectIds) + { + return segchkUserCollectMapper.deleteSegchkUserCollectByCollectIds(collectIds); + } + + /** + * 删除seg用户收藏记录信息 + * + * @param collectId seg用户收藏记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCollectByCollectId(Long collectId) + { + return segchkUserCollectMapper.deleteSegchkUserCollectByCollectId(collectId); + } + + /** + * 删除seg用户收藏记录对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteSegchkUserCollectByIds(String ids) + { + return segchkUserCollectMapper.deleteSegchkUserCollectByCollectIds(Convert.toLongArray(ids)); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserIndexServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserIndexServiceImpl.java new file mode 100644 index 0000000..4600d24 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserIndexServiceImpl.java @@ -0,0 +1,1380 @@ +package com.ruoyi.segchk.service.impl; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.order.service.impl.PaySupplier; +//import com.ruoyi.order.service.impl.WechatWithdrawSupplier; +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.mapper.*; +import com.ruoyi.segchk.service.*; +import com.ruoyi.segchk.domain.BaseInfoSet; +import com.ruoyi.setting.bean.WechatPaySet; +import com.ruoyi.setting.service.ILsPaySettingService; +import com.ruoyi.util.*; +import com.ruoyi.util.bean.*; +import com.weixin.pay.WXPay; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * seg用户基本信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-07-01 + */ +@Service +public class SegchkUserIndexServiceImpl implements ISegchkUserIndexService +{ + private static final Logger logger = LoggerFactory.getLogger(SegchkUserIndexServiceImpl.class); + + @Autowired + private SegchkUserIndexMapper segchkUserIndexMapper; + + @Autowired + private SegchkIndexUserVipMapper segchkIndexUserVipMapper; + + @Autowired + private SegchkServiceChkMapper segchkServiceChkMapper; + + @Autowired + private SegchkStoreSelfMgtMapper segchkStoreSelfMgtMapper; + + @Autowired + private SegchkSelfServiceChkMapper segchkSelfServiceChkMapper; + + @Autowired + private SegchkUserLikegoMapper segchkUserLikegoMapper; + + @Autowired + private SegchkUserChargeMapper segchkUserChargeMapper; + + @Autowired + private SegchkIndexUserAccountMapper segchkIndexUserAccountMapper; + + @Autowired + private SegchkIndexStoreAccountMapper segchkIndexStoreAccountMapper; + + @Autowired + private SegchkUserSecurityMapper segchkUserSecurityMapper; + + @Autowired + private SegchkUserCertificationInfoMapper segchkUserCertificationInfoMapper; + + @Autowired + private SegchkStoreCashMapper segchkStoreCashMapper; + + @Autowired + private SegchkUserCashMapper segchkUserCashMapper; + + + @Autowired + private SegchkServiceCommentMapper segchkServiceCommentMapper; + + @Autowired + private SegchkUserBasicInfoMapper segchkUserBasicInfoMapper; + + @Autowired + private SegchkUserExtInfoMapper segchkUserExtInfoMapper; + + @Autowired + private SegchkUserWechatMapper segchkUserWechatMapper; + + @Autowired + private ISegchkUserRewardService segchkUserRewardService; + + @Autowired + private ISegchkStoreIndexService segchkStoreIndexService; + + @Autowired + private ISegchkProviderIndexService segchkProviderIndexService; + + @Autowired + private ISegchkSystemSettingService segchkSystemSettingService; + + @Autowired + private ISegchkStoreRewardService segchkStoreRewardService; + + + @Autowired + private ISegchkUserAccountService segchkUserAccountService; + + /** + * 注入支付设置服务 + */ + @Autowired + private ILsPaySettingService paySetService; + + @Value("${segchk.cash.store_threshold:#{0.0}}") + private BigDecimal storeThreshold; + + @Value("${segchk.cash.user_threshold:#{0.0}}") + private BigDecimal userThreshold; + + @Value("${segchk.cash.store_threshold_first:#{0.0}}") + private BigDecimal storeThresholdFirst; + + @Value("${segchk.cash.user_threshold_first:#{0.0}}") + private BigDecimal userThresholdFirst; + + @Value("${segchk.cash.sandbox:#{null}}") + private Integer sandbox; + + /** + * 查询seg用户中心信息 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + @Override + public SegchkUserWebResp selectSegchkUserWebInfo(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectSegchkUserWebInfo with: {}", segchkUserWebReq.toString()); + SegchkUserWebResp segchkUserWebResp = segchkUserIndexMapper.selectSegchkUserWebInfo(segchkUserWebReq); + segchkUserWebResp.setProviderId(segchkUserWebReq.getProviderId()); + if(ObjectUtils.isEmpty(segchkUserWebResp.getRecommenderId()) || ObjectUtils.isEmpty(segchkUserWebResp.getRecommenderLevel())){ +// 说明是平台用户,无推荐人 + segchkUserWebResp.setRecommenderLevel(null); + segchkUserWebResp.setRecommenderId(null); + segchkUserWebResp.setRecommenderName("无"); + logger.debug("selectSegchkUserWebInfo res: ({})", segchkUserWebResp.toString()); + return segchkUserWebResp; + } + switch (segchkUserWebResp.getRecommenderLevel()){ + case "0": segchkUserWebResp.setRecommenderName(segchkProviderIndexService.selectSegchkProviderName(segchkUserWebResp.getRecommenderId()));break; + case "1": segchkUserWebResp.setRecommenderName(segchkStoreIndexService.selectSegchkStoreName(segchkUserWebResp.getRecommenderId()));break; + case "2": segchkUserWebResp.setRecommenderName(segchkUserIndexMapper.selectSegchkUserName(segchkUserWebResp.getRecommenderId()));break; + } + logger.debug("selectSegchkUserWebInfo res: ({})", segchkUserWebResp.toString()); + return segchkUserWebResp; + } + + /** + * 查询seg用户核消列表 + * + * @param segchkUserWebReq + * @return seg用户扩展信息 + */ + @Override + public List selectUserServiceCHKList(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectUserServiceCHKList with: {}", segchkUserWebReq.toString()); + return segchkUserIndexMapper.selectUserServiceCHKList(segchkUserWebReq); + } + + /** + * 查询seg用户会员卡列表或赠卡优惠券列表 + * + * @param segchkUserWebReq + * @return seg用户扩展信息 + */ + @Override + public List selectUserCardList(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectUserCardList with: {}", segchkUserWebReq.toString()); + if(segchkUserWebReq.getCardFlag() == 0) { + return segchkUserIndexMapper.selectUserCardList(segchkUserWebReq); + } + else if(segchkUserWebReq.getCardFlag() == 1){ + return segchkUserIndexMapper.selectUserPerformanceList(segchkUserWebReq); + } + return null; + } + + /** + * 查询seg用户收藏列表 + * + * @param segchkUserWebReq + * @return seg用户扩展信息 + */ + @Override + public List selectUserCollectList(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectUserCollectList with: {}", segchkUserWebReq.toString()); + return segchkUserIndexMapper.selectUserCollectList(segchkUserWebReq); + } + + /** + * 查询seg用户预约列表 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + @Override + public List selectUserLikGoList(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectUserLikGoList with: {}", segchkUserWebReq.toString()); + return segchkUserIndexMapper.selectUserLikGoList(segchkUserWebReq); + } + + /** + * 查询seg用户充值列表 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + @Override + public List selectUserChargeList(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectUserChargeList with: {}", segchkUserWebReq.toString()); + return segchkUserIndexMapper.selectUserChargeList(segchkUserWebReq); + } + + /** + * 查询seg用户提现列表 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + @Override + public List selectUserCashList(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectUserCashList with: {}", segchkUserWebReq.toString()); + return segchkUserIndexMapper.selectUserCashList(segchkUserWebReq); + } + + /** + * 查询seg用户消息列表 + * + * @param segchkUserWebReq@return seg用户扩展信息 + */ + @Override + public List selectUserMsgList(SegchkUserWebReq segchkUserWebReq) { + logger.debug("selectUserMsgList with: {}", segchkUserWebReq.toString()); + return segchkUserIndexMapper.selectUserMsgList(segchkUserWebReq); + } + + /** + * 查询seg用户预约可用卡券列表 + * + * @param segchkServiceOrderWebReq seg用户中心请求实体 + * @return seg用户扩展信息 + */ + @Override + public List selectUserOrderPredCardListWebInfo(SegchkServiceOrderWebReq segchkServiceOrderWebReq) { + List segchkServiceOrderWebReqs = segchkUserIndexMapper.selectUserOrderPredCardListWebInfo(segchkServiceOrderWebReq); +// 如果返回结果是空,则说明无会员卡或赠卡或用,如果返回的结果中没有会员卡,说明无可用卡;如果返回的结果中,存在会员卡的store_id为空的情况:说明该赠卡可用,但是该会员卡在该商家不可用;如果是会员卡的时候并且card_id也是空的情况:说明该赠卡可用,但是该会员卡在该商家已经超过了商家的核销次数 + AtomicInteger a = new AtomicInteger(-1); + if(CollectionUtils.isEmpty(segchkServiceOrderWebReqs) + || segchkServiceOrderWebReqs.stream().noneMatch(v -> v.getTypeId() == 0)){ + logger.debug("selectUserOrderPredCardListWebInfo with: {} --- {}", segchkServiceOrderWebReq.toString(), "this user no card can use in this store"); + return new ArrayList(); + } + List segchkServiceOrderWebReqs1 = segchkServiceOrderWebReqs.stream().filter(v -> { + if (v.getTypeId() == 0) { + a.set(0); + if (Objects.isNull(v.getStoreId())) { + a.set(1); + return false; + } else if (Objects.isNull(v.getCardId())) { + a.set(2); + return false; + } else + return true; + } + return true; + }).collect(Collectors.toList()); + StringBuffer sb = new StringBuffer(); + switch (a.get()){ + case 1 : sb.append("this store not support this vip card");break; + case 2 : sb.append("this vip card check over in this store");break; + default : sb.append("this vip card can use in this store");break; + } + logger.debug("selectUserOrderPredCardListWebInfo with: {} --- {}{}", segchkServiceOrderWebReq.toString(), sb.toString(), segchkServiceOrderWebReqs1.size()); + + return segchkServiceOrderWebReqs1; + } + + /** + * 根据用户核消二维码提取出来相应的信息进行核消,1、检查核卡是否可以核消(防止该卡已经在该商家不能再次核消),2、检查该预约id,是否已经使用(防止多次预约核消使用) + * + * @param segchkUserLikego seg用户想去记录实体 + * @return 结果 + */ + @Override + public void CheckUserServiceChk(SegchkUserLikego segchkUserLikego) { + logger.debug("CheckUserServiceChk with: {}", segchkUserLikego.toString()); + SegchkServiceOrderWebReq segchkServiceOrderWebReq = new SegchkServiceOrderWebReq(); + segchkServiceOrderWebReq.setProviderId(segchkUserLikego.getProviderId()); + segchkServiceOrderWebReq.setUserId(segchkUserLikego.getUserId()); + segchkServiceOrderWebReq.setStoreId(segchkUserLikego.getStoreId()); + List segchkServiceOrderWebReqList = segchkUserIndexMapper.selectUserOrderPredCardListWebInfo(segchkServiceOrderWebReq); + if(segchkServiceOrderWebReqList == null || segchkServiceOrderWebReqList.isEmpty()){ + logger.warn("CheckUserServiceChk user has no card can use {}", segchkUserLikego.toString()); +// 说明该用户已经没有可使用的卡了 + } + else { + final List collect = segchkServiceOrderWebReqList.stream().filter(v -> v.getProviderId() == segchkUserLikego.getProviderId() && v.getUserId() == segchkUserLikego.getUserId() && v.getStoreId() == segchkUserLikego.getStoreId() && v.getCardId() == segchkUserLikego.getCardId() && v.getTypeId() == segchkUserLikego.getCardType()).collect(Collectors.toList()); + } + + } + + @Override + public SegchkServiceOrderChkTestResp selectUserOrderPredInfo(Long likegoId) { + logger.debug("selectUserOrderPredInfo with: {}", likegoId.toString()); + return segchkUserIndexMapper.selectUserOrderPredInfo(likegoId); + } + + /** + * 根据核查结果进行核消。说明已经满足核消条件 + * + * @param segchkServiceOrderChkTestResp + * @param likegoId + * @param stoRewardWithChk + * @return 结果 + */ + @Override + @Transactional + public int OrderCheckTransaction(SegchkServiceOrderChkTestResp segchkServiceOrderChkTestResp, Long likegoId, Boolean stoRewardWithChk) { + logger.debug("OrderCheckTransaction with: {}---{}", segchkServiceOrderChkTestResp.toString(), likegoId); + int ret = 0; + Long tmpStoreId = segchkServiceOrderChkTestResp.getStoreId(); + if(segchkServiceOrderChkTestResp.getCardType() == 0){ +// 说明是会员卡,则先更新会员卡次数。然后插入核消记录,最后更新预约订单状态 +// SegchkUserVip segchkUserVip = new SegchkUserVip(); + logger.debug("OrderCheckTransaction will check with vip card"); + ret += segchkIndexUserVipMapper.updateSegchkUserVipCheck(segchkServiceOrderChkTestResp.getCardId()); + logger.debug("OrderCheckTransaction checked({}) with vip card({})" + , (ret == 1 ? "successed" : "failed") + , segchkServiceOrderChkTestResp.getCardId()); + SegchkServiceChk segchkServiceChk = new SegchkServiceChk(); + segchkServiceChk.setCardId(segchkServiceOrderChkTestResp.getCardId()); +// segchkServiceChk.setCardTypeId(0L); + segchkServiceChk.setProviderId(segchkServiceOrderChkTestResp.getProviderId()); + segchkServiceChk.setStoreId(tmpStoreId); + segchkServiceChk.setUserId(segchkServiceOrderChkTestResp.getUserId()); + + ret += segchkServiceChkMapper.insertSegchkServiceChk(segchkServiceChk); + logger.debug("OrderCheckTransaction save({}) service-check with ({})" + , (ret == 2 ? "successed" : "failed") + , segchkServiceChk.toString()); + + if(stoRewardWithChk){ +// 如果允许,会员卡第一次核消,将给该商家返利 + Map params = new HashMap<>(); + params.put("cardId", segchkServiceChk.getCardId()); + params.put("storeId", tmpStoreId); + params.put("userId", segchkServiceChk.getUserId()); +// 根据卡号id,获取会员卡相关信息 + SegchkChargeReward segchkChargeReward = segchkUserIndexMapper.selectSegchkRewardInfoForCheck(params); + + int validateForCheck = segchkChargeReward.validateForCheck(tmpStoreId); + if(validateForCheck < 0){ + logger.warn("validateForCheselectUserOrderPredCardListWebInfock can not make reword for store({}), because {}", tmpStoreId, (validateForCheck == -1 ? "持卡用户推荐人不是平台" : validateForCheck == -2 ? "已使用过" : validateForCheck == -3 ? "该商家不支持该卡的核消" : "该商家不需要返利")); + } + else{ + segchkChargeReward.mkReward(); + segchkChargeReward.setRecommendersLevel(1); + segchkChargeReward.setUserRecommenders(tmpStoreId); + makeStoreReward(segchkChargeReward); + } + } + } + else { +// 说明是优惠券或赠卡则先更新赠卡次数。然后插入核消记录,最后更新预约订单状态 + logger.debug("OrderCheckTransaction will check with store card"); + ret += segchkStoreSelfMgtMapper.updateSegchkUserVipCheck(segchkServiceOrderChkTestResp.getCardId()); + logger.debug("OrderCheckTransaction checked({}) with vip card({})" + , (ret == 1 ? "successed" : "failed") + , segchkServiceOrderChkTestResp.getCardId()); + SegchkSelfServiceChk segchkSelfServiceChk = new SegchkSelfServiceChk(); + segchkSelfServiceChk.setCardId(segchkServiceOrderChkTestResp.getCardId()); + segchkSelfServiceChk.setProviderId(segchkServiceOrderChkTestResp.getProviderId()); + segchkSelfServiceChk.setStoreId(tmpStoreId); + segchkSelfServiceChk.setUserId(segchkServiceOrderChkTestResp.getUserId()); + ret += segchkSelfServiceChkMapper.insertSegchkSelfServiceChk(segchkSelfServiceChk); + logger.debug("OrderCheckTransaction save({}) service-check with ({})" + , (ret == 2 ? "successed" : "failed") + , segchkSelfServiceChk.toString()); + } + SegchkUserLikego segchkUserLikego = new SegchkUserLikego(); + segchkUserLikego.setLikegoId(likegoId); + segchkUserLikego.setMgtState(2); + + ret += segchkUserLikegoMapper.updateSegchkUserLikego(segchkUserLikego); + logger.debug("OrderCheckTransaction update({}) likego({})" + , (ret == 3 ? "successed" : "failed") + , likegoId); + return ret; + } + + /** + * 根据支付回调结果,进行相应的更新 + * + * @param chargeId 核消检查信息 + * @param ret 预约单id + * @return 结果 + */ + @Override + @Transactional + public void chargeRet(String chargeId, int ret) { +// 根据回调结果。如果成功,则插入生成会员卡,并获取会员卡号,否则不产生新的会员卡号 + logger.debug("chargeRet with: {}---{}", chargeId, ret); + SegchkUserCharge segchkUserCharge1 = segchkUserChargeMapper.selectSegchkUserChargeByChargeId(Long.valueOf(chargeId)); + if(ObjectUtils.isEmpty(segchkUserCharge1) || ObjectUtils.isEmpty(segchkUserCharge1.getRetFlag())) { + logger.debug("chargeRet with: {} is not exit", chargeId); + return; + } + if(segchkUserCharge1.getRetFlag() != 0){ + logger.debug("chargeRet charge:{}{} had been updated with: {} on {}", chargeId, ret, segchkUserCharge1.getRetFlag(), segchkUserCharge1.getModTime()); + return; + } + else if(ret == 0){ +// 支付成功,生成新的会员卡信息 + SegchkChargeRet segchkChargeRet = new SegchkChargeRet(); + segchkChargeRet.setChargeId(Long.valueOf(chargeId)); + int insert_ret = segchkIndexUserVipMapper.insertSegchkUserVipByCharge(segchkChargeRet); + if(insert_ret == 0){ + logger.error("chargeRet生成新的会员卡失败--->{0}\n", segchkChargeRet.getChargeId()); + } + else{ + logger.info("chargeRet生成新的会员卡成功--->{0}:{1}\n", chargeId, segchkChargeRet.getCardId()); + SegchkUserBasicInfo segchkUserBasicInfo = new SegchkUserBasicInfo(); + segchkUserBasicInfo.setUserId(segchkUserCharge1.getUserId()); + segchkUserBasicInfo.setCardTypeId(segchkUserCharge1.getCardTypeId()); + segchkUserBasicInfoMapper.updateSegchkUserBasicInfo(segchkUserBasicInfo); + } +// 根据新生成的会员卡号,充值id,更新相应的充值记录表,商家赠卡表等 + SegchkUserCharge segchkUserCharge = new SegchkUserCharge(); + segchkUserCharge.setChargeId(segchkChargeRet.getChargeId()); + if(segchkChargeRet.getCardId() != null && segchkChargeRet.getCardId() != 0L) { + logger.debug("chargeRet chargeId: {}---cardId: {}", segchkChargeRet.getChargeId(), segchkChargeRet.getCardId()); + segchkUserCharge.setCardId(segchkChargeRet.getCardId()); + } + else{ + logger.warn("chargeRet chargeId: {} without cardId", segchkChargeRet.getChargeId()); + } + segchkUserCharge.setRetFlag(1); + int updaterest = segchkUserChargeMapper.updateSegchkUserChargeByRet(segchkUserCharge); + logger.warn("chargeRet update with {} result: {}", "success", updaterest == 1 ? "successed" : "failed"); + + Map params = new HashMap<>(); + params.put("chargeId", segchkUserCharge1.getChargeId()); + params.put("userId", segchkUserCharge1.getUserId()); + params.put("providerId", segchkUserCharge1.getProviderId()); + params.put("cardTypeId", segchkUserCharge1.getCardTypeId()); + params.put("cardId", segchkChargeRet.getCardId()); + updaterest = makeChargeReward(params); + } + else{ + logger.warn("chargeRet with: {}---{}, 充值失败!!!", chargeId.toString(), ret); + SegchkUserCharge segchkUserCharge = new SegchkUserCharge(); + segchkUserCharge.setChargeId(Long.parseLong(chargeId)); + segchkUserCharge.setRetFlag(-1); + int updaterest = segchkUserChargeMapper.updateSegchkUserCharge(segchkUserCharge); + int deleterest = segchkIndexUserAccountMapper.deleteSegchkUserAccountByCharge(segchkUserCharge); + logger.warn("chargeRet update with {} result: {}", "failed", deleterest == 1 ? "successed" : "failed"); + } + } + + @Override + public int makeChargeReward(Map params) { + logger.debug("makeChargeReward with --- ({})", JSON.toJSONString(params)); + int ret = 0; +// 计算返利.给用户或商户,运营商加余额 + SegchkChargeReward segchkChargeReward = segchkUserIndexMapper.selectSegchkRewardInfoForCharge(params); + segchkChargeReward.setCardId((Long) params.get("cardId")); + segchkChargeReward.setChargeId((Long) params.get("chargeId")); + if(ObjectUtils.isEmpty(segchkChargeReward.getUserRecommenders()) || ObjectUtils.isEmpty(segchkChargeReward.getRecommendersLevel())){ +// 推荐人是平台 + logger.warn("chargeRet charge({}) reward is will belong to platform", params.get("chargeId")); + } + /*else if(segchkChargeReward.getRecommendersLevel() == 0){ + + }*/ + else{ + switch (segchkChargeReward.getRecommendersLevel()){ + case 0: { +// return makeProviderReward(segchkChargeReward, params); + return 0; + } + case 1: { + return makeStoreReward(segchkChargeReward); + } + case 2: { + return makeUserReward(segchkChargeReward); + } + default: return 0; + } + } + return ret; + } + + private int makeUserReward(SegchkChargeReward segchkChargeReward) { + logger.debug("makeUserReward with ({})", segchkChargeReward.toString()); + int ret = 0; + if(ObjectUtils.isEmpty(segchkChargeReward.getReward()) || segchkChargeReward.getReward().compareTo(new BigDecimal(0.0)) <= 0){ + logger.debug("makeUserReward reword is null or 0.0"); + return 1; + } +// 如果推荐是用户。则给用户累加奖励 + SegchkUserReward segchkUserReward = new SegchkUserReward(); + segchkUserReward.setProviderId(segchkChargeReward.getProviderId()); + segchkUserReward.setReward(segchkChargeReward.getReward()); + segchkUserReward.setRewardCardId(segchkChargeReward.getCardId()); + segchkUserReward.setRewardCardTypeId(Long.valueOf(segchkChargeReward.getCardTypeId())); + segchkUserReward.setUserId(segchkChargeReward.getUserRecommenders()); + ret = segchkUserRewardService.insertSegchkUserReward(segchkUserReward); + if(ret > 0 ){ + logger.debug("makeUserReward save reward success with chargeId({})--- {}", segchkChargeReward.getChargeId(), segchkUserReward.toString()); + } + else{ + logger.warn("makeUserReward save reward failed with chargeId({}) --- {}", segchkChargeReward.getChargeId(), segchkUserReward.toString()); + } + + segchkChargeReward.setChargeId(segchkChargeReward.getChargeId()); + segchkChargeReward.setRewardId(segchkUserReward.getRewardId()); +// 形成商户余额 + ret = segchkUserIndexMapper.addAccountByReward(segchkChargeReward); + if(ret > 0){ + logger.debug("makeUserReward add account successed for --- {}", segchkChargeReward.toString()); + } + else { + logger.warn("makeUserReward add account failed for --- {}", segchkChargeReward.toString()); + } + return ret; + } + + private int makeStoreReward(SegchkChargeReward segchkChargeReward) { + logger.debug("makeStoreReward with ({})", segchkChargeReward.toString()); + int ret = 0; + if(ObjectUtils.isEmpty(segchkChargeReward.getReward()) || segchkChargeReward.getReward().compareTo(new BigDecimal(0.0)) <= 0){ + logger.debug("makeStoreReward reword is null or 0.0"); + return 1; + } +// 如果推荐是商户。则给商户累加奖励 + SegchkStoreReward segchkStoreReward = new SegchkStoreReward(); + segchkStoreReward.setProviderId(segchkChargeReward.getProviderId()); + segchkStoreReward.setReward(segchkChargeReward.getReward()); + segchkStoreReward.setRewardCardId(segchkChargeReward.getCardId()); + segchkStoreReward.setRewardCardTypeId(Long.valueOf(segchkChargeReward.getCardTypeId())); + segchkStoreReward.setStoreId(segchkChargeReward.getUserRecommenders()); + ret = segchkStoreRewardService.insertSegchkStoreReward(segchkStoreReward); + if(ret > 0 ){ + logger.debug("makeStoreReward save reward success with chargeId({})--- {}", segchkChargeReward.getChargeId(), segchkStoreReward.toString()); + } + else{ + logger.warn("makeStoreReward save reward failed with chargeId({}) --- {}", segchkChargeReward.getChargeId(), segchkStoreReward.toString()); + } + + segchkChargeReward.setChargeId(segchkChargeReward.getChargeId()); + segchkChargeReward.setRewardId(segchkStoreReward.getRewardId()); +// 形成商户余额 + ret = segchkStoreIndexService.addAccountByReward(segchkChargeReward); + if(ret > 0){ + logger.debug("chargeRet add account successed for --- {}", segchkChargeReward.toString()); + } + else { + logger.warn("chargeRet add account failed for --- {}", segchkChargeReward.toString()); + } + return ret; + } + + private int makeProviderReward(SegchkChargeReward segchkChargeReward, Map params) { + return 0; + } + + /** + * 根据支用户id,运营商id,查询该用户可购买的卡 + * + * @param segchkUserWebReq 用户请示信息体 + * @return 结果 + */ + @Override + public List SegchkUserChargePre(SegchkUserWebReq segchkUserWebReq) { + logger.debug("SegchkUserChargePre with: {}", segchkUserWebReq.toString()); + List segchkUserChargeCards = segchkUserIndexMapper.selectSegchkUserChargePre(segchkUserWebReq); + +// 说明该用户购买过正式会员卡 +// boolean b = segchkUserChargeCards.parallelStream().anyMatch(v -> v.getHadBuy() != 0 && v.getCardTypeValue().compareTo(new BigDecimal(20.0)) = -1); + if(segchkUserChargeCards.parallelStream().anyMatch(v -> v.getCanBuy() == 1 || v.getCanBuy() == 3)){ +// 如果有一张卡,为正在使用中1,则不可以再充值购买 + logger.debug("SegchkUserChargePre user had one using card"); + return null; + } + else{ + List segchkUserChargeCards1 = segchkUserChargeCards.parallelStream().filter(v -> { +// 通过过滤出可购买的卡(间接过滤到为超限不能再买的卡) + return v.getCanBuy() == 0; + }).collect(Collectors.toList()); + return segchkUserChargeCards1.size() == 0 || segchkUserChargeCards1.isEmpty() ? null : segchkUserChargeCards1; + } + } + + /** + * 根据支用户id,运营商id,用户充值时可用余额 + * + * @param segchkUserCharge 用户请示信息体 + * @return 结果 + */ + @Override + public BigDecimal getAccount(SegchkUserCharge segchkUserCharge) { + logger.debug("getAccount with: {}", segchkUserCharge.toString()); + SegchkUserAccountCheck segchkUserAccountCheck = new SegchkUserAccountCheck(); + segchkUserAccountCheck.setAccount(segchkUserCharge.getAccountUsed()); + segchkUserAccountCheck.setProviderId(segchkUserCharge.getProviderId()); + segchkUserAccountCheck.setUserId(segchkUserCharge.getUserId()); + BigDecimal ret = segchkIndexUserAccountMapper.checkSegchkUserAccount(segchkUserAccountCheck); + return ret; + } + + /** + * 根据用户id(或者商户id),运营商id,用户身份查询用户余额 + * + * @param segchkUserCashOpsReq 用户请示信息体 + * @param ip + * @return 结果 + */ + @Override + public int getAccountForCash(SegchkUserCashOpsReq segchkUserCashOpsReq, String ip) { + logger.debug("getAccountForCash with: {}---{}", segchkUserCashOpsReq.toString(), ip); + SegchkUserCashOpsResp segchkUserCashOpsResp = segchkIndexUserAccountMapper.selectSegchkUserAccountForCash(segchkUserCashOpsReq); + if(segchkUserCashOpsResp == null){ +// 说明用户没有任何余额信息 + return -1; + } + + if(segchkUserCashOpsReq.getUserLevel() != 1 && segchkUserCashOpsReq.getUserLevel() != 2){ +// 非正常用户 + return -2; + } + BigDecimal firstline = segchkUserCashOpsReq.getUserLevel() == 1 ? storeThresholdFirst : userThresholdFirst; + BigDecimal baseline = segchkUserCashOpsReq.getUserLevel() == 1 ? storeThreshold : userThreshold; + + if(segchkUserCashOpsReq.getCash().compareTo(segchkUserCashOpsReq.getCashId() == null ? firstline : baseline) != 1){ +// 首次提现余额受限 + return -3; + } + if(segchkUserCashOpsReq.getCash().compareTo(segchkUserCashOpsResp.getAccount()) == 1){ +// 提现金额超过余额 + return -4; + } + +// 1、创建提现记录 +// 2 新增余额记录 +// ret = 2 成功 + int ret = makeCashOps(segchkUserCashOpsReq, ip); + + return ret; + } + + /** + * 根据提现id,进行提现结果保存,及余额更新 + * + * @param chargeId 行政区代码 + * @param ret 行政区代码 + * @return seg首页轮播图管理 + */ + @Override + @Transactional + public void cashRet(String chargeId, int ret) { + logger.debug("cashRet with: {}---{}", chargeId.toString(), ret); + int opsRet = 0; + SegchkUserCash segchkUserCash = new SegchkUserCash(); + segchkUserCash.setCashId(Long.valueOf(chargeId)); + segchkUserCash.setRetFlag(ret == 0 ? 1 : 2); + opsRet = segchkUserCashMapper.updateSegchkUserCash(segchkUserCash); + if(ret != 0){ + opsRet = segchkIndexUserAccountMapper.deleteSegchkUserAccountByCash(segchkUserCash); + } + } + + /** + * 新增用户评价 + * + * @param segchkServiceCommentUserReq 用户评价提交实体 + * @return seg首页轮播图管理 + */ + @Override + @Transactional + public int insertSegchkServiceComment(SegchkServiceCommentUserReq segchkServiceCommentUserReq) { + logger.debug("insertSegchkServiceComment with: {}", segchkServiceCommentUserReq.toString()); + int ret = segchkServiceCommentMapper.insertSegchkServiceCommentByChk(segchkServiceCommentUserReq); + SegchkServiceChk segchkServiceChk = new SegchkServiceChk(); + segchkServiceChk.setCommentId(segchkServiceCommentUserReq.getCommentId()); + segchkServiceChk.setChkServiceId(segchkServiceCommentUserReq.getChkServiceId()); + ret += segchkStoreIndexService.addCommentAccByComment(segchkServiceCommentUserReq.getCommentId()); + ret += segchkServiceChkMapper.updateSegchkServiceChk(segchkServiceChk); + return ret; + } + + /** + * 根据评价id,查询用户评价 + * + * @param segchkServiceCommentUserReq 用户评价提交实体 + * @return seg首页轮播图管理 + */ + @Override + public SegchkServiceComment selectSegchkServiceComment(SegchkServiceCommentUserReq segchkServiceCommentUserReq) { + logger.debug("selectSegchkServiceComment with: {}", segchkServiceCommentUserReq.toString()); + return segchkServiceCommentMapper.selectSegchkServiceCommentByCommentId(segchkServiceCommentUserReq.getCommentId()); + } + + /** + * 根据用户提交信息进行修改 + * + * @param segchkUserSetInfoReq 用户评价提交实体 + * @return 更新结果 + */ + @Override + public int updateUserInfo(SegchkUserSetInfoReq segchkUserSetInfoReq) { + logger.debug("updateUserInfo with: {}", segchkUserSetInfoReq.toString()); + SegchkUserSecurity segchkUserSecurity = new SegchkUserSecurity(); + segchkUserSecurity.setPasswd(segchkUserSetInfoReq.getPasswd()); + segchkUserSecurity.setUserId(segchkUserSetInfoReq.getUserId()); + segchkUserSecurity.setProviderId(segchkUserSetInfoReq.getProviderId()); + return segchkUserSecurityMapper.insertSegchkUserSecurity(segchkUserSecurity); + } + + /** + * 根据用户提交信息实名设置 + * + * @param segchkUserCertificationInfo 用户提交实体 + * @return 更新结果 + */ + @Override + public int userCerticify(SegchkUserCertificationInfo segchkUserCertificationInfo) { + logger.debug("userCerticify with: {}", segchkUserCertificationInfo.toString()); + SegchkUserCertificationInfo tmp = new SegchkUserCertificationInfo(); + tmp.setUserId(segchkUserCertificationInfo.getUserId()); + tmp.setProviderId(segchkUserCertificationInfo.getProviderId()); + List infos = segchkUserCertificationInfoMapper.selectSegchkUserCertificationInfoList(tmp); + if(infos == null || infos.isEmpty()){ + return segchkUserCertificationInfoMapper.insertSegchkUserCertificationInfo(segchkUserCertificationInfo); + } + else{ + segchkUserCertificationInfo.setUsercardId(infos.get(0).getUsercardId()); + return segchkUserCertificationInfoMapper.updateSegchkUserCertificationInfo(segchkUserCertificationInfo); + } + } + + /** + * 根据用户信息返回用户身份 + * + * @param phoneno 用户信息 + * @return 更新结果 + */ + @Override + public SegchkUserLevelInfo selectUserLevelByMobile(String phoneno) { + logger.debug("selectUserLevelByMobile with: {}", phoneno.toString()); + return segchkUserIndexMapper.selectUserLevelByMobile(phoneno); + } + + /** + * 根据用户信息注册用户基本信息表 + * + * @param segchkUserBasicInfo 用户信息 + * @return 插入结果 + */ + @Override + public int addUserBasicInfo(SegchkUserBasicInfo segchkUserBasicInfo) { + logger.debug("addUserBasicInfo with: {}", segchkUserBasicInfo.toString()); + return segchkUserBasicInfoMapper.insertSegchkUserBasicInfo(segchkUserBasicInfo); + } + + /** + * 根据推荐人信息,检查推荐人是否存在 + * + * @param parmMap 推荐人信息 + * @return 查询记录数 + */ + @Override + public int recommenderIsExit(Map parmMap) { + logger.debug("recommenderIsExit with: {}", parmMap.toString()); + return segchkUserIndexMapper.recommenderIsExit(parmMap); + } + + /** + * 根据推荐人信息,更新用户扩展信息表 + * + * @param segchkUserExtInfo 推荐人信息 + * @return 查询记录数 + */ + @Override + public int insertUserExtInfo(SegchkUserExtInfo segchkUserExtInfo) { + logger.debug("insertUserExtInfo with: {}", segchkUserExtInfo.toString()); + return segchkUserExtInfoMapper.insertSegchkUserExtInfo(segchkUserExtInfo); + } + + /** + * 根据用户基本信息查找用户微信信息 + * + * @param segchkUserLevelInfo 用户基本信息 + * @return 查询记录数 + */ + @Override + public String getWeChatInfoByUserId(SegchkUserLevelInfo segchkUserLevelInfo) { + logger.debug("getWeChatInfoByUserId with: {}", segchkUserLevelInfo.toString()); + if(segchkUserLevelInfo.getUserLevel() == 2) { + SegchkUserWechat segchkUserWechat = segchkUserWechatMapper.selectSegchkUserWechatByUserId(segchkUserLevelInfo.getUserId()); + if(ObjectUtils.isEmpty(segchkUserWechat) + || StringUtils.isEmpty(segchkUserWechat.getOpenid())){ + return null; + } + return segchkUserWechat.getOpenid(); + } + else if(segchkUserLevelInfo.getUserLevel() == 1){ + WeChatCustomerLink weChatCustomerLink = segchkStoreIndexService.selectWeChatInfoByStoreId(segchkUserLevelInfo.getUserId()); + return ObjectUtils.isEmpty(weChatCustomerLink) ? null : weChatCustomerLink.getOpenId(); + } + else if(segchkUserLevelInfo.getUserLevel() == 0){ + return segchkProviderIndexService.selectWeChatInfoByProviderId(segchkUserLevelInfo.getUserId()); + } + else return null; + } + + /** + * 根据用户信息,更新用户微信信息表 + * + * @param segchkUserWechat 用户基本信息 + * @param userLevel + * @return 查询记录数 + */ + @Override + public int updateWeChatInfoByUserId(SegchkUserWechat segchkUserWechat, String userLevel) { + logger.debug("updateWeChatInfoByUserId with: {}---{}", segchkUserWechat.toString(), userLevel); + if(!ObjectUtils.isEmpty(segchkUserWechat.getNickName())) { +// 如果用户昵称不空,则对昵称进行utf转换,避免用户昵称特殊字符无法存入 + try { + segchkUserWechat.setNickName(URLEncoder.encode(segchkUserWechat.getNickName(), "utf-8")); + } catch (UnsupportedEncodingException e) { + logger.error("updateWeChatInfoByUserId get nickName error: {}", e.getMessage()); + e.printStackTrace(); + } + } + switch (userLevel){ + case "0": return segchkUserIndexMapper.updateSegchkProviderWechat(segchkUserWechat); + case "1": return segchkUserIndexMapper.updateSegchkStoreWechat(segchkUserWechat); + case "2": return segchkUserIndexMapper.updateSegchkUserWechat(segchkUserWechat); + default: return -1; + } + } + + + @Transactional + public int makeCashOps(SegchkUserCashOpsReq segchkUserCashOpsReq, String ip) { + logger.debug("makeCashOps with: {}", segchkUserCashOpsReq.toString()); + int ret = 0; + int type = segchkUserCashOpsReq.getUserLevel(); + String cashId = null; + if(type == 1){ +// 说明是商户提现 + SegchkStoreCash segchkStoreCash = new SegchkStoreCash(); + segchkStoreCash.setCash(segchkUserCashOpsReq.getCash()); + segchkStoreCash.setCashType("0"); + segchkStoreCash.setProviderId(segchkUserCashOpsReq.getProviderId()); + segchkStoreCash.setStoreId(segchkUserCashOpsReq.getUserId()); + segchkStoreCash.setRetFlag("0"); +// 增加提现记录 + ret = segchkStoreCashMapper.insertSegchkStoreCash(segchkStoreCash); +// 根据提现计算商户全额 + ret += segchkIndexStoreAccountMapper.insertSegchkStoreAccountByCash(segchkStoreCash); + cashId = segchkStoreCash.getCashId().toString(); + } + else if(type == 2){ + SegchkUserCash segchkUserCash = new SegchkUserCash(); + segchkUserCash.setCash(segchkUserCashOpsReq.getCash()); + segchkUserCash.setCashType("0"); + segchkUserCash.setProviderId(segchkUserCashOpsReq.getProviderId()); + segchkUserCash.setUserId(segchkUserCashOpsReq.getUserId()); + segchkUserCash.setRetFlag(0); +// 增加提现记录 + ret = segchkUserCashMapper.insertSegchkUserCash(segchkUserCash); +// 根据提现计算最新的余额 + ret += segchkIndexUserAccountMapper.insertSegchkStoreAccountByCash(segchkUserCash); + cashId = segchkUserCash.getCashId().toString(); + + } + if(ret != 2 || StringUtils.isEmpty(cashId)){ + logger.error("makeCashOps fail due to create cash order createcnt{}---return{}---cashId{}....", ret, -12, cashId); + return -12; + } + String openId = segchkUserCashOpsReq.getSearchValue(); + Boolean usesandbox = !StringUtils.isEmpty(segchkUserCashOpsReq.getRemark()); + return wechatAppletTransfers(cashId, segchkUserCashOpsReq.getUserId(), segchkUserCashOpsReq.getProviderId(), ip, type, openId).getFlag(); + } + + /** + * 微信小程序支付 + * + * @param orderCode 订单code + * @param userId 用户id + * @param providerId 用户id + * @param ip 请求真实ip + * @param type 支付类型 1:订单支付 2:预存款充值 ---> 1用户支付,2商户支付 + * @return 返回码和支付宝支付的html 返回码说明 -1:用户不存在 -3:没有待支付的订单 -5:微信生成订单出错 -7 没有设置网站地址 -8 缺少配置 -9 没有启用 1 成功 + */ + @Override + public CommonResponse wechatAppletPay(String orderCode, Long userId, Long providerId, String ip, int type) { + logger.debug("wechatAppletPay and orderCode:{} \r\n userId:{} \r\n ip:{} \r\n:type:{}", orderCode, userId, ip, type); + + /* WeChatCustomerLink weChatCustomerLink = weChatCustomerLinkService.queryWeChatCustomerLinkByCustomerId(customerId); + if (ObjectUtils.isEmpty(weChatCustomerLink) || StringUtils.isEmpty(weChatCustomerLink.getAppletOpenId())) { + logger.error("wechatAppletPay fail due to no weChatCustomerLink or appletOpenId is null...."); + return CommonResponse.build(null, -10); + }*/ + WeChatCustomerLink weChatCustomerLink = segchkUserIndexMapper.getUserWechatOpenId(userId); + logger.debug("wechatAppletPay get WeChatCustomerLink: {}", weChatCustomerLink.toString()); + if (ObjectUtils.isEmpty(weChatCustomerLink) || ObjectUtils.isEmpty(weChatCustomerLink.getOpenId())){ + logger.error("wechatAppletPay fail due to wechat error not auth...."); + return CommonResponse.build(null, -10); + } + return weChatCommonPay( + orderCode + , providerId + , userId + , type + , WechatSetting.build(ip, WechatUtils.APPLET_PAY, "/default/user/wechatnotify").addOpenId(weChatCustomerLink.getOpenId()), (setting, orderInfo) -> { + //获取预支付信息 + PrepayResult prepayResult = WechatUtils.getPrepay(setting, orderInfo); + //微信生成预支付信息错误 + if (ObjectUtils.isEmpty(prepayResult)) { + logger.error("wechatAppletPay fail due to wechat error...."); + return CommonResponse.build(null, -5); + } + return CommonResponse.build(prepayResult, 1); + }); + } + + + /** + * 微信小程序提现 + * + * @param orderCode 订单code + * @param userId 用户id + * @param providerId 用户id + * @param ip 请求真实ip + * @param type 支付类型 1:订单支付 2:预存款充值 ---> 2用户支付,1商户支付 + * @param openId + * @return 返回码和支付宝支付的html 返回码说明 -1:用户不存在 -3:没有待支付的订单 -5:微信生成订单出错 -7 没有设置网站地址 -8 缺少配置 -9 没有启用 1 成功 + */ + @Override + public CommonResponse wechatAppletTransfers(String orderCode, Long userId, Long providerId, String ip, int type, String openId) { + logger.debug("wechatAppletTransfers and orderCode:{} \r\n userId:{} \r\n ip:{} \r\n:type:{}", orderCode, userId, ip, type); + + return weChatCommonTransfer( + orderCode + , providerId + , userId + , type + , WechatSetting.build(ip, WechatUtils.APPLET_PAY, "").addOpenId(openId), (setting, orderInfo) -> { + //获取预支付信息 +// WxTransferResult wxTransferResult = WechatUtils.getTransfers(setting, orderInfo); + WxTransferResult wxTransferResult = null; + try { + SegchkWXPayConfigImpl instance = SegchkWXPayConfigImpl.getInstance(); + instance.setAppId(setting.getAppId()); + instance.setMchId(setting.getMerchantNum()); + instance.setMchKey(setting.getApiKey()); + instance.setCertData(setting.getCertFile()); + WXPay wxPay = new WXPay(instance, false, !ObjectUtils.isEmpty(sandbox)); + Map transfers = wxPay.transfers(orderInfo.getOrderCode(), openId, orderInfo.getPrice().toString(), String.valueOf(orderInfo.getType()), ip); + wxTransferResult = JSON.parseObject(JSON.toJSONString(transfers), WxTransferResult.class); + } catch (Exception e) { + e.printStackTrace(); + wxTransferResult = null; + } + //微信生成预支付信息错误 + if (ObjectUtils.isEmpty(wxTransferResult)) { + logger.error("wechatAppletTransfers fail due to wechat error...."); + return CommonResponse.build(null, -5); + } + return CommonResponse.build(wxTransferResult, 1); + }); + } + + /** + * 构建预支付订单信息 + * + * @param transCode 交易号 + * @param money 订单金额 + * @param type 类型 1:订单支付 2:预存款充值 + */ + private OrderInfoForPay buildOrderInfoForPay(String transCode, BigDecimal money, int type) { + OrderInfoForPay orderInfoForPay = new OrderInfoForPay(); + //商品名 + orderInfoForPay.setGoodsName("用户支付"); + //订单号 + orderInfoForPay.setOrderCode(transCode); + //订单金额 + orderInfoForPay.setPrice(money); + //支付类型 + orderInfoForPay.setType(type); + return orderInfoForPay; + } + + /** + * 构建预支付订单信息 + * + * @param transCode 交易号 + * @param money 订单金额 + * @param type 类型 1:订单支付 2:预存款充值 + */ + private OrderInfoForPay buildOrderInfoForTrans(String transCode, BigDecimal money, int type) { + OrderInfoForPay orderInfoForPay = new OrderInfoForPay(); + //商品名 + orderInfoForPay.setGoodsName("用户奖励"); + //订单号 + orderInfoForPay.setOrderCode(transCode + type); + //订单金额 + orderInfoForPay.setPrice(money); + //支付类型 + orderInfoForPay.setType(type); + return orderInfoForPay; + } + + /** + * 获得付款的实体 + * + * @param chargeId 订单code + * @param userId 会员id + * @param type 类型 1 订单 2 预存款 3 门店订单 + * @return 返回付款实体 + */ + private OrderInfoForPay getOrderInfoForPay(String chargeId, Long userId, int type) { + + SegchkUserCharge segchkUserCharge = segchkUserChargeMapper.selectSegchkUserChargeByChargeId(Long.valueOf(chargeId)); + if(ObjectUtils.isEmpty(segchkUserCharge)) { + return null; + } + return buildOrderInfoForPay(chargeId, segchkUserCharge.getCharge(), type); + } + + /** + * 获得付款的实体 + * + * @param cashId 订单code + * @param userId 会员id + * @param type 类型 1 商户 2 用户 3 门店订单 + * @return 返回付款实体 + */ + private OrderInfoForPay getTransfersInfoForPay(String cashId, Long userId, int type) { + switch (type){ + case 1: { + SegchkStoreCash segchkStoreCash = segchkStoreCashMapper.selectSegchkStoreCashByCashId(Long.valueOf(cashId)); + if(ObjectUtils.isEmpty(segchkStoreCash)) { + return null; + } + return buildOrderInfoForTrans(cashId, segchkStoreCash.getCash(), type); + } + case 2: { + SegchkUserCash segchkUserCash = segchkUserCashMapper.selectSegchkUserCashByCashId(Long.valueOf(cashId)); + if(ObjectUtils.isEmpty(segchkUserCash)) { + return null; + } + return buildOrderInfoForTrans(cashId, segchkUserCash.getCash(), type); + } + case 0: { + return null; + } + + } + return null; + + } + + /** + * 微信支付公共方法 + * + * @param orderCode 订单号 + * @param userId 用户id + * @param providerId 用户id + * @param type 支付类型 1 订单支付 2 预存充值 1商户,2用户 + * @param wechatSetting 微信设置 + * @param supplier 回调 + * @return -8 没有设置微信支付信息 -9 微信支付没启动 -7 没有配置站点信息 -1 用户不存在 -3 没有待支付订单 -5 微信生存支付信息失败 1 成功 + */ + private CommonResponse weChatCommonPay(String orderCode, Long providerId, Long userId, int type, WechatSetting wechatSetting, PaySupplier> supplier) { + + logger.debug("weChatCommonPay and orderCode:{} \r\n customerId:{} \r\n:type:{}", orderCode, userId, type); + + //微信支付设置(数据库) + WechatPaySet wechatPaySet = new WechatPaySet(); + + // 微信app、小程序支付和其他微信支付配置的信息不一样所以这边分开获取微信支付信息 +// wechatPaySet.setAppSecret(appSecrt); +// wechatPaySet.setAppId(appId); +// wechatPaySet.setIsUse("1"); + if (wechatSetting.isAppPay()) { + wechatPaySet = paySetService.queryPaySet().getWechatAppPaySet(); + } else if (wechatSetting.isAppletPay()) { +// 微信小程序 + wechatPaySet = paySetService.queryPaySet().getWechatAppletPaySet(); + } else { + wechatPaySet = paySetService.queryPaySet().getWechatPaySet(); + } + + // 没设置微信支付信息 + if (ObjectUtils.isEmpty(wechatPaySet)) { + logger.error("wechatQRPay fail due to no wechatPaySet is empty...."); + return CommonResponse.build(null, -8); + } + + // 微信支付没启用 + if (!wechatPaySet.checkIsUse()) { + logger.error("wechatQRPay fail due to not used...."); + return CommonResponse.build(null, -9); + } + + // 网站基本信息 + BaseInfoSet baseInfoSet = segchkSystemSettingService.queryBaseInfoSet(); + + if (ObjectUtils.isEmpty(baseInfoSet) || StringUtils.isEmpty(baseInfoSet.getSiteUrlWithBias()) || StringUtils.isEmpty(baseInfoSet.getSiteName())) { + logger.error("wechatH5Pay fail due to no baseinfoset...."); + return CommonResponse.build(null, -7); + } + + // 设置网站名称和网站地址 + wechatSetting.addSiteName(baseInfoSet.getSiteName()).addSiteUrl(baseInfoSet.getSiteUrlWithBias()); + + // 设置微信支付成功后回调地址 + wechatSetting.setPayCallback(baseInfoSet.getSiteUrlWithBias() + wechatSetting.getPayCallback()); + + BeanUtils.copyProperties(wechatPaySet, wechatSetting); + logger.info("wechatSetting="+wechatSetting); + + // 检查参数 + if (!wechatSetting.checkPayParams()) { + logger.error("wechatQRPay fail due to no checkPayParams fail...."); + return CommonResponse.build(null, -8); + } + + // 查询用户信息 + Map parmMap = new HashMap<>(); + parmMap.put("userId", userId); + parmMap.put("providerId", providerId); + int usercount = segchkUserIndexMapper.userIsExit(parmMap); + + // 用户信息为空 则直接返回 + if (Objects.isNull(usercount)) { + logger.error("weChatCommonPay fail due to member is not "); + return CommonResponse.build(null, -1); + } + + // 待支付订单 + OrderInfoForPay orderInfoForPay = getOrderInfoForPay(orderCode, userId, type); + + // 没有待支付订单直接返回 + if (Objects.isNull(orderInfoForPay)) { + logger.error("weChatCommonPay fail due to no order...."); + return CommonResponse.build(null, -3); + } + + return supplier.getPayParams(wechatSetting, orderInfoForPay); + } + + /** + * 微信提现公共方法 + * + * @param cashCode 订单号 + * @param userId 用户id + * @param providerId 用户id + * @param type 支付类型 1 订单支付 2 预存充值 1商户,2用户 + * @param wechatSetting 微信设置 + * @param supplier 回调 + * @return -8 没有设置微信支付信息 -9 微信支付没启动 -7 没有配置站点信息 -1 用户不存在 -3 没有待支付订单 -5 微信生存支付信息失败 1 成功 + */ + private CommonResponse weChatCommonTransfer(String cashCode, Long providerId, Long userId, int type, WechatSetting wechatSetting, PaySupplier> supplier) { + + logger.debug("weChatCommonTransfer and orderCode:{} \r\n customerId:{} \r\n:type:{}", cashCode, userId, type); + + //微信支付设置(数据库) + WechatPaySet wechatPaySet = new WechatPaySet(); + + // 微信app、小程序支付和其他微信支付配置的信息不一样所以这边分开获取微信支付信息 +// wechatPaySet.setAppSecret(appSecrt); +// wechatPaySet.setAppId(appId); +// wechatPaySet.setIsUse("1"); + if (wechatSetting.isAppPay()) { + wechatPaySet = paySetService.queryPaySet().getWechatAppPaySet(); + } else if (wechatSetting.isAppletPay()) { +// 小程序支付 + wechatPaySet = paySetService.queryPaySet().getWechatAppletPaySet(); + } else { + wechatPaySet = paySetService.queryPaySet().getWechatPaySet(); + } + + // 没设置微信支付信息 + if (ObjectUtils.isEmpty(wechatPaySet)) { + logger.error("weChatCommonTransfer fail due to no wechatPaySet is empty...."); + return CommonResponse.build(null, -8); + } + + // 微信支付没启用 + if (!wechatPaySet.checkIsUse()) { + logger.error("weChatCommonTransfer fail due to not used...."); + return CommonResponse.build(null, -9); + } + + // 微信支付没启用 + if (StringUtils.isEmpty(wechatPaySet.getCertFile())) { + logger.error("weChatCommonTransfer fail due to mch can not transfer...."); + return CommonResponse.build(null, -10); + } + + BeanUtils.copyProperties(wechatPaySet, wechatSetting); + logger.info("wechatSetting="+wechatSetting); + + // 检查参数 + if (!wechatSetting.checkPayParams()) { + logger.error("weChatCommonTransfer fail due to no checkPayParams fail...."); + return CommonResponse.build(null, -8); + } + + // 待支付订单 + OrderInfoForPay orderInfoForPay = getTransfersInfoForPay(cashCode, userId, type); + + // 没有待支付订单直接返回 + if (Objects.isNull(orderInfoForPay)) { + logger.error("weChatCommonTransfer fail due to no order...."); + return CommonResponse.build(null, -11); + } + + return supplier.getPayParams(wechatSetting, orderInfoForPay); + } + + @Override + public int weChatAppletNotify(InputStream inputStream) { + logger.debug("weChatAppletNotify...... "); + return weChatCommonNotify(inputStream, paySetService.queryPaySet().getWechatAppletPaySet()); + } + + /** + * 根据预约单,查询相关信息 + * + * @param segchkUserLikego 包含预约单id + * @return SegchkUserLikego + */ + @Override + public SegchkUserLikego selectUserLikeGo(SegchkUserLikego segchkUserLikego) { + List segchkUserLikegos = segchkUserLikegoMapper.selectSegchkUserLikegoList(segchkUserLikego); + if(ObjectUtils.isEmpty(segchkUserLikegos)){ + return null; + } + return segchkUserLikegos.get(0); + } + + @Override + public int insertSegchkUserCharge(SegchkUserCharge segchkUserCharge) { + int i = segchkUserChargeMapper.addSegchkUserChargeWithRecommend(segchkUserCharge); + if(i < 1){ +// 生成订单失败 + return i; + } + if(segchkUserCharge.getAccountUsed().compareTo(new BigDecimal(0.0)) > 1){ +// 只要使用了余额就进行余额更新无论充值是否实际发生支付 ,防止被其他行为如提现,返利打乱造成数据不一致 +// 如果全部使用用户余额支付,则更新用户余额信息 + SegchkUserAccount segchkUserAccount = new SegchkUserAccount(); + segchkUserAccount.setProviderId(segchkUserCharge.getProviderId()); + segchkUserAccount.setChargeId(segchkUserCharge.getChargeId()); + segchkUserAccount.setUserId(segchkUserCharge.getUserId()); +// 把用户使用充值的余额写进余额中 + segchkUserAccount.setAccount(segchkUserCharge.getAccountUsed()); + i = segchkUserAccountService.insertSegchkUserAccountBuyCharge(segchkUserAccount); + } + return i; + + } + + @Override + public SegchkUserWechat queryWeChatInfoByUserId(Claims claims) { + + switch (claims.getUserLevel()){ + case 0: { + String s = segchkProviderIndexService.selectWeChatInfoByProviderId(claims.getProviderId()); + SegchkUserWechat segchkUserWechat = new SegchkUserWechat(); + segchkUserWechat.setProviderId(claims.getProviderId()); + segchkUserWechat.setUserId(claims.getUserId()); + segchkUserWechat.setOpenid(s); + return segchkUserWechat; + } + case 1: { + WeChatCustomerLink weChatCustomerLink = segchkStoreIndexService.selectWeChatInfoByStoreId(claims.getUserId()); + SegchkUserWechat segchkUserWechat = new SegchkUserWechat(); + segchkUserWechat.setProviderId(claims.getProviderId()); + segchkUserWechat.setUserId(claims.getUserId()); + segchkUserWechat.setOpenid(weChatCustomerLink.getOpenId()); + segchkUserWechat.setUnionId(weChatCustomerLink.getUnionId()); + return segchkUserWechat; + } + case 2: {SegchkUserWechat segchkUserWechat = segchkUserWechatMapper.selectSegchkUserWechatByUserId(claims.getUserId()); + return segchkUserWechat; + } + default: {return null;} + } + } + + + /** + * 微信支付回调 + * + * @param inputStream 微信输入流 + * @param wechatPaySet 微信设置 + * @return 返回 0失败,大于0成功 + */ + private int weChatCommonNotify(InputStream inputStream, WechatPaySet wechatPaySet) { + logger.debug("weChatCommonNotifya and wechatPaySet:{}", wechatPaySet); + WechatSetting wechatSetting = new WechatSetting(); + BeanUtils.copyProperties(wechatPaySet, wechatSetting); + if (StringUtils.isEmpty(wechatPaySet.getAppId()) || StringUtils.isEmpty(wechatPaySet.getMerchantNum())) { + logger.error("weChatNotify fail due to no checkPayParams fail...."); + return -2; + } + OrderInfoAfterPay orderInfoAfterPay = WechatUtils.afterPayInfo(inputStream, wechatSetting); +// String chargeId = orderInfoAfterPay.getTransCode().substring(0, orderInfoAfterPay.getTransCode().length() - 1); + if (!orderInfoAfterPay.isSuccess()) { + logger.error("weChatNotify fail due to notify fail...."); + + chargeRet(orderInfoAfterPay.getOrderCode(), 1); + return -3; + } + chargeRet(orderInfoAfterPay.getOrderCode(), 0); + return 1; +// return paySuccess(orderInfoAfterPay.getOrderCode(), CommonConstant.QUERY_WITH_NO_CUSTOMER, orderInfoAfterPay.getType(), CommonConstant.WECHAT_PAY, orderInfoAfterPay.getTransCode()); + } + + /** + * 支付成功后的操作 + * + * @param orderCode 订单code + * @param customerId 用户id + * @param type 1:订单支付 2 预存款充值 + * @param channel 支付方式,预存款充值使用 + * @param transCode 交易流水号 + * @return 0失败,大于0成功 + */ + /*private int paySuccess(String orderCode, long customerId, int type, String channel, String transCode) { + logger.debug("paySuccess and orderCode:{} \r\n customerId:{} \r\n type:{} \r\n transCode:{}", orderCode, customerId, type, transCode); + //订单支付 + if (CommonConstant.ORDER_PAY == type) { + // 根据订单编号和用户id查询待付款的订单信息 + List orders = orderService.queryOrderByOrderCode(orderCode, customerId); + // 没有待支付的订单 则直接返回 + if (CollectionUtils.isEmpty(orders)) { + logger.error("paySuccess fail due to no order...."); + return -1; + } + // 修改订单状态 + return orderServiceApi.confirmOrderPayed(ConfirmOrderParams.buildCustomerSource(customerId, 0, orders.stream().map(OmsOrder::getOrderCode).collect(Collectors.toList()), transCode, channel)); + } else if (CommonConstant.RECHARGE_PAY == type) { + //预存款充值 + return predepositRecordServiceApi.updateStatusSuccessByTransCode(orderCode, CommonConstant.QUERY_WITH_NO_CUSTOMER, channel, transCode); + } else { + // 根据订单编号和用户id查询待付款的门店订单信息 + List storeOrders = storeOrderService.queryOrderByOrderCode(orderCode, customerId); + + if (CollectionUtils.isEmpty(storeOrders)) { + logger.error("paySuccess fail due to no order...."); + return -1; + } + + return storeOrderServiceApi.confirmOrderPayed(customerId, storeOrders.stream().map(TStoreOrder::getOrderCode).collect(Collectors.toList()), "0", transCode, channel); + } + + }*/ + + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserLikegoServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserLikegoServiceImpl.java new file mode 100644 index 0000000..5c78c47 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserLikegoServiceImpl.java @@ -0,0 +1,96 @@ +package com.ruoyi.segchk.service.impl; + +import com.ruoyi.segchk.domain.SegchkUserLikego; +import com.ruoyi.segchk.mapper.SegchkUserLikegoMapper; +import com.ruoyi.segchk.service.ISegchkUserLikegoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * seg用户想去记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserLikegoServiceImpl implements ISegchkUserLikegoService +{ + @Autowired + private SegchkUserLikegoMapper segchkUserLikegoMapper; + + /** + * 查询seg用户想去记录 + * + * @param likegoId seg用户想去记录主键 + * @return seg用户想去记录 + */ + @Override + public SegchkUserLikego selectSegchkUserLikegoByLikegoId(Long likegoId) + { + return segchkUserLikegoMapper.selectSegchkUserLikegoByLikegoId(likegoId); + } + + /** + * 查询seg用户想去记录列表 + * + * @param segchkUserLikego seg用户想去记录 + * @return seg用户想去记录 + */ + @Override + public List selectSegchkUserLikegoList(SegchkUserLikego segchkUserLikego) + { + return segchkUserLikegoMapper.selectSegchkUserLikegoList(segchkUserLikego); + } + + /** + * 新增seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + @Override + public int insertSegchkUserLikego(SegchkUserLikego segchkUserLikego) + { + // 此处根据用户id,卡id,卡类型,卡标签,商户id,及运营商id,生成预约二维码 + segchkUserLikego.setQrCode(String.format("qrcode-%s-%s-%s-%s-%s", segchkUserLikego.getProviderId(), segchkUserLikego.getStoreId(), segchkUserLikego.getUserId(), segchkUserLikego.getCardId(), segchkUserLikego.getCardType())); + return segchkUserLikegoMapper.insertSegchkUserLikego(segchkUserLikego); + } + + /** + * 修改seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + @Override + public int updateSegchkUserLikego(SegchkUserLikego segchkUserLikego) + { + return segchkUserLikegoMapper.updateSegchkUserLikego(segchkUserLikego); + } + + /** + * 批量删除seg用户想去记录 + * + * @param likegoIds 需要删除的seg用户想去记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserLikegoByLikegoIds(Long[] likegoIds) + { + return segchkUserLikegoMapper.deleteSegchkUserLikegoByLikegoIds(likegoIds); + } + + /** + * 删除seg用户想去记录信息 + * + * @param likegoId seg用户想去记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserLikegoByLikegoId(Long likegoId) + { + return segchkUserLikegoMapper.deleteSegchkUserLikegoByLikegoId(likegoId); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserWechatServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserWechatServiceImpl.java new file mode 100644 index 0000000..25eaa10 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserWechatServiceImpl.java @@ -0,0 +1,94 @@ +package com.ruoyi.segchk.service.impl; + +import com.ruoyi.segchk.domain.SegchkUserWechat; +import com.ruoyi.segchk.mapper.SegchkUserWechatMapper; +import com.ruoyi.segchk.service.ISegchkUserWechatService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * seg用户微信信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserWechatServiceImpl implements ISegchkUserWechatService +{ + @Autowired + private SegchkUserWechatMapper segchkUserWechatMapper; + + /** + * 查询seg用户微信信息 + * + * @param userId seg用户微信信息主键 + * @return seg用户微信信息 + */ + @Override + public SegchkUserWechat selectSegchkUserWechatByUserId(Long userId) + { + return segchkUserWechatMapper.selectSegchkUserWechatByUserId(userId); + } + + /** + * 查询seg用户微信信息列表 + * + * @param segchkUserWechat seg用户微信信息 + * @return seg用户微信信息 + */ + @Override + public List selectSegchkUserWechatList(SegchkUserWechat segchkUserWechat) + { + return segchkUserWechatMapper.selectSegchkUserWechatList(segchkUserWechat); + } + + /** + * 新增seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + @Override + public int insertSegchkUserWechat(SegchkUserWechat segchkUserWechat) + { + return segchkUserWechatMapper.insertSegchkUserWechat(segchkUserWechat); + } + + /** + * 修改seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + @Override + public int updateSegchkUserWechat(SegchkUserWechat segchkUserWechat) + { + return segchkUserWechatMapper.updateSegchkUserWechat(segchkUserWechat); + } + + /** + * 批量删除seg用户微信信息 + * + * @param userIds 需要删除的seg用户微信信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserWechatByUserIds(Long[] userIds) + { + return segchkUserWechatMapper.deleteSegchkUserWechatByUserIds(userIds); + } + + /** + * 删除seg用户微信信息信息 + * + * @param userId seg用户微信信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserWechatByUserId(Long userId) + { + return segchkUserWechatMapper.deleteSegchkUserWechatByUserId(userId); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/AliPaySet.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/AliPaySet.java new file mode 100644 index 0000000..246ca7a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/AliPaySet.java @@ -0,0 +1,83 @@ +package com.ruoyi.setting.bean; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.util.StringUtils; + +/** + * 支付设置接口-支付宝支付接口设置实体类 + * + * @author 魔金商城 on 2017/5/17. + */ + +public class AliPaySet { + /** + * appid + */ + + private String appId; + /** + * 开发者私钥,由开发者自己生成 + */ + + private String appPrivateKey; + /** + * 支付宝公钥,由支付宝生成 + */ + + private String alipayPublicKey; + /** + * 是否启用 1启用 0不启用 + */ + + private String isUse; + + /** + * 清理敏感信息 + */ + public void clearSensitiveInfo() { + this.appId = ""; + this.appPrivateKey = ""; + this.alipayPublicKey = ""; + } + + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getAppPrivateKey() { + return appPrivateKey; + } + + public void setAppPrivateKey(String appPrivateKey) { + this.appPrivateKey = appPrivateKey; + } + + public String getAlipayPublicKey() { + return alipayPublicKey; + } + + public void setAlipayPublicKey(String alipayPublicKey) { + this.alipayPublicKey = alipayPublicKey; + } + + public String getIsUse() { + return isUse; + } + + public void setIsUse(String isUse) { + this.isUse = isUse; + } + + /** + * 检测是否启用 true 启用,反之不启用 + */ + @JsonIgnore + public boolean checkIsUse() { + return StringUtils.isEmpty(isUse) || "1".equals(isUse); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/OssSetting.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/OssSetting.java new file mode 100644 index 0000000..225a16a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/OssSetting.java @@ -0,0 +1,136 @@ +package com.ruoyi.setting.bean; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.ruoyi.util.bean.OssYunConf; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * Created by luozhuo on 20/7/7. + * 云存储配置类 + */ +@ApiModel(description = "云存储配置实体") +public class OssSetting { + + /** + * 主键id + */ + @ApiModelProperty(value = "主键id") + private Long id; + + /** + * 域名 + */ + @ApiModelProperty(value = "域名") + private String address; + + /** + * 授权ID + */ + @ApiModelProperty(value = "授权ID") + private String accessKeyId; + + /** + * 授权密钥 + */ + @ApiModelProperty(value = "授权密钥") + private String accessKeySecret; + + /** + * 桶名 + */ + @ApiModelProperty(value = "桶名") + private String bucketName; + + /** + * 节点名 + */ + @ApiModelProperty(value = "节点名") + private String endPoint; + + /** + * 样式 + */ + @ApiModelProperty(value = "样式") + private String styleName; + + /** + * 前缀 + */ + @ApiModelProperty(value = "前缀") + private String prefix; + + /** + * 获得阿里云的配置 + * + * @return 返回阿里云配置 + */ + @JsonIgnore + public OssYunConf getUpYunConf() { + return OssYunConf.buildOssYunConf(this.accessKeyId, this.accessKeySecret, this.bucketName, this.endPoint, this.styleName, this.prefix, this.address); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getAccessKeyId() { + return accessKeyId; + } + + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; + } + + public String getAccessKeySecret() { + return accessKeySecret; + } + + public void setAccessKeySecret(String accessKeySecret) { + this.accessKeySecret = accessKeySecret; + } + + public String getBucketName() { + return bucketName; + } + + public void setBucketName(String bucketName) { + this.bucketName = bucketName; + } + + public String getEndPoint() { + return endPoint; + } + + public void setEndPoint(String endPoint) { + this.endPoint = endPoint; + } + + public String getStyleName() { + return styleName; + } + + public void setStyleName(String styleName) { + this.styleName = styleName; + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/PaySet.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/PaySet.java new file mode 100644 index 0000000..bbfa9b8 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/PaySet.java @@ -0,0 +1,75 @@ +package com.ruoyi.setting.bean; + + +/** + * 支付接口设置数据库映射类 + * + * @author 魔金商城 on 2017/5/17. + */ + +public class PaySet { + /** + * 主键id + */ + private long id; + /** + * 支付方式 1:支付宝 2:微信 3:银联 4:预存款 5:微信APP支付 6:微信小程序支付 + */ + private String codeType; + /** + * 字段名称 + */ + private String columnName; + /** + * 字段值 + */ + private String columnValue; + + /** + * 组装数据-用于向数据库插入数据 + * + * @param paySet 数据库映射对象 + * @param codeType 支付设置类型 1:支付宝 2:微信 3:银联 4:预存款 5:微信APP支付 6:微信小程序支付 + * @param columnValue 字段的值 + * @param columnName 字段名称 + * @return paySet对象 + */ + public static PaySet getPaySet(PaySet paySet, String codeType, String columnValue, String columnName) { + paySet.setCodeType(codeType); + paySet.setColumnName(columnName); + paySet.setColumnValue(columnValue); + return paySet; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getCodeType() { + return codeType; + } + + public void setCodeType(String codeType) { + this.codeType = codeType; + } + + public String getColumnName() { + return columnName; + } + + public void setColumnName(String columnName) { + this.columnName = columnName; + } + + public String getColumnValue() { + return columnValue; + } + + public void setColumnValue(String columnValue) { + this.columnValue = columnValue; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/PaySetCommon.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/PaySetCommon.java new file mode 100644 index 0000000..f75c1e0 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/PaySetCommon.java @@ -0,0 +1,232 @@ +package com.ruoyi.setting.bean; + + +import java.util.List; +import java.util.Objects; + +/** + * 支付设置统一类 + * + * @author 魔金商城 on 2017/5/17. + */ + +public class PaySetCommon { + + /** + * 阿里支付 + */ + private AliPaySet aliPaySet = new AliPaySet(); + /** + * 微信支付(公众号、扫码、H5) + */ + + private WechatPaySet wechatPaySet = new WechatPaySet(); + /** + * 微信支付(app) + */ + + private WechatPaySet wechatAppPaySet = new WechatPaySet(); + + /** + * 微信支付(小程序支付) + */ + + private WechatPaySet wechatAppletPaySet = new WechatPaySet(); + + /** + * 银联支付 + */ + private UnionPaySet unionPaySet = new UnionPaySet(); + + /** + * 预存款支付 + */ + private PrePaySet prePaySet = new PrePaySet(); + + /** + * 用于组装支付设置对象在前端显示 + * + * @param paySetCommon 支付设置对象 + * @param paySets 数据库映射对象 + * @return 支付设置对象 + */ + public static PaySetCommon getPaySetCommon(PaySetCommon paySetCommon, List paySets) { + paySets.forEach(paySet -> { + String value = paySet.getColumnValue(); + //支付宝 + if ("1".equals(paySet.getCodeType())) { + if ("appId".equals(paySet.getColumnName())) { + paySetCommon.aliPaySet.setAppId(value); + } + if ("alipayPublicKey".equals(paySet.getColumnName())) { + paySetCommon.aliPaySet.setAlipayPublicKey(value); + } + if ("appPrivateKey".equals(paySet.getColumnName())) { + paySetCommon.aliPaySet.setAppPrivateKey(value); + } + if ("isUse".equals(paySet.getColumnName())) { + paySetCommon.aliPaySet.setIsUse(value); + } + } + //微信(公众号、扫码、H5) + if ("2".equals(paySet.getCodeType())) { + if ("appId".equals(paySet.getColumnName())) { + paySetCommon.wechatPaySet.setAppId(value); + } + if ("appSecret".equals(paySet.getColumnName())) { + paySetCommon.wechatPaySet.setAppSecret(value); + } + if ("merchantNum".equals(paySet.getColumnName())) { + paySetCommon.wechatPaySet.setMerchantNum(value); + } + if ("apiKey".equals(paySet.getColumnName())) { + paySetCommon.wechatPaySet.setApiKey(value); + } + if ("loginNotice".equals(paySet.getColumnName())) { + paySetCommon.wechatPaySet.setLoginNotice(value); + } + if ("isUse".equals(paySet.getColumnName())) { + paySetCommon.wechatPaySet.setIsUse(value); + } + } + //银联 + if ("3".equals(paySet.getCodeType())) { + if ("merchantNum".equals(paySet.getColumnName())) { + paySetCommon.unionPaySet.setMerchantNum(value); + } + if ("apiKey".equals(paySet.getColumnName())) { + paySetCommon.unionPaySet.setApiKey(value); + } + + if ("isUse".equals(paySet.getColumnName())) { + paySetCommon.unionPaySet.setIsUse(value); + } + } + //预存款 + if ("4".equals(paySet.getCodeType())) { + if ("isUse".equals(paySet.getColumnName())) { + paySetCommon.prePaySet.setIsUse(value); + } + } + //微信支付(app) + if ("5".equals(paySet.getCodeType())) { + if ("appId".equals(paySet.getColumnName())) { + paySetCommon.wechatAppPaySet.setAppId(value); + } + if ("appSecret".equals(paySet.getColumnName())) { + paySetCommon.wechatAppPaySet.setAppSecret(value); + } + if ("merchantNum".equals(paySet.getColumnName())) { + paySetCommon.wechatAppPaySet.setMerchantNum(value); + } + if ("apiKey".equals(paySet.getColumnName())) { + paySetCommon.wechatAppPaySet.setApiKey(value); + } + if ("isUse".equals(paySet.getColumnName())) { + paySetCommon.wechatAppPaySet.setIsUse(value); + } + } + + //微信支付(小程序) + if ("6".equals(paySet.getCodeType())) { + if ("appId".equals(paySet.getColumnName())) { + paySetCommon.wechatAppletPaySet.setAppId(value); + } + if ("appSecret".equals(paySet.getColumnName())) { + paySetCommon.wechatAppletPaySet.setAppSecret(value); + } + if ("merchantNum".equals(paySet.getColumnName())) { + paySetCommon.wechatAppletPaySet.setMerchantNum(value); + } + if ("apiKey".equals(paySet.getColumnName())) { + paySetCommon.wechatAppletPaySet.setApiKey(value); + } + if ("isUse".equals(paySet.getColumnName())) { + paySetCommon.wechatAppletPaySet.setIsUse(value); + } + if ("certFile".equals(paySet.getColumnName())) { + paySetCommon.wechatAppletPaySet.setCertFile(value); + } + } + }); + return paySetCommon; + } + + /** + * 清除敏感 信息 + * + * @return 返回当前对象 + */ + public PaySetCommon clearSensitiveInfo() { + + if (Objects.nonNull(this.wechatPaySet)) { + wechatPaySet.clearSensitiveInfo(); + } + + if (Objects.nonNull(this.wechatAppPaySet)) { + wechatAppPaySet.clearSensitiveInfo(); + } + + if (Objects.nonNull(this.wechatAppletPaySet)) { + wechatAppletPaySet.clearSensitiveInfo(); + } + + if (Objects.nonNull(this.aliPaySet)) { + aliPaySet.clearSensitiveInfo(); + } + + + if (Objects.nonNull(this.unionPaySet)) { + unionPaySet.clearSensitiveInfo(); + } + return this; + } + + public AliPaySet getAliPaySet() { + return aliPaySet; + } + + public void setAliPaySet(AliPaySet aliPaySet) { + this.aliPaySet = aliPaySet; + } + + public WechatPaySet getWechatPaySet() { + return wechatPaySet; + } + + public void setWechatPaySet(WechatPaySet wechatPaySet) { + this.wechatPaySet = wechatPaySet; + } + + public WechatPaySet getWechatAppPaySet() { + return wechatAppPaySet; + } + + public void setWechatAppPaySet(WechatPaySet wechatAppPaySet) { + this.wechatAppPaySet = wechatAppPaySet; + } + + public WechatPaySet getWechatAppletPaySet() { + return wechatAppletPaySet; + } + + public void setWechatAppletPaySet(WechatPaySet wechatAppletPaySet) { + this.wechatAppletPaySet = wechatAppletPaySet; + } + + public UnionPaySet getUnionPaySet() { + return unionPaySet; + } + + public void setUnionPaySet(UnionPaySet unionPaySet) { + this.unionPaySet = unionPaySet; + } + + public PrePaySet getPrePaySet() { + return prePaySet; + } + + public void setPrePaySet(PrePaySet prePaySet) { + this.prePaySet = prePaySet; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/PrePaySet.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/PrePaySet.java new file mode 100644 index 0000000..50d868b --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/PrePaySet.java @@ -0,0 +1,33 @@ +package com.ruoyi.setting.bean; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.util.StringUtils; + +/** + * 预支付设置 + */ + +public class PrePaySet { + + /** + * 是否启用 1启用 0不启用 + */ + + private String isUse; + + public String getIsUse() { + return isUse; + } + + public void setIsUse(String isUse) { + this.isUse = isUse; + } + + /** + * 检测是否启用 true 启用,反之不启用 + */ + @JsonIgnore + public boolean checkIsUse() { + return StringUtils.isEmpty(isUse) || "1".equals(isUse); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/UnionPaySet.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/UnionPaySet.java new file mode 100644 index 0000000..896558b --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/UnionPaySet.java @@ -0,0 +1,68 @@ +package com.ruoyi.setting.bean; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.util.StringUtils; + +/** + * 支付设置接口-银联支付接口设置实体类 + * + * @author 魔金商城 on 2017/5/17. + */ + +public class UnionPaySet { + /** + * 商户号 + */ + private String merchantNum; + /** + * API-KEY + */ + private String apiKey; + /** + * 是否启用 1启用 0不启用 + */ + + private String isUse; + + public String getMerchantNum() { + return merchantNum; + } + + public void setMerchantNum(String merchantNum) { + this.merchantNum = merchantNum; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getIsUse() { + return isUse; + } + + public void setIsUse(String isUse) { + this.isUse = isUse; + } + + /** + * 清理敏感信息 + */ + public void clearSensitiveInfo() { + this.merchantNum = ""; + this.apiKey = ""; + } + + + /** + * 检测是否启用 true 启用,反之不启用 + */ + @JsonIgnore + public boolean checkIsUse() { + return StringUtils.isEmpty(isUse) || "1".equals(isUse); + } + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/UploadData.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/UploadData.java new file mode 100644 index 0000000..cb46369 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/UploadData.java @@ -0,0 +1,91 @@ +package com.ruoyi.setting.bean; + +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; + +/** + * 上传对象实体类 + */ +public class UploadData { + + MultipartFile multipartFile; + /** + * 输入流 + */ + private InputStream inputStream; + + /** + * 数据 + */ + private byte[] datas; + + + /** + * 用户上传的文件名 + */ + private String fileOriginName; + + /** + * 上传的类型 0 图片 1 视频 + */ + private String type; + + + /** + * 构造上传对象 + * + * @param inputStream 输入流 + * @param datas 数据 + * @return 返回上传对象 + */ + public static UploadData build(InputStream inputStream, byte[] datas, String fileOriginName, String type, MultipartFile multipartFile) { + UploadData uploadData = new UploadData(); + uploadData.inputStream = inputStream; + uploadData.datas = datas; + uploadData.fileOriginName = fileOriginName; + uploadData.type = type; + uploadData.multipartFile = multipartFile; + return uploadData; + } + + public MultipartFile getMultipartFile() { + return multipartFile; + } + + public void setMultipartFile(MultipartFile multipartFile) { + this.multipartFile = multipartFile; + } + + public InputStream getInputStream() { + return inputStream; + } + + public void setInputStream(InputStream inputStream) { + this.inputStream = inputStream; + } + + public byte[] getDatas() { + return datas; + } + + public void setDatas(byte[] datas) { + this.datas = datas; + } + + public String getFileOriginName() { + return fileOriginName; + } + + public void setFileOriginName(String fileOriginName) { + this.fileOriginName = fileOriginName; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/WechatPaySet.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/WechatPaySet.java new file mode 100644 index 0000000..17e9cec --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/bean/WechatPaySet.java @@ -0,0 +1,126 @@ +package com.ruoyi.setting.bean; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.util.StringUtils; + +/** + * 支付设置接口-微信支付接口设置实体类 + * + * @author 魔金商城 on 2017/5/17. + */ + +public class WechatPaySet { + /** + * 公众号appId + */ + + private String appId; + /** + * AppSecret + */ + + private String appSecret; + /** + * 商户号 + */ + + private String merchantNum; + + /** + * API密钥 + */ + + private String apiKey; + + /** + * 微信公众号 登录回调地址 + */ + private String loginNotice; + + /** + * 是否启用 1启用 0不启用 + */ + + private String isUse; + + /** + * 是否启用 1启用 0不启用 + */ + + private String certFile; + + /** + * 清理敏感信息 + */ + public void clearSensitiveInfo() { + this.appId = ""; + this.appSecret = ""; + this.merchantNum = ""; + this.apiKey = ""; + this.certFile = ""; + } + + public String getLoginNotice() { + return loginNotice; + } + + public void setLoginNotice(String loginNotice) { + this.loginNotice = loginNotice; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getAppSecret() { + return appSecret; + } + + public void setAppSecret(String appSecret) { + this.appSecret = appSecret; + } + + public String getMerchantNum() { + return merchantNum; + } + + public void setMerchantNum(String merchantNum) { + this.merchantNum = merchantNum; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getIsUse() { + return isUse; + } + + public void setIsUse(String isUse) { + this.isUse = isUse; + } + + /** + * 检测是否启用 true 启用,反之不启用 + */ + @JsonIgnore + public boolean checkIsUse() { + return StringUtils.isEmpty(isUse) || "1".equals(isUse); + } + + public String getCertFile() { + return certFile; + } + + public void setCertFile(String certFile) { + this.certFile = certFile; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/KsdSmsReq.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/KsdSmsReq.java new file mode 100644 index 0000000..3e68416 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/KsdSmsReq.java @@ -0,0 +1,5 @@ +package com.ruoyi.setting.domain; + + +public class KsdSmsReq { +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsCity.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsCity.java new file mode 100644 index 0000000..5144aca --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsCity.java @@ -0,0 +1,158 @@ +package com.ruoyi.setting.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; +import java.util.List; + +/** + * 区域市对象 ls_city + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public class LsCity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 市的名称 + */ + @Excel(name = "市的名称") + private String name; + + /** + * 该市所属的省份id 对应ls_province 中的id + */ + @Excel(name = "该市所属的省份id 对应ls_province 中的id") + private Long provinceId; + + /** + * 排序 数值越小 排序越前 + */ + @Excel(name = "排序 数值越小 排序越前") + private Long sort; + + /** + * 删除标记 0未删除 1删除 默认0 + */ + private int delFlag; + + /** + * 修改时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modifyTime; + + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date delTime; + + /** + * 市下面的区 + */ + @ApiModelProperty(value = "市下面的区") + private List child; + + + /** + * 设置添加市的默认 + * + * @return 返回市 + */ + public LsCity setDefaultValuesForAdd() { + this.delFlag = 0; + return this; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getProvinceId() { + return provinceId; + } + + public void setProvinceId(Long provinceId) { + this.provinceId = provinceId; + } + + public Long getSort() { + return sort; + } + + public void setSort(Long sort) { + this.sort = sort; + } + + public int getDelFlag() { + return delFlag; + } + + public void setDelFlag(int delFlag) { + this.delFlag = delFlag; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public Date getDelTime() { + return delTime; + } + + public void setDelTime(Date delTime) { + this.delTime = delTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("provinceId", getProvinceId()) + .append("sort", getSort()) + .append("delFlag", getDelFlag()) + .append("createTime", getCreateTime()) + .append("modifyTime", getModifyTime()) + .append("delTime", getDelTime()) + .toString(); + } + + public List getChild() { + return child; + } + + public void setChild(List child) { + this.child = child; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsDistrict.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsDistrict.java new file mode 100644 index 0000000..84f2aac --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsDistrict.java @@ -0,0 +1,131 @@ +package com.ruoyi.setting.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 区域区对象 ls_district + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public class LsDistrict extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 区名称 + */ + @Excel(name = "区名称") + private String name; + + /** + * 对应ls_city表中的id + */ + @Excel(name = "对应ls_city表中的id") + private Long cityId; + + /** + * 排序 数值越小 越前 + */ + @Excel(name = "排序 数值越小 越前") + private Long sort; + + /** + * 删除标记 0 未删除 1删除 默认0 + */ + private int delFlag; + + /** + * 修改时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modifyTime; + + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date delTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getCityId() { + return cityId; + } + + public void setCityId(Long cityId) { + this.cityId = cityId; + } + + public Long getSort() { + return sort; + } + + public void setSort(Long sort) { + this.sort = sort; + } + + public int getDelFlag() { + return delFlag; + } + + public void setDelFlag(int delFlag) { + this.delFlag = delFlag; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public Date getDelTime() { + return delTime; + } + + public void setDelTime(Date delTime) { + this.delTime = delTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("cityId", getCityId()) + .append("sort", getSort()) + .append("delFlag", getDelFlag()) + .append("createTime", getCreateTime()) + .append("modifyTime", getModifyTime()) + .append("delTime", getDelTime()) + .toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsEmailSetting.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsEmailSetting.java new file mode 100644 index 0000000..353c094 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsEmailSetting.java @@ -0,0 +1,126 @@ +package com.ruoyi.setting.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 邮箱设置对象 ls_email_setting + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public class LsEmailSetting extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 发信邮箱 + */ + @Excel(name = "发信邮箱") + private String senderMail; + + /** + * 发信人 + */ + @Excel(name = "发信人") + private String senderName; + + /** + * SMTP的服务器地址 + */ + @Excel(name = "SMTP的服务器地址") + private String smtpServer; + + /** + * SMTP 的端口 + */ + @Excel(name = "SMTP 的端口") + private Long smtpPort; + + /** + * 邮箱帐号 + */ + @Excel(name = "邮箱帐号") + private String username; + + /** + * 邮箱密码 + */ + @Excel(name = "邮箱密码") + private String password; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSenderMail() { + return senderMail; + } + + public void setSenderMail(String senderMail) { + this.senderMail = senderMail; + } + + public String getSenderName() { + return senderName; + } + + public void setSenderName(String senderName) { + this.senderName = senderName; + } + + public String getSmtpServer() { + return smtpServer; + } + + public void setSmtpServer(String smtpServer) { + this.smtpServer = smtpServer; + } + + public Long getSmtpPort() { + return smtpPort; + } + + public void setSmtpPort(Long smtpPort) { + this.smtpPort = smtpPort; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("senderMail", getSenderMail()) + .append("senderName", getSenderName()) + .append("smtpServer", getSmtpServer()) + .append("smtpPort", getSmtpPort()) + .append("username", getUsername()) + .append("password", getPassword()) + .toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsProvince.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsProvince.java new file mode 100644 index 0000000..becc46f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsProvince.java @@ -0,0 +1,141 @@ +package com.ruoyi.setting.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; +import java.util.List; + +/** + * 区域省对象 ls_province + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public class LsProvince extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 省份的名称 + */ + @Excel(name = "省份的名称") + private String name; + + /** + * 排序 + */ + @Excel(name = "排序") + private Long sort; + + /** + * 删除标记 0 未删除 1删除 + */ + private int delFlag; + + /** + * 修改时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modifyTime; + + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date delTime; + /** + * 省下面的市 + */ + @ApiModelProperty(value = "省下面的市") + private List child; + + /** + * 设置添加省份的默认 + * + * @return 返回省份 + */ + public LsProvince setDefaultValuesForAdd() { + this.delFlag = 0; + return this; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getSort() { + return sort; + } + + public void setSort(Long sort) { + this.sort = sort; + } + + public int getDelFlag() { + return delFlag; + } + + public void setDelFlag(int delFlag) { + this.delFlag = delFlag; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public Date getDelTime() { + return delTime; + } + + public void setDelTime(Date delTime) { + this.delTime = delTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("sort", getSort()) + .append("delFlag", getDelFlag()) + .append("createTime", getCreateTime()) + .append("modifyTime", getModifyTime()) + .append("delTime", getDelTime()) + .toString(); + } + + public List getChild() { + return child; + } + + public void setChild(List child) { + this.child = child; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsSmsSetting.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsSmsSetting.java new file mode 100644 index 0000000..abd3da4 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsSmsSetting.java @@ -0,0 +1,197 @@ +package com.ruoyi.setting.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 短信接口设置对象 ls_sms_setting + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public class LsSmsSetting extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * AppSecret + */ + @Excel(name = "AppSecret") + private String secret; + + /** + * 短信接口地址 + */ + @Excel(name = "短信接口地址") + private String url; + + /** + * 短信签名 + */ + @Excel(name = "短信签名") + private String sign; + + /** + * 模板id + */ + @Excel(name = "模板id") + private String templateId; + + /** + * 核销门店订单的模版id + */ + @Excel(name = "核销门店订单的模版id") + private String writeoffTemplateId; + + /** + * 虚拟订单核销的模版id + */ + @Excel(name = "虚拟订单核销的模版id") + private String virtualOrderTemplateId; + + /** + * AppKey + */ + @Excel(name = "AppKey") + private String key; + + /** + * 社区团购审核结果通知模版id + */ + @Excel(name = "社区团购审核结果通知模版id") + private String auditTemplateId; + + /** + * 社区团购佣金结算模版id + */ + @Excel(name = "社区团购佣金结算模版id") + private String settlementTemplateId; + + /** + * 社区团购提现打款模版id + */ + @Excel(name = "社区团购提现打款模版id") + private String withdrawTemplateId; + @ApiModelProperty("启用状态") + private Boolean status; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getTemplateId() { + return templateId; + } + + public void setTemplateId(String templateId) { + this.templateId = templateId; + } + + public String getWriteoffTemplateId() { + return writeoffTemplateId; + } + + public void setWriteoffTemplateId(String writeoffTemplateId) { + this.writeoffTemplateId = writeoffTemplateId; + } + + public String getVirtualOrderTemplateId() { + return virtualOrderTemplateId; + } + + public void setVirtualOrderTemplateId(String virtualOrderTemplateId) { + this.virtualOrderTemplateId = virtualOrderTemplateId; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getAuditTemplateId() { + return auditTemplateId; + } + + public void setAuditTemplateId(String auditTemplateId) { + this.auditTemplateId = auditTemplateId; + } + + public String getSettlementTemplateId() { + return settlementTemplateId; + } + + public void setSettlementTemplateId(String settlementTemplateId) { + this.settlementTemplateId = settlementTemplateId; + } + + public String getWithdrawTemplateId() { + return withdrawTemplateId; + } + + public void setWithdrawTemplateId(String withdrawTemplateId) { + this.withdrawTemplateId = withdrawTemplateId; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("secret", getSecret()) + .append("url", getUrl()) + .append("sign", getSign()) + .append("templateId", getTemplateId()) + .append("writeoffTemplateId", getWriteoffTemplateId()) + .append("virtualOrderTemplateId", getVirtualOrderTemplateId()) + .append("key", getKey()) + .append("auditTemplateId", getAuditTemplateId()) + .append("settlementTemplateId", getSettlementTemplateId()) + .append("withdrawTemplateId", getWithdrawTemplateId()) + .toString(); + } + + public Boolean getStatus() { + return status; + } + + public void setStatus(Boolean status) { + this.status = status; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsStationLetter.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsStationLetter.java new file mode 100644 index 0000000..6fd2656 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsStationLetter.java @@ -0,0 +1,111 @@ +package com.ruoyi.setting.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 站内信对象 ls_station_letter + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public class LsStationLetter extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 会员id + */ + @Excel(name = "会员id") + private Long customerId; + + /** + * 站内信标题 + */ + @Excel(name = "站内信标题") + private String title; + + /** + * 站内信内容 + */ + @Excel(name = "站内信内容") + private String content; + + /** + * 是否已读 0 未读 1 已读 默认0 + */ + @Excel(name = "是否已读 0 未读 1 已读 默认0 ") + private String isRead; + + /** + * 删除标记 0 未删除 1 删除 默认0 + */ + private int delFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getIsRead() { + return isRead; + } + + public void setIsRead(String isRead) { + this.isRead = isRead; + } + + public int getDelFlag() { + return delFlag; + } + + public void setDelFlag(int delFlag) { + this.delFlag = delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("customerId", getCustomerId()) + .append("title", getTitle()) + .append("content", getContent()) + .append("isRead", getIsRead()) + .append("delFlag", getDelFlag()) + .append("createTime", getCreateTime()) + .toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsSystemSeo.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsSystemSeo.java new file mode 100644 index 0000000..36e822a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsSystemSeo.java @@ -0,0 +1,96 @@ +package com.ruoyi.setting.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 系统seo设置对象 ls_system_seo + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public class LsSystemSeo extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * seo标题 + */ + @Excel(name = "seo标题") + private String title; + + /** + * seo关键字 + */ + @Excel(name = "seo关键字") + private String keyWord; + + /** + * seo描述 + */ + @Excel(name = "seo描述") + private String seoDesc; + + /** + * 是否开启 0 未开启 1 开启 + */ + @Excel(name = "是否开启 0 未开启 1 开启 ") + private String isOpen; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getKeyWord() { + return keyWord; + } + + public void setKeyWord(String keyWord) { + this.keyWord = keyWord; + } + + public String getSeoDesc() { + return seoDesc; + } + + public void setSeoDesc(String seoDesc) { + this.seoDesc = seoDesc; + } + + public String getIsOpen() { + return isOpen; + } + + public void setIsOpen(String isOpen) { + this.isOpen = isOpen; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("title", getTitle()) + .append("keyWord", getKeyWord()) + .append("seoDesc", getSeoDesc()) + .append("isOpen", getIsOpen()) + .toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsWxCustomerLink.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsWxCustomerLink.java new file mode 100644 index 0000000..6046d70 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/LsWxCustomerLink.java @@ -0,0 +1,96 @@ +package com.ruoyi.setting.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 微信登录和商城用户的关联对象 ls_wx_customer_link + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public class LsWxCustomerLink extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 微信的联合登录id + */ + @Excel(name = "微信的联合登录id") + private String wxUnionId; + + /** + * 用户id + */ + @Excel(name = "用户id") + private Long customerId; + + /** + * 微信的openid + */ + @Excel(name = "微信的openid") + private String wxOpenId; + + /** + * 小程序的openid + */ + @Excel(name = "小程序的openid") + private String wxAppletOpenId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWxUnionId() { + return wxUnionId; + } + + public void setWxUnionId(String wxUnionId) { + this.wxUnionId = wxUnionId; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public String getWxOpenId() { + return wxOpenId; + } + + public void setWxOpenId(String wxOpenId) { + this.wxOpenId = wxOpenId; + } + + public String getWxAppletOpenId() { + return wxAppletOpenId; + } + + public void setWxAppletOpenId(String wxAppletOpenId) { + this.wxAppletOpenId = wxAppletOpenId; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("wxUnionId", getWxUnionId()) + .append("customerId", getCustomerId()) + .append("wxOpenId", getWxOpenId()) + .append("wxAppletOpenId", getWxAppletOpenId()) + .toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/SCommunityBuySetting.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/SCommunityBuySetting.java new file mode 100644 index 0000000..f132c71 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/SCommunityBuySetting.java @@ -0,0 +1,111 @@ +package com.ruoyi.setting.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 社区团购设置对象 s_community_buy_setting + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public class SCommunityBuySetting extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * $column.columnComment + */ + private Long id; + + /** + * 团长名称 + */ + @Excel(name = "团长名称") + private String name; + + /** + * 是否开启审核 0 开启 1 关闭 默认0 + */ + @Excel(name = "是否开启审核 0 开启 1 关闭 默认0") + private String audit; + + /** + * 审核结果通知 0 通知 1 不通知 默认0 + */ + @Excel(name = "审核结果通知 0 通知 1 不通知 默认0 ") + private String smsAuditNotice; + + /** + * 打款通知 0 通知 1 不通知默认0 + */ + @Excel(name = "打款通知 0 通知 1 不通知默认0 ") + private String smsPayNotice; + + /** + * 佣金结算通知 0 通知 1 不通知默认0 + */ + @Excel(name = "佣金结算通知 0 通知 1 不通知默认0 ") + private String smsCommissionNotice; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAudit() { + return audit; + } + + public void setAudit(String audit) { + this.audit = audit; + } + + public String getSmsAuditNotice() { + return smsAuditNotice; + } + + public void setSmsAuditNotice(String smsAuditNotice) { + this.smsAuditNotice = smsAuditNotice; + } + + public String getSmsPayNotice() { + return smsPayNotice; + } + + public void setSmsPayNotice(String smsPayNotice) { + this.smsPayNotice = smsPayNotice; + } + + public String getSmsCommissionNotice() { + return smsCommissionNotice; + } + + public void setSmsCommissionNotice(String smsCommissionNotice) { + this.smsCommissionNotice = smsCommissionNotice; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("audit", getAudit()) + .append("smsAuditNotice", getSmsAuditNotice()) + .append("smsPayNotice", getSmsPayNotice()) + .append("smsCommissionNotice", getSmsCommissionNotice()) + .toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/SegchkPaySetting.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/SegchkPaySetting.java new file mode 100644 index 0000000..e086ec0 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/domain/SegchkPaySetting.java @@ -0,0 +1,81 @@ +package com.ruoyi.setting.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 支付设置对象 ls_pay_setting + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public class SegchkPaySetting extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 支付方式 1:支付宝 2:微信 3:银联 4:预存款 5:微信APP支付 6:微信小程序支付 + */ + @Excel(name = "支付方式 1:支付宝 2:微信 3:银联 4:预存款 5:微信APP支付 6:微信小程序支付") + private String codetype; + + /** + * 字段名称 + */ + @Excel(name = "字段名称") + private String columnName; + + /** + * 字段值 + */ + @Excel(name = "字段值") + private String columnValue; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getCodetype() { + return codetype; + } + + public void setCodetype(String codetype) { + this.codetype = codetype; + } + + public String getColumnName() { + return columnName; + } + + public void setColumnName(String columnName) { + this.columnName = columnName; + } + + public String getColumnValue() { + return columnValue; + } + + public void setColumnValue(String columnValue) { + this.columnValue = columnValue; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("codetype", getCodetype()) + .append("columnName", getColumnName()) + .append("columnValue", getColumnValue()) + .toString(); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/AreaMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/AreaMapper.java new file mode 100644 index 0000000..4827c80 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/AreaMapper.java @@ -0,0 +1,160 @@ +package com.ruoyi.setting.mapper; + + +import com.ruoyi.setting.domain.LsCity; +import com.ruoyi.setting.domain.LsDistrict; +import com.ruoyi.setting.domain.LsProvince; + +import java.util.List; + +/** + * Created by 魔金商城 on 17/5/15. + * 地区数据库接口 + */ +public interface AreaMapper { + + /** + * 查询所有省份 + * + * @return 返回所有省份 + */ + + List queryAllProvinces(); + + /** + * 根据省份id查询该省下面的市 + * + * @param provinceId 省id + * @return 返回省下面的市 + */ + + List queryCityByProvinceId(long provinceId); + + + /** + * 根据市id查询下面的区 + * + * @param cityId 市id + * @return 返回该市下面的区 + */ + + List queryDistrictByCityId(long cityId); + + /** + * 添加省份 + * + * @param province 省份信息 + * @return 成功返回1 失败返回0 + */ + + int addProvince(LsProvince province); + + /** + * 添加市 + * + * @param city 市信息 + * @return 成功返回1 失败返回0 + */ + + int addCity(LsCity city); + + /** + * 添加区 + * + * @param district 区信息 + * @return 成功返回1 失败返回0 + */ + + int addDistrict(LsDistrict district); + + + /** + * 根据省份id删除省份信息 + * + * @param provinceId 省份id + * @return 成功返回1 失败返回0 + */ + + int deleteProvinceById(long provinceId); + + /** + * 根据市id删除市信息 + * + * @param cityId 市id + * @return 成功返回1 失败返回0 + */ + + int deleteCityById(long cityId); + + /** + * 根据区id删除区信息 + * + * @param districtId 区id + * @return 成功返回1 失败返回0 + */ + + int deleteDistrictById(long districtId); + + /** + * 根据省id查询省份信息 + * + * @param id 省id + * @return 返回省份信息 + */ + + LsProvince queryProvinceById(long id); + + /** + * 根据市id查询市信息 + * + * @param id 市id + * @return 返回市信息 + */ + + LsCity queryCityById(long id); + + /** + * 根据区id查询区信息 + * + * @param id 区id + * @return 返回区信息 + */ + + LsDistrict queryDistrictById(long id); + + /** + * 修改省份信息 + * + * @param province 修改省份 + * @return 成功返回1 失败返回0 + */ + + int updateProvince(LsProvince province); + + /** + * 修改市信息 + * + * @param city 市信息 + * @return 成功返回1 失败返回0 + */ + + int updateCity(LsCity city); + + /** + * 修改区信息 + * + * @param district 区信息 + * @return 成功返回1 失败返回0 + */ + + int updateDistrict(LsDistrict district); + + /** + * 根据名称查询市id + * + * @param cityName 市名称 + * @return 市id + */ + + Long queryCityIdByName(String cityName); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/BaseInfoSetMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/BaseInfoSetMapper.java new file mode 100644 index 0000000..ac05963 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/BaseInfoSetMapper.java @@ -0,0 +1,55 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.segchk.domain.BaseInfoSet; + +/** + * 基本信息设置mapper层 + * + * @author 魔金商城 on 2017/5/17. + */ + +public interface BaseInfoSetMapper { + /** + * 查询基本信息设置 + * + * @return 基本信息设置实体类 + */ + + BaseInfoSet queryBaseInfoSet(); + + /** + * 编辑基本信息 + * + * @param baseInfoSet 信息实体类 + * @return 编辑返回码 + */ + + int editBaseInfoSetA(BaseInfoSet baseInfoSet); + + /** + * 编辑高级信息 + * + * @param baseInfoSet 信息实体类 + * @return 编辑返回码 + */ + + int editBaseInfoSetB(BaseInfoSet baseInfoSet); + + /** + * 设置审核开关 + * + * @param storeSpuAudit 店铺商品审核开关 0 需要审核 1 不需要 默认0 + * @return 成功返回1,失败返回0 + */ + + int setAuditSwitch(String storeSpuAudit); + + /** + * 设置审核开关 + * + * @param memberPriceStatus 会员等级启用状态 0 启用 1 不启用 默认0 + * @return 成功返回1,失败返回0 + */ + + int setMemberPriceStatus(String memberPriceStatus); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsCityMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsCityMapper.java new file mode 100644 index 0000000..b501955 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsCityMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.domain.LsCity; + +import java.util.List; + +/** + * 区域市Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface LsCityMapper { + /** + * 查询区域市 + * + * @param id 区域市ID + * @return 区域市 + */ + public LsCity selectLsCityById(Long id); + + /** + * 查询区域市列表 + * + * @param lsCity 区域市 + * @return 区域市集合 + */ + public List selectLsCityList(LsCity lsCity); + + /** + * 新增区域市 + * + * @param lsCity 区域市 + * @return 结果 + */ + public int insertLsCity(LsCity lsCity); + + /** + * 修改区域市 + * + * @param lsCity 区域市 + * @return 结果 + */ + public int updateLsCity(LsCity lsCity); + + /** + * 删除区域市 + * + * @param id 区域市ID + * @return 结果 + */ + public int deleteLsCityById(Long id); + + /** + * 批量删除区域市 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLsCityByIds(Long[] ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsDistrictMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsDistrictMapper.java new file mode 100644 index 0000000..47d9c14 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsDistrictMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.domain.LsDistrict; + +import java.util.List; + +/** + * 区域区Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface LsDistrictMapper { + /** + * 查询区域区 + * + * @param id 区域区ID + * @return 区域区 + */ + public LsDistrict selectLsDistrictById(Long id); + + /** + * 查询区域区列表 + * + * @param lsDistrict 区域区 + * @return 区域区集合 + */ + public List selectLsDistrictList(LsDistrict lsDistrict); + + /** + * 新增区域区 + * + * @param lsDistrict 区域区 + * @return 结果 + */ + public int insertLsDistrict(LsDistrict lsDistrict); + + /** + * 修改区域区 + * + * @param lsDistrict 区域区 + * @return 结果 + */ + public int updateLsDistrict(LsDistrict lsDistrict); + + /** + * 删除区域区 + * + * @param id 区域区ID + * @return 结果 + */ + public int deleteLsDistrictById(Long id); + + /** + * 批量删除区域区 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLsDistrictByIds(Long[] ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsEmailSettingMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsEmailSettingMapper.java new file mode 100644 index 0000000..582c4d0 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsEmailSettingMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.domain.LsEmailSetting; + +import java.util.List; + +/** + * 邮箱设置Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public interface LsEmailSettingMapper { + /** + * 查询邮箱设置 + * + * @param id 邮箱设置ID + * @return 邮箱设置 + */ + public LsEmailSetting selectLsEmailSettingById(Long id); + + /** + * 查询邮箱设置列表 + * + * @param lsEmailSetting 邮箱设置 + * @return 邮箱设置集合 + */ + public List selectLsEmailSettingList(LsEmailSetting lsEmailSetting); + + /** + * 新增邮箱设置 + * + * @param lsEmailSetting 邮箱设置 + * @return 结果 + */ + public int insertLsEmailSetting(LsEmailSetting lsEmailSetting); + + /** + * 修改邮箱设置 + * + * @param lsEmailSetting 邮箱设置 + * @return 结果 + */ + public int updateLsEmailSetting(LsEmailSetting lsEmailSetting); + + /** + * 删除邮箱设置 + * + * @param id 邮箱设置ID + * @return 结果 + */ + public int deleteLsEmailSettingById(Long id); + + /** + * 批量删除邮箱设置 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLsEmailSettingByIds(Long[] ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsProvinceMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsProvinceMapper.java new file mode 100644 index 0000000..8dba4d3 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsProvinceMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.domain.LsProvince; + +import java.util.List; + +/** + * 区域省Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface LsProvinceMapper { + /** + * 查询区域省 + * + * @param id 区域省ID + * @return 区域省 + */ + public LsProvince selectLsProvinceById(Long id); + + /** + * 查询区域省列表 + * + * @param lsProvince 区域省 + * @return 区域省集合 + */ + public List selectLsProvinceList(LsProvince lsProvince); + + /** + * 新增区域省 + * + * @param lsProvince 区域省 + * @return 结果 + */ + public int insertLsProvince(LsProvince lsProvince); + + /** + * 修改区域省 + * + * @param lsProvince 区域省 + * @return 结果 + */ + public int updateLsProvince(LsProvince lsProvince); + + /** + * 删除区域省 + * + * @param id 区域省ID + * @return 结果 + */ + public int deleteLsProvinceById(Long id); + + /** + * 批量删除区域省 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLsProvinceByIds(Long[] ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsSmsSettingMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsSmsSettingMapper.java new file mode 100644 index 0000000..346d114 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsSmsSettingMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.domain.LsSmsSetting; + +import java.util.List; + +/** + * 短信接口设置Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public interface LsSmsSettingMapper { + /** + * 查询短信接口设置 + * + * @param id 短信接口设置ID + * @return 短信接口设置 + */ + public LsSmsSetting selectLsSmsSettingById(Long id); + + /** + * 查询短信接口设置列表 + * + * @param lsSmsSetting 短信接口设置 + * @return 短信接口设置集合 + */ + public List selectLsSmsSettingList(LsSmsSetting lsSmsSetting); + + /** + * 新增短信接口设置 + * + * @param lsSmsSetting 短信接口设置 + * @return 结果 + */ + public int insertLsSmsSetting(LsSmsSetting lsSmsSetting); + + /** + * 修改短信接口设置 + * + * @param lsSmsSetting 短信接口设置 + * @return 结果 + */ + public int updateLsSmsSetting(LsSmsSetting lsSmsSetting); + + /** + * 删除短信接口设置 + * + * @param id 短信接口设置ID + * @return 结果 + */ + public int deleteLsSmsSettingById(Long id); + + /** + * 批量删除短信接口设置 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLsSmsSettingByIds(Long[] ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsStationLetterMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsStationLetterMapper.java new file mode 100644 index 0000000..c55e93f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsStationLetterMapper.java @@ -0,0 +1,116 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.domain.LsStationLetter; + +import java.util.List; +import java.util.Map; + +/** + * 站内信Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface LsStationLetterMapper { + /** + * 新增站内信 + * + * @param stationLetters 站内信 + * @return 成功返回>1 失败返回0 + */ + + int addStationLetters(List stationLetters); + + /** + * 删除站内信 + * + * @param id 站内信id + * @return 成功返回1,失败返回0 + */ + + int deleteStationLetters(long id); + + /** + * 根据会员id查询会员的站内信 + * + * @param params 查询参数 + * @return 返回会员的站内信 + */ + + List queryStationLettersByCustomerId(Map params); + + /** + * 查询会员的站内信总纪录数 + * + * @param params 查询参数 + * @return 返回会员的站内信总记录数 + */ + + int queryStationLettersCountByCustomerId(Map params); + + /** + * 更新会员的站内信的阅读状态 + * + * @param params 参数 + * @return 成功返回1,失败返回0 + */ + + int updateStationLettersIsRead(Map params); + + /** + * 获得用户未读消息的数量 + * + * @param customerId 用户id + * @return 返回用户未读消息的数量 + */ + + int unReadNum(long customerId); + + /** + * 查询站内信 + * + * @param id 站内信ID + * @return 站内信 + */ + public LsStationLetter selectLsStationLetterById(Long id); + + /** + * 查询站内信列表 + * + * @param lsStationLetter 站内信 + * @return 站内信集合 + */ + public List selectLsStationLetterList(LsStationLetter lsStationLetter); + + /** + * 新增站内信 + * + * @param lsStationLetter 站内信 + * @return 结果 + */ + public int insertLsStationLetter(LsStationLetter lsStationLetter); + + /** + * 修改站内信 + * + * @param lsStationLetter 站内信 + * @return 结果 + */ + public int updateLsStationLetter(LsStationLetter lsStationLetter); + + /** + * 删除站内信 + * + * @param id 站内信ID + * @return 结果 + */ + public int deleteLsStationLetterById(Long id); + + /** + * 批量删除站内信 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLsStationLetterByIds(Long[] ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsSystemSeoMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsSystemSeoMapper.java new file mode 100644 index 0000000..dabdaa7 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsSystemSeoMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.domain.LsSystemSeo; + +import java.util.List; + +/** + * 系统seo设置Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface LsSystemSeoMapper { + /** + * 查询系统seo设置 + * + * @param id 系统seo设置ID + * @return 系统seo设置 + */ + public LsSystemSeo selectLsSystemSeoById(Long id); + + /** + * 查询系统seo设置列表 + * + * @param lsSystemSeo 系统seo设置 + * @return 系统seo设置集合 + */ + public List selectLsSystemSeoList(LsSystemSeo lsSystemSeo); + + /** + * 新增系统seo设置 + * + * @param lsSystemSeo 系统seo设置 + * @return 结果 + */ + public int insertLsSystemSeo(LsSystemSeo lsSystemSeo); + + /** + * 修改系统seo设置 + * + * @param lsSystemSeo 系统seo设置 + * @return 结果 + */ + public int updateLsSystemSeo(LsSystemSeo lsSystemSeo); + + /** + * 删除系统seo设置 + * + * @param id 系统seo设置ID + * @return 结果 + */ + public int deleteLsSystemSeoById(Long id); + + /** + * 批量删除系统seo设置 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLsSystemSeoByIds(Long[] ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsWxCustomerLinkMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsWxCustomerLinkMapper.java new file mode 100644 index 0000000..82c3ccc --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/LsWxCustomerLinkMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.domain.LsWxCustomerLink; + +import java.util.List; + +/** + * 微信登录和商城用户的关联Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface LsWxCustomerLinkMapper { + /** + * 查询微信登录和商城用户的关联 + * + * @param id 微信登录和商城用户的关联ID + * @return 微信登录和商城用户的关联 + */ + public LsWxCustomerLink selectLsWxCustomerLinkById(Long id); + + /** + * 查询微信登录和商城用户的关联列表 + * + * @param lsWxCustomerLink 微信登录和商城用户的关联 + * @return 微信登录和商城用户的关联集合 + */ + public List selectLsWxCustomerLinkList(LsWxCustomerLink lsWxCustomerLink); + + /** + * 新增微信登录和商城用户的关联 + * + * @param lsWxCustomerLink 微信登录和商城用户的关联 + * @return 结果 + */ + public int insertLsWxCustomerLink(LsWxCustomerLink lsWxCustomerLink); + + /** + * 修改微信登录和商城用户的关联 + * + * @param lsWxCustomerLink 微信登录和商城用户的关联 + * @return 结果 + */ + public int updateLsWxCustomerLink(LsWxCustomerLink lsWxCustomerLink); + + /** + * 删除微信登录和商城用户的关联 + * + * @param id 微信登录和商城用户的关联ID + * @return 结果 + */ + public int deleteLsWxCustomerLinkById(Long id); + + /** + * 批量删除微信登录和商城用户的关联 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLsWxCustomerLinkByIds(Long[] ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/OssMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/OssMapper.java new file mode 100644 index 0000000..ff793d1 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/OssMapper.java @@ -0,0 +1,30 @@ +package com.ruoyi.setting.mapper; + + +import com.ruoyi.setting.bean.OssSetting; +import org.springframework.stereotype.Repository; + +/** + * Created by luozhuo on 2020/7/7 + * 云存储设置数据库接口 + */ +@Repository +public interface OssMapper { + + /** + * 查询系统设置的云存储信息 + * + * @return 返回云存储信息 + */ + + OssSetting queryOssSetting(); + + /** + * 修改又拍云信息 + * + * @param ossSetting 云存储信息 + * @return 成功返回1 失败返回0 + */ + + int updateOss(OssSetting ossSetting); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/SCommunityBuySettingMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/SCommunityBuySettingMapper.java new file mode 100644 index 0000000..f401ad4 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/SCommunityBuySettingMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.domain.SCommunityBuySetting; + +import java.util.List; + +/** + * 社区团购设置Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public interface SCommunityBuySettingMapper { + /** + * 查询社区团购设置 + * + * @param id 社区团购设置ID + * @return 社区团购设置 + */ + public SCommunityBuySetting selectSCommunityBuySettingById(Long id); + + /** + * 查询社区团购设置列表 + * + * @param sCommunityBuySetting 社区团购设置 + * @return 社区团购设置集合 + */ + public List selectSCommunityBuySettingList(SCommunityBuySetting sCommunityBuySetting); + + /** + * 新增社区团购设置 + * + * @param sCommunityBuySetting 社区团购设置 + * @return 结果 + */ + public int insertSCommunityBuySetting(SCommunityBuySetting sCommunityBuySetting); + + /** + * 修改社区团购设置 + * + * @param sCommunityBuySetting 社区团购设置 + * @return 结果 + */ + public int updateSCommunityBuySetting(SCommunityBuySetting sCommunityBuySetting); + + /** + * 删除社区团购设置 + * + * @param id 社区团购设置ID + * @return 结果 + */ + public int deleteSCommunityBuySettingById(Long id); + + /** + * 批量删除社区团购设置 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSCommunityBuySettingByIds(Long[] ids); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/SegchkPaySettingMapper.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/SegchkPaySettingMapper.java new file mode 100644 index 0000000..dbbc923 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/mapper/SegchkPaySettingMapper.java @@ -0,0 +1,82 @@ +package com.ruoyi.setting.mapper; + +import com.ruoyi.setting.bean.PaySet; +import com.ruoyi.setting.domain.SegchkPaySetting; + +import java.util.List; + +/** + * 支付设置Mapper接口 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public interface SegchkPaySettingMapper { + /** + * 查询支付设置 + * + * @param id 支付设置ID + * @return 支付设置 + */ + public SegchkPaySetting selectLsPaySettingById(Long id); + + /** + * 查询支付设置列表 + * + * @param segchkPaySetting 支付设置 + * @return 支付设置集合 + */ + public List selectLsPaySettingList(SegchkPaySetting segchkPaySetting); + + /** + * 新增支付设置 + * + * @param segchkPaySetting 支付设置 + * @return 结果 + */ + public int insertLsPaySetting(SegchkPaySetting segchkPaySetting); + + /** + * 修改支付设置 + * + * @param segchkPaySetting 支付设置 + * @return 结果 + */ + public int updateLsPaySetting(SegchkPaySetting segchkPaySetting); + + /** + * 删除支付设置 + * + * @param id 支付设置ID + * @return 结果 + */ + public int deleteLsPaySettingById(Long id); + + /** + * 批量删除支付设置 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteLsPaySettingByIds(Long[] ids); + + List queryPaySet(); + + /** + * 根据codeType删除支付接口设置 + * + * @param codeType 1支付宝 2微信 3银联 + * @return 返回删除行数 + */ + + int deletePaySet(String codeType); + + /** + * 批量插入支付接口设置 + * + * @param list PaySet集合 + * @return 返回插入行数 + */ + + int addPaySet(List list); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/AreaService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/AreaService.java new file mode 100644 index 0000000..f8b9fca --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/AreaService.java @@ -0,0 +1,155 @@ +package com.ruoyi.setting.service; + + +import com.ruoyi.setting.domain.LsCity; +import com.ruoyi.setting.domain.LsDistrict; +import com.ruoyi.setting.domain.LsProvince; +import com.ruoyi.setting.vo.AreaItem; +import com.ruoyi.setting.vo.Locality; + +import java.util.List; + +/** + * Created by 魔金商城 on 17/5/15. + * 地区服务接口 + */ +public interface AreaService { + + /** + * 查询所有省份 + * + * @param areaItems 查询参数 不带只查询省 + * @return 返回所有省份 + */ + List queryAllProvinces(AreaItem... areaItems); + + + /** + * 查询所有地区信息(特殊数据接口) + * + * @return 所有地区信息 + */ + List queryAllLocality(); + + + /** + * 根据省份id查询下面的市 + * + * @param provinceId 省份id + * @return 返回该省下面的市 + */ + List queryCityByProvinceId(long provinceId); + + /** + * 根据市id查询下面的区县 + * + * @param cityId 市id + * @return 返回市下面的区县 + */ + List queryDistrictByCityId(long cityId); + + /** + * 添加省份 + * + * @param province 省份信息 + * @return 成功返回1 失败返回0 + */ + int addProvince(LsProvince province); + + /** + * 添加市 + * + * @param city 市 + * @return 成返回1 失败返回0 + */ + int addCity(LsCity city); + + /** + * 添加区 + * + * @param district 区信息 + * @return 成功返回1 失败返回0 + */ + int addDistrict(LsDistrict district); + + + /** + * 根据省份id删除省信息 + * + * @param provinceId 省份id + * @return 1 成功 0 失败 -1 下面有市不能删除 + */ + int deleteProvinceById(long provinceId); + + /** + * 根据市id删除市信息 + * + * @param cityId 市id + * @return 返回 1 成功 0 失败 -1 下面有区 不能删除 + */ + int deleteCityById(long cityId); + + /** + * 根据区id删除区 + * + * @param districtId 区id + * @return 返回 1 成功 0 失败 + */ + int deleteDistrictById(long districtId); + + /** + * 根据省份id查询省份信息 + * + * @param id 省份id + * @return 返回省份信息 + */ + LsProvince queryProvinceById(long id); + + /** + * 根据市id查询市信息 + * + * @param id 市id + * @return 返回市信息 + */ + LsCity queryCityById(long id); + + /** + * 根据区id查询区信息 + * + * @param id 区id + * @return 返回区信息 + */ + LsDistrict queryDistrictById(long id); + + /** + * 修改省份 + * + * @param province 省份信息 + * @return 成功返回1 失败返回0 + */ + int updateProvince(LsProvince province); + + /** + * 修改市 + * + * @param city 市信息 + * @return 成功返回1 失败返回0 + */ + int updateCity(LsCity city); + + /** + * 修改区 + * + * @param district 区信息 + * @return 成功返回1 失败返回0 + */ + int updateDistrict(LsDistrict district); + + /** + * 根据市名称查找市id + * + * @param cityName 市名称 + * @return 市id + */ + long queryCityIdByName(String cityName); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/BaseInfoSetService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/BaseInfoSetService.java new file mode 100644 index 0000000..3f079c5 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/BaseInfoSetService.java @@ -0,0 +1,49 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.segchk.domain.BaseInfoSet; + +/** + * 基本信息设置service层 + * + * @author 魔金商城 on 2017/5/17. + */ +public interface BaseInfoSetService { + /** + * 查询基本信息和高级信息设置 + * + * @return 基本信息设置实体类 + */ + BaseInfoSet queryBaseInfoSet(); + + /** + * 编辑基本信息和高级信息 + * + * @param baseInfoSet 基本信息实体类 + * @param type 1 基本信息 0高级信息 + * @return -1编辑失败 1编辑成功 0编辑失败 + */ + int editBaseInfoSet(BaseInfoSet baseInfoSet, int type); + + /** + * 设置审核开关 + * + * @param storeSpuAudit 店铺商品审核开关 0 需要审核 1 不需要 默认0 + * @return 成功返回1,失败返回0 + */ + int setAuditSwitch(String storeSpuAudit); + + /** + * 设置会员价启用状态 + * + * @param memberPriceStatus 会员等级启用状态 0 启用 1 不启用 默认0 + * @return 成功返回1,失败返回0 + */ + int setMemberPriceStatus(String memberPriceStatus); + + /** + * 判断单品是否需要审核 + * + * @return 需要审核返回true 不需要返回false + */ + boolean isSkuNeedAudit(); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsCityService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsCityService.java new file mode 100644 index 0000000..72e28cb --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsCityService.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.domain.LsCity; + +import java.util.List; + +/** + * 区域市Service接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface ILsCityService { + /** + * 查询区域市 + * + * @param id 区域市ID + * @return 区域市 + */ + public LsCity selectLsCityById(Long id); + + /** + * 查询区域市列表 + * + * @param lsCity 区域市 + * @return 区域市集合 + */ + public List selectLsCityList(LsCity lsCity); + + /** + * 新增区域市 + * + * @param lsCity 区域市 + * @return 结果 + */ + public int insertLsCity(LsCity lsCity); + + /** + * 修改区域市 + * + * @param lsCity 区域市 + * @return 结果 + */ + public int updateLsCity(LsCity lsCity); + + /** + * 批量删除区域市 + * + * @param ids 需要删除的区域市ID + * @return 结果 + */ + public int deleteLsCityByIds(Long[] ids); + + /** + * 删除区域市信息 + * + * @param id 区域市ID + * @return 结果 + */ + public int deleteLsCityById(Long id); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsDistrictService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsDistrictService.java new file mode 100644 index 0000000..f1d9db9 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsDistrictService.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.domain.LsDistrict; + +import java.util.List; + +/** + * 区域区Service接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface ILsDistrictService { + /** + * 查询区域区 + * + * @param id 区域区ID + * @return 区域区 + */ + public LsDistrict selectLsDistrictById(Long id); + + /** + * 查询区域区列表 + * + * @param lsDistrict 区域区 + * @return 区域区集合 + */ + public List selectLsDistrictList(LsDistrict lsDistrict); + + /** + * 新增区域区 + * + * @param lsDistrict 区域区 + * @return 结果 + */ + public int insertLsDistrict(LsDistrict lsDistrict); + + /** + * 修改区域区 + * + * @param lsDistrict 区域区 + * @return 结果 + */ + public int updateLsDistrict(LsDistrict lsDistrict); + + /** + * 批量删除区域区 + * + * @param ids 需要删除的区域区ID + * @return 结果 + */ + public int deleteLsDistrictByIds(Long[] ids); + + /** + * 删除区域区信息 + * + * @param id 区域区ID + * @return 结果 + */ + public int deleteLsDistrictById(Long id); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsEmailSettingService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsEmailSettingService.java new file mode 100644 index 0000000..a851365 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsEmailSettingService.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.domain.LsEmailSetting; + +import java.util.List; + +/** + * 邮箱设置Service接口 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public interface ILsEmailSettingService { + /** + * 查询邮箱设置 + * + * @param id 邮箱设置ID + * @return 邮箱设置 + */ + public LsEmailSetting selectLsEmailSettingById(Long id); + + /** + * 查询邮箱设置列表 + * + * @param lsEmailSetting 邮箱设置 + * @return 邮箱设置集合 + */ + public List selectLsEmailSettingList(LsEmailSetting lsEmailSetting); + + /** + * 新增邮箱设置 + * + * @param lsEmailSetting 邮箱设置 + * @return 结果 + */ + public int insertLsEmailSetting(LsEmailSetting lsEmailSetting); + + /** + * 修改邮箱设置 + * + * @param lsEmailSetting 邮箱设置 + * @return 结果 + */ + public int updateLsEmailSetting(LsEmailSetting lsEmailSetting); + + /** + * 批量删除邮箱设置 + * + * @param ids 需要删除的邮箱设置ID + * @return 结果 + */ + public int deleteLsEmailSettingByIds(Long[] ids); + + /** + * 删除邮箱设置信息 + * + * @param id 邮箱设置ID + * @return 结果 + */ + public int deleteLsEmailSettingById(Long id); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsPaySettingService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsPaySettingService.java new file mode 100644 index 0000000..349e9ca --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsPaySettingService.java @@ -0,0 +1,76 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.bean.PaySetCommon; +import com.ruoyi.setting.domain.SegchkPaySetting; + +import java.util.List; + +/** + * 支付设置Service接口 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public interface ILsPaySettingService { + /** + * 查询所有支付接口设置 + * + * @return 返回PaySetCommon + */ + PaySetCommon queryPaySet(); + + /** + * 编辑支付接口设置 + * + * @return -1编辑出错 1成功 + */ + int editPaySet(PaySetCommon paySetCommon, String codeType); + + /** + * 查询支付设置 + * + * @param id 支付设置ID + * @return 支付设置 + */ + public SegchkPaySetting selectLsPaySettingById(Long id); + + /** + * 查询支付设置列表 + * + * @param segchkPaySetting 支付设置 + * @return 支付设置集合 + */ + public List selectLsPaySettingList(SegchkPaySetting segchkPaySetting); + + /** + * 新增支付设置 + * + * @param segchkPaySetting 支付设置 + * @return 结果 + */ + public int insertLsPaySetting(SegchkPaySetting segchkPaySetting); + + /** + * 修改支付设置 + * + * @param segchkPaySetting 支付设置 + * @return 结果 + */ + public int updateLsPaySetting(SegchkPaySetting segchkPaySetting); + + /** + * 批量删除支付设置 + * + * @param ids 需要删除的支付设置ID + * @return 结果 + */ + public int deleteLsPaySettingByIds(Long[] ids); + + /** + * 删除支付设置信息 + * + * @param id 支付设置ID + * @return 结果 + */ + public int deleteLsPaySettingById(Long id); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsProvinceService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsProvinceService.java new file mode 100644 index 0000000..bf6b104 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsProvinceService.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.domain.LsProvince; + +import java.util.List; + +/** + * 区域省Service接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface ILsProvinceService { + /** + * 查询区域省 + * + * @param id 区域省ID + * @return 区域省 + */ + public LsProvince selectLsProvinceById(Long id); + + /** + * 查询区域省列表 + * + * @param lsProvince 区域省 + * @return 区域省集合 + */ + public List selectLsProvinceList(LsProvince lsProvince); + + /** + * 新增区域省 + * + * @param lsProvince 区域省 + * @return 结果 + */ + public int insertLsProvince(LsProvince lsProvince); + + /** + * 修改区域省 + * + * @param lsProvince 区域省 + * @return 结果 + */ + public int updateLsProvince(LsProvince lsProvince); + + /** + * 批量删除区域省 + * + * @param ids 需要删除的区域省ID + * @return 结果 + */ + public int deleteLsProvinceByIds(Long[] ids); + + /** + * 删除区域省信息 + * + * @param id 区域省ID + * @return 结果 + */ + public int deleteLsProvinceById(Long id); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsSmsSettingService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsSmsSettingService.java new file mode 100644 index 0000000..ea1ccb7 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsSmsSettingService.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.domain.LsSmsSetting; + +import java.util.List; + +/** + * 短信接口设置Service接口 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public interface ILsSmsSettingService { + /** + * 查询短信接口设置 + * + * @param id 短信接口设置ID + * @return 短信接口设置 + */ + public LsSmsSetting selectLsSmsSettingById(Long id); + + /** + * 查询短信接口设置列表 + * + * @param lsSmsSetting 短信接口设置 + * @return 短信接口设置集合 + */ + public List selectLsSmsSettingList(LsSmsSetting lsSmsSetting); + + /** + * 新增短信接口设置 + * + * @param lsSmsSetting 短信接口设置 + * @return 结果 + */ + public int insertLsSmsSetting(LsSmsSetting lsSmsSetting); + + /** + * 修改短信接口设置 + * + * @param lsSmsSetting 短信接口设置 + * @return 结果 + */ + public int updateLsSmsSetting(LsSmsSetting lsSmsSetting); + + /** + * 批量删除短信接口设置 + * + * @param ids 需要删除的短信接口设置ID + * @return 结果 + */ + public int deleteLsSmsSettingByIds(Long[] ids); + + /** + * 删除短信接口设置信息 + * + * @param id 短信接口设置ID + * @return 结果 + */ + public int deleteLsSmsSettingById(Long id); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsStationLetterService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsStationLetterService.java new file mode 100644 index 0000000..c352bfa --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsStationLetterService.java @@ -0,0 +1,105 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.domain.LsStationLetter; +import com.ruoyi.util.PageHelper; + +import java.util.List; + +/** + * 站内信Service接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface ILsStationLetterService { + /** + * 查询站内信 + * + * @param id 站内信ID + * @return 站内信 + */ + public LsStationLetter selectLsStationLetterById(Long id); + + /** + * 查询站内信列表 + * + * @param lsStationLetter 站内信 + * @return 站内信集合 + */ + public List selectLsStationLetterList(LsStationLetter lsStationLetter); + + /** + * 新增站内信 + * + * @param lsStationLetter 站内信 + * @return 结果 + */ + public int insertLsStationLetter(LsStationLetter lsStationLetter); + + /** + * 修改站内信 + * + * @param lsStationLetter 站内信 + * @return 结果 + */ + public int updateLsStationLetter(LsStationLetter lsStationLetter); + + /** + * 批量删除站内信 + * + * @param ids 需要删除的站内信ID + * @return 结果 + */ + public int deleteLsStationLetterByIds(Long[] ids); + + /** + * 删除站内信信息 + * + * @param id 站内信ID + * @return 结果 + */ + public int deleteLsStationLetterById(Long id); + + /** + * 新增站内信 + * + * @param stationLetters 站内信集合 + * @return 成功返回>1 失败返回0 + */ + int addStationLetters(List stationLetters); + + /** + * 删除站内信 + * + * @param id 站内信id + * @return 成功返回1,失败返回0 + */ + int deleteStationLetters(long id); + + /** + * 根据会员di查询会员的站内信 + * + * @param pageHelper 分页帮助类 + * @param customerId 会员id + * @return 返回会员的站内信 + */ + PageHelper queryStationLettersByCustomerId(PageHelper pageHelper, long customerId); + + /** + * 更新会员的站内信的阅读状态 + * + * @param id 站内信id + * @param customerId 用户id + * @return 成功返回1,失败返回0 + */ + int updateStationLettersIsRead(long id, long customerId); + + /** + * 获得用户未读的消息数量 + * + * @param customerId 会员id + * @return 返回用户未读消息的数量 + */ + int unReadNum(long customerId); + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsSystemSeoService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsSystemSeoService.java new file mode 100644 index 0000000..75851c1 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsSystemSeoService.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.domain.LsSystemSeo; + +import java.util.List; + +/** + * 系统seo设置Service接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface ILsSystemSeoService { + /** + * 查询系统seo设置 + * + * @param id 系统seo设置ID + * @return 系统seo设置 + */ + public LsSystemSeo selectLsSystemSeoById(Long id); + + /** + * 查询系统seo设置列表 + * + * @param lsSystemSeo 系统seo设置 + * @return 系统seo设置集合 + */ + public List selectLsSystemSeoList(LsSystemSeo lsSystemSeo); + + /** + * 新增系统seo设置 + * + * @param lsSystemSeo 系统seo设置 + * @return 结果 + */ + public int insertLsSystemSeo(LsSystemSeo lsSystemSeo); + + /** + * 修改系统seo设置 + * + * @param lsSystemSeo 系统seo设置 + * @return 结果 + */ + public int updateLsSystemSeo(LsSystemSeo lsSystemSeo); + + /** + * 批量删除系统seo设置 + * + * @param ids 需要删除的系统seo设置ID + * @return 结果 + */ + public int deleteLsSystemSeoByIds(Long[] ids); + + /** + * 删除系统seo设置信息 + * + * @param id 系统seo设置ID + * @return 结果 + */ + public int deleteLsSystemSeoById(Long id); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsWxCustomerLinkService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsWxCustomerLinkService.java new file mode 100644 index 0000000..b2d328a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ILsWxCustomerLinkService.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.domain.LsWxCustomerLink; + +import java.util.List; + +/** + * 微信登录和商城用户的关联Service接口 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +public interface ILsWxCustomerLinkService { + /** + * 查询微信登录和商城用户的关联 + * + * @param id 微信登录和商城用户的关联ID + * @return 微信登录和商城用户的关联 + */ + public LsWxCustomerLink selectLsWxCustomerLinkById(Long id); + + /** + * 查询微信登录和商城用户的关联列表 + * + * @param lsWxCustomerLink 微信登录和商城用户的关联 + * @return 微信登录和商城用户的关联集合 + */ + public List selectLsWxCustomerLinkList(LsWxCustomerLink lsWxCustomerLink); + + /** + * 新增微信登录和商城用户的关联 + * + * @param lsWxCustomerLink 微信登录和商城用户的关联 + * @return 结果 + */ + public int insertLsWxCustomerLink(LsWxCustomerLink lsWxCustomerLink); + + /** + * 修改微信登录和商城用户的关联 + * + * @param lsWxCustomerLink 微信登录和商城用户的关联 + * @return 结果 + */ + public int updateLsWxCustomerLink(LsWxCustomerLink lsWxCustomerLink); + + /** + * 批量删除微信登录和商城用户的关联 + * + * @param ids 需要删除的微信登录和商城用户的关联ID + * @return 结果 + */ + public int deleteLsWxCustomerLinkByIds(Long[] ids); + + /** + * 删除微信登录和商城用户的关联信息 + * + * @param id 微信登录和商城用户的关联ID + * @return 结果 + */ + public int deleteLsWxCustomerLinkById(Long id); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ISCommunityBuySettingService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ISCommunityBuySettingService.java new file mode 100644 index 0000000..c620b1a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/ISCommunityBuySettingService.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.service; + +import com.ruoyi.setting.domain.SCommunityBuySetting; + +import java.util.List; + +/** + * 社区团购设置Service接口 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +public interface ISCommunityBuySettingService { + /** + * 查询社区团购设置 + * + * @param id 社区团购设置ID + * @return 社区团购设置 + */ + public SCommunityBuySetting selectSCommunityBuySettingById(Long id); + + /** + * 查询社区团购设置列表 + * + * @param sCommunityBuySetting 社区团购设置 + * @return 社区团购设置集合 + */ + public List selectSCommunityBuySettingList(SCommunityBuySetting sCommunityBuySetting); + + /** + * 新增社区团购设置 + * + * @param sCommunityBuySetting 社区团购设置 + * @return 结果 + */ + public int insertSCommunityBuySetting(SCommunityBuySetting sCommunityBuySetting); + + /** + * 修改社区团购设置 + * + * @param sCommunityBuySetting 社区团购设置 + * @return 结果 + */ + public int updateSCommunityBuySetting(SCommunityBuySetting sCommunityBuySetting); + + /** + * 批量删除社区团购设置 + * + * @param ids 需要删除的社区团购设置ID + * @return 结果 + */ + public int deleteSCommunityBuySettingByIds(Long[] ids); + + /** + * 删除社区团购设置信息 + * + * @param id 社区团购设置ID + * @return 结果 + */ + public int deleteSCommunityBuySettingById(Long id); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/OssService.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/OssService.java new file mode 100644 index 0000000..f59a877 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/OssService.java @@ -0,0 +1,61 @@ +package com.ruoyi.setting.service; + + +import com.ruoyi.setting.bean.OssSetting; +import com.ruoyi.setting.bean.UploadData; + +import java.util.List; + +/** + * Created by luozhuo on 2020/7/7. + * 云存储服务接口 + */ +public interface OssService { + + /** + * 上传到云存储 + * + * @param uploadDatas 上传的参数 + * @return 返回图片在云存储的地址 + */ + List uploadToQqOss(List uploadDatas); + + /** + * 上传到腾讯云存储(上传base64图片) + * + * @param uploadDatas 上传的参数 + * @return 返回图片在云存储的地址 + */ + List uploadToQqOssForBase64(List uploadDatas); + + /** + * 上传到腾讯云存储 + * + * @param uploadDatas 上传的参数 + * @return 返回图片在云存储的地址 + */ + List uploadToOss(List uploadDatas); + + /** + * 上传到云存储(上传base64图片) + * + * @param uploadDatas 上传的参数 + * @return 返回图片在云存储的地址 + */ + List uploadToOssForBase64(List uploadDatas); + + /** + * 查询系统设置的云存储信息 + * + * @return 返回云存储信息 + */ + OssSetting queryOssSetting(); + + /** + * 修改云存储设置信息 + * + * @param OssSetting 云存储设置实体 + * @return 成功返回1 失败返回0 + */ + int updateOss(OssSetting OssSetting); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/AreaServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/AreaServiceImpl.java new file mode 100644 index 0000000..d1905be --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/AreaServiceImpl.java @@ -0,0 +1,270 @@ +package com.ruoyi.setting.service.impl; + + +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.setting.domain.LsCity; +import com.ruoyi.setting.domain.LsDistrict; +import com.ruoyi.setting.domain.LsProvince; +import com.ruoyi.setting.mapper.AreaMapper; +import com.ruoyi.setting.service.AreaService; +import com.ruoyi.setting.vo.AreaItem; +import com.ruoyi.setting.vo.Locality; +import com.ruoyi.common.utils.RedisCahceKey; +import org.apache.commons.lang.ArrayUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * Created by 魔金商城 on 17/5/15 + * 地区服务实现接口 + */ +@Service +public class AreaServiceImpl implements AreaService { + + /** + * 调试日志 + */ + private Logger logger = LoggerFactory.getLogger(AreaServiceImpl.class); + + /** + * 地区数据库接口 + */ + @Autowired + private AreaMapper areaMapper; + + @Cacheable(value = RedisCahceKey.AREA, key = "'AREA'+#areaItems.hashCode()") + @Override + public List queryAllProvinces(AreaItem... areaItems) { + logger.debug("queryAllProvinces.....areaItems:{}", areaItems); + + List provinces = areaMapper.queryAllProvinces(); + + // 如果没有省则直接返回 + if (CollectionUtils.isEmpty(provinces)) { + return provinces; + } + + // 设置省下面的市 + if (ArrayUtils.contains(areaItems, AreaItem.CITY)) { + provinces.parallelStream().forEach(province -> province.setChild(this.queryCityByProvinceId(province.getId()))); + } + + // 设置市下面的区 + if (ArrayUtils.contains(areaItems, AreaItem.DISTRICT)) { + provinces.parallelStream().forEach(province -> province.getChild().stream().forEach(city -> city.setChild(this.queryDistrictByCityId(city.getId())))); + } + + // 查询所有省市区 + if (ArrayUtils.contains(areaItems, AreaItem.ALL)) { + provinces.parallelStream().forEach(province -> province.setChild(this.queryCityByProvinceId(province.getId()))); + provinces.parallelStream().forEach(province -> province.getChild().stream().forEach(city -> city.setChild(this.queryDistrictByCityId(city.getId())))); + } + + return provinces; + } + + + /** + * 查询所有地区信息(特殊数据接口) + * + * @return 所有地区信息 + */ + @Override + public List queryAllLocality() { + logger.debug("queryAllLocality...."); + + List provinceList = SpringUtils.getBean(AreaService.class).queryAllProvinces(AreaItem.ALL); + + //初始化返回集合 + List localities = new ArrayList<>(); + + //构建数据结构 + for (int i = 0, size = provinceList.size(); i < size; i++) { + //省份 + localities.add(new Locality(provinceList.get(i).getName(), "P-" + provinceList.get(i).getId(), "0", provinceList.get(i).getId())); + for (int k = 0; k < provinceList.get(i).getChild().size(); k++) { + //城市 + localities.add(new Locality(provinceList.get(i).getChild().get(k).getName(), "C-" + provinceList.get(i).getChild().get(k).getId(), "P-" + provinceList.get(i).getChild().get(k).getProvinceId(), provinceList.get(i).getChild().get(k).getId())); + for (int j = 0; j < provinceList.get(i).getChild().get(k).getChild().size(); j++) { + //地区 + localities.add(new Locality(provinceList.get(i).getChild().get(k).getChild().get(j).getName(), "D-" + provinceList.get(i).getChild().get(k).getChild().get(j).getId(), "C-" + provinceList.get(i).getChild().get(k).getId(), provinceList.get(i).getChild().get(k).getChild().get(j).getId())); + } + } + } + + return localities; + + } + + + @Override + public List queryCityByProvinceId(long provinceId) { + logger.debug("queryCityByProvinceId and provinceId:{}", provinceId); + return areaMapper.queryCityByProvinceId(provinceId); + } + + @Override + public List queryDistrictByCityId(long cityId) { + logger.debug("queryDistrictByCityId and cityId:{}", cityId); + return areaMapper.queryDistrictByCityId(cityId); + } + + @CacheEvict(value = RedisCahceKey.AREA, allEntries = true) + @Override + public int addProvince(LsProvince province) { + logger.debug("addProvince and province:{}", province); + + if (Objects.isNull(province)) { + logger.error("addProvince fail due to province is null...."); + return 0; + } + return areaMapper.addProvince(province); + } + + @CacheEvict(value = RedisCahceKey.AREA, allEntries = true) + @Override + public int addCity(LsCity city) { + logger.debug("addCity and city :{}", city); + if (Objects.isNull(city)) { + logger.error("addCity fail due to city is null...."); + return 0; + } + return areaMapper.addCity(city); + } + + @CacheEvict(value = RedisCahceKey.AREA, allEntries = true) + @Override + public int addDistrict(LsDistrict district) { + + logger.debug("addDistrict and district:{}", district); + + if (Objects.isNull(district)) { + logger.error("addDistrict fail due to district is null..."); + return 0; + } + return areaMapper.addDistrict(district); + } + + @CacheEvict(value = RedisCahceKey.AREA, allEntries = true) + @Override + public int deleteProvinceById(long provinceId) { + logger.debug("deleteProvinceById and provinceId:{}", provinceId); + + if (!isProvinceCanDelete(provinceId)) { + logger.error("deleteProvinceById fail due to province has city..."); + return -1; + } + + return areaMapper.deleteProvinceById(provinceId); + } + + @CacheEvict(value = RedisCahceKey.AREA, allEntries = true) + @Override + public int deleteCityById(long cityId) { + logger.debug("deleteCityById and cityId:{}", cityId); + + if (!isCityCanDelete(cityId)) { + logger.error("deleteCityById fail due to city has district"); + return -1; + } + return areaMapper.deleteCityById(cityId); + } + + @CacheEvict(value = RedisCahceKey.AREA, allEntries = true) + @Override + public int deleteDistrictById(long districtId) { + logger.debug("deleteDistrictById and districtId:{}", districtId); + return areaMapper.deleteDistrictById(districtId); + } + + + @Override + public LsProvince queryProvinceById(long id) { + logger.debug("queryProvinceById and id:{}", id); + return areaMapper.queryProvinceById(id); + } + + @Override + public LsCity queryCityById(long id) { + logger.debug("queryCityById and id:{}", id); + return areaMapper.queryCityById(id); + } + + @Override + public LsDistrict queryDistrictById(long id) { + logger.debug("queryDistrictById and id :{}", id); + return areaMapper.queryDistrictById(id); + } + + @CacheEvict(value = RedisCahceKey.AREA, allEntries = true) + @Override + public int updateProvince(LsProvince province) { + logger.debug("updateProvince and province:{}", province); + if (Objects.isNull(province)) { + logger.error("updateProvince fail ..."); + return 0; + } + return areaMapper.updateProvince(province); + } + + @CacheEvict(value = RedisCahceKey.AREA, allEntries = true) + @Override + public int updateCity(LsCity city) { + logger.debug("updateCity and city:{}", city); + + if (Objects.isNull(city)) { + logger.error("updateCity fail..."); + return 0; + } + return areaMapper.updateCity(city); + } + + @CacheEvict(value = RedisCahceKey.AREA, allEntries = true) + @Override + public int updateDistrict(LsDistrict district) { + logger.debug("updateDistrict and district:{}", district); + + if (Objects.isNull(district)) { + logger.error("updateDistrict fail...."); + return 0; + } + return areaMapper.updateDistrict(district); + } + + @Override + public long queryCityIdByName(String cityName) { + logger.debug("queryCityIdByName and cityName:{}", cityName); + Long cityId = areaMapper.queryCityIdByName(cityName); + return Objects.isNull(cityId) ? -1 : cityId; + } + + + /** + * 判断市是否可以删除 + * + * @param cityId 市id + * @return 可以返回true 不可以返回false 市下面有区则不能删除 + */ + private boolean isCityCanDelete(long cityId) { + return CollectionUtils.isEmpty(this.queryDistrictByCityId(cityId)); + } + + /** + * 判断省份是否可以删除 + * + * @param provinceId 省份id + * @return 可以删除 返回true 不可以删除 返回false (省份下面有市则不能删除) + */ + private boolean isProvinceCanDelete(long provinceId) { + return CollectionUtils.isEmpty(this.queryCityByProvinceId(provinceId)); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/BaseInfoSetServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/BaseInfoSetServiceImpl.java new file mode 100644 index 0000000..4c4672c --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/BaseInfoSetServiceImpl.java @@ -0,0 +1,117 @@ +package com.ruoyi.setting.service.impl; + + +import com.ruoyi.setting.mapper.BaseInfoSetMapper; +import com.ruoyi.setting.service.BaseInfoSetService; +import com.ruoyi.common.utils.RedisCahceKey; +import com.ruoyi.segchk.domain.BaseInfoSet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +/** + * 基本信息设置service实现类 + * + * @author 魔金商城 on 2017/5/17. + */ +@Service +public class BaseInfoSetServiceImpl implements BaseInfoSetService { + + /** + * 调试日志 + */ + private Logger logger = LoggerFactory.getLogger(BaseInfoSetServiceImpl.class); + + /** + * 注入信息设置mapper + */ + @Autowired + private BaseInfoSetMapper baseInfoSetMapper; + + /** + * 查询基本信息和高级信息设置 + * + * @return 基本信息和高级信息设置实体类 + */ + @Cacheable(value = RedisCahceKey.BASE_INFO_SET, key = "'BaseInfoSet'") + @Override + public BaseInfoSet queryBaseInfoSet() { + logger.debug("queryBaseInfoSet..."); + return baseInfoSetMapper.queryBaseInfoSet(); + } + + /** + * 编辑基本信息和高级信息 + * + * @param baseInfoSet 基本信息实体类 + * @param type 1 基本信息 0高级信息 + * @return -1编辑失败 1编辑成功 0编辑失败 + */ + @CacheEvict(value = RedisCahceKey.BASE_INFO_SET, allEntries = true) + @Override + public int editBaseInfoSet(BaseInfoSet baseInfoSet, int type) { + logger.debug("editBaseInfoSet and baseInfoSet:{}\r\n type:{}", baseInfoSet, type); + //非法参数 + if (!checkParam(type)) { + logger.error("editBaseInfoSet error due to type is illegal..."); + return -1; + } + baseInfoSet.dealPicUrl(); + //设置基本信息 + if (type == 1) { + logger.debug("editBaseInfoSet to editBaseInfoSetA and type:{}", type); + return baseInfoSetMapper.editBaseInfoSetA(baseInfoSet); + } + //设置高级信息 + if (type == 0) { + logger.debug("editBaseInfoSet to editBaseInfoSetB and type:{}", type); + return baseInfoSetMapper.editBaseInfoSetB(baseInfoSet); + } + return 0; + } + + /** + * 设置审核开关 + * + * @param storeSpuAudit 店铺商品审核开关 0 需要审核 1 不需要 默认0 + * @return 成功返回1,失败返回0 + */ + @CacheEvict(value = RedisCahceKey.BASE_INFO_SET, allEntries = true) + @Override + public int setAuditSwitch(String storeSpuAudit) { + logger.debug("setAuditSwitch and storeSpuAudit :{}", storeSpuAudit); + return baseInfoSetMapper.setAuditSwitch(storeSpuAudit); + } + + /** + * 设置会员价启用状态 + * + * @param memberPriceStatus 会员等级启用状态 0 启用 1 不启用 默认0 + * @return 成功返回1,失败返回0 + */ + @CacheEvict(value = RedisCahceKey.BASE_INFO_SET, allEntries = true) + @Override + public int setMemberPriceStatus(String memberPriceStatus) { + logger.debug("setMemberPriceStatus and memberPriceStatus :{}", memberPriceStatus); + return baseInfoSetMapper.setMemberPriceStatus(memberPriceStatus); + } + + @Override + public boolean isSkuNeedAudit() { + return queryBaseInfoSet().isSpuNeedAudit(); + } + + /** + * 校验参数是否为 0 或 1 + * + * @param type 参数 + * @return 正确true 错误 FALSE + */ + private boolean checkParam(int type) { + return type == 1 || type == 0; + } + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsCityServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsCityServiceImpl.java new file mode 100644 index 0000000..79a1ffd --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsCityServiceImpl.java @@ -0,0 +1,92 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.setting.domain.LsCity; +import com.ruoyi.setting.mapper.LsCityMapper; +import com.ruoyi.setting.service.ILsCityService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 区域市Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +@Service +public class LsCityServiceImpl implements ILsCityService { + private static final Logger logger = LoggerFactory.getLogger(LsCityServiceImpl.class); + @Autowired + private LsCityMapper lsCityMapper; + + /** + * 查询区域市 + * + * @param id 区域市ID + * @return 区域市 + */ + @Override + public LsCity selectLsCityById(Long id) { + return lsCityMapper.selectLsCityById(id); + } + + /** + * 查询区域市列表 + * + * @param lsCity 区域市 + * @return 区域市 + */ + @Override + public List selectLsCityList(LsCity lsCity) { + return lsCityMapper.selectLsCityList(lsCity); + } + + /** + * 新增区域市 + * + * @param lsCity 区域市 + * @return 结果 + */ + @Override + public int insertLsCity(LsCity lsCity) { + lsCity.setCreateTime(DateUtils.getNowDate()); + return lsCityMapper.insertLsCity(lsCity); + } + + /** + * 修改区域市 + * + * @param lsCity 区域市 + * @return 结果 + */ + @Override + public int updateLsCity(LsCity lsCity) { + return lsCityMapper.updateLsCity(lsCity); + } + + /** + * 批量删除区域市 + * + * @param ids 需要删除的区域市ID + * @return 结果 + */ + @Override + public int deleteLsCityByIds(Long[] ids) { + return lsCityMapper.deleteLsCityByIds(ids); + } + + /** + * 删除区域市信息 + * + * @param id 区域市ID + * @return 结果 + */ + @Override + public int deleteLsCityById(Long id) { + return lsCityMapper.deleteLsCityById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsDistrictServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsDistrictServiceImpl.java new file mode 100644 index 0000000..2bbca57 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsDistrictServiceImpl.java @@ -0,0 +1,92 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.setting.domain.LsDistrict; +import com.ruoyi.setting.mapper.LsDistrictMapper; +import com.ruoyi.setting.service.ILsDistrictService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 区域区Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +@Service +public class LsDistrictServiceImpl implements ILsDistrictService { + private static final Logger logger = LoggerFactory.getLogger(LsDistrictServiceImpl.class); + @Autowired + private LsDistrictMapper lsDistrictMapper; + + /** + * 查询区域区 + * + * @param id 区域区ID + * @return 区域区 + */ + @Override + public LsDistrict selectLsDistrictById(Long id) { + return lsDistrictMapper.selectLsDistrictById(id); + } + + /** + * 查询区域区列表 + * + * @param lsDistrict 区域区 + * @return 区域区 + */ + @Override + public List selectLsDistrictList(LsDistrict lsDistrict) { + return lsDistrictMapper.selectLsDistrictList(lsDistrict); + } + + /** + * 新增区域区 + * + * @param lsDistrict 区域区 + * @return 结果 + */ + @Override + public int insertLsDistrict(LsDistrict lsDistrict) { + lsDistrict.setCreateTime(DateUtils.getNowDate()); + return lsDistrictMapper.insertLsDistrict(lsDistrict); + } + + /** + * 修改区域区 + * + * @param lsDistrict 区域区 + * @return 结果 + */ + @Override + public int updateLsDistrict(LsDistrict lsDistrict) { + return lsDistrictMapper.updateLsDistrict(lsDistrict); + } + + /** + * 批量删除区域区 + * + * @param ids 需要删除的区域区ID + * @return 结果 + */ + @Override + public int deleteLsDistrictByIds(Long[] ids) { + return lsDistrictMapper.deleteLsDistrictByIds(ids); + } + + /** + * 删除区域区信息 + * + * @param id 区域区ID + * @return 结果 + */ + @Override + public int deleteLsDistrictById(Long id) { + return lsDistrictMapper.deleteLsDistrictById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsEmailSettingServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsEmailSettingServiceImpl.java new file mode 100644 index 0000000..38c3b1f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsEmailSettingServiceImpl.java @@ -0,0 +1,90 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.setting.domain.LsEmailSetting; +import com.ruoyi.setting.mapper.LsEmailSettingMapper; +import com.ruoyi.setting.service.ILsEmailSettingService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 邮箱设置Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +@Service +public class LsEmailSettingServiceImpl implements ILsEmailSettingService { + private static final Logger logger = LoggerFactory.getLogger(LsEmailSettingServiceImpl.class); + @Autowired + private LsEmailSettingMapper lsEmailSettingMapper; + + /** + * 查询邮箱设置 + * + * @param id 邮箱设置ID + * @return 邮箱设置 + */ + @Override + public LsEmailSetting selectLsEmailSettingById(Long id) { + return lsEmailSettingMapper.selectLsEmailSettingById(id); + } + + /** + * 查询邮箱设置列表 + * + * @param lsEmailSetting 邮箱设置 + * @return 邮箱设置 + */ + @Override + public List selectLsEmailSettingList(LsEmailSetting lsEmailSetting) { + return lsEmailSettingMapper.selectLsEmailSettingList(lsEmailSetting); + } + + /** + * 新增邮箱设置 + * + * @param lsEmailSetting 邮箱设置 + * @return 结果 + */ + @Override + public int insertLsEmailSetting(LsEmailSetting lsEmailSetting) { + return lsEmailSettingMapper.insertLsEmailSetting(lsEmailSetting); + } + + /** + * 修改邮箱设置 + * + * @param lsEmailSetting 邮箱设置 + * @return 结果 + */ + @Override + public int updateLsEmailSetting(LsEmailSetting lsEmailSetting) { + return lsEmailSettingMapper.updateLsEmailSetting(lsEmailSetting); + } + + /** + * 批量删除邮箱设置 + * + * @param ids 需要删除的邮箱设置ID + * @return 结果 + */ + @Override + public int deleteLsEmailSettingByIds(Long[] ids) { + return lsEmailSettingMapper.deleteLsEmailSettingByIds(ids); + } + + /** + * 删除邮箱设置信息 + * + * @param id 邮箱设置ID + * @return 结果 + */ + @Override + public int deleteLsEmailSettingById(Long id) { + return lsEmailSettingMapper.deleteLsEmailSettingById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsPaySettingServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsPaySettingServiceImpl.java new file mode 100644 index 0000000..617b08f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsPaySettingServiceImpl.java @@ -0,0 +1,174 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.setting.bean.PaySet; +import com.ruoyi.setting.bean.PaySetCommon; +import com.ruoyi.setting.domain.SegchkPaySetting; +import com.ruoyi.setting.mapper.SegchkPaySettingMapper; +import com.ruoyi.setting.service.ILsPaySettingService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 支付设置Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +@Service +public class LsPaySettingServiceImpl implements ILsPaySettingService { + private static final Logger logger = LoggerFactory.getLogger(LsPaySettingServiceImpl.class); + /** + * 支付类型列表 + */ + private final static List codeTypeList = Arrays.asList("1", "2", "3", "4", "5", "6"); + @Autowired + private SegchkPaySettingMapper segchkPaySettingMapper; + + /** + * 查询支付设置 + * + * @param id 支付设置ID + * @return 支付设置 + */ + @Override + public SegchkPaySetting selectLsPaySettingById(Long id) { + return segchkPaySettingMapper.selectLsPaySettingById(id); + } + + /** + * 查询支付接口设置 + * + * @return 返回PaySetCommon + */ + @Override + public PaySetCommon queryPaySet() { + logger.debug("queryPaySet..."); + return PaySetCommon.getPaySetCommon(new PaySetCommon(), segchkPaySettingMapper.queryPaySet()); + } + + /** + * 编辑支付接口设置 + * + * @param paySetCommon 实体类参数 + * @param codeType 支付设置类型 1 支付宝 2 微信(扫码,公众号,H5) 3 银联 4预存款 5 微信支app付 6微信小程序支付 + * @return -1编辑出错 >=1成功 + */ + @Override + @Transactional + public int editPaySet(PaySetCommon paySetCommon, String codeType) { + List list = new ArrayList<>(); + if (codeTypeList.indexOf(codeType) < 0) { + logger.error("editPaySet error codeType is illegal"); + return -1; + } + //先删后增 + segchkPaySettingMapper.deletePaySet(codeType); + if ("1".equals(codeType)) { + logger.debug("editPaySet aliPay..."); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getAliPaySet().getAppId(), "appId")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getAliPaySet().getAlipayPublicKey(), "alipayPublicKey")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getAliPaySet().getAppPrivateKey(), "appPrivateKey")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getAliPaySet().getIsUse(), "isUse")); + } + if ("2".equals(codeType)) { + logger.debug("editPaySet wechatPay..."); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatPaySet().getAppId(), "appId")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatPaySet().getAppSecret(), "appSecret")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatPaySet().getMerchantNum(), "merchantNum")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatPaySet().getApiKey(), "apiKey")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatPaySet().getLoginNotice(), "loginNotice")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatPaySet().getIsUse(), "isUse")); + } + if ("3".equals(codeType)) { + logger.debug("editPaySet unionPay..."); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getUnionPaySet().getMerchantNum(), "merchantNum")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getUnionPaySet().getApiKey(), "apiKey")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getUnionPaySet().getIsUse(), "isUse")); + } + if ("4".equals(codeType)) { + logger.debug("editPaySet prePay..."); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getPrePaySet().getIsUse(), "isUse")); + } + if ("5".equals(codeType)) { + logger.debug("editPaySet wechatAppPay..."); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppPaySet().getAppId(), "appId")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppPaySet().getAppSecret(), "appSecret")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppPaySet().getMerchantNum(), "merchantNum")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppPaySet().getApiKey(), "apiKey")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppPaySet().getIsUse(), "isUse")); + } + if ("6".equals(codeType)) { +// 微信小程序 + logger.debug("editPaySet wechatAppletPay..."); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppletPaySet().getAppId(), "appId")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppletPaySet().getAppSecret(), "appSecret")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppletPaySet().getMerchantNum(), "merchantNum")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppletPaySet().getApiKey(), "apiKey")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppletPaySet().getIsUse(), "isUse")); + list.add(PaySet.getPaySet(new PaySet(), codeType, paySetCommon.getWechatAppletPaySet().getCertFile(), "certFile")); + } + return segchkPaySettingMapper.addPaySet(list); + } + + /** + * 查询支付设置列表 + * + * @param segchkPaySetting 支付设置 + * @return 支付设置 + */ + @Override + public List selectLsPaySettingList(SegchkPaySetting segchkPaySetting) { + return segchkPaySettingMapper.selectLsPaySettingList(segchkPaySetting); + } + + /** + * 新增支付设置 + * + * @param segchkPaySetting 支付设置 + * @return 结果 + */ + @Override + public int insertLsPaySetting(SegchkPaySetting segchkPaySetting) { + return segchkPaySettingMapper.insertLsPaySetting(segchkPaySetting); + } + + /** + * 修改支付设置 + * + * @param segchkPaySetting 支付设置 + * @return 结果 + */ + @Override + public int updateLsPaySetting(SegchkPaySetting segchkPaySetting) { + return segchkPaySettingMapper.updateLsPaySetting(segchkPaySetting); + } + + /** + * 批量删除支付设置 + * + * @param ids 需要删除的支付设置ID + * @return 结果 + */ + @Override + public int deleteLsPaySettingByIds(Long[] ids) { + return segchkPaySettingMapper.deleteLsPaySettingByIds(ids); + } + + /** + * 删除支付设置信息 + * + * @param id 支付设置ID + * @return 结果 + */ + @Override + public int deleteLsPaySettingById(Long id) { + return segchkPaySettingMapper.deleteLsPaySettingById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsProvinceServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsProvinceServiceImpl.java new file mode 100644 index 0000000..1e4fb0c --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsProvinceServiceImpl.java @@ -0,0 +1,92 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.setting.domain.LsProvince; +import com.ruoyi.setting.mapper.LsProvinceMapper; +import com.ruoyi.setting.service.ILsProvinceService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 区域省Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +@Service +public class LsProvinceServiceImpl implements ILsProvinceService { + private static final Logger logger = LoggerFactory.getLogger(LsProvinceServiceImpl.class); + @Autowired + private LsProvinceMapper lsProvinceMapper; + + /** + * 查询区域省 + * + * @param id 区域省ID + * @return 区域省 + */ + @Override + public LsProvince selectLsProvinceById(Long id) { + return lsProvinceMapper.selectLsProvinceById(id); + } + + /** + * 查询区域省列表 + * + * @param lsProvince 区域省 + * @return 区域省 + */ + @Override + public List selectLsProvinceList(LsProvince lsProvince) { + return lsProvinceMapper.selectLsProvinceList(lsProvince); + } + + /** + * 新增区域省 + * + * @param lsProvince 区域省 + * @return 结果 + */ + @Override + public int insertLsProvince(LsProvince lsProvince) { + lsProvince.setCreateTime(DateUtils.getNowDate()); + return lsProvinceMapper.insertLsProvince(lsProvince); + } + + /** + * 修改区域省 + * + * @param lsProvince 区域省 + * @return 结果 + */ + @Override + public int updateLsProvince(LsProvince lsProvince) { + return lsProvinceMapper.updateLsProvince(lsProvince); + } + + /** + * 批量删除区域省 + * + * @param ids 需要删除的区域省ID + * @return 结果 + */ + @Override + public int deleteLsProvinceByIds(Long[] ids) { + return lsProvinceMapper.deleteLsProvinceByIds(ids); + } + + /** + * 删除区域省信息 + * + * @param id 区域省ID + * @return 结果 + */ + @Override + public int deleteLsProvinceById(Long id) { + return lsProvinceMapper.deleteLsProvinceById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsSmsSettingServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsSmsSettingServiceImpl.java new file mode 100644 index 0000000..05430f0 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsSmsSettingServiceImpl.java @@ -0,0 +1,90 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.setting.domain.LsSmsSetting; +import com.ruoyi.setting.mapper.LsSmsSettingMapper; +import com.ruoyi.setting.service.ILsSmsSettingService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 短信接口设置Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +@Service +public class LsSmsSettingServiceImpl implements ILsSmsSettingService { + private static final Logger logger = LoggerFactory.getLogger(LsSmsSettingServiceImpl.class); + @Autowired + private LsSmsSettingMapper lsSmsSettingMapper; + + /** + * 查询短信接口设置 + * + * @param id 短信接口设置ID + * @return 短信接口设置 + */ + @Override + public LsSmsSetting selectLsSmsSettingById(Long id) { + return lsSmsSettingMapper.selectLsSmsSettingById(id); + } + + /** + * 查询短信接口设置列表 + * + * @param lsSmsSetting 短信接口设置 + * @return 短信接口设置 + */ + @Override + public List selectLsSmsSettingList(LsSmsSetting lsSmsSetting) { + return lsSmsSettingMapper.selectLsSmsSettingList(lsSmsSetting); + } + + /** + * 新增短信接口设置 + * + * @param lsSmsSetting 短信接口设置 + * @return 结果 + */ + @Override + public int insertLsSmsSetting(LsSmsSetting lsSmsSetting) { + return lsSmsSettingMapper.insertLsSmsSetting(lsSmsSetting); + } + + /** + * 修改短信接口设置 + * + * @param lsSmsSetting 短信接口设置 + * @return 结果 + */ + @Override + public int updateLsSmsSetting(LsSmsSetting lsSmsSetting) { + return lsSmsSettingMapper.updateLsSmsSetting(lsSmsSetting); + } + + /** + * 批量删除短信接口设置 + * + * @param ids 需要删除的短信接口设置ID + * @return 结果 + */ + @Override + public int deleteLsSmsSettingByIds(Long[] ids) { + return lsSmsSettingMapper.deleteLsSmsSettingByIds(ids); + } + + /** + * 删除短信接口设置信息 + * + * @param id 短信接口设置ID + * @return 结果 + */ + @Override + public int deleteLsSmsSettingById(Long id) { + return lsSmsSettingMapper.deleteLsSmsSettingById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsStationLetterServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsStationLetterServiceImpl.java new file mode 100644 index 0000000..d37857f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsStationLetterServiceImpl.java @@ -0,0 +1,147 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.setting.domain.LsStationLetter; +import com.ruoyi.setting.mapper.LsStationLetterMapper; +import com.ruoyi.setting.service.ILsStationLetterService; +import com.ruoyi.util.PageHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * 站内信Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +@Service +public class LsStationLetterServiceImpl implements ILsStationLetterService { + private static final Logger logger = LoggerFactory.getLogger(LsStationLetterServiceImpl.class); + @Autowired + private LsStationLetterMapper lsStationLetterMapper; + + /** + * 查询站内信 + * + * @param id 站内信ID + * @return 站内信 + */ + @Override + public LsStationLetter selectLsStationLetterById(Long id) { + return lsStationLetterMapper.selectLsStationLetterById(id); + } + + /** + * 查询站内信列表 + * + * @param lsStationLetter 站内信 + * @return 站内信 + */ + @Override + public List selectLsStationLetterList(LsStationLetter lsStationLetter) { + return lsStationLetterMapper.selectLsStationLetterList(lsStationLetter); + } + + /** + * 新增站内信 + * + * @param lsStationLetter 站内信 + * @return 结果 + */ + @Override + public int insertLsStationLetter(LsStationLetter lsStationLetter) { + lsStationLetter.setCreateTime(DateUtils.getNowDate()); + return lsStationLetterMapper.insertLsStationLetter(lsStationLetter); + } + + /** + * 修改站内信 + * + * @param lsStationLetter 站内信 + * @return 结果 + */ + @Override + public int updateLsStationLetter(LsStationLetter lsStationLetter) { + return lsStationLetterMapper.updateLsStationLetter(lsStationLetter); + } + + /** + * 批量删除站内信 + * + * @param ids 需要删除的站内信ID + * @return 结果 + */ + @Override + public int deleteLsStationLetterByIds(Long[] ids) { + return lsStationLetterMapper.deleteLsStationLetterByIds(ids); + } + + + @Override + public int addStationLetters(List stationLetters) { + logger.debug("addStationLetters and stationLetters:{}", stationLetters); + + if (CollectionUtils.isEmpty(stationLetters)) { + logger.error("addStationLetters fail due to params is null..."); + return 0; + } + return lsStationLetterMapper.addStationLetters(stationLetters); + } + + /** + * 删除站内信 + * + * @param id 站内信id + * @return 成功返回1,失败返回0 + */ + @Override + public int deleteStationLetters(long id) { + logger.debug("deleteStationLetters and id :{}", id); + return lsStationLetterMapper.deleteStationLetters(id); + } + + /** + * 更新会员的站内信的阅读状态 + * + * @param id 站内信id + * @return 成功返回1,失败返回0 + */ + @Override + public int updateStationLettersIsRead(long id, long customerId) { + logger.debug("updateStationLettersIsRead and id :{} \r\n customerId:{}", id, customerId); + Map params = new HashMap<>(); + params.put("id", id); + params.put("customerId", customerId); + return lsStationLetterMapper.updateStationLettersIsRead(params); + } + + @Override + public PageHelper queryStationLettersByCustomerId(PageHelper pageHelper, long customerId) { + logger.debug("queryStationLettersByCustomerId and customerId:{} and pageHelper:{}", customerId, pageHelper); + Map params = new HashMap<>(); + params.put("customerId", customerId); + return pageHelper.setListDates(lsStationLetterMapper.queryStationLettersByCustomerId(pageHelper.getQueryParams(params, lsStationLetterMapper.queryStationLettersCountByCustomerId(params)))); + } + + @Override + public int unReadNum(long customerId) { + logger.debug("unReadNum and customerId:{}", customerId); + return lsStationLetterMapper.unReadNum(customerId); + } + + /** + * 删除站内信信息 + * + * @param id 站内信ID + * @return 结果 + */ + @Override + public int deleteLsStationLetterById(Long id) { + return lsStationLetterMapper.deleteLsStationLetterById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsSystemSeoServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsSystemSeoServiceImpl.java new file mode 100644 index 0000000..8c9622b --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsSystemSeoServiceImpl.java @@ -0,0 +1,90 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.setting.domain.LsSystemSeo; +import com.ruoyi.setting.mapper.LsSystemSeoMapper; +import com.ruoyi.setting.service.ILsSystemSeoService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 系统seo设置Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +@Service +public class LsSystemSeoServiceImpl implements ILsSystemSeoService { + private static final Logger logger = LoggerFactory.getLogger(LsSystemSeoServiceImpl.class); + @Autowired + private LsSystemSeoMapper lsSystemSeoMapper; + + /** + * 查询系统seo设置 + * + * @param id 系统seo设置ID + * @return 系统seo设置 + */ + @Override + public LsSystemSeo selectLsSystemSeoById(Long id) { + return lsSystemSeoMapper.selectLsSystemSeoById(id); + } + + /** + * 查询系统seo设置列表 + * + * @param lsSystemSeo 系统seo设置 + * @return 系统seo设置 + */ + @Override + public List selectLsSystemSeoList(LsSystemSeo lsSystemSeo) { + return lsSystemSeoMapper.selectLsSystemSeoList(lsSystemSeo); + } + + /** + * 新增系统seo设置 + * + * @param lsSystemSeo 系统seo设置 + * @return 结果 + */ + @Override + public int insertLsSystemSeo(LsSystemSeo lsSystemSeo) { + return lsSystemSeoMapper.insertLsSystemSeo(lsSystemSeo); + } + + /** + * 修改系统seo设置 + * + * @param lsSystemSeo 系统seo设置 + * @return 结果 + */ + @Override + public int updateLsSystemSeo(LsSystemSeo lsSystemSeo) { + return lsSystemSeoMapper.updateLsSystemSeo(lsSystemSeo); + } + + /** + * 批量删除系统seo设置 + * + * @param ids 需要删除的系统seo设置ID + * @return 结果 + */ + @Override + public int deleteLsSystemSeoByIds(Long[] ids) { + return lsSystemSeoMapper.deleteLsSystemSeoByIds(ids); + } + + /** + * 删除系统seo设置信息 + * + * @param id 系统seo设置ID + * @return 结果 + */ + @Override + public int deleteLsSystemSeoById(Long id) { + return lsSystemSeoMapper.deleteLsSystemSeoById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsWxCustomerLinkServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsWxCustomerLinkServiceImpl.java new file mode 100644 index 0000000..92d1bd5 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/LsWxCustomerLinkServiceImpl.java @@ -0,0 +1,90 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.setting.domain.LsWxCustomerLink; +import com.ruoyi.setting.mapper.LsWxCustomerLinkMapper; +import com.ruoyi.setting.service.ILsWxCustomerLinkService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 微信登录和商城用户的关联Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-29 + */ +@Service +public class LsWxCustomerLinkServiceImpl implements ILsWxCustomerLinkService { + private static final Logger logger = LoggerFactory.getLogger(LsWxCustomerLinkServiceImpl.class); + @Autowired + private LsWxCustomerLinkMapper lsWxCustomerLinkMapper; + + /** + * 查询微信登录和商城用户的关联 + * + * @param id 微信登录和商城用户的关联ID + * @return 微信登录和商城用户的关联 + */ + @Override + public LsWxCustomerLink selectLsWxCustomerLinkById(Long id) { + return lsWxCustomerLinkMapper.selectLsWxCustomerLinkById(id); + } + + /** + * 查询微信登录和商城用户的关联列表 + * + * @param lsWxCustomerLink 微信登录和商城用户的关联 + * @return 微信登录和商城用户的关联 + */ + @Override + public List selectLsWxCustomerLinkList(LsWxCustomerLink lsWxCustomerLink) { + return lsWxCustomerLinkMapper.selectLsWxCustomerLinkList(lsWxCustomerLink); + } + + /** + * 新增微信登录和商城用户的关联 + * + * @param lsWxCustomerLink 微信登录和商城用户的关联 + * @return 结果 + */ + @Override + public int insertLsWxCustomerLink(LsWxCustomerLink lsWxCustomerLink) { + return lsWxCustomerLinkMapper.insertLsWxCustomerLink(lsWxCustomerLink); + } + + /** + * 修改微信登录和商城用户的关联 + * + * @param lsWxCustomerLink 微信登录和商城用户的关联 + * @return 结果 + */ + @Override + public int updateLsWxCustomerLink(LsWxCustomerLink lsWxCustomerLink) { + return lsWxCustomerLinkMapper.updateLsWxCustomerLink(lsWxCustomerLink); + } + + /** + * 批量删除微信登录和商城用户的关联 + * + * @param ids 需要删除的微信登录和商城用户的关联ID + * @return 结果 + */ + @Override + public int deleteLsWxCustomerLinkByIds(Long[] ids) { + return lsWxCustomerLinkMapper.deleteLsWxCustomerLinkByIds(ids); + } + + /** + * 删除微信登录和商城用户的关联信息 + * + * @param id 微信登录和商城用户的关联ID + * @return 结果 + */ + @Override + public int deleteLsWxCustomerLinkById(Long id) { + return lsWxCustomerLinkMapper.deleteLsWxCustomerLinkById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/OssServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/OssServiceImpl.java new file mode 100644 index 0000000..6c743c9 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/OssServiceImpl.java @@ -0,0 +1,89 @@ +package com.ruoyi.setting.service.impl; + + +import com.ruoyi.setting.bean.OssSetting; +import com.ruoyi.setting.bean.UploadData; +import com.ruoyi.setting.mapper.OssMapper; +import com.ruoyi.setting.service.OssService; +import com.ruoyi.util.YunUploadUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + + +/** + * Created by luozhuo on 2020/7/7. + * 云存储服务实现类 + */ +@Service +public class OssServiceImpl implements OssService { + + private Logger logger = LoggerFactory.getLogger(OssServiceImpl.class); + + @Autowired + private OssMapper ossMapper; + + @Override + public List uploadToQqOss(List uploadDatas) { + logger.debug("Begin to uploadToQqOss...."); + if (CollectionUtils.isEmpty(uploadDatas)) { + logger.error("uploadDatas fail due to params is empty..."); + return Arrays.asList(""); + } + return uploadDatas.stream().filter(Objects::nonNull).map(uploadData -> YunUploadUtils.getInstance().uploadToQqOss(queryOssSetting().getUpYunConf(), uploadData.getMultipartFile(), uploadData.getDatas(), uploadData.getFileOriginName(), uploadData.getType())).collect(Collectors.toList()); + + } + + @Override + public List uploadToQqOssForBase64(List uploadDatas) { + if (CollectionUtils.isEmpty(uploadDatas)) { + logger.error("uploadToQqOssForBase64 fail due to params is empty..."); + return Arrays.asList(""); + } + return uploadDatas.stream().filter(Objects::nonNull).map(uploadData -> YunUploadUtils.getInstance(). + uploadToQqForBase64(queryOssSetting().getUpYunConf(), uploadData.getInputStream(), uploadData.getDatas(), uploadData.getFileOriginName())).collect(Collectors.toList()); + + } + + @Override + public List uploadToOss(List uploadDatas) { + logger.debug("Begin to uploadToOss...."); + if (CollectionUtils.isEmpty(uploadDatas)) { + logger.error("uploadDatas fail due to params is empty..."); + return Arrays.asList(""); + } + return uploadDatas.stream().filter(Objects::nonNull).map(uploadData -> YunUploadUtils.getInstance().uploadToOssYun(queryOssSetting().getUpYunConf(), uploadData.getInputStream(), uploadData.getDatas(), uploadData.getFileOriginName(), uploadData.getType())).collect(Collectors.toList()); + + } + + @Override + public List uploadToOssForBase64(List uploadDatas) { + if (CollectionUtils.isEmpty(uploadDatas)) { + logger.error("uploadToOssForBase64 fail due to params is empty..."); + return Arrays.asList(""); + } + + return uploadDatas.stream().filter(Objects::nonNull).map(uploadData -> YunUploadUtils.getInstance(). + uploadToQqForBase64(queryOssSetting().getUpYunConf(), uploadData.getInputStream(), uploadData.getDatas(), uploadData.getFileOriginName())).collect(Collectors.toList()); + + } + + @Override + public OssSetting queryOssSetting() { + logger.debug("Begin to queryUpYunSetting...."); + return ossMapper.queryOssSetting(); + } + + @Override + public int updateOss(OssSetting ossSetting) { + logger.error("updateOss and OssSetting:{}", ossSetting); + return ossMapper.updateOss(ossSetting); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/SCommunityBuySettingServiceImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/SCommunityBuySettingServiceImpl.java new file mode 100644 index 0000000..f9e4330 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/service/impl/SCommunityBuySettingServiceImpl.java @@ -0,0 +1,90 @@ +package com.ruoyi.setting.service.impl; + +import com.ruoyi.setting.domain.SCommunityBuySetting; +import com.ruoyi.setting.mapper.SCommunityBuySettingMapper; +import com.ruoyi.setting.service.ISCommunityBuySettingService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 社区团购设置Service业务层处理 + * + * @author 魔金商城 + * @date 2020-07-28 + */ +@Service +public class SCommunityBuySettingServiceImpl implements ISCommunityBuySettingService { + private static final Logger logger = LoggerFactory.getLogger(SCommunityBuySettingServiceImpl.class); + @Autowired + private SCommunityBuySettingMapper sCommunityBuySettingMapper; + + /** + * 查询社区团购设置 + * + * @param id 社区团购设置ID + * @return 社区团购设置 + */ + @Override + public SCommunityBuySetting selectSCommunityBuySettingById(Long id) { + return sCommunityBuySettingMapper.selectSCommunityBuySettingById(id); + } + + /** + * 查询社区团购设置列表 + * + * @param sCommunityBuySetting 社区团购设置 + * @return 社区团购设置 + */ + @Override + public List selectSCommunityBuySettingList(SCommunityBuySetting sCommunityBuySetting) { + return sCommunityBuySettingMapper.selectSCommunityBuySettingList(sCommunityBuySetting); + } + + /** + * 新增社区团购设置 + * + * @param sCommunityBuySetting 社区团购设置 + * @return 结果 + */ + @Override + public int insertSCommunityBuySetting(SCommunityBuySetting sCommunityBuySetting) { + return sCommunityBuySettingMapper.insertSCommunityBuySetting(sCommunityBuySetting); + } + + /** + * 修改社区团购设置 + * + * @param sCommunityBuySetting 社区团购设置 + * @return 结果 + */ + @Override + public int updateSCommunityBuySetting(SCommunityBuySetting sCommunityBuySetting) { + return sCommunityBuySettingMapper.updateSCommunityBuySetting(sCommunityBuySetting); + } + + /** + * 批量删除社区团购设置 + * + * @param ids 需要删除的社区团购设置ID + * @return 结果 + */ + @Override + public int deleteSCommunityBuySettingByIds(Long[] ids) { + return sCommunityBuySettingMapper.deleteSCommunityBuySettingByIds(ids); + } + + /** + * 删除社区团购设置信息 + * + * @param id 社区团购设置ID + * @return 结果 + */ + @Override + public int deleteSCommunityBuySettingById(Long id) { + return sCommunityBuySettingMapper.deleteSCommunityBuySettingById(id); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/vo/AreaItem.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/vo/AreaItem.java new file mode 100644 index 0000000..fb9974a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/vo/AreaItem.java @@ -0,0 +1,9 @@ +package com.ruoyi.setting.vo; + +/** + * Created by 魔金商城 on 17/11/21. + * 区域枚举 + */ +public enum AreaItem { + CITY, DISTRICT, NO, ALL +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/setting/vo/Locality.java b/ruoyi-segchk/src/main/java/com/ruoyi/setting/vo/Locality.java new file mode 100644 index 0000000..42e40f7 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/setting/vo/Locality.java @@ -0,0 +1,89 @@ +package com.ruoyi.setting.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @author 魔金商城 + * @date 2019-12-04 15:09 + *

+ * 地区新数据接口实体 + */ +@ApiModel(description = "地区新数据接口实体") +public class Locality { + + + /** + * 地区名称 + */ + @ApiModelProperty(value = "地区名称") + private String name; + + + /** + * 数据真实主键ID + */ + @ApiModelProperty(value = "数据真实主键ID") + private String id; + + + /** + * 临时Id字串 保证唯一 + */ + @ApiModelProperty(value = "临时Id字串 保证唯一") + private String value; + + + /** + * 父类的临时字串 一级为0 + */ + @ApiModelProperty(value = "父类的临时字串 一级为0") + private String parent; + + + /** + * 重写全参构造 + * + * @param name 地区名称 + * @param value ID + * @param parent 父类ID 一级为0 + */ + public Locality(String name, String value, String parent, long id) { + this.name = name; + this.value = value; + this.parent = parent; + this.id = String.valueOf(id); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getParent() { + return parent; + } + + public void setParent(String parent) { + this.parent = parent; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/AesUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/AesUtils.java new file mode 100644 index 0000000..5eddba5 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/AesUtils.java @@ -0,0 +1,82 @@ +package com.ruoyi.util; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.security.*; + +/** + * AES加密类 + * + * @author SK + * @since 2018/6/13 + */ +public class AesUtils { + + { + Security.addProvider(new BouncyCastleProvider()); + } + + /** + * 获取对象 + */ + public static AesUtils getInstance() { + return LazyHolder.aesUtils; + } + + // 生成iv + private static AlgorithmParameters generateIV(byte[] iv) throws Exception { + AlgorithmParameters params = AlgorithmParameters.getInstance("AES"); + params.init(new IvParameterSpec(iv)); + return params; + } + + /** + * AES对称解密工具类 + * + * @param content 密文 + * @return + * @throws InvalidAlgorithmParameterException + * @throws NoSuchProviderException + */ + public byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException { + try { + // java是没有 + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); + Key sKeySpec = new SecretKeySpec(keyByte, "AES"); + + cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化 + byte[] result = cipher.doFinal(content); + return result; + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (NoSuchPaddingException e) { + e.printStackTrace(); + } catch (InvalidKeyException e) { + e.printStackTrace(); + } catch (IllegalBlockSizeException e) { + e.printStackTrace(); + } catch (BadPaddingException e) { + e.printStackTrace(); + } catch (NoSuchProviderException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 延迟加载(线程安全) + */ + private static class LazyHolder { + private static AesUtils aesUtils = new AesUtils(); + } +} + + diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/BaseResponse.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/BaseResponse.java new file mode 100644 index 0000000..7bc2a82 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/BaseResponse.java @@ -0,0 +1,89 @@ +package com.ruoyi.util; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.List; + +/** + * Created by 魔金商城 on 17/5/9. + * 分页基础响应类 + */ +@ApiModel(description = "分页基础响应类") +public class BaseResponse { + + + /** + * 返回的数据 + */ + @ApiModelProperty(value = "返回的数据") + private List data; + /** + * 总记录数 + */ + @ApiModelProperty(value = "总记录数") + private int recordsTotal; + /** + * 过滤后的记录数 + */ + @ApiModelProperty(value = "过滤后的记录数") + private int recordsFiltered; + /** + * 总的页数 + */ + @ApiModelProperty(value = "总的页数") + private int totalPage; + + private BaseResponse() { + + } + + private BaseResponse(PageHelper pageHelper) { + this.data = pageHelper.getList(); + this.recordsTotal = pageHelper.getRows(); + this.recordsFiltered = pageHelper.getRows(); + this.totalPage = pageHelper.getTotalPages(); + } + + /** + * 构造分页响应实体 + * + * @param pageHelper 分页帮助类 + * @return 返回分页响应实体 + */ + public static BaseResponse build(PageHelper pageHelper) { + return new BaseResponse(pageHelper); + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public int getRecordsTotal() { + return recordsTotal; + } + + public void setRecordsTotal(int recordsTotal) { + this.recordsTotal = recordsTotal; + } + + public int getRecordsFiltered() { + return recordsFiltered; + } + + public void setRecordsFiltered(int recordsFiltered) { + this.recordsFiltered = recordsFiltered; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/Claims.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/Claims.java new file mode 100644 index 0000000..53a7ce4 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/Claims.java @@ -0,0 +1,132 @@ +package com.ruoyi.util; + +import com.alibaba.fastjson.annotation.JSONField; +import org.springframework.util.StringUtils; + +/** + * Created by 魔金商城 on 2018/6/13. + * 小程序凭证实体 + */ +public class Claims { + + /** + * 小程序unionId + */ + @JSONField(name = "unionId") + private String unionId; + + /** + * 会员id + */ + @JSONField(name = "userId") + private Long userId; + + /** + * 小程序sessionKey + */ + @JSONField(name = "sessionKey") + private String sessionKey; + + /** + * 微信用户标识 + */ + @JSONField(name = "openId") + private String openId; + + /** + * 用户角色 + */ + @JSONField(name = "userLevel") + private int userLevel; + + /** + * 归属运营商id + */ + @JSONField(name = "providerId") + private Long providerId; + + + + + /** + * 判断是否有unionId + * + * @return 有返回true 没有返回fasle + */ + public boolean hasUnionId() { + return !StringUtils.isEmpty(this.unionId); + } + + /** + * 判断是否有会员id + * + * @return 有返回true 没有返回false + */ + public boolean hasCustomerId() { + return CommonConstant.NO_LOGIN_CUSTOMERID != this.userId; + } + + public String getUnionId() { + return unionId; + } + + public void setUnionId(String unionId) { + this.unionId = unionId; + } + + public long getUserId() { + return userId; + } + + public void setUserId(long userId) { + this.userId = userId; + } + + public String getSessionKey() { + return sessionKey; + } + + public void setSessionKey(String sessionKey) { + this.sessionKey = sessionKey; + } + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public void setUserLevel(int userLevel) { + this.userLevel = userLevel; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + @Override + public String toString() { + return "Claims{" + + "unionId='" + unionId + '\'' + + ", userId=" + userId + + ", sessionKey='" + sessionKey + '\'' + + ", openId='" + openId + '\'' + + ", userLevel=" + userLevel + + ", providerId=" + providerId + + '}'; + } + + public Long getProviderId() { + return providerId; + } + + public int getUserLevel() { + return userLevel; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/CommonConstant.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/CommonConstant.java new file mode 100644 index 0000000..83c3599 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/CommonConstant.java @@ -0,0 +1,310 @@ +package com.ruoyi.util; + +/** + * Created by 魔金商城 on 17/5/2. + * 公共常量类 + */ +public interface CommonConstant { + + /** + * 开始页 + */ + String START_ROW_NUM = "startRowNum"; + + /** + * 每页大小 + */ + String PAGE_SIZE = "pageSize"; + + /** + * store端session放置手机验证码的key(代客下单) + */ + String STORE_SHOPPING_CODE_KEY = "STORE_SHOPPING_CODE_KEY"; + + /** + * store端session放置验证标记key(代客下单) + */ + String STORE_SHOPPING_MOBILE_KEY = "STORE_SHOPPING_VALIDFLAG_KEY"; + + /** + * 加号替换 + */ + String PLUS_REPLACE = "5lec2shop0"; + /** + * 从pc端发出 + */ + String FROM_PC = "FROM_PC"; + + /** + * admin端店铺id默认值0 + */ + long ADMIN_STOREID = 0; + + /** + * 查询的时候不需要带店铺id过滤 + */ + long QUERY_WITH_NO_STORE = -1; + + /** + * 查询的收货不需要带用户id进行过滤 + */ + long QUERY_WITH_NO_CUSTOMER = -1; + + /** + * 评论、回复不根据ISSHOW显示 + */ + long QUERY_WITH_NO_ISSHOW = -1; + /** + * 评论、回复根据ISSHOW显示 + */ + long QUERY_WITH_ISSHOW = 1; + + /** + * 主题不根据ISUSE显示 + */ + long QUERY_WITH_NO_ISUSE = -1; + /** + * 主题根据ISUSE显示 + */ + long QUERY_WITH_ISUSE = 1; + /** + * 文章不根据columnId显示 + */ + long QUERY_WITH_NO_COLUMNID = -1; + /** + * 文章根据ISRELEASE显示 + */ + long QUERY_WITH_ISRELEASE = 1; + /** + * 验证通过标记 + */ + String PASS_FLAG = "PASS"; + + /** + * 未登录状态下的会员id + */ + long NO_LOGIN_CUSTOMERID = -1; + + /** + * 登录成功后把用户信息放入session的key + */ + String MOBILE_LOGIN_SESSION_KEY = "MOBILE_LOGIN_SESSION_KEY"; + + /** + * 微信授权后把openId放入session的key(微信内置浏览器) + */ + String MOBILE_OPENID_SESSION_KEY = "MOBILE_OPENID_SESSION_KEY"; + /** + * 微信授权后把unionId放入session的key(微信内置浏览器) + */ + String MOBILE_UNIONID_SESSION_KEY = "MOBILE_UNIONID_SESSION_KEY"; + + /** + * mobile端session放置手机验证码的key(注册) + */ + String MOBILE_REGISTER_CODE_KEY = "MOBILE_REGISTER_CODE_KEY"; + + /** + * mobile端session放置手机验证码的key(忘记密码) + */ + String MOBILE_FORGETPWD_CODE_KEY = "MOBILE_FORGETPWD_CODE_KEY"; + /** + * mobile端session放置手机验证码的key(绑定新手机_旧手机验证码) + */ + String MOBILE_BINDNEWMOBILE_CODE_KEY = "MOBILE_BINDNEWMOBILE_CODE_KEY"; + /** + * mobile端session放置手机验证码的key(绑定新手机_新手机验证码) + */ + String MOBILE_BINDNEWMOBILE_NEWMOBILE_CODE_KEY = "MOBILE_BINDNEWMOBILE_NEWMOBILE_CODE_KEY"; + /** + * mobile端session放置验证标记key(绑定新手机) + */ + String MOBILE_BINDNEWMOBILE_VALIDFLAG_KEY = "MOBILE_BINDNEWMOBILE_VALIDFLAG_KEY"; + /** + * mobile端session放置手机验证码的key(更新支付密码) + */ + String MOBILE_UPDATEPAYPWD_CODE_KEY = "MOBILE_UPDATEPAYPWD_CODE_KEY"; + /** + * mobile端session放置手机验证码的key(更新密码) + */ + String MOBILE_UPDATEPWD_CODE_KEY = "MOBILE_UPDATEPWD_CODE_KEY"; + /** + * 订单支付 + */ + int ORDER_PAY = 1; + + /** + * 门店订单支付 + */ + int STORE_ORDER_PAY = 3; + + /** + * 预存款充值 + */ + int RECHARGE_PAY = 2; + + /** + * 支付宝支付 + */ + String ALI_PAY = "支付宝"; + /** + * 微信支付 + */ + String WECHAT_PAY = "微信"; + /** + * 银联支付 + */ + String UNION_PAY = "银联"; + + /** + * 抢购代号 + */ + String PANIC_BUY = "3"; + + /** + * 未过期的活动标记 + */ + String NOT_PAST = "999"; + + /** + * 没有用户id + */ + long NO_CUSTOMER_ID = -1; + + /** + * 还没使用抢购 + */ + int NO_USE_PANIC = -1; + + /** + * 没有抢购促销 + */ + int NO_PANIC_MARKETING = -2; + + /** + * 没有商品试用申请 + */ + int NO_SKU_TRY_APPLY = -1; + + /** + * 平台关注人数 + */ + int ADMIN_FOLLOW_NUM = 10000; + + + /** + * 小程序端redis放置手机验证码的key(注册) + */ + String APPLET_REGISTER_CODE_KEY = "APPLET_REGISTER_CODE_KEY"; + + /** + * 小程序端redis短信验证测试key + */ + String SMS_TEST_KEY = "APPLET_TEST_KEY"; + + /** + * 小程序端redis放置登录的key(注册登录) + */ + String APPLET_LOGIN_KEY = "APPLET_LOGIN_KEY"; + String APPLET_BIND_OPENID = "APPLET_BIND_OPENID"; + + String APPLET_SERVICE_CHK = "APPLET_SERVICE_CHK"; + + + /** + * 与会员价互斥 + */ + long MEMBER_PRICE_EXCLUSION = 2L; + + /** + * 与商品组合互斥 + */ + long COMBINATION_EXCLUSION = 1L; + + /** + * 与批发单品互斥 + */ + long BATCH_SKU_EXCLUSION = 3L; + + + /** + * 上传的图片 + */ + String UPLOAD_PIC = "0"; + + /** + * 门店订单 + */ + String STORE_ORDER = "1"; + + /** + * 普通订单 + */ + String ORDINARY_ORDER = "2"; + + /** + * 预存款订单 + */ + String PREALSE_ORDER = "3"; + + /** + * 二级分销 + */ + String SECOND_COMMISSION_LEVEL = "2"; + + /** + * 抢购促销图片类型 + */ + String PANIC_MARKETING_PIC_TYPE = "1"; + + /** + * 预售促销图片类型 + */ + String PRESALE_MARKETING_PIC_TYPE = "2"; + + /** + * 拼团促销图片类型 + */ + String GROUP_MARKETING_PIC_TYPE = "3"; + + /** + * 试用促销图片类型 + */ + String TRY_MARKETING_PIC_TYPE = "4"; + + /** + * 秒杀促销显示 + */ + String PANIC_SHOW = "1"; + + /** + * 秒杀促销不显示 + */ + String PANIC_NOT_SHOW = "0"; + + /** + * 预售分类 + */ + String PRESALE_MARKETING_CATE = "1"; + + /** + * 拼团分类 + */ + String GROUP_MARKETING_CATE = "2"; + + /** + * 试用分类 + */ + String TRY_MARKETING_CATE = "3"; + + /** + * 定金预售类型 + */ + String DEPOSIT_PRESALE_TYPE = "1"; + + /** + * 全款预售类型 + */ + String FULL_PRESALE_TYPE = "2"; + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/CommonResponse.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/CommonResponse.java new file mode 100644 index 0000000..db7a516 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/CommonResponse.java @@ -0,0 +1,73 @@ +package com.ruoyi.util; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.ObjectUtils; + +/** + * Created by 魔金商城 on 17/12/1. + * 通用返回对象 + */ +@ApiModel(description = "通用返回对象") +public class CommonResponse { + + /** + * 返回码 1 成功 其他失败 默认0没有数据 + */ + @ApiModelProperty(value = "返回码 1 成功 其他失败 默认0没有数据") + private int flag = 0; + + /** + * 数据 + */ + @ApiModelProperty(value = "数据") + private T data; + + + /** + * 构造返回对象 + * + * @param t 返回的对象 + * @return 返回的对象 + */ + public static CommonResponse build(T t) { + CommonResponse commonResponse = new CommonResponse<>(); + // 没有数据 + if (ObjectUtils.isEmpty(t)) { + return commonResponse; + } + commonResponse.flag = 1; + commonResponse.data = t; + return commonResponse; + } + + /** + * 构造返回对象 + * + * @param t 返回的对象 + * @param code 返回码 + * @return 返回的对象 + */ + public static CommonResponse build(T t, int code) { + CommonResponse commonResponse = new CommonResponse<>(); + commonResponse.flag = code; + commonResponse.data = t; + return commonResponse; + } + + public int getFlag() { + return flag; + } + + public void setFlag(int flag) { + this.flag = flag; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/CustomHttpUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/CustomHttpUtils.java new file mode 100644 index 0000000..549613d --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/CustomHttpUtils.java @@ -0,0 +1,349 @@ +package com.ruoyi.util; + +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.*; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 自定义http工具类 + * + * @author 魔金商城 created on 2020/4/14 + */ +public class CustomHttpUtils { + + private static final Logger logger = LoggerFactory.getLogger(CustomHttpUtils.class); + /** + * 执行GET方法请求数据 + * + * @param url 请求地址 + * @return 返回数据 + */ + public static String doGet(String url) { + logger.debug("CustomHttpUtils.doGet and url:{}", url); + return getResult(getHttpClient(), new HttpGet(url)); + } + + /** + * 执行POST方法form方式请求数据 + * + * @param url 请求地址 + * @param params 请求参数 + * @return 返回数据 + */ + public static String postForm(String url, Map params) { + logger.debug("CustomHttpUtils.postForm and url:{} \r\n params:{}", url, params); + return getFormRequestResult(getHttpClient(), new HttpPost(url), params); + } + + + /** + * 执行POST方法json方式请求数据 + * + * @param url 请求地址 + * @param jsonString 请求参数(json字符串) + * @return 返回数据 + */ + public static String postJson(String url, String jsonString) { + logger.debug("CustomHttpUtils.postJson and url:{} \r\n jsonString:{}", url, jsonString); + return getJsonRequestResult(jsonString, getHttpClient(), new HttpPost(url)); + } + + + /** + * 执行DELETE方法请求数据 + * + * @param url 请求地址 + * @return 返回数据 + */ + public static String doDelete(String url) { + logger.debug("CustomHttpUtils.doDelete and url:{}", url); + return getResult(getHttpClient(), new HttpDelete(url)); + } + + + /** + * 执行put方法form方式请求数据 + * + * @param url 请求地址 + * @param params 请求参数 + * @return 返回数据 + */ + public static String putForm(String url, Map params) { + logger.debug("CustomHttpUtils.putForm and url:{} \r\n params:{}", url, params); + return getFormRequestResult(getHttpClient(), new HttpPut(url), params); + } + + + /** + * 执行put方法json方式请求数据 + * + * @param url 请求地址 + * @param jsonString 请求参数(json字符串) + * @return 返回数据 + */ + public static String putJson(String url, String jsonString) { + logger.debug("CustomHttpUtils.putJson and url:{} \r\n jsonString:{}", url, jsonString); + return getJsonRequestResult(jsonString, getHttpClient(), new HttpPut(url)); + } + + + /** + * 从cookie中获取token + */ + public static String getTokenFromCookie() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = ""; + Cookie[] cookies = request.getCookies(); + if (Objects.isNull(cookies)) { + return ""; + } + for (Cookie temp : cookies) { + if (temp.getName().equals("Authorization")) { + token = temp.getValue(); + } + } + return token; + } + + /** + * 从header中获取token + */ + public static String getTokenFromHeader() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = ""; + // 认证信息在header 中的key + final String authHeader = request.getHeader("Authorization"); + if (Objects.isNull(authHeader) || !authHeader.startsWith("Bearer ")) { + logger.info("getToken from header fail...."); + } else { + token = authHeader.substring(7); + } + return token; + } + + /** + * 通用获取token(如果request头中有Auth信息,则返回头中的token,否则返回cookie中的token) + * + * @return token + */ + private static String getTokenCommon() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + if (!StringUtils.isEmpty(request.getHeader("Authorization"))) { + logger.info("getTokenCommon:getAuthorization from header is not empty"); + return getTokenFromHeader(); + } + return getTokenFromCookie(); + } + +// /** +// * 从token获取userName +// * +// * @param token token +// * @param publicKey 公钥 +// * @return userName +// */ +// public static String getUserNameFromToken(String token, String publicKey) { +// log.debug("getUserNameFromToken and token:{} \r\n publicKey:{}", token, publicKey); +// if (StringUtils.isEmpty(token)) { +// return ""; +// } +// Jwt jwt = null; +// try { +// SignatureVerifier verifier = new RsaVerifier(publicKey); +// jwt = JwtHelper.decodeAndVerify(token, verifier); +// } catch (Exception e) { +// log.error(e.getMessage()); +// } +// if (Objects.nonNull(jwt)) { +// log.debug("getUserNameFromToken and claims:{}", jwt.getClaims()); +// JSONObject claims = JSONObject.parseObject(jwt.getClaims()); +// // 判断有效期是否过期 +// if (Long.parseLong(claims.getString("exp")) > new Date().getTime() / 1000) { +// return claims.getString("user_name"); +// } +// } +// return ""; +// } + + /** + * 下载文件 + * + * @param out 输出流 + * @param url 文件地址 + */ + public static void downLoadFile(OutputStream out, String url) { + logger.debug("downLoadFile and url:{}", url); + if (StringUtils.isEmpty(url)) { + logger.debug("downLoadFile fail : url is empty"); + return; + } + InputStream inputStream = null; + try { + inputStream = getInputStreamResultFormUrl(url); + int b = 0; + byte[] buffer = new byte[512]; + while (b != -1) { + b = inputStream.read(buffer); + //4.写到输出流(out)中 + out.write(buffer, 0, b); + } + + } catch (IOException e) { + logger.error(e.getMessage()); + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + out.close(); + out.flush(); + } catch (IOException e) { + logger.error(e.getMessage()); + } + } + } + + public static InputStream getInputStreamResultFormUrl(String url) throws IOException { + return getInputStreamResult(getHttpClient(), new HttpGet(url)); + } + + /** + * 设置下载信息 + * + * @param response 返回 + * @param fileName 文件名 + */ + public static void setDownloadInfo(HttpServletResponse response, String fileName) { + //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型 + response.setContentType("multipart/form-data"); + //2.设置文件头:最后一个参数是设置下载文件 + response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); + } + + /** + * 获取httpClient + */ + private static HttpClient getHttpClient() { + BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager( + RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(), + null, + null, + null + ); + return HttpClientBuilder.create() + .setConnectionManager(connManager) + .build(); + } + + + /** + * 获取json请求返回值 + * + * @param jsonString 请求参数 + * @param httpClient http客户端 + * @param httpRequest 请求对象 + * @return 请求返回 + */ + private static String getJsonRequestResult(String jsonString, HttpClient httpClient, HttpEntityEnclosingRequestBase httpRequest) { + String result = null; + //设置token +// httpRequest.setHeader("Authorization", "Bearer " + getTokenCommon()); + httpRequest.setHeader("Content-type", "application/json; charset=utf-8"); + StringEntity requestParam = new StringEntity(jsonString, "UTF-8"); + requestParam.setContentType("application/json"); + try { + httpRequest.setEntity(requestParam); + result = EntityUtils.toString(httpClient.execute(httpRequest).getEntity(), "UTF-8");//取出应答字符串 + } catch (IOException e) { + logger.error(e.getMessage()); + } + logger.debug("getJsonRequestResult and result:{}", result == null ? "" : result); + return result; + } + + /** + * 获取form请求返回值 + * + * @param formParam 请求参数 + * @param httpClient http客户端 + * @param httpRequest 请求对象 + * @return 请求返回 + */ + private static String getFormRequestResult(HttpClient httpClient, HttpEntityEnclosingRequestBase httpRequest, Map formParam) { + String result = null; + List params = new ArrayList<>(); + if (Objects.nonNull(formParam)) { + formParam.forEach((key, value) -> params.add(new BasicNameValuePair(key, value))); + } +// httpRequest.setHeader("Authorization", "Bearer " + getTokenCommon()); + try { + httpRequest.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + result = EntityUtils.toString(httpClient.execute(httpRequest).getEntity(), "UTF-8");//取出应答字符串 + } catch (IOException e) { + logger.error(e.getMessage()); + } + logger.debug("getFormRequestResult and result:{}", result == null ? "" : result); + return result; + } + + /** + * 获取http请求返回 + * + * @param httpClient http客户端 + * @param httpRequest 请求对象 + * @return 请求返回 + */ + private static String getResult(HttpClient httpClient, HttpUriRequest httpRequest) { + String result = null; +// httpRequest.setHeader("Authorization", "Bearer " + getTokenCommon()); + try { + result = EntityUtils.toString(httpClient.execute(httpRequest).getEntity(), Charset.forName("utf-8"));//取出应答字符串 + } catch (IOException e) { + logger.error(e.getMessage()); + } + logger.debug("getResult and result:{}", result == null ? "" : result); + return result; + } + + /** + * 获取http请求输入流返回 + * + * @param httpClient http客户端 + * @param httpRequest 请求对象 + * @return 请求返回 + */ + private static InputStream getInputStreamResult(HttpClient httpClient, HttpUriRequest httpRequest) throws IOException { + return httpClient.execute(httpRequest).getEntity().getContent(); + } + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/Express100Utils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/Express100Utils.java new file mode 100644 index 0000000..2ee1b61 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/Express100Utils.java @@ -0,0 +1,47 @@ +package com.ruoyi.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 快递100工具类 + */ +public class Express100Utils { + + /** + * 快递100获取查询地址的接口地址 + */ + private final static String KUAIDI_URL = "https://www.kuaidi100.com/chaxun?com=%s&nu=%s"; + /** + * H5查询物流信息地址 + */ + private final static String H5_KUAIDI_URL = "https://m.kuaidi100.com/app/query/?coname=lecshop&com=%s&nu=%s&callbackurl=%s"; + /** + * 日志 + */ + static Logger logger = LoggerFactory.getLogger(Express100Utils.class); + + /** + * 获得htmlapi的快递查询地址 + * + * @param express100Code 快递代号 + * @param waybillCode 运单号 + */ + public static String getHtmlApiURl(String express100Code, String waybillCode) { + logger.debug("getHtmlApiURl and express100Code:{} \r\n waybillCode:{}", express100Code, waybillCode); + return String.format(KUAIDI_URL, express100Code, waybillCode); + } + + /** + * 生成H5查询物流信息url + * + * @param express100Code 快递代号 + * @param waybillCode 运单号 + * @param callBackUrl 回跳地址(http开头) + * @return h5物流信息url + */ + public static String formatH5Url(String express100Code, String waybillCode, String callBackUrl) { + return String.format(H5_KUAIDI_URL, express100Code, waybillCode, callBackUrl); + } + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/Graphics2DUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/Graphics2DUtils.java new file mode 100644 index 0000000..d012904 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/Graphics2DUtils.java @@ -0,0 +1,110 @@ +package com.ruoyi.util; + +import com.ruoyi.common.utils.StringUtils; + +import java.awt.*; +import java.util.ArrayList; + +public class Graphics2DUtils { + /** + * 向画布上写文字 + * + * @param g Graphics2D对象 + * @param color 颜色 + * @param font 字体 + * @param content 内容 + * @param x 坐标x + * @param y 坐标y + */ + public static void drawString(Graphics2D g, Color color, Font font, String content, float x, float y) { + g.setColor(color); + g.setFont(font); + g.drawString(content, x, y); + } + + /** + * 向画布上写多行文字文字,自动居中 + * + * @param g Graphics2D对象 + * @param color 颜色 + * @param font 字体 + * @param content 内容 + * @param x 坐标X + * @param y 坐标y + * @param width 画布宽度 + * @param lineWordNum 每行字数 + * @param linePadding 行间距 + * @param center 是否居中 + */ + public static void drawString(Graphics2D g, Color color, Font font, String content, float x, float y, int width, int lineWordNum, int linePadding, boolean center) { + int num = content.length(); + + ArrayList contents = new ArrayList<>(); + if (num <= lineWordNum) { + + contents.add(content); + } else { + for (int i = 0; i < num; i += lineWordNum) { + contents.add(StringUtils.substring(content, i, i + lineWordNum)); + } + + } + for (int i = 0; i < contents.size(); i++) { + String s = contents.get(i); + if (i != 0) { + y += linePadding + font.getSize(); + } + if (center) { + drawCenterString(g, color, font, s, width, y); + } else { + drawString(g, color, font, s, x, y); + } + } + } + + /** + * 向画布上写多行文字文字,自动居中 + * + * @param g Graphics2D对象 + * @param color 颜色 + * @param font 字体 + * @param content 内容 + * @param y 坐标y + * @param width 画布宽度 + * @param lineWordNum 每行字数 + * @param linePadding 行间距 + */ + public static void drawCenterString(Graphics2D g, Color color, Font font, String content, float y, int width, int lineWordNum, int linePadding) { + drawString(g, color, font, content, 0, y, width, lineWordNum, linePadding, true); + } + + /** + * 向画布上写文字,自动居中 + * + * @param g Graphics2D对象 + * @param color 颜色 + * @param font 字体 + * @param content 内容 + * @param width 画布宽度 + * @param y 坐标y + */ + public static void drawCenterString(Graphics2D g, Color color, Font font, String content, int width, float y) { + int textWidth = getStringWidth(g, font, content); + + drawString(g, color, font, content, (width - textWidth) / 2, y); + } + + /** + * 获取字符串内容的宽度 + * + * @param g Graphics2D对象 + * @param font 字体 + * @param content 内容 + * @return + */ + public static int getStringWidth(Graphics2D g, Font font, String content) { + FontMetrics fm = g.getFontMetrics(font); + //获取字符串宽度 + return fm.stringWidth(content); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/JaxbUtil.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/JaxbUtil.java new file mode 100644 index 0000000..d1c91f4 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/JaxbUtil.java @@ -0,0 +1,130 @@ +package com.ruoyi.util; + + +import javax.xml.bind.*; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.namespace.QName; +import java.io.StringReader; +import java.io.StringWriter; +import java.util.Collection; + + +/** + * xml转换工具类 + */ +public class JaxbUtil { + // 多线程安全的Context. + private JAXBContext jaxbContext; + + /** + * @param types 所有需要序列化的Root对象的类型. + */ + public JaxbUtil(Class... types) { + try { + jaxbContext = JAXBContext.newInstance(types); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + + /** + * Java Object->Xml. + */ + public String toXml(Object root, String encoding) { + try { + StringWriter writer = new StringWriter(); + createMarshaller(encoding).marshal(root, writer); + return writer.toString(); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + + /** + * Java Object->Xml, 特别支持对Root Element是Collection的情形. + */ + @SuppressWarnings("unchecked") + public String toXml(Collection root, String rootName, String encoding) { + try { + CollectionWrapper wrapper = new CollectionWrapper(); + wrapper.collection = root; + + JAXBElement wrapperElement = new JAXBElement( + new QName(rootName), CollectionWrapper.class, wrapper); + + StringWriter writer = new StringWriter(); + createMarshaller(encoding).marshal(wrapperElement, writer); + + return writer.toString(); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + + /** + * Xml->Java Object. + */ + @SuppressWarnings("unchecked") + public T fromXml(String xml) { + try { + StringReader reader = new StringReader(xml); + return (T) createUnmarshaller().unmarshal(reader); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + + /** + * Xml->Java Object, 支持大小写敏感或不敏感. + */ + @SuppressWarnings("unchecked") + public T fromXml(String xml, boolean caseSensitive) { + try { + String fromXml = xml; + if (!caseSensitive) + fromXml = xml.toLowerCase(); + StringReader reader = new StringReader(fromXml); + return (T) createUnmarshaller().unmarshal(reader); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + + /** + * 创建Marshaller, 设定encoding(可为Null). + */ + public Marshaller createMarshaller(String encoding) { + try { + Marshaller marshaller = jaxbContext.createMarshaller(); + + marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + + if (!org.springframework.util.StringUtils.isEmpty(encoding)) { + marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); + } + return marshaller; + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + + /** + * 创建UnMarshaller. + */ + public Unmarshaller createUnmarshaller() { + try { + return jaxbContext.createUnmarshaller(); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + + /** + * 封装Root Element 是 Collection的情况. + */ + public static class CollectionWrapper { + @SuppressWarnings("unchecked") + @XmlAnyElement + protected Collection collection; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/MarketingConstant.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/MarketingConstant.java new file mode 100644 index 0000000..d1b21bd --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/MarketingConstant.java @@ -0,0 +1,76 @@ +package com.ruoyi.util; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by 魔金商城 on 17/6/8. + * 促销常量类 + */ +public interface MarketingConstant { + + /** + * 直降促销 + */ + String FALL_MARKETING = "1"; + + /** + * 满赠 + */ + String FULL_GIFT_MARKETING = "2"; + + /** + * 抢购促销 + */ + String PANIC_BUY_MARKETING = "3"; + + /** + * 满减促销 + */ + String FULL_DOWN_MARKETING = "4"; + + /** + * 满折促销 + */ + String FULL_DISCOUNT_MARKETING = "5"; + + /** + * 包邮促销 + */ + String FREE_SHIP_MARKETING = "6"; + + /** + * 定金预售 + */ + String DEPOSIT_PRE_SALE_MARKETING = "7"; + + /** + * 全款预售 + */ + String FULL_PRE_SALE_MARKETING = "8"; + + /** + * 试用促销 + */ + String TRY_MARKETING = "9"; + + /** + * 拼团促销 + */ + String GROUP_MARKETING = "10"; + + /** + * 众筹促销 + */ + String CROWD_FUNDING_MARKETING = "11"; + + /** + * 存在互斥的促销类型 + */ + List EXCLUSION_MARKETING_TYPES = Arrays.asList(PANIC_BUY_MARKETING, FALL_MARKETING, GROUP_MARKETING, DEPOSIT_PRE_SALE_MARKETING, FULL_PRE_SALE_MARKETING, TRY_MARKETING, CROWD_FUNDING_MARKETING); + + /** + * 批发商品互斥的促销类型 + */ + List BATCH_EXCLUSION_MARKETING_TYPES = Arrays.asList(PANIC_BUY_MARKETING, GROUP_MARKETING, DEPOSIT_PRE_SALE_MARKETING, FULL_PRE_SALE_MARKETING, TRY_MARKETING, CROWD_FUNDING_MARKETING); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/PageHelper.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/PageHelper.java new file mode 100644 index 0000000..6290a95 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/PageHelper.java @@ -0,0 +1,132 @@ +package com.ruoyi.util; + + +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * Created by 魔金商城 on 17/5/2. + * 分页帮助类 + */ + +public class PageHelper { + + /** + * 当前查询的列表数据 + */ + private List list = new ArrayList<>(); + + /** + * 总计录数 + */ + private int rows; + + /** + * 每页显示记录数 默认10条记录 + */ + private int pageSize = 10; + + /** + * 当前页码 默认第一页 + */ + private int pageNum = 0; + + /** + * 构造分页对象 + * + * @param pageHelper 原始分页对象 + * @param function 转化函数 + * @return 返回新的返回对象 + */ + public static PageHelper buildByCopy(PageHelper pageHelper, Function function) { + PageHelper pageHelper1 = new PageHelper(); + pageHelper1.setRows(pageHelper.getRows()); + pageHelper1.setPageNum(pageHelper.getPageNum()); + pageHelper1.setPageSize(pageHelper.getPageSize()); + + if (!CollectionUtils.isEmpty(pageHelper.getList())) { + pageHelper1.setList((List) pageHelper.getList().stream().map(function).collect(Collectors.toList())); + } + return pageHelper1; + } + + /** + * 获取开始页 + * + * @return 返回开始页 + */ + public int getStartRowNum() { + return pageNum * pageSize; + } + + /** + * 设置当前的数据列表 + * + * @param list 当前数据 + * @return 返回当前对象 + */ + public PageHelper setListDates(List list) { + this.list = list; + return this; + } + + /** + * 获得设置通用分页 + * + * @param params 查询参数 + * @param rows 总记录数 + * @return 返回查询参数 + */ + public Map getQueryParams(Map params, int rows) { + this.setRows(rows); + params.put(CommonConstant.START_ROW_NUM, this.getStartRowNum()); + params.put(CommonConstant.PAGE_SIZE, this.getPageSize()); + return params; + } + + /** + * 获得总页数 + * + * @return 返回总的页数 此方法不能删除 + */ + public int getTotalPages() { + return rows % pageSize == 0 ? rows / pageSize : rows / pageSize + 1; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getRows() { + return rows; + } + + public void setRows(int rows) { + this.rows = rows; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/PosterUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/PosterUtils.java new file mode 100644 index 0000000..60c3fd2 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/PosterUtils.java @@ -0,0 +1,358 @@ +package com.ruoyi.util; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.UUID; +import com.ruoyi.setting.bean.PaySetCommon; +import com.ruoyi.setting.service.ILsPaySettingService; +//import com.sun.image.codec.jpeg.JPEGCodec; +//import com.sun.image.codec.jpeg.JPEGImageEncoder; +import net.sf.json.JSONObject; +import org.apache.commons.io.FileUtils; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.protocol.HTTP; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +@Component +public class PosterUtils extends BaseEntity { + private static final String ACCESS_TOKEN = "微信小程序token"; + + private static final Logger logger = LoggerFactory.getLogger(PosterUtils.class); + + /** + * 注入redis服务 + */ + @Autowired + private RedisCache redisService; + + /** + * 注入支付设置服务 + */ + @Autowired + private ILsPaySettingService paySetService; + + private static PosterUtils posterUtils; + + @PostConstruct + public void init(){ + posterUtils = this; + posterUtils.redisService = this.redisService; + posterUtils.paySetService = this.paySetService; + } + + public static String createPoster(String posterTitle, String scene, String moneyReward, String petNameUrl, String qrpath, String bgpath, String sitepage) throws Exception { +// String resourcePath = PosterUtils.class.getResource("/image/").getPath(); + long nowTime = System.currentTimeMillis(); + /*String qrcodeName = UUID.randomUUID().toString().replace("-", ""); + String petUrlName = UUID.randomUUID().toString().replace("-", ""); + URL petUnitUrl = new URL(petNameUrl); + HttpURLConnection conn = (HttpURLConnection) petUnitUrl.openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(5 * 1000); + BufferedInputStream biss = new BufferedInputStream(conn.getInputStream()); + OutputStream outputStream = new FileOutputStream(new File(resourcePath + petUrlName + ".png")); + int lens; + byte[] arrs = new byte[1024]; + while ((lens = biss.read(arrs)) != -1) { + outputStream.write(arrs, 0, lens); + outputStream.flush(); + } + outputStream.close();*/ + PaySetCommon paySetCommon = posterUtils.paySetService.queryPaySet(); + //二维码图片 + String urlstr ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="; +// String url = "http://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="; + URL getCodeUrl = new URL(urlstr + GetAccessToken(paySetCommon.getWechatAppletPaySet().getAppId(), paySetCommon.getWechatAppletPaySet().getAppSecret())); + HttpURLConnection httpURLConnection = (HttpURLConnection) getCodeUrl.openConnection(); + httpURLConnection.setRequestMethod("POST");// 提交模式 + httpURLConnection.setDoOutput(true); + httpURLConnection.setDoInput(true); + PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream()); + JSONObject paramJson = new JSONObject(); + paramJson.accumulate("scene", scene).accumulate("page", sitepage); + paramJson.put("auto_color", false); + JSONObject lineColor = new JSONObject(); + lineColor.put("r", 0); + lineColor.put("g", 0); + lineColor.put("b", 0); + paramJson.put("line_color", lineColor); + printWriter.write(paramJson.toString()); + printWriter.flush(); +// BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream()); + BufferedImage qrimg = ImageIO.read(httpURLConnection.getInputStream()); + + ImageIO.write(qrimg, "jpg", new File(qrpath)); + /*OutputStream ost = new FileOutputStream(new File(qrpath)); + int len; + byte[] arr = new byte[1024]; + while ((len = bis.read(arr)) != -1) { + ost.write(arr, 0, len); + ost.flush(); + } + ost.close();*/ + + //合成图片 + String title = posterTitle; + if (title.length() > 21) { + title = StringUtils.substring(title, 0, 21) + "..."; + } + //宠物图片文件 + File petImg = FileUtils.toFile(PosterUtils.class.getResource("/templates/posters/bg.jpg")); + //二维码图片文件 1 + File qrCodeImg = new File(qrpath); + //背景地址 + //为了方便演示放在resources中,可根据实际情况(上传后)将背景模板放入单独的资源文件夹或远程资源服务器 + URL url = PosterUtils.class.getResource("/templates/posters/bg.jpg"); + File fileBg = FileUtils.toFile(url); + //1、背景图片输入流 + FileInputStream fis = new FileInputStream(fileBg); + //2、背景图片对象 + Image srcImg = ImageIO.read(fis); + //3、创建画布,根据背景图片的宽高 + BufferedImage bufferedImage = new BufferedImage( + //宽度 + srcImg.getWidth(null), + //高度 + srcImg.getHeight(null), + //图片类型 + BufferedImage.TYPE_INT_RGB); + int width = bufferedImage.getWidth(); + int height = bufferedImage.getHeight(); + //4、得到2d画笔对象 + Graphics2D g = bufferedImage.createGraphics(); + // 设置对线段的锯齿状边缘处理 + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + //5、设置画布背景 + g.drawImage(srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); + //6、```````````开始作画``````````` + Font rewardFirstFont = new Font("PingFang SC Bold", Font.PLAIN, 24); + Font rewardLastFont = new Font("PingFang SC Bold", Font.PLAIN, 48); + int rewardFirstWidth = Graphics2DUtils.getStringWidth(g, rewardFirstFont, "赏金¥"); + int rewardLastWidth = Graphics2DUtils.getStringWidth(g, rewardLastFont, moneyReward); + //赏金内容 + Graphics2DUtils.drawString(g, Color.decode("#ffd434"), rewardFirstFont, "赏金¥", (width - rewardFirstWidth - rewardLastWidth) / 2, 550); + Graphics2DUtils.drawString(g, Color.decode("#ffd434"), rewardLastFont, moneyReward, (width - rewardLastWidth + rewardFirstWidth) / 2, 550); + //标题 + Graphics2DUtils.drawString(g, Color.decode("#323232"), new Font("PingFang SC Bold", Font.BOLD, 34), title, 0, 400, width, 12, 5, true); + //把宠物图片和二维码图片划入背景 + g.drawImage(ImageIO.read(petImg), 130, 90, 362, 250, null); + g.drawImage(ImageIO.read(qrCodeImg), 100, 700, 175, 175, null); + // ```````````结束作画``````````` + //7、处理画作 + g.dispose(); + //8、得到输出流 + ByteArrayOutputStream os = new ByteArrayOutputStream(); + ImageIO.write(bufferedImage, "jpg", os); + //9、转成base64编码前端可以直接显示,也可转换成其它形式比如文件 + String encodeStr = Base64.getEncoder().encodeToString(os.toByteArray()); + //保存为图片文件 + FileUtils.writeByteArrayToFile(new File(bgpath), os.toByteArray()); + //10、关闭输入输出流 + fis.close(); + os.close(); + qrCodeImg.delete(); + petImg.delete(); + return encodeStr; + + } + + public static String GetAccessToken(String appId, String secret) throws ClientProtocolException, + IOException { + String access_token1 = posterUtils.redisService.getCacheObject("access_token"); + if(!StringUtils.isEmpty(access_token1)){ + return access_token1; + } + HttpGet httpGet = new HttpGet( + "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + + appId + "&secret=" + + secret ); + HttpClient httpClient = HttpClients.createDefault(); + HttpResponse res = httpClient.execute(httpGet); + HttpEntity entity = res.getEntity(); + String result = EntityUtils.toString(entity, "UTF-8"); + JSONObject jsons = JSONObject.fromObject(result); + String expires_in = jsons.getString("expires_in"); + + //缓存 + if(Integer.parseInt(expires_in)==7200){ + //ok + String access_token = jsons.getString("access_token"); + posterUtils.redisService.setCacheObject("access_token", access_token, 2, TimeUnit.HOURS); + return access_token; + }else{ + System.out.println("出错获取token失败!"); + return null; + } + } + +// 获取二维码 信息图片 + public static String GetPostUrl(String access_token,String id) throws Exception { + //String result = HttpRequest.sendPost("http://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token, path); + System.out.println(id); + String url ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="; + Map map = new HashMap(); + map.put("path", "pages/index/index?###="+id);//你二维码中跳向的地址 + map.put("width", "430");//图片大小 + JSONObject json = JSONObject.fromObject(map); + System.out.println(json); +// String res= HttpClientConnectionManager.httpPostWithJSON(url +// + access_token, json.toString(),id); +// System.out.println(res); + return null; + } + +// 返回图片保存 ,根据 id + public static String httpPostWithJSON(String url, String json,String id) + throws Exception { + String result = null; + DefaultHttpClient httpClient = new DefaultHttpClient(); + HttpPost httpPost = new HttpPost(url); + httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json"); + + StringEntity se = new StringEntity(json); + se.setContentType("application/json"); + se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, + "UTF-8")); + httpPost.setEntity(se); + // httpClient.execute(httpPost); + HttpResponse response = httpClient.execute(httpPost); + if (response != null) { + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + InputStream instreams = resEntity.getContent(); + String uploadSysUrl = "D://erweima/"; + File saveFile = new File(uploadSysUrl+id+".png"); + // 判断这个文件(saveFile)是否存在 + if (!saveFile.getParentFile().exists()) { + // 如果不存在就创建这个文件夹 + saveFile.getParentFile().mkdirs(); + } + saveToImgByInputStream(instreams, uploadSysUrl, id+".png"); + } + } + httpPost.abort(); + return result; + } + + /* @param instreams 二进制流 + * @param imgPath 图片的保存路径 + * @param imgName 图片的名称 + * @return + * 1:保存正常 + * 0:保存失败 + */ + public static int saveToImgByInputStream(InputStream instreams,String imgPath,String imgName){ + + int stateInt = 1; + if(instreams != null){ + try { + File file=new File(imgPath+imgName);//可以是任何图片格式.jpg,.png等 + FileOutputStream fos=new FileOutputStream(file); + + byte[] b = new byte[1024]; + int nRead = 0; + while ((nRead = instreams.read(b)) != -1) { + fos.write(b, 0, nRead); + } + fos.flush(); + fos.close(); + } catch (Exception e) { + stateInt = 0; + e.printStackTrace(); + } finally { + try { + instreams.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + return stateInt; + } + +// 然后是图片重合和增加字体 + public void changeImage(String imageurl,String i ){ + try { +// InputStream imagein = new FileInputStream( +// "D:/systemAvatarNew1.png"); +// InputStream imagein2 = new FileInputStream( +// "D:/qqfile/1852230493/FileRecv/4-02.png"); + InputStream imagein = new FileInputStream( + "D:/systemAvatarNew1.png"); + InputStream imagein2 = new FileInputStream( + imageurl); + + BufferedImage image = ImageIO.read(imagein); + BufferedImage image2 = ImageIO.read(imagein2); + //image2.getWidth() - 160, image2.getHeight() - 155, + Graphics g = image.getGraphics(); + g.drawImage(image2, 300, 230, 410,422,null); +// g.drawImage(image2, image.getWidth() - image2.getWidth() - 195, +// image.getHeight() - image2.getHeight() - 190, +// 340,349,null); + OutputStream outImage = new FileOutputStream( + imageurl); +// JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(outImage); +// enc.encode(image); + + + BufferedImage bimg=ImageIO.read(new FileInputStream(imageurl)); + //得到Graphics2D 对象 + Graphics2D g2d=(Graphics2D)bimg.getGraphics(); + //设置颜色和画笔粗细 + g2d.setColor(Color.black); + g2d.setStroke(new BasicStroke(5)); + //String pathString = "D://qqfile/1852230493/FileRecv/SourceHanSansCN-/SourceHanSansCN-Heavy.otf"; +// Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(pathString)); + + g2d.setFont(new Font("微软雅黑", Font.PLAIN, 36)); + //g2d.setFont(Loadfont.loadFont(pathString, 45)); + //绘制图案或文字 + g2d.drawString("编号: "+i, 320, 700); + // g2d.drawString(i, 450, 700); + + ImageIO.write(bimg, "JPG",new FileOutputStream(imageurl)); + + + File fromFile = new File(imageurl); + File toFile = new File(imageurl); +// Image Image1 =new Image(); +// Image1.resizePng(fromFile, toFile, 1000, 1000, false); + + + + imagein.close(); + imagein2.close(); + outImage.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/QRCodeUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/QRCodeUtils.java new file mode 100644 index 0000000..79bf8a4 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/QRCodeUtils.java @@ -0,0 +1,192 @@ +package com.ruoyi.util; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.common.BitMatrix; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Hashtable; + +/** + * Created by 魔金商城 on 17/3/13. + * 二维码生成器 + */ +public final class QRCodeUtils { + + /** + * 黑色 + */ + private static final int BLACK = 0xFF000000; + + /** + * 白色 + */ + private static final int WHITE = 0xFFFFFFFF; + + private QRCodeUtils() { + + } + + /** + * 创建二维码图片 + * + * @param url 链接地址 + * @param width 宽 + * @param height 高 + */ + public static void createQRImg(HttpServletResponse response, String url, Integer width, Integer height) { + OutputStream outputStream = null; + try { + //如果宽高没有赋值,则给一个默认值 + if (ObjectUtils.isEmpty(width)) { + width = 200; + } + if (ObjectUtils.isEmpty(height)) { + height = 200; + } + outputStream = response.getOutputStream(); + QRCodeUtils.createQrCode(url, width, height, "jpg", outputStream, null, null); + outputStream.flush(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + + + /** + * 生成二维码 + * + * @param content 内容 + * @param width 宽 + * @param height 高 + */ + public static void createQrCode(String content, int width, int height, String format, OutputStream stream, String qrPath, String bgPath) throws Exception { + + Hashtable hints = new Hashtable<>(); + hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); + BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); + + BufferedImage bufferedImage = toBufferedImage(deleteWhite(bitMatrix)); + if(!StringUtils.isEmpty(bgPath)) { +// 如果指定了海报路径。则说明是分享商家 + BufferedImage poster = QRPostersUtil.drawImage2out(bgPath, bufferedImage, qrPath); + ImageIO.write(poster, format, stream); + } + else{ + if(!StringUtils.isEmpty(qrPath)){ + ImageIO.write(bufferedImage, format, new File(qrPath)); + } + ImageIO.write(bufferedImage, format, stream); + } + } + + /** + * 生成二维码 + * + * @param content 内容 + * @param width 宽 + * @param height 高 + * @param format 图片格式 + * @return 返回图片字节 + */ + public static byte[] createQrCode(String content, int width, int height, String format) throws Exception { + + Hashtable hints = new Hashtable<>(); + hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); + BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); + + return imageToBytes(toBufferedImage(bitMatrix), format); + } + + + /** + * 生成图片 + */ + private static BufferedImage toBufferedImage(BitMatrix matrix) { + int width = matrix.getWidth(); + int height = matrix.getHeight(); + BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); + } + } + return image; + } + + + /** + * 去白边 + */ + private static BitMatrix deleteWhite(BitMatrix matrix) { + int[] rec = matrix.getEnclosingRectangle(); + int resWidth = rec[2] + 1; + int resHeight = rec[3] + 1; + + BitMatrix resMatrix = new BitMatrix(resWidth, resHeight); + resMatrix.clear(); + for (int i = 0; i < resWidth; i++) { + for (int j = 0; j < resHeight; j++) { + if (matrix.get(i + rec[0], j + rec[1])) { + resMatrix.set(i, j); + } + } + } + + int width = resMatrix.getWidth(); + int height = resMatrix.getHeight(); + BufferedImage image = new BufferedImage(width, height, + BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + image.setRGB(x, y, resMatrix.get(x, y) ? 0 : 255); + } + } + + return resMatrix; + + } + + /** + * 转换BufferedImage 数据为byte数组 + * + * @param bImage + * @param format image格式字符串.如"gif","png" + * @return byte数组 + */ + public static byte[] imageToBytes(BufferedImage bImage, String format) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] bytes = null; + try { + ImageIO.write(bImage, format, out); + bytes = out.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return bytes; + } + + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/QRPostersUtil.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/QRPostersUtil.java new file mode 100644 index 0000000..c25f279 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/QRPostersUtil.java @@ -0,0 +1,362 @@ +package com.ruoyi.util; + + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; +import org.springframework.util.ResourceUtils; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.geom.Ellipse2D; +import java.awt.geom.RoundRectangle2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Random; + +/** + * 提供二维码生成和解析工具类 + * @author Administrator + * + */ +public class QRPostersUtil { + + private static final String CHARSET = "utf-8"; + private static final String FORMAT_NAME = "JPG"; + private static final int QRCODE_SIZE = 150; // 二维码尺寸,宽度和高度均是300 + private static final int WIDTH = 50; //LOGO宽度 + private static final int HEIGHT = 50; //LOGO高度 + + + /** + * 生成二维码的方法 + * @param content 目标url + * @param imgPath logo图片地址 + * @param needCompress 是否压缩logo + * @return 二维码图片 + * @throws Exception + */ + private static BufferedImage createImage(String content, String imgPath,boolean needCompress) throws Exception { + Hashtable hints = new Hashtable(); + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//指定二维码的纠错等级为高级 + hints.put(EncodeHintType.CHARACTER_SET, CHARSET);//指定字符编码为“utf-8” + hints.put(EncodeHintType.MARGIN, 1); //设置图片的边距 + //参数1:内容,目标url,参数2:固定写法,参数3:二维码的宽度,参数4:二维码的高度,参数5:二维码属性设置 + BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints); + int width = bitMatrix.getWidth();//二维码的宽度 + int height = bitMatrix.getHeight();//二维码的高度 + BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);//生成的二维码image + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000: 0xFFFFFFFF); + } + } + if (imgPath == null || "".equals(imgPath)) {//logo图片地址为null或空时 + return image; //只返回二维码图片,无中间的logo + } + // 插入logo图片 参数1:二维码图片,参数2:logo图片地址,参数3:压缩图片 + QRPostersUtil.insertImage(image, imgPath, needCompress); + return image; + } + /** + * 插入logo图片 + * @param source 二维码图片 + * @param imgPath LOGO图片地址 + * @param needCompress 是否压缩 + * @throws Exception + */ + private static void insertImage(BufferedImage source, String imgPath,boolean needCompress) throws Exception { + + File file = new File(imgPath);//logo图片地址放入文件 + Image src; + if (!file.exists()) { + //通过网络路径获取 + InputStream inputStream=getImageStream(imgPath); + src = ImageIO.read(inputStream); + }else { + //本地路径获取 + src = ImageIO.read(new File(imgPath)); + } + int width = src.getWidth(null); + int height = src.getHeight(null); + if (needCompress) { // 压缩LOGO + if (width > WIDTH) { //如果上传logo宽 >60 + width = WIDTH; + } + if (height > HEIGHT) { //如果上传logo高>60 + height = HEIGHT; + } + Image image = src.getScaledInstance(width, height,Image.SCALE_SMOOTH); + BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); + Graphics g = tag.getGraphics(); + g.drawImage(image, 0, 0, null); // 绘制缩小后的图 + g.dispose(); + src = image; + } + // 插入LOGO + Graphics2D graph = source.createGraphics(); + int x = (QRCODE_SIZE - width) / 2; + int y = (QRCODE_SIZE - height) / 2; + graph.drawImage(src, x, y, width, height, null); + Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6); + graph.setStroke(new BasicStroke(3f)); + graph.draw(shape); + graph.dispose(); + } + /** + * 生成二维码(内嵌LOGO) + * @param content 内容 + * @param imgPath logo地址 + * @param destPath 存放目录 + * @param needCompress 是否压缩logo + * @throws Exception + */ + public static void encode(String content, String imgPath, String destPath, boolean needCompress) throws Exception { + BufferedImage image = QRPostersUtil.createImage(content, imgPath,needCompress); //生成二维码 + mkdirs(destPath); + String file = new Random().nextInt(99999) + ".jpg"; + ImageIO.write(image, FORMAT_NAME, new File(destPath + "/" + file)); + } + /** + * 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常) + * @param destPath 存放目录 + */ + public static void mkdirs(String destPath) { + File file = new File(destPath); + if (!file.exists() && !file.isDirectory()) { + file.mkdirs(); + } + } + + + /** + * 生成二维码(内嵌LOGO) + * + * @param content 内容 + * @param imgPath LOGO地址 + * @param output 输出流 + * @param needCompress 是否压缩LOGO + * @throws Exception + */ + public static void encode(String content, String imgPath,OutputStream output, boolean needCompress) throws Exception { + BufferedImage image = QRPostersUtil.createImage(content, imgPath,needCompress); + ImageIO.write(image, FORMAT_NAME, output); + } + /** + * 生成二维码 + * + * @param content 内容 + * @param output 输出流 + * @throws Exception + */ + public static void encode(String content, OutputStream output)throws Exception { + QRPostersUtil.encode(content, null, output, false); + } + + + /** + * 获取网络图片流 + * + * @param url + * @return + */ + public static InputStream getImageStream(String url) { + try { + HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); + connection.setReadTimeout(5000); + connection.setConnectTimeout(5000); + connection.setRequestMethod("GET"); + if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { + InputStream inputStream = connection.getInputStream(); + return inputStream; + } + } catch (IOException e) { + System.out.println("获取网络图片出现异常,图片路径为:" + url); + e.printStackTrace(); + } + return null; + } + + + /** + *将头像,二维码和海报合成 + * @throws IOException + */ + public static void drawImage() throws IOException { + //海报图 + String backgroundImageUrl = "https://img.redocn.com/sheji/20170911/daxuexiaoyuanyinlejiegechangbisaihaibao_8694885.jpg"; + //二维码 + String qrCodeImageUrl = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553504957130&di=02fae20a5c0f885d52299b2b1d682c86&imgtype=0&src=http%3A%2F%2Fimg.atobo.com%2FProductImg%2FEWM%2FUWeb%2F3%2F2%2F1%2F3%2F061%2F3213061%2F1.gif"; + //头像 + String headUrl = "http://pic.51yuansu.com/pic3/cover/00/63/25/589bdedf5475d_610.jpg"; + + BufferedImage bgBufImage = ImageIO.read(new URL(backgroundImageUrl)); + Graphics2D bgBufImageGraphics = bgBufImage.createGraphics(); + + BufferedImage qrCodeImage = ImageIO.read(new URL(qrCodeImageUrl)); + BufferedImage headImage = ImageIO.read(new URL(headUrl)); + //设置圆形图片 + BufferedImage roundHeadImg = new BufferedImage(headImage.getWidth(), headImage.getHeight(), BufferedImage.TYPE_INT_RGB); + + Graphics2D roundHeadGraphics = roundHeadImg.createGraphics(); + Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, roundHeadImg.getWidth(), roundHeadImg.getHeight()); + roundHeadGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + roundHeadImg = roundHeadGraphics.getDeviceConfiguration().createCompatibleImage(headImage.getWidth(), headImage.getHeight(), + Transparency.TRANSLUCENT); + roundHeadGraphics = roundHeadImg.createGraphics(); + // 使用 setRenderingHint 设置抗锯齿 + roundHeadGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + roundHeadGraphics.setClip(shape); + roundHeadGraphics.drawImage(headImage, 0, 0, null); + roundHeadGraphics.dispose(); + + bgBufImageGraphics.drawImage(qrCodeImage,390, 200, qrCodeImage.getWidth(), qrCodeImage.getHeight(), null); + //bgBufImageGraphics.drawImage(roundHeadImg, 50, 100, HEAD_URL_WIDTH, HEAD_URL_HEIGHT, null); + bgBufImageGraphics.dispose(); + ImageIO.write(bgBufImage, "png", new File("C:\\Users\\Public\\Desktop\\demo2.png")); + System.out.printf("生成图片完成"); + + } + + /** + *将二维码和海报合成一张图片 + * @throws IOException + */ + public static void drawImage1(String backgroundImageUrl,BufferedImage qrCodeImage,String putImgPoster) throws IOException { + //这里对方法进行了修改直接把 BufferedImage qrCodeImage传入进来方便处理 也可以传入 String qrCodeImageUrl 图片网络路径 + BufferedImage bgBufImage = ImageIO.read(new URL(backgroundImageUrl)); + Graphics2D bgBufImageGraphics = bgBufImage.createGraphics(); + //BufferedImage qrCodeImage = ImageIO.read(new URL(qrCodeImageUrl)); + bgBufImageGraphics.drawImage(qrCodeImage,390, 200, qrCodeImage.getWidth(), qrCodeImage.getHeight(), null); + bgBufImageGraphics.dispose(); + ImageIO.write(bgBufImage, "png", new File(putImgPoster)); + System.out.printf("生成图片完成"); + } + + /** + *将二维码和海报合成一张图片 + * @param backgroundImageUrl 海报背景图片url。为空时。使用 templates\posters\bg.jpg + * @param qrCodeImage 二维码图片流 + * @param putImgPoster 海报保存地址 + * @throws IOException + */ + public static BufferedImage drawImage2out(String backgroundImageUrl,BufferedImage qrCodeImage,String putImgPoster) throws IOException { + //这里对方法进行了修改直接把 BufferedImage qrCodeImage传入进来方便处理 也可以传入 String qrCodeImageUrl 图片网络路径 +// InputStream resourceAsStream = QRPostersUtil.class.getClassLoader().getResourceAsStream("templates/posters/bg.png"); +// File bgPath = ResourceUtils.getFile("classpath:templates/posters/bg.png"); +// Resource resource = new ClassPathResource("templates/posters/bg.png"); +// Resource resource = new DefaultResourceLoader().getResource("templates/posters/bg.png"); +// ClassPathResource classPathResource = new ClassPathResource("templates/posters/bg.png"); + BufferedImage bgBufImage = null; + File f = new File(backgroundImageUrl); + + if(f.exists()){ + bgBufImage = ImageIO.read(f); + } + else { + bgBufImage = ImageIO.read(new URL(backgroundImageUrl)); + } + Graphics2D bgBufImageGraphics = bgBufImage.createGraphics(); + //BufferedImage qrCodeImage = ImageIO.read(new URL(qrCodeImageUrl)); + Font font6 = new Font("苹方-简", Font.BOLD, 28); + drawString(bgBufImageGraphics, font6, "sdafasdfasdfasd",bgBufImage.getTileWidth(), 20, 10, 2 , 2); + bgBufImageGraphics.drawImage(qrCodeImage,(bgBufImage.getWidth()-qrCodeImage.getWidth())/2, (bgBufImage.getHeight()-qrCodeImage.getHeight())/2, qrCodeImage.getWidth(), qrCodeImage.getHeight(), null); + bgBufImageGraphics.dispose(); + if(putImgPoster != null){ +// Resource outres = new ClassPathResource("templates/posters/posters.png"); + ImageIO.write(bgBufImage, "png", new File(putImgPoster)); + } + System.out.printf("生成图片完成"); + return bgBufImage; + } + + /** + * 文字超出限定长度自动换行 + * + * @param g 画布 + * @param font 字体样式 + * @param text 文字 + * @param widthLength 最大长度 (多少长度后需要换行) + * @param x 文字位置坐标 x + * @param y 文字位置坐标 Y + * @param yn 每次换行偏移多少pt + * showLine 显示行数 文字可能过多 我们只显示showLine行文字 + */ + private static int drawString(Graphics2D g, Font font, String text, int widthLength, int x, int y, int yn,int showLine) { + FontMetrics fg = g.getFontMetrics(font); + ArrayList ls = new ArrayList(); + getListText(fg, text, widthLength, ls); + g.setFont(font); + for (int i = 0; i < ls.size(); i++) { + if(i==showLine) { + break; + } + if (i == 0) { + g.drawString(ls.get(i), x, y); + } else { + g.drawString(ls.get(i), x, y + i*yn); + } + } + int height=fg.getHeight(); + if(ls.size()<=showLine) { + y=y+height*ls.size(); + }else { + y=y+height*showLine; + } + return y; + } + + /** + * 递归 切割字符串 + * @param fg + * @param text + * @param widthLength + * @param ls + */ + private static void getListText(FontMetrics fg, String text, int widthLength, ArrayList ls) { + String ba = text; + boolean b = true; + int i = 1; + while (b) { + if (fg.stringWidth(text) > widthLength) { + text = text.substring(0, text.length() - 1); + i++; + } else { + b = false; + } + } + if (i != 1) { + ls.add(ba.substring(0, ba.length() - i)); + getListText(fg, ba.substring(ba.length() - i), widthLength, ls); + } else { + ls.add(text); + } + } + + public static void main(String[] args) throws Exception{ +// 先生成二维码 + BufferedImage ti =createImage("xh6lSOzYdIMVanArR9AY0","https://b-ssl.duitang.com/uploads/item/201706/27/20170627012435_mJLiX.thumb.700_0.jpeg",true); + //输出文件 + File file = new File("E:\\123.jpg"); + ImageIO.write(ti, "jpg", file); +// drawImage(); + drawImage1("https://img.redocn.com/sheji/20170911/daxuexiaoyuanyinlejiegechangbisaihaibao_8694885.jpg",ti,"C:\\Users\\Public\\Desktop\\dome.jpg"); + } + + +} + diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/QqOssClient.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/QqOssClient.java new file mode 100644 index 0000000..85969ea --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/QqOssClient.java @@ -0,0 +1,366 @@ +package com.ruoyi.util; + + +import com.qcloud.cos.COSClient; +import com.qcloud.cos.ClientConfig; +import com.qcloud.cos.auth.BasicCOSCredentials; +import com.qcloud.cos.auth.COSCredentials; +import com.qcloud.cos.exception.CosClientException; +import com.qcloud.cos.exception.CosServiceException; +import com.qcloud.cos.model.*; +import com.qcloud.cos.region.Region; +import com.ruoyi.util.bean.OssYunConf; +import com.ruoyi.util.md5.MD5; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Date; +import java.util.List; + +/** + * @Author: SunJunxian + * @Date: 2018/12/17 + * @Description: java实现腾讯云存储服务(COSClient) + * @REGIONID 区域 + * @KEY 上传上云之后的名字 + * @KEY01 需要删除的文件 + */ +public class QqOssClient { + + + private static final String ACCESSKEY = "AKID187989o64Q4hjfItRjjplnu6HFwouHOEo7AOQgl"; + private static final String SECRETKEY = "ysBE66Bs64LZ56onV1KPIu3CUWWGfngdIhpiKn"; + private static final String BUCKETNAME = "wans76787hunfu-1301582899"; + private static final String APPID = "125178787827811"; + private static final String REGIONID = "ap-g798uangzhou"; + private static final String KEY = "MyFile1/989zookeeper-3.4.8.tar.gz"; + private static final String KEY01 = "MyFil989e1/1.jpg"; + + /** + * 上传腾讯云 + * + * @param file + * @param bytes 图片字节 + * @param type 上传的类型 0 图片 1 视频 + * @return 返回图片在又拍云的地址 + */ + public static String uploadToQqOss(OssYunConf cloudStorageConfig, MultipartFile file, byte[] bytes, String fileOriginName, String type) { + String url = null; + + String accessKey = cloudStorageConfig.getAccessKeyId(); + String secretKey = cloudStorageConfig.getAccessKeySecret(); + String bucket = cloudStorageConfig.getEndPoint(); + // bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式 + String bucketName = cloudStorageConfig.getBucketName(); + // 1 初始化用户身份信息(secretId, secretKey) + COSCredentials cred = new BasicCOSCredentials(accessKey, secretKey); + // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224 + ClientConfig clientConfig = new ClientConfig(new Region(bucket)); + // 3 生成cos客户端 + COSClient cosclient = new COSClient(cred, clientConfig); + // String suffix = fileOriginName.substring(fileOriginName.lastIndexOf(".")).toLowerCase(); + //获取腾讯云路径前缀 + String dir = cloudStorageConfig.getPrefix(); + + // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口 + // 大文件上传请参照 API 文档高级 API 上传 + File localFile = null; + try { + // 获取字符串的MD5结果,file.getBytes()--输入的字符串转换成字节数组 + String md5 = MD5.getMessageDigest(file.getBytes()); + String filePath = String.format("%1$s/%2$s%3$s", dir, md5, fileOriginName); + localFile = File.createTempFile("temp", null); + file.transferTo(localFile); + // 指定要上传到 COS 上的路径 + String key = filePath; + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile); + PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest); + String qCloudDomain = cloudStorageConfig.getAddress(); + url = String.format("%1$s/%2$s", qCloudDomain, filePath); + + } catch (IOException e) { + + } finally { + // 关闭客户端(关闭后台线程) + cosclient.shutdown(); + } + + return url; + } + + /** + * 初始化CosClient相关配置, appid、accessKey、secretKey、region + * + * @return + */ + public static COSClient getCosClient() { + // 1 初始化用户身份信息(secretId, secretKey) + COSCredentials cred = new BasicCOSCredentials(ACCESSKEY, SECRETKEY); + // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224 + // clientConfig中包含了设置region, https(默认http), 超时, 代理等set方法, 使用可参见源码或者接口文档FAQ中说明 + ClientConfig clientConfig = new ClientConfig(new Region(REGIONID)); + // 3 生成cos客户端 + COSClient cosClient = new COSClient(cred, clientConfig); + // bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式 + //String bucketName = BUCKETNAME; + return cosClient; + } + + /** + * 上传文件 + * + * @return //绝对路径和相对路径都OK + */ + public static String uploadFile() { +// File localFile = new File("E:\\software\\JavaProject\\demo\\demo20\\src\\main\\resources\\1.jpg"); + File localFile = new File("C:\\Users\\DEL\\Desktop\\pic\\logo.png"); + PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, localFile.getName(), localFile); + + // 设置存储类型, 默认是标准(Standard), 低频(standard_ia),一般为标准的 + putObjectRequest.setStorageClass(StorageClass.Standard); + + COSClient cc = getCosClient(); + try { + PutObjectResult putObjectResult = cc.putObject(putObjectRequest); + // putobjectResult会返回文件的etag + String etag = putObjectResult.getETag(); + + System.out.println(etag); + } catch (CosServiceException e) { + e.printStackTrace(); + } catch (CosClientException e) { + e.printStackTrace(); + } + // 关闭客户端 + cc.shutdown(); + return null; + } + + /** + * 下载文件 + * + * @param bucketName + * @param key + * @return + */ + public static String downLoadFile(String bucketName, String key) { + File downFile = new File("E:\\software\\1.jpg"); + COSClient cc = getCosClient(); + GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key); + + ObjectMetadata downObjectMeta = cc.getObject(getObjectRequest, downFile); + cc.shutdown(); + String etag = downObjectMeta.getETag(); + return etag; + } + + /** + * 删除文件 + * + * @param bucketName + * @param key + */ + public static void deleteFile(String bucketName, String key) { + COSClient cc = getCosClient(); + try { + cc.deleteObject(bucketName, key); + } catch (CosClientException e) { + e.printStackTrace(); + } finally { + cc.shutdown(); + } + + } + + /** + * 创建桶 + * + * @param bucketName + * @return + * @throws CosClientException + * @throws CosServiceException + */ + public static Bucket createBucket(String bucketName) throws CosClientException, CosServiceException { + COSClient cc = getCosClient(); + Bucket bucket = null; + try { + bucket = cc.createBucket(bucketName); + } catch (CosClientException e) { + e.printStackTrace(); + } finally { + } + return bucket; + } + + ; + + public static String uploadToUpYunForBase64(OssYunConf cloudStorageConfig, InputStream inputStream, byte[] bytes, String fileOriginName, byte[] bytes1) { + String url = null; + + String accessKey = cloudStorageConfig.getAccessKeyId(); + String secretKey = cloudStorageConfig.getAccessKeySecret(); + String bucket = cloudStorageConfig.getEndPoint(); + // bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式 + String bucketName = cloudStorageConfig.getBucketName(); + // 1 初始化用户身份信息(secretId, secretKey) + COSCredentials cred = new BasicCOSCredentials(accessKey, secretKey); + // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224 + ClientConfig clientConfig = new ClientConfig(new Region(bucket)); + // 3 生成cos客户端 + COSClient cosclient = new COSClient(cred, clientConfig); + // String suffix = fileOriginName.substring(fileOriginName.lastIndexOf(".")).toLowerCase(); + //获取腾讯云路径前缀 + String dir = cloudStorageConfig.getPrefix(); + + // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口 + // 大文件上传请参照 API 文档高级 API 上传 + try { + // 获取字符串的MD5结果,file.getBytes()--输入的字符串转换成字节数组 + String md5 = MD5.getMessageDigest(bytes); + String filePath = String.format("%1$s/%2$s%3$s", dir, md5, fileOriginName); + + // 指定要上传到 COS 上的路径 + String key = filePath; + ObjectMetadata metadata = new ObjectMetadata(); + // metadata.setContentType("image/jpeg"); + String backUrl = ""; + metadata.setContentLength(bytes.length); + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, new ByteArrayInputStream(bytes), + metadata); + + // 设置存储类型, 默认是标准(Standard), 低频(standard_ia) + putObjectRequest.setStorageClass(StorageClass.Standard_IA); + COSClient cc = getCosClient(); + try { + PutObjectResult putObjectResult1 = cc.putObject(putObjectRequest); + // putobjectResult会返回文件的etag + backUrl = cloudStorageConfig.getAddress() + "/" + key; + return backUrl; + } catch (CosServiceException e) { + e.printStackTrace(); + } catch (CosClientException e) { + e.printStackTrace(); + } + // 关闭客户端 + cc.shutdown(); + + return backUrl; + + } catch (Exception e) { + + } finally { + // 关闭客户端(关闭后台线程) + cosclient.shutdown(); + } + + return url; + } + + /** + * 判断桶是否存在 + * + * @param bucketName + * @return + * @throws CosClientException + * @throws CosServiceException + */ + public static boolean doesBucketExist(String bucketName) throws CosClientException, CosServiceException { + COSClient cc = getCosClient(); + boolean bucketExistFlag = cc.doesBucketExist(bucketName); + return bucketExistFlag; + } + + ; + + /** + * 查看桶文件 + * + * @param bucketName + * @return + * @throws CosClientException + * @throws CosServiceException + */ + public static ObjectListing listObjects(String bucketName) throws CosClientException, CosServiceException { + COSClient cc = getCosClient(); + + // 获取 bucket 下成员(设置 delimiter) + ListObjectsRequest listObjectsRequest = new ListObjectsRequest(); + listObjectsRequest.setBucketName(bucketName); + // 设置 list 的 prefix, 表示 list 出来的文件 key 都是以这个 prefix 开始 + listObjectsRequest.setPrefix(""); + // 设置 delimiter 为/, 即获取的是直接成员,不包含目录下的递归子成员 + listObjectsRequest.setDelimiter("/"); + // 设置 marker, (marker 由上一次 list 获取到, 或者第一次 list marker 为空) + listObjectsRequest.setMarker(""); + // 设置最多 list 100 个成员,(如果不设置, 默认为 1000 个,最大允许一次 list 1000 个 key) + listObjectsRequest.setMaxKeys(100); + + ObjectListing objectListing = cc.listObjects(listObjectsRequest); + // 获取下次 list 的 marker + String nextMarker = objectListing.getNextMarker(); + // 判断是否已经 list 完, 如果 list 结束, 则 isTruncated 为 false, 否则为 true + boolean isTruncated = objectListing.isTruncated(); + List objectSummaries = objectListing.getObjectSummaries(); + for (COSObjectSummary cosObjectSummary : objectSummaries) { + // get file path + String key = cosObjectSummary.getKey(); + // get file length + long fileSize = cosObjectSummary.getSize(); + // get file etag + String eTag = cosObjectSummary.getETag(); + // get last modify time + Date lastModified = cosObjectSummary.getLastModified(); + // get file save type + String StorageClassStr = cosObjectSummary.getStorageClass(); + } + return objectListing; + } + + ; + + /** + * 查询一个 Bucket 所在的 Region。 + * + * @param bucketName + * @return + * @throws CosClientException + * @throws CosServiceException + */ + public static String getBucketLocation(String bucketName) throws CosClientException, CosServiceException { + COSClient cosClient = getCosClient(); + // bucket 的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式 + String location = cosClient.getBucketLocation(bucketName); + return location; + } + + public static void main(String[] args) { + uploadFile(); +// downLoadFile(BUCKETNAME , KEY); + // deleteFile(BUCKETNAME , KEY01); +// createBucket("sunjunxian01-1251782781"); + //deleteBucket(); +// doesBucketExist("sunjunxian01-1251782781"); +// System.out.println(listObjects(BUCKETNAME)); + //System.out.println("BUCKETNAME的位置:" + getBucketLocation(BUCKETNAME)); + } + + /** + * 删除桶 + * + * @param bucketName + * @throws CosClientException + * @throws CosServiceException + */ + public void deleteBucket(String bucketName) throws CosClientException, CosServiceException { + COSClient cc = getCosClient(); + try { + cc.deleteBucket(bucketName); + } catch (CosClientException e) { + e.printStackTrace(); + } finally { + } + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/RandomMathLetter.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/RandomMathLetter.java new file mode 100644 index 0000000..a2fc8d3 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/RandomMathLetter.java @@ -0,0 +1,37 @@ +package com.ruoyi.util; + +import java.util.Random; + +/** + * 随机生成字母和数字组合 + * + * @author 魔金商城 on 2017/6/1. + */ +public class RandomMathLetter { + /** + * 产生随机字符串 + */ + private static Random randGen = null; + /** + * 数字和字母 + */ + private static char[] numbersAndLetters = null; + + /** + * 字符串 + */ + public static String randomString(int length) { + if (length < 1) { + return null; + } + if (randGen == null) { + randGen = new Random(); + numbersAndLetters = ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray(); + } + char[] randBuffer = new char[length]; + for (int i = 0; i < randBuffer.length; i++) { + randBuffer[i] = numbersAndLetters[randGen.nextInt(35)]; + } + return new String(randBuffer); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/RedisCacheErrorHandler.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/RedisCacheErrorHandler.java new file mode 100644 index 0000000..ed83962 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/RedisCacheErrorHandler.java @@ -0,0 +1,44 @@ +package com.ruoyi.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cache.Cache; +import org.springframework.cache.interceptor.CacheErrorHandler; +import org.springframework.stereotype.Service; + +/** + * Created by 魔金商城 on 18/2/5. + * redis 异常处理器 + */ +@Service +public class RedisCacheErrorHandler implements CacheErrorHandler { + + /** + * 调试日志 + */ + private Logger logger = LoggerFactory.getLogger(RedisCacheErrorHandler.class); + + @Override + public void handleCacheClearError(RuntimeException e, Cache cache) { + logger.error("handleCacheClearError", e); + } + + @Override + public void handleCacheGetError(RuntimeException e, Cache cache, Object o) { + logger.error("get from redis fail and cache:{} \r\n o:{}", cache, o); + logger.error("handleCacheGetError", e); + + } + + + @Override + public void handleCacheEvictError(RuntimeException e, Cache cache, Object o) { + logger.error("Evict from redis fail and cache:{} \r\n o:{}", cache, o); + logger.error("handleCacheEvictError", e); + } + + @Override + public void handleCachePutError(RuntimeException e, Cache cache, Object o, Object o1) { + logger.error("handleCachePutError", e); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/SegchkWXPayConfigImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/SegchkWXPayConfigImpl.java new file mode 100644 index 0000000..1991448 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/SegchkWXPayConfigImpl.java @@ -0,0 +1,126 @@ +package com.ruoyi.util; + +import com.weixin.pay.WXPayConfig; +import com.weixin.pay.WXPayDomain; +import com.weixin.pay.constants.WXPayConstants; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; + +/** + * 测试/第二个微信支付实体的微信支付实现类 + * + * @author yclimb + * @date 2018/7/31 + */ +public class SegchkWXPayConfigImpl extends WXPayConfig { + + private byte[] certData; + private static SegchkWXPayConfigImpl INSTANCE; + + private String appId = WXPayConstants.APP_ID_XXX; + private String mchId = WXPayConstants.MCH_ID_XXX; + private String mchKey = WXPayConstants.API_KEY_XXX; + + private SegchkWXPayConfigImpl() throws Exception{ + + String certPath = WXPayConstants.APICLIENT_CERT_XXX; + File file = new File(certPath); + if(!file.exists()) + { + return; + } + InputStream certStream = new FileInputStream(file); + this.certData = new byte[(int) file.length()]; + certStream.read(this.certData); + certStream.close(); + } + + public static SegchkWXPayConfigImpl getInstance() throws Exception{ + if (INSTANCE == null) { + synchronized (SegchkWXPayConfigImpl.class) { + if (INSTANCE == null) { + INSTANCE = new SegchkWXPayConfigImpl(); + } + } + } + return INSTANCE; + } + + @Override + public String getAppID() { + return this.appId; + } + + @Override + public String getMchID() { + return this.mchId; + } + + @Override + public String getKey() { + return this.mchKey; + } + + @Override + public InputStream getCertStream() { + ByteArrayInputStream certBis; + certBis = new ByteArrayInputStream(this.certData); + return certBis; + } + + @Override + public int getHttpConnectTimeoutMs() { + return 2000; + } + + @Override + public int getHttpReadTimeoutMs() { + return 10000; + } + + @Override + public WXPayDomain getWXPayDomain() { + return WXPayDomainSimpleImpl.instance(); + } + + public String getPrimaryDomain() { + return "api.mch.weixin.qq.com"; + } + + public String getAlternateDomain() { + return "api2.mch.weixin.qq.com"; + } + + @Override + public int getReportWorkerNum() { + return 1; + } + + @Override + public int getReportBatchSize() { + return 2; + } + + public void setCertData(String certPath) throws Exception{ + File file = new File(certPath); + InputStream certStream = new FileInputStream(file); + this.certData = new byte[(int) file.length()]; + certStream.read(this.certData); + certStream.close(); + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public void setMchId(String mchId) { + this.mchId = mchId; + } + + public void setMchKey(String mchKey) { + this.mchKey = mchKey; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/ShareCodeUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/ShareCodeUtils.java new file mode 100644 index 0000000..9586b29 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/ShareCodeUtils.java @@ -0,0 +1,64 @@ +package com.ruoyi.util; + +import java.util.Random; + +/** + * 邀请码生成器,算法原理:
+ * 1) 获取id: 1127738
+ * 2) 使用自定义进制转为:gpm6
+ * 3) 转为字符串,并在后面加'o'字符:gpm6o
+ * 4)在后面随机产生若干个随机数字字符:gpm6o7
+ * 转为自定义进制后就不会出现o这个字符,然后在后面加个'o',这样就能确定唯一性。最后在后面产生一些随机字符进行补全。
+ */ +public class ShareCodeUtils { + + /** + * 自定义进制(0,1没有加入,容易与o,l混淆) + */ + private static final char[] r = new char[]{'q', 'w', 'e', '8', 'a', 's', '2', 'd', 'z', 'x', '9', 'c', '7', 'p', '5', 'i', 'k', '3', 'm', 'j', 'u', 'f', 'r', '4', 'v', 'y', 'l', 't', 'n', '6', 'b', 'g', 'h'}; + + /** + * (不能与自定义进制有重复) + */ + private static final char b = 'o'; + + /** + * 进制长度 + */ + private static final int binLen = r.length; + + /** + * 序列最小长度 + */ + private static final int s = 6; + + /** + * 根据ID生成六位随机码 + * + * @param id ID + * @return 随机码 + */ + public static String toSerialCode(long id) { + char[] buf = new char[32]; + int charPos = 32; + + while ((id / binLen) > 0) { + int ind = (int) (id % binLen); + buf[--charPos] = r[ind]; + id /= binLen; + } + buf[--charPos] = r[(int) (id % binLen)]; + String str = new String(buf, charPos, (32 - charPos)); + // 不够长度的自动随机补全 + if (str.length() < s) { + StringBuilder sb = new StringBuilder(); + sb.append(b); + Random rnd = new Random(); + for (int i = 1; i < s - str.length(); i++) { + sb.append(r[rnd.nextInt(binLen)]); + } + str += sb.toString(); + } + return str; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/SmsUtil.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/SmsUtil.java new file mode 100644 index 0000000..704b03d --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/SmsUtil.java @@ -0,0 +1,124 @@ +package com.ruoyi.util; + +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.http.MethodType; +import com.aliyuncs.profile.DefaultProfile; +import com.ruoyi.util.bean.RequestParam; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Objects; + +/** + * 发送短信工具类 + * + * @author 魔金商城 on 2017/9/7. + */ +public class SmsUtil { + + private static final Logger logger = LoggerFactory.getLogger(SmsUtil.class); + + /** + * 发送短信-新 + * + * @param requestParam 请求中的参数实体类 + * @return 0 成功 1失败 + */ + public static int newSendSms(RequestParam requestParam) { + logger.info("newSendSms response info:{}", requestParam); + if (Objects.isNull(requestParam)) { + logger.info("newSendSms error due to requestParam is null"); + return 1; + } + //设置超时时间-可自行调整 + System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); + System.setProperty("sun.net.client.defaultReadTimeout", "10000"); + //初始化ascClient需要的几个参数 + final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改) + final String domain = requestParam.getInterfaceUrl();//短信API产品域名(接口地址固定,无需修改) + //你的accessKeyId + final String accessKeyId = requestParam.getAccessKeyId(); + //你的accessKeySecret + final String accessKeySecret = requestParam.getAccessKeySecret(); + //组装请求对象 + SendSmsRequest sendSmsRequest = new SendSmsRequest(); + //使用post提交 + sendSmsRequest.setMethod(MethodType.POST); + //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 + sendSmsRequest.setPhoneNumbers(requestParam.getPhoneNumbers()); + //必填:短信签名-可在短信控制台中找到 + sendSmsRequest.setSignName(requestParam.getSignName()); + //必填:短信模板-可在短信控制台中找到 + sendSmsRequest.setTemplateCode(requestParam.getTemplateCode()); + //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为(友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败) + sendSmsRequest.setTemplateParam("{\"code\":\"" + requestParam.getTemplateParam() + "\"}"); + //1.可选-上行短信扩展码(无特殊需求用户请忽略此字段):request.setSmsUpExtendCode("90997");//2.可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者:request.setOutId("yourOutId"); + //请求失败这里会抛ClientException异常 + SendSmsResponse sendSmsResponse; + try { + //初始化ascClient,暂时不支持多region + DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); + sendSmsResponse = new DefaultAcsClient(DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret)).getAcsResponse(sendSmsRequest); + } catch (ClientException e) { + logger.error("newSendSms error{}:", e); + return 1; + } + logger.info("newSendSms response code:{} \r\n message:{}", sendSmsResponse.getCode(), sendSmsResponse.getMessage()); + return "OK".equals(sendSmsResponse.getCode()) ? 0 : 1; + } + + + /** + * 发送短信-新通用 + * + * @param requestParam 请求中的参数实体类 + * @return 0 成功 1失败 + */ + public static int newSendSmsCommon(RequestParam requestParam) { + logger.info("newSendSms response info:{}", requestParam); + if (Objects.isNull(requestParam)) { + logger.info("newSendSms error due to requestParam is null"); + return 1; + } + //设置超时时间-可自行调整 + System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); + System.setProperty("sun.net.client.defaultReadTimeout", "10000"); + //初始化ascClient需要的几个参数 + final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改) + final String domain = requestParam.getInterfaceUrl();//短信API产品域名(接口地址固定,无需修改) + //你的accessKeyId + final String accessKeyId = requestParam.getAccessKeyId(); + //你的accessKeySecret + final String accessKeySecret = requestParam.getAccessKeySecret(); + //组装请求对象 + SendSmsRequest sendSmsRequest = new SendSmsRequest(); + //使用post提交 + sendSmsRequest.setMethod(MethodType.POST); + //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 + sendSmsRequest.setPhoneNumbers(requestParam.getPhoneNumbers()); + //必填:短信签名-可在短信控制台中找到 + sendSmsRequest.setSignName(requestParam.getSignName()); + //必填:短信模板-可在短信控制台中找到 + sendSmsRequest.setTemplateCode(requestParam.getTemplateCode()); + //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为(友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败) + sendSmsRequest.setTemplateParam(requestParam.getSmsParamString()); + //1.可选-上行短信扩展码(无特殊需求用户请忽略此字段):request.setSmsUpExtendCode("90997");//2.可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者:request.setOutId("yourOutId"); + //请求失败这里会抛ClientException异常 + SendSmsResponse sendSmsResponse; + try { + //初始化ascClient,暂时不支持多region + DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); + sendSmsResponse = new DefaultAcsClient(DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret)).getAcsResponse(sendSmsRequest); + } catch (ClientException e) { + logger.error("newSendSms error{}:", e); + return 1; + } + logger.info("newSendSms response code:{} \r\n message:{}", sendSmsResponse.getCode(), sendSmsResponse.getMessage()); + return "OK".equals(sendSmsResponse.getCode()) ? 0 : 1; + } + + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/SnowflakeIdWorker.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/SnowflakeIdWorker.java new file mode 100644 index 0000000..7100e4f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/SnowflakeIdWorker.java @@ -0,0 +1,171 @@ +package com.ruoyi.util; + + +/** + * Created by 魔金商城 on 17/11/02. + *

+ * Twitter_Snowflake
+ * SnowFlake的结构如下(每部分用-分开):
+ * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
+ * 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0
+ * 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截) + * 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69
+ * 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId和5位workerId
+ * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
+ * 加起来刚好64位,为一个Long型。
+ * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。 + */ +public class SnowflakeIdWorker { + /** + * 开始时间截 (2015-01-01) + */ + private final long twepoch = 1420041600000L; + + /** + * 机器id所占的位数 + */ + private final long workerIdBits = 5L; + + /** + * 数据标识id所占的位数 + */ + private final long datacenterIdBits = 5L; + + /** + * 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) + */ + private final long maxWorkerId = -1L ^ (-1L << workerIdBits); + + /** + * 支持的最大数据标识id,结果是31 + */ + private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); + + /** + * 序列在id中占的位数 + */ + private final long sequenceBits = 12L; + + /** + * 机器ID向左移12位 + */ + private final long workerIdShift = sequenceBits; + + /** + * 数据标识id向左移17位(12+5) + */ + private final long datacenterIdShift = sequenceBits + workerIdBits; + + /** + * 时间截向左移22位(5+5+12) + */ + private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; + + /** + * 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095) + */ + private final long sequenceMask = -1L ^ (-1L << sequenceBits); + + /** + * 工作机器ID(0~31) + */ + private long workerId; + + /** + * 数据中心ID(0~31) + */ + private long datacenterId; + + /** + * 毫秒内序列(0~4095) + */ + private long sequence = 0L; + + /** + * 上次生成ID的时间截 + */ + private long lastTimestamp = -1L; + + //==============================Constructors===================================== + + /** + * 构造函数 + * + * @param workerId 工作ID (0~31) + * @param datacenterId 数据中心ID (0~31) + */ + public SnowflakeIdWorker(long workerId, long datacenterId) { + if (workerId > maxWorkerId || workerId < 0) { + throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); + } + if (datacenterId > maxDatacenterId || datacenterId < 0) { + throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); + } + this.workerId = workerId; + this.datacenterId = datacenterId; + } + + // ==============================Methods========================================== + + /** + * 获得下一个ID (该方法是线程安全的) + * + * @return SnowflakeId + */ + public synchronized long nextId() { + long timestamp = timeGen(); + + //如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常 + if (timestamp < lastTimestamp) { + throw new RuntimeException( + String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); + } + + //如果是同一时间生成的,则进行毫秒内序列 + if (lastTimestamp == timestamp) { + sequence = (sequence + 1) & sequenceMask; + //毫秒内序列溢出 + if (sequence == 0) { + //阻塞到下一个毫秒,获得新的时间戳 + timestamp = tilNextMillis(lastTimestamp); + } + } + //时间戳改变,毫秒内序列重置 + else { + sequence = 0L; + } + + //上次生成ID的时间截 + lastTimestamp = timestamp; + + //移位并通过或运算拼到一起组成64位的ID + return ((timestamp - twepoch) << timestampLeftShift) // + | (datacenterId << datacenterIdShift) // + | (workerId << workerIdShift) // + | sequence; + } + + /** + * 阻塞到下一个毫秒,直到获得新的时间戳 + * + * @param lastTimestamp 上次生成ID的时间截 + * @return 当前时间戳 + */ + protected long tilNextMillis(long lastTimestamp) { + long timestamp = timeGen(); + while (timestamp <= lastTimestamp) { + timestamp = timeGen(); + } + return timestamp; + } + + /** + * 返回以毫秒为单位的当前时间 + * + * @return 当前时间(毫秒) + */ + protected long timeGen() { + return System.currentTimeMillis(); + } + +} \ No newline at end of file diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/ThreadTask.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/ThreadTask.java new file mode 100644 index 0000000..4893cb6 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/ThreadTask.java @@ -0,0 +1,33 @@ +package com.ruoyi.util; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * Created by 魔金商城 on 17/6/20. + * 线程池 + */ +public class ThreadTask { + + private static final ThreadTask threadTask = new ThreadTask(); + /** + * 固定线程池 + */ + private ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + + private ThreadTask() { + } + + public static ThreadTask getInstance() { + return threadTask; + } + + /** + * 加入线程池执行 + * + * @param runnable 执行线程 + */ + public void addTask(Runnable runnable) { + executorService.execute(runnable); + } +} \ No newline at end of file diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/UnionPayUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/UnionPayUtils.java new file mode 100644 index 0000000..e69de29 diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/VerifyCodeUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/VerifyCodeUtils.java new file mode 100644 index 0000000..3701ce3 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/VerifyCodeUtils.java @@ -0,0 +1,202 @@ +package com.ruoyi.util; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.OutputStream; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Random; + +/** + * 验证码工具类 + * + * @author ruoyi + */ +public class VerifyCodeUtils { + // 使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符 + public static final String VERIFY_CODES = "123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; + + private static Random random = new SecureRandom(); + + /** + * 使用系统默认字符源生成验证码 + * + * @param verifySize 验证码长度 + * @return + */ + public static String generateVerifyCode(int verifySize) { + return generateVerifyCode(verifySize, VERIFY_CODES); + } + + /** + * 使用指定源生成验证码 + * + * @param verifySize 验证码长度 + * @param sources 验证码字符源 + * @return + */ + public static String generateVerifyCode(int verifySize, String sources) { + if (sources == null || sources.length() == 0) { + sources = VERIFY_CODES; + } + int codesLen = sources.length(); + Random rand = new Random(System.currentTimeMillis()); + StringBuilder verifyCode = new StringBuilder(verifySize); + for (int i = 0; i < verifySize; i++) { + verifyCode.append(sources.charAt(rand.nextInt(codesLen - 1))); + } + return verifyCode.toString(); + } + + /** + * 输出指定验证码图片流 + * + * @param w + * @param h + * @param os + * @param code + * @throws IOException + */ + public static void outputImage(int w, int h, OutputStream os, String code) throws IOException { + int verifySize = code.length(); + BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + Random rand = new Random(); + Graphics2D g2 = image.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + Color[] colors = new Color[5]; + Color[] colorSpaces = new Color[]{Color.WHITE, Color.CYAN, Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, + Color.ORANGE, Color.PINK, Color.YELLOW}; + float[] fractions = new float[colors.length]; + for (int i = 0; i < colors.length; i++) { + colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; + fractions[i] = rand.nextFloat(); + } + Arrays.sort(fractions); + + g2.setColor(Color.GRAY);// 设置边框色 + g2.fillRect(0, 0, w, h); + + Color c = getRandColor(200, 250); + g2.setColor(c);// 设置背景色 + g2.fillRect(0, 2, w, h - 4); + + // 绘制干扰线 + Random random = new Random(); + g2.setColor(getRandColor(160, 200));// 设置线条的颜色 + for (int i = 0; i < 20; i++) { + int x = random.nextInt(w - 1); + int y = random.nextInt(h - 1); + int xl = random.nextInt(6) + 1; + int yl = random.nextInt(12) + 1; + g2.drawLine(x, y, x + xl + 40, y + yl + 20); + } + + // 添加噪点 + float yawpRate = 0.05f;// 噪声率 + int area = (int) (yawpRate * w * h); + for (int i = 0; i < area; i++) { + int x = random.nextInt(w); + int y = random.nextInt(h); + int rgb = getRandomIntColor(); + image.setRGB(x, y, rgb); + } + + shear(g2, w, h, c);// 使图片扭曲 + + g2.setColor(getRandColor(100, 160)); + int fontSize = h - 4; + Font font = new Font("Algerian", Font.ITALIC, fontSize); + g2.setFont(font); + char[] chars = code.toCharArray(); + for (int i = 0; i < verifySize; i++) { + AffineTransform affine = new AffineTransform(); + affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), + (w / verifySize) * i + fontSize / 2, h / 2); + g2.setTransform(affine); + g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10); + } + + g2.dispose(); + ImageIO.write(image, "jpg", os); + } + + private static Color getRandColor(int fc, int bc) { + if (fc > 255) { + fc = 255; + } + if (bc > 255) { + bc = 255; + } + int r = fc + random.nextInt(bc - fc); + int g = fc + random.nextInt(bc - fc); + int b = fc + random.nextInt(bc - fc); + return new Color(r, g, b); + } + + private static int getRandomIntColor() { + int[] rgb = getRandomRgb(); + int color = 0; + for (int c : rgb) { + color = color << 8; + color = color | c; + } + return color; + } + + private static int[] getRandomRgb() { + int[] rgb = new int[3]; + for (int i = 0; i < 3; i++) { + rgb[i] = random.nextInt(255); + } + return rgb; + } + + private static void shear(Graphics g, int w1, int h1, Color color) { + shearX(g, w1, h1, color); + shearY(g, w1, h1, color); + } + + private static void shearX(Graphics g, int w1, int h1, Color color) { + + int period = random.nextInt(2); + + boolean borderGap = true; + int frames = 1; + int phase = random.nextInt(2); + + for (int i = 0; i < h1; i++) { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); + g.copyArea(0, i, w1, 1, (int) d, 0); + if (borderGap) { + g.setColor(color); + g.drawLine((int) d, i, 0, i); + g.drawLine((int) d + w1, i, w1, i); + } + } + + } + + private static void shearY(Graphics g, int w1, int h1, Color color) { + + int period = random.nextInt(40) + 10; // 50; + + boolean borderGap = true; + int frames = 20; + int phase = 7; + for (int i = 0; i < w1; i++) { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); + g.copyArea(i, 0, 1, h1, 0, (int) d); + if (borderGap) { + g.setColor(color); + g.drawLine(i, (int) d, i, 0); + g.drawLine(i, (int) d + h1, i, h1); + } + + } + } +} \ No newline at end of file diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/WXPayDomainSimpleImpl.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/WXPayDomainSimpleImpl.java new file mode 100644 index 0000000..bd15eac --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/WXPayDomainSimpleImpl.java @@ -0,0 +1,120 @@ +package com.ruoyi.util; + +import com.weixin.pay.WXPayConfig; +import com.weixin.pay.WXPayDomain; +import com.weixin.pay.constants.WXPayConstants; + +import org.apache.http.conn.ConnectTimeoutException; + +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Map; + +/** + * 微信支付域名实现类(官方简单版) + * + * @author yclimb + * @date 2018/8/17 + */ +public class WXPayDomainSimpleImpl implements WXPayDomain { + private WXPayDomainSimpleImpl() { + } + + private static class WxpayDomainHolder { + private static WXPayDomain holder = new WXPayDomainSimpleImpl(); + } + + public static WXPayDomain instance() { + return WxpayDomainHolder.holder; + } + + @Override + public synchronized void report(final String domain, long elapsedTimeMillis, final Exception ex) { + DomainStatics info = domainData.get(domain); + if (info == null) { + info = new DomainStatics(domain); + domainData.put(domain, info); + } + + // success + if (ex == null) { + if (info.succCount >= 2) { + // continue succ, clear error count + info.connectTimeoutCount = info.dnsErrorCount = info.otherErrorCount = 0; + } else { + ++info.succCount; + } + } else if (ex instanceof ConnectTimeoutException) { + info.succCount = info.dnsErrorCount = 0; + ++info.connectTimeoutCount; + } else if (ex instanceof UnknownHostException) { + info.succCount = 0; + ++info.dnsErrorCount; + } else { + info.succCount = 0; + ++info.otherErrorCount; + } + } + + @Override + public synchronized DomainInfo getDomain(final WXPayConfig config) { + DomainStatics primaryDomain = domainData.get(WXPayConstants.DOMAIN_API); + if (primaryDomain == null || + primaryDomain.isGood()) { + return new DomainInfo(WXPayConstants.DOMAIN_API, true); + } + + long now = System.currentTimeMillis(); + if (switchToAlternateDomainTime == 0) { + // first switch + switchToAlternateDomainTime = now; + return new DomainInfo(WXPayConstants.DOMAIN_API2, false); + } else if (now - switchToAlternateDomainTime < MIN_SWITCH_PRIMARY_MSEC) { + DomainStatics alternateDomain = domainData.get(WXPayConstants.DOMAIN_API2); + if (alternateDomain == null || + alternateDomain.isGood() || + alternateDomain.badCount() < primaryDomain.badCount()) { + return new DomainInfo(WXPayConstants.DOMAIN_API2, false); + } else { + return new DomainInfo(WXPayConstants.DOMAIN_API, true); + } + } else { //force switch back + switchToAlternateDomainTime = 0; + primaryDomain.resetCount(); + DomainStatics alternateDomain = domainData.get(WXPayConstants.DOMAIN_API2); + if (alternateDomain != null) { + alternateDomain.resetCount(); + } + return new DomainInfo(WXPayConstants.DOMAIN_API, true); + } + } + + static class DomainStatics { + final String domain; + int succCount = 0; + int connectTimeoutCount = 0; + int dnsErrorCount = 0; + int otherErrorCount = 0; + + DomainStatics(String domain) { + this.domain = domain; + } + + void resetCount() { + succCount = connectTimeoutCount = dnsErrorCount = otherErrorCount = 0; + } + + boolean isGood() { + return connectTimeoutCount <= 2 && dnsErrorCount <= 2; + } + + int badCount() { + return connectTimeoutCount + dnsErrorCount * 5 + otherErrorCount / 4; + } + } + + // 3 minutes + private final int MIN_SWITCH_PRIMARY_MSEC = 3 * 60 * 1000; + private long switchToAlternateDomainTime = 0; + private Map domainData = new HashMap(); +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/WeChatAppletLoginResponse.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/WeChatAppletLoginResponse.java new file mode 100644 index 0000000..374291e --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/WeChatAppletLoginResponse.java @@ -0,0 +1,132 @@ +package com.ruoyi.util; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +/** + * 微信小程序登录返回 + * + * @author SK + * @since 2018/6/13 + */ +public class WeChatAppletLoginResponse { + /** + * 用户唯一标志 + */ + @JSONField(name = "openid") + private String openid; + + /** + * 会话密钥 + */ + @JSONField(name = "session_key") + private String session_key; + + /** + * 联合登录id 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。 + */ + @JSONField(name = "unionid") + private String unionid; + + /** + * 错误码(出错时返回) + */ + @JSONField(name = "errcode") + private Integer errcode; + + /** + * 错误信息(出错时返回) + */ + @JSONField(name = "errmsg") + private String errmsg; + + public WeChatAppletLoginResponse(String openid, String session_key, String unionid) { + this.openid = openid; + this.session_key = session_key; + this.unionid = unionid; + } + + /** + * 转换为字符串 + */ + @Override + public String toString() { + return JSONObject.toJSONString(this); + } + + /** + * 判断是否失败 + */ + @JsonIgnore + public boolean isError() { + return this.errcode != null && this.errcode != 0 ; + } + + /** + * 返回错误码解释 + */ + @JsonIgnore + public String errCodeDesc() { + switch (this.errcode){ + case -1: return "系统繁忙,此时请开发者稍候再试"; + case 0: return "请求成功"; + case 40029: return "code 无效"; + case 45011: return "频率限制,每个用户每分钟100次"; + case 40226: return "高风险等级用户,小程序登录拦截 "; + default: return "未知错误"; + } + } + + + /** + * 判断是否有unionId + * + * @return 有返回true, 否则返回false + */ + public boolean hasUnionId() { + return !StringUtils.isEmpty(unionid); + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getSession_key() { + return session_key; + } + + public void setSession_key(String session_key) { + this.session_key = session_key; + } + + public String getUnionid() { + return unionid; + } + + public void setUnionid(String unionid) { + this.unionid = unionid; + } + + public Integer getErrcode() { + return errcode; + } + + public void setErrcode(Integer errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/WeChatAppletUserInfo.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/WeChatAppletUserInfo.java new file mode 100644 index 0000000..c50fe05 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/WeChatAppletUserInfo.java @@ -0,0 +1,101 @@ +package com.ruoyi.util; + + +/** + * 微信小程序用户信息实体 + * + * @author SK + * @since 2018/6/13 + */ +public class WeChatAppletUserInfo { + + /** + * 错误信息 + */ + private String errMsg; + + /** + * 包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法 + */ + private String encryptedData; + + /** + * 加密算法的初始向量,详细见加密数据解密算法 + */ + private String iv; + + /** + * 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,参考文档 + */ + private String signature; + + /** + * 不包括敏感信息的原始数据字符串,用于计算签名。 + */ + private String rawData; + + /** + * 联合登录id 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。 + */ + private String unionId; + + public String getErrMsg() { + return errMsg; + } + + public void setErrMsg(String errMsg) { + this.errMsg = errMsg; + } + + public String getEncryptedData() { + return encryptedData; + } + + public void setEncryptedData(String encryptedData) { + this.encryptedData = encryptedData; + } + + public String getIv() { + return iv; + } + + public void setIv(String iv) { + this.iv = iv; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + public String getRawData() { + return rawData; + } + + public void setRawData(String rawData) { + this.rawData = rawData; + } + + public String getUnionId() { + return unionId; + } + + public void setUnionId(String unionId) { + this.unionId = unionId; + } + + @Override + public String toString() { + return "WeChatAppletUserInfo{" + + "errMsg='" + errMsg + '\'' + + ", encryptedData='" + encryptedData + '\'' + + ", iv='" + iv + '\'' + + ", signature='" + signature + '\'' + + ", rawData='" + rawData + '\'' + + ", unionId='" + unionId + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/WeChatAppletUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/WeChatAppletUtils.java new file mode 100644 index 0000000..558d5e2 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/WeChatAppletUtils.java @@ -0,0 +1,311 @@ +package com.ruoyi.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.util.WeChatAppletLoginResponse; +import com.ruoyi.util.WeChatAppletUserInfo; +import com.ruoyi.util.WechatSetting; +import com.ruoyi.util.bean.SegUserProfile; +import com.ruoyi.util.bean.UserInfoProfile; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Objects; + +/** + * 微信小程序工具类 + * + * @author SK + * @since 2018/6/13 + */ +public class WeChatAppletUtils { + private static final Logger logger = LoggerFactory.getLogger(WeChatAppletUtils.class); + /** + * 获取登录信息地址 + */ + private final static String GET_LOGIN_INFO_URL = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"; + /** + * 新的获取登录信息地址 + */ + private final static String GET_LOGIN_INFO_URL1 = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"; + /** + * 获取微信小程序access_token地址(参数为 appid 和 secret) + */ + private final static String GET_WECHAT_APPLET_ACCESS_TOKEN_ = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; + /** + * 获取微信小程序分享码请求地址 + */ + private final static String GET_WECHAT_APPLET_SHARE_CODE_URL = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s"; + /** + * 获取微信小程序直播房间列表地址 + */ + private final static String GET_WECHAT_APPLET_LIVE_PLAYER_LIST_URL = "http://api.weixin.qq.com/wxa/business/getliveinfo?access_token=%s"; + + private WeChatAppletUtils() { + } + + /** + * 获取登录信息 + * + * @param code 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 api,使用 code 换取 openid 和 session_key 等信息 + * @param wechatSetting 微信设置 + * @return 微信小程序登录返回实体 + */ + public static WeChatAppletLoginResponse getLoginInfo(String code, WechatSetting wechatSetting) { + logger.debug("getLoginInfo and code:{} \r\n wechatSetting:{}", code, wechatSetting); + /*WeChatAppletLoginResponse weChatAppletLoginResponse = wechatSetting.getType() == 999999 + ? new WeChatAppletLoginResponse(code, code, code) + : JSON.parseObject(WechatUtils.executeHttpGet(String.format(GET_LOGIN_INFO_URL, wechatSetting.getAppId(), wechatSetting.getAppSecret(), code)), WeChatAppletLoginResponse.class);*/ +// WeChatAppletLoginResponse weChatAppletLoginResponse = null; + String s = WechatUtils.executeHttpGet(String.format(GET_LOGIN_INFO_URL, wechatSetting.getAppId(), wechatSetting.getAppSecret(), code)); + logger.warn("getLoginInfo res: ({})", s); + WeChatAppletLoginResponse weChatAppletLoginResponse = JSONObject.parseObject(s, WeChatAppletLoginResponse.class); +// logger.warn("getLoginInfo get WeChatAppletLoginResponse: {}", weChatAppletLoginResponse.toString()); + if (Objects.isNull(weChatAppletLoginResponse)) { + logger.error("getLoginInfo fail : weChatAppletLoginResponse is null"); + return null; + } + if (weChatAppletLoginResponse.isError()) { + logger.debug("getLoginInfo fail and errorMsg:({}) errCode:({})", weChatAppletLoginResponse.getErrmsg(), weChatAppletLoginResponse.getErrcode()); + return null; + } + logger.debug("getLoginInfo get user wechat info: {}", weChatAppletLoginResponse.toString()); + return weChatAppletLoginResponse; + } + + /** + * 根据用户信息UserProfile获取用户信息 + * + * @param sessionKey 会话密钥 + * @param segUserProfile 微信小程序用户信息实体 + * @return 用户unionId + */ + public static String getUserInfoFromUserProfile(String sessionKey, SegUserProfile segUserProfile) { + logger.debug("getUserInfoFromUserProfile and sessionKey:{} \r\n weChatAppletUserInfo:{}", sessionKey, segUserProfile); + String unionId = null; + if (Objects.isNull(segUserProfile)) { + logger.error("getUserInfoFromUserProfile fail:weChatAppletUserInfo is null "); + return null; + } + // 被加密的数据 + byte[] dataByte = Base64.decodeBase64(segUserProfile.getEncryptedData()); + // 加密秘钥 + byte[] aeskey = Base64.decodeBase64(sessionKey); + // 偏移量 + byte[] ivByte = Base64.decodeBase64(segUserProfile.getIv()); + + try { + /*int base = 16; + if (aeskey.length % base != 0) { + int groups = aeskey.length / base + (aeskey.length % base != 0 ? 1 : 0); + byte[] temp = new byte[groups * base]; + Arrays.fill(temp, (byte) 0); + System.arraycopy(aeskey, 0, temp, 0, aeskey.length); + aeskey = temp; + }*/ + byte[] resultByte = AesUtils.getInstance().decrypt(dataByte, aeskey, ivByte); + if (!ObjectUtils.isEmpty(resultByte)) { + String result = new String(resultByte, "UTF-8"); + return JSONObject.parseObject(result).toJSONString(); + } + return null; + } catch (Exception e) { + e.printStackTrace(); + } + return unionId; + } + + /** + * 根据用户信息获取unionId + * + * @param sessionKey 会话密钥 + * @param weChatAppletUserInfo 微信小程序用户信息实体 + * @return 用户unionId + */ + public static String getUnionIdFromUserInfo(String sessionKey, WeChatAppletUserInfo weChatAppletUserInfo) { + logger.debug("getUnionIdFromUserInfo and sessionKey:{} \r\n weChatAppletUserInfo:{}", sessionKey, weChatAppletUserInfo); + String unionId = null; + if (Objects.isNull(weChatAppletUserInfo)) { + logger.error("getUnionIdFromUserInfo fail:weChatAppletUserInfo is null "); + return null; + } + // 被加密的数据 + byte[] dataByte = Base64.decodeBase64(weChatAppletUserInfo.getEncryptedData()); + // 加密秘钥 + byte[] aeskey = Base64.decodeBase64(sessionKey); + // 偏移量 + byte[] ivByte = Base64.decodeBase64(weChatAppletUserInfo.getIv()); + + try { + byte[] resultByte = AesUtils.getInstance().decrypt(dataByte, aeskey, ivByte); + String userInfo = new String(resultByte, "UTF-8"); + unionId = JSON.parseObject(userInfo).getString("unionId"); + } catch (Exception e) { + e.printStackTrace(); + } + return unionId; + } + + /** + * 获取微信小程序access_token(有效期两小时) + * + * @param wechatSetting 微信设置实体 + * @return 微信小程序access_token + */ + public static String getAccessToken(WechatSetting wechatSetting) { + logger.debug("getAccessToken and wechatSetting:{} ", wechatSetting); + String accessTokenForShareUrl = String.format(GET_WECHAT_APPLET_ACCESS_TOKEN_, wechatSetting.getAppId(), wechatSetting.getAppSecret()); + JSONObject res = JSON.parseObject(CustomHttpUtils.doGet(accessTokenForShareUrl)); + if (!StringUtils.isEmpty(res.getString("errcode"))) { + if (!StringUtils.isEmpty(res.getString("errmsg"))) { + logger.error("getAccessToken Fail and errmsg:{}", res.getString("errmsg")); + } + return null; + } else { + return res.getString("access_token"); + } + } + + /** + * 获取json参数post请求返回值(微信小程序码) + * + * @param url 请求地址 + * @param jsonString 请求参数 + * @return 请求返回(ByteArrayInputStream格式,访问数组的字节输入流) + */ + public static ByteArrayInputStream getJsonRequestResult(String url, String jsonString) { + logger.debug("getWeChatAppletCode and url :{} \r\n jsonString :{} ", url, jsonString); + String result = null; + InputStream inputStream = null; + ByteArrayInputStream byteArrayInputStream = null; + BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager( + RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(), + null, + null, + null + ); + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(connManager) + .build(); + HttpPost httpRequest = new HttpPost(url); + httpRequest.setHeader("Content-type", "application/json; charset=utf-8"); + StringEntity requestParam = new StringEntity(jsonString, "UTF-8"); + requestParam.setContentType("application/json"); + try { + httpRequest.setEntity(requestParam); + HttpResponse response = httpClient.execute(httpRequest); + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + HttpEntity entity = response.getEntity(); + inputStream = entity.getContent(); + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + // 创建一个Buffer字符串 + byte[] buffer = new byte[1024]; + // 每次读取的字符串长度,如果为-1,代表全部读取完毕 + int len = 0; + // 使用一个输入流从buffer里把数据读取出来 + while ((len = inputStream.read(buffer)) != -1) { + // 用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度 + outStream.write(buffer, 0, len); + } + // 关闭输入流 + inputStream.close(); + // 把outStream里的数据写入内存 + byteArrayInputStream = new ByteArrayInputStream(outStream.toByteArray()); + } + } catch (IOException e) { + e.printStackTrace(); + logger.error(e.getMessage()); + } + logger.debug("getJsonRequestResult and result:{}", result == null ? "" : result); + return byteArrayInputStream; + } + + /** + * 数组的字节输入流转化为base64字符串 + * + * @param inputStream 输入流 + * @return base64字符串 + */ + public static String getBase64FromInputStream(InputStream inputStream) { + // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 + byte[] data = null; + // 读取图片字节数组 + try { + if (Objects.isNull(inputStream) || inputStream.available() <= 200) { + logger.error("getBase64FromInputStream fail due to inputStream is null"); + return null; + } + ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); + byte[] buff = new byte[100]; + int rc = 0; + while ((rc = inputStream.read(buff, 0, 100)) > 0) { + swapStream.write(buff, 0, rc); + } + data = swapStream.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return java.util.Base64.getEncoder().encodeToString(data); + } + + /** + * 获取微信小程序分享码请求地址 + * + * @param accessToken 微信小程序access_token + * @return 微信小程序分享码请求地址 + */ + public static String getWeChatAppletShareCodeUrl(String accessToken) { + if (StringUtils.isEmpty(accessToken)) { + logger.error("getWeChatAppletShareCodeUrl fail due to accessToken is null"); + return null; + } + return String.format(GET_WECHAT_APPLET_SHARE_CODE_URL, accessToken); + } + + /** + * 获取微信小程序直播列表地址 + * + * @param accessToken 微信小程序access_token + * @return 微信小程序直播列表地址 + */ + public static String getWeChatAppletLivePlayerListUrl(String accessToken) { + if (StringUtils.isEmpty(accessToken)) { + logger.error("getWeChatAppletLivePlayerListUrl fail due to accessToken is null"); + return null; + } + return String.format(GET_WECHAT_APPLET_LIVE_PLAYER_LIST_URL, accessToken); + } + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/WechatSetting.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/WechatSetting.java new file mode 100644 index 0000000..3b63348 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/WechatSetting.java @@ -0,0 +1,297 @@ +package com.ruoyi.util; + +import org.springframework.util.StringUtils; + +/** + * 微信设置实体类 + */ +public class WechatSetting { + /** + * 公众号appId(必传) + */ + private String appId; + /** + * AppSecret(必传) + */ + private String appSecret; + /** + * 商户号(支付时必传) + */ + private String merchantNum; + /** + * API密钥(支付时必传) + */ + private String apiKey; + /** + * 支付回调(支付时必传) + */ + private String payCallback; + /** + * 网页授权回调地址(授权时必传) + */ + private String url; + /** + * 网站域名 (H5支付时必传) + */ + private String siteUrl; + + /** + * 网站名称(H5支付时必传) + */ + private String siteName; + + /** + * 终端ip地址 + */ + private String ip; + + /** + * 支付方式 1:公众号支付(openid必传) 2:H5支付 3:扫码支付 4:APP支付 5:小程序支付(openId必传) + */ + private int type; + + /** + * 公众号支付必传 openid(微信公众号支付) + */ + private String openId; + + + private String certFile; + + /** + * 构造微信支付参数实体 + * + * @param ip 终端ip + * @param type 支付方式 1:公众号支付(openid必传) 2:H5支付 3:扫码支付 4:APP支付 + * @param callBackUrl 微信异步回调地址 + * @return 返回构造微信支付参数实体 + */ + public static WechatSetting build(String ip, int type, String callBackUrl) { + WechatSetting wechatSetting = new WechatSetting(); + wechatSetting.ip = ip; + wechatSetting.type = type; + wechatSetting.payCallback = callBackUrl; + return wechatSetting; + } + + /** + * 是否是app支付 + * + * @return app支付返回true 否则返回false + */ + public boolean isAppPay() { + return 4 == this.type; + } + + /** + * 是否是h5支付 + * + * @return h5支付返回true 否则返回false + */ + public boolean isH5Pay() { + return 2 == this.type; + } + + /** + * 是否是扫码支付 + * + * @return 扫码支付返回true 否则返回false + */ + public boolean isQRPay() { + return 3 == this.type; + } + + /** + * 是否是公众号支付 + * + * @return 公众号支付返回true 否则返回false + */ + public boolean isOfficialAccountPay() { + return 1 == this.type; + } + + /** + * 是否是小程序支付 + * + * @return 小程序支付返回true 否则返回false + */ + public boolean isAppletPay() { + return 5 == this.type; + } + + /** + * 检测支付时的参数 + */ + public boolean checkPayParams() { + return !StringUtils.isEmpty(appId) && !StringUtils.isEmpty(appSecret) && + !StringUtils.isEmpty(merchantNum) && !StringUtils.isEmpty(apiKey); + } + + /** + * 增加openid + * + * @param openId 公众号支付必传 openid(微信公众号支付) + * @return 返回当前对象 + */ + public WechatSetting addOpenId(String openId) { + this.openId = openId; + return this; + } + + /** + * 增加网站名称 + * + * @param siteName 网站名称 + * @return 返回当前对象 + */ + public WechatSetting addSiteName(String siteName) { + this.siteName = siteName; + return this; + } + + /** + * 增加网站域名 + * + * @param siteUrl 网站域名 + * @return 返回当前对象 + */ + public WechatSetting addSiteUrl(String siteUrl) { + this.siteUrl = siteUrl; + return this; + } + + /** + * 检测H5支付时的参数 + */ + public boolean checkH5PayParams() { + return !StringUtils.isEmpty(siteUrl) && !StringUtils.isEmpty(siteName) && checkPayParams(); + } + + /** + * 检测授权时的参数 + */ + public boolean checkOAuthParams() { + return !StringUtils.isEmpty(appId) && !StringUtils.isEmpty(appSecret) && + !StringUtils.isEmpty(url); + } + + /** + * 检测小程序授权时的参数 + */ + public boolean checkAppletOAuthParams() { + return !StringUtils.isEmpty(appId) && !StringUtils.isEmpty(appSecret); + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getAppSecret() { + return appSecret; + } + + public void setAppSecret(String appSecret) { + this.appSecret = appSecret; + } + + public String getMerchantNum() { + return merchantNum; + } + + public void setMerchantNum(String merchantNum) { + this.merchantNum = merchantNum; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getPayCallback() { + return payCallback; + } + + public void setPayCallback(String payCallback) { + this.payCallback = payCallback; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getSiteUrl() { + return siteUrl; + } + + public void setSiteUrl(String siteUrl) { + this.siteUrl = siteUrl; + } + + public String getSiteName() { + return siteName; + } + + public void setSiteName(String siteName) { + this.siteName = siteName; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + + @Override + public String toString() { + return "WechatSetting{" + + "appId='" + appId + '\'' + + ", appSecret='" + appSecret + '\'' + + ", merchantNum='" + merchantNum + '\'' + + ", apiKey='" + apiKey + '\'' + + ", payCallback='" + payCallback + '\'' + + ", url='" + url + '\'' + + ", siteUrl='" + siteUrl + '\'' + + ", siteName='" + siteName + '\'' + + ", ip='" + ip + '\'' + + ", type=" + type + + ", openId='" + openId + '\'' + + '}'; + } + + public String getCertFile() { + return certFile; + } + + public void setCertFile(String certFile) { + this.certFile = certFile; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/WechatUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/WechatUtils.java new file mode 100644 index 0000000..4d0a6f9 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/WechatUtils.java @@ -0,0 +1,715 @@ +package com.ruoyi.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.util.md5.MD5Utils; +import com.ruoyi.util.bean.*; +import com.ruoyi.util.*; +import com.weixin.pay.WXPay; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.*; + + +/** + * 微信工具类 + */ +public class WechatUtils { + + /** + * 支付异步回调成功后需返回的xml + */ + public final static String SUCCESS_RETURN = "SUCCESSOK"; + /** + * 成功 + */ + public final static String SUCCESS = "SUCCESS"; + /** + * 公众号支付 + */ + public final static int OFFICIAL_ACCOUNT_PAY = 1; + /** + * H5支付 + */ + public final static int H5_PAY = 2; + /** + * 扫码支付 + */ + public final static int QR_PAY = 3; + /** + * app支付 + */ + public final static int APP_PAY = 4; + /** + * 小程序支付 + */ + public final static int APPLET_PAY = 5; + /** + * 调试日志 + */ + private static final Logger logger = LoggerFactory.getLogger(WechatUtils.class); + /** + * 获取code地址 + */ + private final static String GET_CODE_URL = + "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect"; + /** + * 获取access_token地址 + */ + private final static String GET_ACCESS_TOKEN_URL = + "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"; + /** + * 获取用户信息地址 + */ + private final static String GET_USERINFO_URL = + "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN"; + /** + * 小程序,公众号支付用户零钱地址 + */ + private final static String MMPAY_MKT_TRANSFERS = + "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; + /** + * 静默授权 + */ + private final static String SNSAPI_BASE = "snsapi_base"; + /** + * 用户授权 + */ + private final static String SNSAPI_USERINFO = "snsapi_userinfo"; + /** + * 微信支付统一下单地址 + */ + private final static String UNION_SUBMIT_ORDER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder"; + /** + * 获取微信分享access_token地址(参数为 appid 和 secret) + */ + private final static String GET_ACCESS_TOKEN_FOR_SHARE_URL = + "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; + /** + * 获取微信分享jsapi_ticket地址(参数为 access_token) + */ + private final static String GET_JSAPI_TICKET_URL = + "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi"; + + private WechatUtils() { + } + + /** + * 获取静默授权地址 + * + * @param fromUrl 拦截前链接 + * @param wechatSetting 微信设置实体 + * @return 静默授权地址 + */ + public static String getCodeUrlBase(String fromUrl, WechatSetting wechatSetting) { + logger.debug("getCodeUrlBase and fromUrl:{} \r\n wechatSetting:{}", fromUrl, wechatSetting); + return String.format(GET_CODE_URL, wechatSetting.getAppId(), wechatSetting.getUrl(), SNSAPI_BASE, fromUrl); + } + + /** + * 获取用户授权地址 + * + * @param fromUrl 拦截前链接 + * @param wechatSetting 微信设置实体 + * @return 用户授权地址 + */ + public static String getCodeUrlInfo(String fromUrl, WechatSetting wechatSetting) { + logger.debug("getCodeUrlInfo and fromUrl:{}\r\n wechatSetting:{} ", fromUrl, wechatSetting); + return String.format(GET_CODE_URL, wechatSetting.getAppId(), wechatSetting.getUrl(), SNSAPI_USERINFO, fromUrl); + } + + /** + * 获取网页授权access_token + * + * @param code 微信code + * @param state 与code一起返回的状态码(额外参数) + * @param wechatSetting 微信设置实体 + * @return 网页授权返回实体类 + */ + public static AccessTokenResult getAccessToken(String code, String state, WechatSetting wechatSetting) { + AccessTokenResult res; + logger.debug("getAccessToken and code:{}\r\n wechatSetting:{} ", code, wechatSetting); + String accessTokenUrl = String.format(GET_ACCESS_TOKEN_URL, wechatSetting.getAppId(), wechatSetting.getAppSecret(), code); + res = JSON.parseObject(executeHttpGet(accessTokenUrl), AccessTokenResult.class); + if (res.isError()) { + if (!StringUtils.isEmpty(res.getErrmsg())) { + logger.error("getAccessToken Fail and errmsg:{}", res.getErrmsg()); + } + return null; + } else { + res.setRedirectUrl(state); + return res; + } + + } + + /** + * 获取微信分享access_token + * + * @param wechatSetting 微信设置实体 + * @return 微信分享access_token + */ + public static String getAccessTokenForShare(WechatSetting wechatSetting) { + logger.debug("getAccessToken and wechatSetting:{} ", wechatSetting); + String accessTokenForShareUrl = String.format(GET_ACCESS_TOKEN_FOR_SHARE_URL, wechatSetting.getAppId(), wechatSetting.getAppSecret()); + JSONObject res = JSON.parseObject(executeHttpGet(accessTokenForShareUrl)); + if (!StringUtils.isEmpty(res.getString("errcode"))) { + if (!StringUtils.isEmpty(res.getString("errmsg"))) { + logger.error("getAccessTokenForShare Fail and errmsg:{}", res.getString("errmsg")); + } + return null; + } else { + return res.getString("access_token"); + } + } + + /** + * 获取微信分享jsapi_ticket + * + * @param access_token 凭证 + * @return 微信分享jsapi_ticket + */ + public static String getJsapiTicketForShare(String access_token) { + logger.debug("getAccessToken and access_token:{} ", access_token); + String jsapiTicketForShareUrl = String.format(GET_JSAPI_TICKET_URL, access_token); + JSONObject res = JSON.parseObject(executeHttpGet(jsapiTicketForShareUrl)); + if (Integer.parseInt(res.getString("errcode")) != 0) { + if (!StringUtils.isEmpty(res.getString("errmsg"))) { + logger.error("getJsapiTicketForShare Fail and errmsg:{}", res.getString("errmsg")); + } + return null; + } else { + return res.getString("ticket"); + } + } + + /** + * 获取用户信息 + * + * @param accessToken 网页授权接口调用凭证 + * @param openId 用户的唯一标识 + * @return 用户信息返回实体类 + */ + public static UserInfoResult getUserInfo(String accessToken, String openId) { + logger.debug("getUserInfo and access_token:{}\r\n openid:{} ", accessToken, openId); + + String userInfoUrl = String.format(GET_USERINFO_URL, accessToken, openId); + UserInfoResult res = JSON.parseObject(executeHttpGet(userInfoUrl), UserInfoResult.class); + if (res.isError()) { + if (!StringUtils.isEmpty(res.getErrmsg())) { + logger.error("getUserInfo Fail and errmsg:{}", res.getErrmsg()); + } + return null; + } else { + return res; + } + } + + /** + * 获取预支付信息 + * + * @param wechatSetting 微信设置实体 + * @param orderInfoForPay 订单信息 + * @return 预支付信息 + */ + public static PrepayResult getPrepay(WechatSetting wechatSetting, OrderInfoForPay orderInfoForPay) { + logger.debug("getPrepay and \r\n wechatSetting:{} \r\n orderInfoForPay:{} ", wechatSetting, orderInfoForPay); + String xml = getWxPayParm(wechatSetting, orderInfoForPay); + String res = executeHttpPost(UNION_SUBMIT_ORDER_URL, xml); + logger.debug("getPrepay and res:{}", res); + + //将xml字符串转换为java对象 + JaxbUtil resultBinder = new JaxbUtil(PrepayResult.class); + PrepayResult prepayResult = resultBinder.fromXml(res); + if (!prepayResult.isError()) { + //公众号支付时增加返回信息 + if (wechatSetting.isOfficialAccountPay() || wechatSetting.isAppletPay()) { + SortedMap packageParams = new TreeMap<>(); + prepayResult.setPackage(); + prepayResult.setSign_type("MD5"); + prepayResult.setTime_stamp(getTimeStamp()); + packageParams.put("appId", prepayResult.getAppid()); + packageParams.put("timeStamp", prepayResult.getTime_stamp()); + packageParams.put("nonceStr", prepayResult.getNonce_str()); + packageParams.put("package", prepayResult.getPackage_()); + packageParams.put("signType", prepayResult.getSign_type()); + prepayResult.setPay_sign(createSign(packageParams, wechatSetting.getApiKey())); + } + else if (wechatSetting.isAppPay()) { + // app支付获得签名 + SortedMap packageParams = new TreeMap<>(); + prepayResult.setTime_stamp(getTimeStamp()); + packageParams.put("appid", prepayResult.getAppid()); + packageParams.put("timestamp", prepayResult.getTime_stamp()); + packageParams.put("noncestr", prepayResult.getNonce_str()); + packageParams.put("package", "Sign=WXPay"); + packageParams.put("partnerid", wechatSetting.getMerchantNum()); + packageParams.put("prepayid", prepayResult.getPrepay_id()); + prepayResult.setPay_sign(createSign(packageParams, wechatSetting.getApiKey())); + } + return prepayResult; + } else { + if (!StringUtils.isEmpty(prepayResult.getErr_code_des())) { + logger.error("getPrepay Fail and errcode:{} \r\n returnmsg:{} \r\n errormsg:{} ", prepayResult.getReturn_msg(), prepayResult.getErr_code(), prepayResult.getErr_code_des()); + } + return null; + } + } + + + /** + * 获取提现信息 + * + * @param wechatSetting 微信设置实体 + * @param cashInfoForPay 订单信息 + * @return 预支付信息 + */ + public static WxTransferResult getTransfers(WechatSetting wechatSetting, OrderInfoForPay cashInfoForPay) { + logger.debug("getPrepay and \r\n wechatSetting:{} \r\n orderInfoForPay:{} ", wechatSetting, cashInfoForPay); + String xml = getWxPayParm(wechatSetting, cashInfoForPay); + String res = executeHttpPost(MMPAY_MKT_TRANSFERS, xml); + logger.debug("getPrepay and res:{}", res); + + //将xml字符串转换为java对象 + JaxbUtil resultBinder = new JaxbUtil(WxTransferResult.class); + WxTransferResult wxTransferResult = resultBinder.fromXml(res); + if (!wxTransferResult.isError()) { + //公众号支付时增加返回信息 + if (wechatSetting.isOfficialAccountPay() || wechatSetting.isAppletPay()) { + SortedMap packageParams = new TreeMap<>(); + wxTransferResult.setPackage(); + wxTransferResult.setSign_type("MD5"); + wxTransferResult.setTime_stamp(getTimeStamp()); + packageParams.put("appId", wxTransferResult.getMch_appid()); + packageParams.put("timeStamp", wxTransferResult.getPayment_time()); + packageParams.put("nonceStr", wxTransferResult.getNonce_str()); + packageParams.put("package", wxTransferResult.getPackage_()); + packageParams.put("signType", wxTransferResult.getSign_type()); + wxTransferResult.setPay_sign(createSign(packageParams, wechatSetting.getApiKey())); + } else if (wechatSetting.isAppPay()) { + // app支付获得签名 + SortedMap packageParams = new TreeMap<>(); + wxTransferResult.setTime_stamp(getTimeStamp()); + packageParams.put("appid", wxTransferResult.getMch_appid()); + packageParams.put("timestamp", wxTransferResult.getTime_stamp()); + packageParams.put("noncestr", wxTransferResult.getNonce_str()); + packageParams.put("package", "Sign=WXPay"); + packageParams.put("partnerid", wechatSetting.getMerchantNum()); + packageParams.put("prepayid", wxTransferResult.getPrepay_id()); + wxTransferResult.setPay_sign(createSign(packageParams, wechatSetting.getApiKey())); + } + return wxTransferResult; + } else { + if (!StringUtils.isEmpty(wxTransferResult.getErr_code_des())) { + logger.error("getPrepay Fail and returnmsg:{} \r\n errormsg:{} ", wxTransferResult.getReturn_msg(), wxTransferResult.getErr_code_des()); + } + return null; + } + } + + /** + * 获取统一下单请求参数 + * + * @param wechatSetting 微信设置实体 + * @param orderInfoForPay 订单信息 + * @return 统一下单请求参数 + */ + private static String getWxPayParm(WechatSetting wechatSetting, OrderInfoForPay orderInfoForPay) { + logger.debug("getWxPayParm and wechatSetting:{} \r\n orderInfoForPay:{} ", wechatSetting, orderInfoForPay); + SortedMap packageParams = new TreeMap<>(); + // 金额转化为分为单位 + int finalmoney = Integer.parseInt(String.format("%.2f", orderInfoForPay.getPrice()).replace(".", "")); + //交易方式 + String tradeType = ""; + //场景信息 + String sceneInfo; + //商品ID + String productId; + //公众号支付 + if (wechatSetting.isOfficialAccountPay() || wechatSetting.isAppletPay()) { + //用户唯一标识 + packageParams.put("openid", wechatSetting.getOpenId()); + tradeType = "JSAPI"; + } + //H5支付 + if (wechatSetting.isH5Pay()) { + tradeType = "MWEB"; + sceneInfo = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"" + wechatSetting.getSiteUrl() + "\",\"wap_name\": \"" + wechatSetting.getSiteName() + "\"}}"; + packageParams.put("scene_info", sceneInfo); + } + //扫码支付 + if (wechatSetting.isQRPay()) { + tradeType = "NATIVE"; + productId = String.valueOf(orderInfoForPay.getGoodsId()); + packageParams.put("product_id", productId); + } + + // APP支付 + if (wechatSetting.isAppPay()) { + tradeType = "APP"; + } + //公众账号ID + packageParams.put("appid", wechatSetting.getAppId()); + //商户号 + packageParams.put("mch_id", wechatSetting.getMerchantNum()); + //随机字符串 + packageParams.put("nonce_str", getRandomString()); + //商品描述 + packageParams.put("body", getSubGoodName(orderInfoForPay.getGoodsName())); + //附加数据(支付类型) + packageParams.put("attach", orderInfoForPay.getType() + ""); + //商户订单号 + packageParams.put("out_trade_no", orderInfoForPay.getOrderCode() + "-" + getTimeStamp()); + //标价金额 + packageParams.put("total_fee", String.valueOf(finalmoney)); + //终端IP + packageParams.put("spbill_create_ip", wechatSetting.getIp());//本地测试需替换为外网ip + //通知地址 + packageParams.put("notify_url", wechatSetting.getPayCallback()); + //交易类型 + packageParams.put("trade_type", tradeType); + //签名 + packageParams.put("sign", createSign(packageParams, wechatSetting.getApiKey())); + + return getRequestXml(packageParams); + } + + /** + * 获取企业支付请求参数 + * + * @param wechatSetting 微信设置实体 + * @param cashInfoForPay 订单信息 + * @return 统一下单请求参数 + */ + private static String getWxTransfersParm(WechatSetting wechatSetting, OrderInfoForPay cashInfoForPay) { + logger.debug("getWxPayParm and wechatSetting:{} \r\n orderInfoForPay:{} ", wechatSetting, cashInfoForPay); + SortedMap packageParams = new TreeMap<>(); + // 金额转化为分为单位 + int finalmoney = Integer.parseInt(String.format("%.2f", cashInfoForPay.getPrice()).replace(".", "")); + //交易方式 + String tradeType = ""; + //场景信息 + String sceneInfo; + //商品ID + String productId; + //公众号支付 + if (wechatSetting.isOfficialAccountPay() || wechatSetting.isAppletPay()) { + //用户唯一标识 + packageParams.put("openid", wechatSetting.getOpenId()); + tradeType = "JSAPI"; + } + //H5支付 + if (wechatSetting.isH5Pay()) { + tradeType = "MWEB"; + sceneInfo = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"" + wechatSetting.getSiteUrl() + "\",\"wap_name\": \"" + wechatSetting.getSiteName() + "\"}}"; + packageParams.put("scene_info", sceneInfo); + } + //扫码支付 + if (wechatSetting.isQRPay()) { + tradeType = "NATIVE"; + productId = String.valueOf(cashInfoForPay.getGoodsId()); + packageParams.put("product_id", productId); + } + + // APP支付 + if (wechatSetting.isAppPay()) { + tradeType = "APP"; + } + //商户账号appid + packageParams.put("mch_appid", wechatSetting.getAppId()); + //商户号 + packageParams.put("mchid", wechatSetting.getMerchantNum()); + //随机字符串 + packageParams.put("nonce_str", getRandomString()); + //附加数据(支付类型) + packageParams.put("check_name", "NO_CHECK"); + //商户订单号 + packageParams.put("partner_trade_no", cashInfoForPay.getOrderCode() + "-" + getTimeStamp()); + //金额 + packageParams.put("amount", String.valueOf(finalmoney)); + //付款备注 + packageParams.put("desc", cashInfoForPay.getType() == 2 ? "奖励提取" : "提现"); + //终端IP + packageParams.put("spbill_create_ip", wechatSetting.getIp());//本地测试需替换为外网ip + //签名 + packageParams.put("sign", createSign(packageParams, wechatSetting.getApiKey())); + + return getRequestXml(packageParams); + } + + + /** + * 截取商品名 + * + * @param goodName 商品名 + * @return 截取后的商品名 + */ + private static String getSubGoodName(String goodName) { + if (goodName.length() < 20) { + return goodName; + } else { + return goodName.substring(0, 19) + "..."; + } + } + + + /** + * 验证返回信息 + * + * @param inputStream 微信回调信息 + * @param wechatSetting 微信设置 + * @return 订单支付信息 + */ + public static OrderInfoAfterPay afterPayInfo(InputStream inputStream, WechatSetting wechatSetting) { + logger.debug("afterPayInfo and wechatSetting:{}", wechatSetting); + OrderInfoAfterPay orderInfoAfterPay = new OrderInfoAfterPay(); + orderInfoAfterPay.setSuccess(false); + BufferedReader br; + br = new BufferedReader(new InputStreamReader(inputStream)); + String line; + StringBuilder sb = new StringBuilder(); + try { + while ((line = br.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + + try { + br.close(); + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + //将xml字符串转换为java对象 + JaxbUtil resultBinder = new JaxbUtil(WechatNotifyResult.class); + WechatNotifyResult wechatNotifyResult = resultBinder.fromXml(sb.toString()); + //将xml字符串转换为map + SortedMap resultMap = new TreeMap<>(parseMapFromXmlStr(sb.toString())); + //签名 + String sign = createSign(resultMap, wechatSetting.getApiKey()); + + logger.info("wechat notify and wechatNotifyResult :{}", wechatNotifyResult); + + //验证是否失败,并验证签名 + if (!wechatNotifyResult.isError() && sign.equals(wechatNotifyResult.getSign())) { + //验证其他信息 + if (SUCCESS.equals(wechatNotifyResult.getResult_code()) + && SUCCESS.equals(wechatNotifyResult.getReturn_code()) + && wechatSetting.getAppId().equals(wechatNotifyResult.getAppid()) + && wechatSetting.getMerchantNum().equals(wechatNotifyResult.getMch_id()) + ) { + orderInfoAfterPay.setOrderCode(wechatNotifyResult.getOut_trade_no().split("-")[0]); + orderInfoAfterPay.setSuccess(true); + orderInfoAfterPay.setType(wechatNotifyResult.getAttach()); + orderInfoAfterPay.setTransCode(wechatNotifyResult.getTransaction_id()); + } + + } else { + logger.error("wechat afterPayInfo fail: returnmsg:{}\r\n errormsg:{}", wechatNotifyResult.getReturn_msg(), wechatNotifyResult.getErr_code_des()); + } + return orderInfoAfterPay; + } + + /** + * 获取请求xml + * + * @param packageParams 请求参数 + * @return 请求xml + */ + private static String getRequestXml(SortedMap packageParams) { + StringBuilder sb = new StringBuilder(); + sb.append(""); + Set es = packageParams.entrySet(); + for (Object e : es) { + Map.Entry entry = (Map.Entry) e; + String key = (String) entry.getKey(); + String value = (String) entry.getValue(); + if ("body".equalsIgnoreCase(key) || "sign".equalsIgnoreCase(key)) { + sb.append("<").append(key).append(">").append(""); + } else { + sb.append("<").append(key).append(">").append(value).append(""); + } + } + sb.append(""); + logger.debug("getRequestXml and xml:{}", sb.toString()); + return sb.toString(); + } + + /** + * 签名 + * + * @param packageParams 签名参数 + * @param apiKey 商户key + * @return 签名 + */ + private static String createSign(SortedMap packageParams, String apiKey) { + + StringBuilder sb = new StringBuilder(); + Set es = packageParams.entrySet(); + for (Object e : es) { + Map.Entry entry = (Map.Entry) e; + String k = (String) entry.getKey(); + String v = (String) entry.getValue(); + if ((v != null) && (!"".equals(v)) && (!"sign".equals(k)) && + (!"key".equals(k))) { + sb.append(k).append("=").append(v).append("&"); + } + } + sb.append("key=").append(apiKey); + logger.debug("createSign and key:{}", apiKey); + logger.debug("createSign and stringSign:{}", sb.toString()); + String sign = MD5Utils.getInstance().createMd5(sb.toString()) + .toUpperCase(); + logger.debug("createSign and sign:{}", sign); + return sign; + + } + + /** + * 执行GET方法请求数据 + * + * @param url 请求地址 + * @return 返回数据 + */ + static String executeHttpGet(String url) { + logger.debug("executeHttpGet and url:{}", url); + String result = null; + BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager( + RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(), + null, + null, + null + ); + + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(connManager) + .build(); + + HttpGet httpRequest = new HttpGet(url); + + try { + //使用DefaultHttpClient类的execute方法发送HTTP GET请求,并返回HttpResponse对象。 + HttpResponse httpResponse = httpClient.execute(httpRequest);//其中HttpGet是HttpUriRequst的子类 + HttpEntity httpEntity = httpResponse.getEntity(); + result = EntityUtils.toString(httpEntity, "UTF-8");//取出应答字符串 + + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * 执行POST方法请求数据 + * + * @param url 请求地址 + * @param xml 请求参数 + * @return 返回数据 + */ + public static String executeHttpPost(String url, String xml) { + logger.debug("executeHttpPost and url:{}", url); + String result = null; + BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager( + RegistryBuilder.create() + .register("http", PlainConnectionSocketFactory.getSocketFactory()) + .register("https", SSLConnectionSocketFactory.getSocketFactory()) + .build(), + null, + null, + null + ); + + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(connManager) + .build(); + HttpPost httpRequest = new HttpPost(url); + + try { + httpRequest.setEntity(new StringEntity(xml, "UTF-8")); + //使用DefaultHttpClient类的execute方法发送HTTP GET请求,并返回HttpResponse对象。 + HttpResponse httpResponse = httpClient.execute(httpRequest);//其中HttpGet是HttpUriRequst的子类 + HttpEntity httpEntity = httpResponse.getEntity(); + result = EntityUtils.toString(httpEntity, "UTF-8");//取出应答字符串 + + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + + /** + * 获取随机字符串 + * + * @return 随机字符串 + */ + public static String getRandomString() { + String base = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + Random random = new Random(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 32; i++) { + int number = random.nextInt(base.length()); + sb.append(base.charAt(number)); + } + return sb.toString(); + } + + /** + * 获取时间戳 + * + * @return 时间戳(秒数) + */ + public static String getTimeStamp() { + return String.valueOf(System.currentTimeMillis() / 1000L); + } + + /** + * 将xml字符串转换成map + * + * @param xml xml + * @return Map + */ + private static Map parseMapFromXmlStr(String xml) { + Map map = new HashMap<>(); + Document doc; + try { + doc = DocumentHelper.parseText(xml); // 将字符串转为XML + Element rootElt = doc.getRootElement(); // 获取根节点 + List list = rootElt.elements();//获取根节点下所有节点 + for (Element element : list) { //遍历节点 + map.put(element.getName(), element.getText()); //节点的name为map的key,text为map的value + } + } catch (Exception e) { + e.printStackTrace(); + } + return map; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/YunUploadUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/YunUploadUtils.java new file mode 100644 index 0000000..0cd666d --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/YunUploadUtils.java @@ -0,0 +1,219 @@ +package com.ruoyi.util; + +import com.aliyun.oss.ClientException; +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.OSSException; +import com.aliyun.oss.model.PutObjectRequest; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.util.bean.OssYunConf; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.multipart.MultipartFile; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; +import java.util.UUID; + +/** + * Created by 魔金商城 on 17/5/8. + * 又拍云上传工具 + */ +public class YunUploadUtils { + + private static final YunUploadUtils INSTANCE = new YunUploadUtils(); + /** + * 调试工具 + */ + private Logger logger = LoggerFactory.getLogger(YunUploadUtils.class); + private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); + + private YunUploadUtils() { + } + + public static YunUploadUtils getInstance() { + return INSTANCE; + } + + + /** + * 获取文件保存路径 + * + * @param fileOriginName 用户上传文件名 + * @return 文件保存路径 + */ + private String getFilePath(String fileOriginName) { + String fileType = "jpg"; + if (!StringUtils.isEmpty(fileOriginName) && fileOriginName.contains(".")) { + fileType = fileOriginName.substring(fileOriginName.lastIndexOf(".") + 1); + } + String fileName = String.valueOf(System.currentTimeMillis()) + "." + fileType; + String date = simpleDateFormat.format(Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")).getTime()); + return "/" + date + "/" + fileName; + } + + /** + * 判断是否是图片 + * + * @param bytes 字节数组 + * @return 是图片返回true 否则返回false + */ + private boolean isPicture(byte[] bytes) { + try { + BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes)); + return image != null; + } catch (IOException e) { + logger.error("file is not a picture ...", e); + return false; + } + } + + /** + * 上传腾讯云 + * + * @param file + * @param bytes 图片字节 + * @param type 上传的类型 0 图片 1 视频 + * @return 返回图片在又拍云的地址 + */ + public String uploadToQqOss(OssYunConf cloudStorageConfig, MultipartFile file, byte[] bytes, String fileOriginName, String type) { + return QqOssClient.uploadToQqOss(cloudStorageConfig, file, bytes, fileOriginName, type); + } + + /** + * 上传又拍云 + * + * @param upYunConf 又拍云设置 + * @param inputStream 输入流 + * @param bytes 图片字节 + * @return 返回图片在又拍云的地址 + */ + public String uploadToQqForBase64(OssYunConf upYunConf, InputStream inputStream, byte[] bytes, String fileOriginName) { + logger.debug("Being to uploadToUpYun....."); + if (org.apache.commons.lang3.ArrayUtils.isEmpty(bytes)) { + logger.error("uploadToUpYun fail due to bytes is empty ...."); + return ""; + } + return QqOssClient.uploadToUpYunForBase64(upYunConf, inputStream, bytes, fileOriginName, bytes); + } + + /** + * 上传阿里云 + * + * @param inputStream 输入流 + * @param bytes 图片字节 + * @param type 上传的类型 0 图片 1 视频 + * @return 返回图片在又拍云的地址 + */ + public String uploadToOssYun(OssYunConf config, InputStream inputStream, byte[] bytes, String fileOriginName, String type) { + String url = null; + try { + url = upload(config.getAccessKeyId(), config.getAccessKeySecret(), config.getBucketName(), config.getEndPoint(), + config.getPrefix(), getKey(config.getBucketName(), ""), inputStream); + + } catch (Exception e) { + return e.getMessage(); + } + return url; + } + + /** + * 上传又拍云 + * + * @param inputStream 输入流 + * @param bytes 图片字节 + * @return 返回图片在又拍云的地址 + */ + public String uploadToOssYunForBase64(OssYunConf config, InputStream inputStream, byte[] bytes, String fileOriginName) { + String url = null; + try { + url = upload(config.getAccessKeyId(), config.getAccessKeySecret(), config.getBucketName(), config.getEndPoint(), + config.getPrefix(), getKey(config.getBucketName(), ""), inputStream); + + } catch (Exception e) { + return e.getMessage(); + } + return url; + } + + /** + * 上传文件<>基础方法 + * + * @param accessKeyId 授权 ID + * @param accessKeySecret 授权密钥 + * @param bucketName 桶名 + * @param endpoint 节点名 + * @param styleName 样式名 + * @param key 文件名 + * @param inputStream 文件流 + * @return 访问路径 ,结果为null时说明上传失败 + */ + public String upload(String accessKeyId, String accessKeySecret, String bucketName, String endpoint, String + styleName, String key, InputStream inputStream) { + if (inputStream == null) { + return null; + } + String url = null; + OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); + try { + // 带进度条的上传 + ossClient.putObject(new PutObjectRequest(bucketName, key, inputStream)); + } catch (OSSException oe) { + oe.printStackTrace(); + key = null; + } catch (ClientException ce) { + ce.printStackTrace(); + key = null; + } catch (Exception e) { + e.printStackTrace(); + key = null; + } finally { + ossClient.shutdown(); + } + if (key != null) { + // 拼接文件访问路径。由于拼接的字符串大多为String对象,而不是""的形式,所以直接用+拼接的方式没有优势 + StringBuffer sb = new StringBuffer(); + sb.append("http://").append(bucketName).append(".").append(endpoint).append("/").append(key); + if (StringUtils.isNotBlank(styleName)) { + sb.append("/").append(styleName); + } + url = sb.toString(); + } + return url; + } + + /** + * 获取文件名(bucket里的唯一key) + * 上传和删除时除了需要bucketName外还需要此值 + * + * @param prefix 前缀(非必传),可以用于区分是哪个模块或子项目上传的文件 + * @param suffix 后缀(非必传), 可以是 png jpg 等 + * @return + */ + public String getKey(final String prefix, final String suffix) { + //生成uuid,替换 - 的目的是因为后期可能会用 - 将key进行split,然后进行分类统计 + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + //文件路径 + String path = DateUtils.parseDateToStr("yyyyMMdd", new Date()) + "-" + uuid; + + if (StringUtils.isNotBlank(prefix)) { + path = prefix + "-" + path; + } + if (suffix != null) { + if (suffix.startsWith(".")) { + path = path + suffix; + } else { + path = path + "." + suffix; + } + } + return path; + } + +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/AccessTokenResult.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/AccessTokenResult.java new file mode 100644 index 0000000..a84de79 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/AccessTokenResult.java @@ -0,0 +1,164 @@ +package com.ruoyi.util.bean; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.util.StringUtils; + +/** + * 网页授权返回实体类 + */ +public class AccessTokenResult { + + + /** + * 网页授权接口调用凭证 + */ + @JSONField(name = "access_token") + private String access_token; + + /** + * access_token接口调用凭证超时时间,单位(秒) + */ + @JSONField(name = "expires_in") + private int expires_in; + + /** + * 用户刷新access_token + */ + @JSONField(name = "refresh_token") + private String refresh_token; + + /** + * 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID + */ + @JSONField(name = "openid") + private String openid; + + /** + * 用户授权的作用域,使用逗号(,)分隔 + */ + @JSONField(name = "scope") + private String scope; + + /** + * 联合登录id + */ + @JSONField(name = "unionid") + private String unionid; + + /** + * 错误码 + */ + @JSONField(name = "errcode") + private String errcode; + + /** + * 重定向地址(出错时返回) + */ + private String redirectUrl; + + /** + * 错误信息(出错时返回) + */ + @JSONField(name = "errmsg") + private String errmsg; + + /** + * 判断是否失败 + */ + @JsonIgnore + public boolean isError() { + return !StringUtils.isEmpty(this.errcode); + } + + public String getAccess_token() { + return access_token; + } + + public void setAccess_token(String access_token) { + this.access_token = access_token; + } + + public int getExpires_in() { + return expires_in; + } + + public void setExpires_in(int expires_in) { + this.expires_in = expires_in; + } + + public String getRefresh_token() { + return refresh_token; + } + + public void setRefresh_token(String refresh_token) { + this.refresh_token = refresh_token; + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getScope() { + return scope; + } + + public void setScope(String scope) { + this.scope = scope; + } + + public String getUnionid() { + return unionid; + } + + public void setUnionid(String unionid) { + this.unionid = unionid; + } + + public String getErrcode() { + return errcode; + } + + public void setErrcode(String errcode) { + this.errcode = errcode; + } + + public String getRedirectUrl() { + return redirectUrl; + } + + public void setRedirectUrl(String redirectUrl) { + this.redirectUrl = redirectUrl; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + /** + * 转换为字符串 + */ + @Override + public String toString() { + return "AccessTokenResult{" + + "access_token='" + access_token + '\'' + + ", expires_in=" + expires_in + + ", refresh_token='" + refresh_token + '\'' + + ", openid='" + openid + '\'' + + ", scope='" + scope + '\'' + + ", unionid='" + unionid + '\'' + + ", errcode='" + errcode + '\'' + + ", redirectUrl='" + redirectUrl + '\'' + + ", errmsg='" + errmsg + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/AliPaySetting.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/AliPaySetting.java new file mode 100644 index 0000000..d0228f2 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/AliPaySetting.java @@ -0,0 +1,106 @@ +package com.ruoyi.util.bean; + +import org.springframework.util.StringUtils; + +/** + * 支付宝设置实体类 + */ +public class AliPaySetting { + /** + * APPID 即创建应用后生成 + */ + private String appId; + /** + * 开发者私钥,由开发者自己生成 + */ + private String appPrivateKey; + /** + * 支付宝公钥,由支付宝生成 + */ + private String alipayPublicKey; + /** + * 前台回调地址 + */ + private String beforeCallbackUrl; + /** + * 后台回调地址 + */ + private String backCallbackUrl; + + /** + * 构造阿里支付实体 + * + * @param beforeCallbackUrl 前台回调地址 + * @param backCallbackUrl 后台回调地址 + * @return 返回支付宝配置信息 + */ + public static AliPaySetting build(String beforeCallbackUrl, String backCallbackUrl) { + AliPaySetting aliPaySetting = new AliPaySetting(); + + //前台同步回调地址 + aliPaySetting.setBeforeCallbackUrl(beforeCallbackUrl); + //异步回调地址 + aliPaySetting.setBackCallbackUrl(backCallbackUrl); + + return aliPaySetting; + } + + /** + * 检测支付时的参数 + */ + public boolean checkPayParams() { + return !StringUtils.isEmpty(appId) && !StringUtils.isEmpty(appPrivateKey) && + !StringUtils.isEmpty(alipayPublicKey); + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getAppPrivateKey() { + return appPrivateKey; + } + + public void setAppPrivateKey(String appPrivateKey) { + this.appPrivateKey = appPrivateKey; + } + + public String getAlipayPublicKey() { + return alipayPublicKey; + } + + public void setAlipayPublicKey(String alipayPublicKey) { + this.alipayPublicKey = alipayPublicKey; + } + + public String getBeforeCallbackUrl() { + return beforeCallbackUrl; + } + + public void setBeforeCallbackUrl(String beforeCallbackUrl) { + this.beforeCallbackUrl = beforeCallbackUrl; + } + + public String getBackCallbackUrl() { + return backCallbackUrl; + } + + public void setBackCallbackUrl(String backCallbackUrl) { + this.backCallbackUrl = backCallbackUrl; + } + + @Override + public String toString() { + return "AliPaySetting{" + + "appId='" + appId + '\'' + + ", appPrivateKey='" + appPrivateKey + '\'' + + ", alipayPublicKey='" + alipayPublicKey + '\'' + + ", beforeCallbackUrl='" + beforeCallbackUrl + '\'' + + ", backCallbackUrl='" + backCallbackUrl + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/BeanUtils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/BeanUtils.java new file mode 100644 index 0000000..5ff34ae --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/BeanUtils.java @@ -0,0 +1,104 @@ +package com.ruoyi.util.bean; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Bean 工具类 + * + * @author ruoyi + */ +public class BeanUtils extends org.springframework.beans.BeanUtils { + /** + * Bean方法名中属性名开始的下标 + */ + private static final int BEAN_METHOD_PROP_INDEX = 3; + + /** + * 匹配getter方法的正则表达式 + */ + private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); + + /** + * 匹配setter方法的正则表达式 + */ + private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); + + /** + * Bean属性复制工具方法。 + * + * @param dest 目标对象 + * @param src 源对象 + */ + public static void copyBeanProp(Object dest, Object src) { + try { + copyProperties(src, dest); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 获取对象的setter方法。 + * + * @param obj 对象 + * @return 对象的setter方法列表 + */ + public static List getSetterMethods(Object obj) { + // setter方法列表 + List setterMethods = new ArrayList(); + + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + + // 查找setter方法 + + for (Method method : methods) { + Matcher m = SET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 1)) { + setterMethods.add(method); + } + } + // 返回setter方法列表 + return setterMethods; + } + + /** + * 获取对象的getter方法。 + * + * @param obj 对象 + * @return 对象的getter方法列表 + */ + + public static List getGetterMethods(Object obj) { + // getter方法列表 + List getterMethods = new ArrayList(); + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + // 查找getter方法 + for (Method method : methods) { + Matcher m = GET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 0)) { + getterMethods.add(method); + } + } + // 返回getter方法列表 + return getterMethods; + } + + /** + * 检查Bean方法名中的属性名是否相等。
+ * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。 + * + * @param m1 方法名1 + * @param m2 方法名2 + * @return 属性名一样返回true,否则返回false + */ + + public static boolean isMethodPropEquals(String m1, String m2) { + return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/CommonWebResult.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/CommonWebResult.java new file mode 100644 index 0000000..0eb14ad --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/CommonWebResult.java @@ -0,0 +1,87 @@ +package com.ruoyi.util.bean; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 前端通用返回类 + * + * @author 徐凌峰 + */ +@ApiModel("接口返回公共对象") +public class CommonWebResult { + public static final CommonWebResult SUCCESS = new CommonWebResult<>(true); + public static final CommonWebResult FAIL = new CommonWebResult(false); + + static { + SUCCESS.setErrCode(0); + SUCCESS.setErrMsg("SUCCESS"); + } + + /** + * 返回给前端的业务数据 + */ + @ApiModelProperty("返回的具体业务数据") + private T data; + /** + * 错误码 + */ + private Integer errCode; + /** + * 错误信息 + */ + private String errMsg; + + public CommonWebResult(T data) { + this.data = data; + } + + public CommonWebResult() { + } + + public static CommonWebResult getSUCCESS() { + return SUCCESS; + } + + public static CommonWebResult getFAIL() { + return FAIL; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + public Integer getErrCode() { + return errCode; + } + + public void setErrCode(Integer errCode) { + this.errCode = errCode; + } + + public String getErrMsg() { + return errMsg; + } + + public void setErrMsg(String errMsg) { + this.errMsg = errMsg; + } + + public CommonWebResult data(T data) { + this.setData(data); + return this; + } + + @Override + public String toString() { + return "CommonWebResult{" + + "data=" + data + + ", errCode=" + errCode + + ", errMsg='" + errMsg + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/EmailConf.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/EmailConf.java new file mode 100644 index 0000000..6ae99c8 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/EmailConf.java @@ -0,0 +1,58 @@ +package com.ruoyi.util.bean; + + +/** + * Created by 魔金商城 on 17/10/14. + * 邮箱配置类 + */ +public class EmailConf { + + /** + * 邮箱服务器的地址 + */ + private String host; + + /** + * 发送邮件人的用户名 + */ + private String userName; + + /** + * 发送邮件人的密码 + */ + private String password; + + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + return "EmailConf{" + + "host='" + host + '\'' + + ", userName='" + userName + '\'' + + ", password='" + password + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/EmailContent.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/EmailContent.java new file mode 100644 index 0000000..6d75acb --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/EmailContent.java @@ -0,0 +1,50 @@ +package com.ruoyi.util.bean; + + +/** + * Created by 魔金商城 on 17/10/14. + * 邮箱内容 + */ +public class EmailContent { + + + /** + * 邮件目的地 + */ + private String sendTo; + + + /** + * 邮件主题 + */ + private String subject; + + /** + * 邮件内容 + */ + private String text; + + public String getSendTo() { + return sendTo; + } + + public void setSendTo(String sendTo) { + this.sendTo = sendTo; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/LineColor.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/LineColor.java new file mode 100644 index 0000000..0674173 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/LineColor.java @@ -0,0 +1,55 @@ +package com.ruoyi.util.bean; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 颜色实体类 + * + * @author 魔金商城 created on 2020/4/14 + */ +@ApiModel(description = "颜色实体") +public class LineColor { + + /** + * 红色 + */ + @ApiModelProperty(value = "红色") + private int r; + + /** + * 绿色 + */ + @ApiModelProperty(value = "绿色") + private int g; + + /** + * 蓝色 + */ + @ApiModelProperty(value = "蓝色") + private int b; + + public int getR() { + return r; + } + + public void setR(int r) { + this.r = r; + } + + public int getG() { + return g; + } + + public void setG(int g) { + this.g = g; + } + + public int getB() { + return b; + } + + public void setB(int b) { + this.b = b; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/MonYunSmsResponse.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/MonYunSmsResponse.java new file mode 100644 index 0000000..4de8d83 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/MonYunSmsResponse.java @@ -0,0 +1,44 @@ +package com.ruoyi.util.bean; + + +/** + * 梦网云短信发送返回参数 + */ +public class MonYunSmsResponse { + /** + * 短信发送请求处理结果:0代表成功;非0代表失败。错误代码详见附录 + */ + Integer result; + /** + * 平台流水号:非0代表64位整型,对应Java和C#的long,不可用int解析。result非0时,msgid为0 + */ + Long msgid; + /** + * 用户自定义流水号:默认与请求报文multimt包结构内第一条数据的custid保持一致,若请求报文中没有custid参数或值为空,则返回由梦网生成的代表本批短信的唯一编号,result非0时,custid为空 + */ + String custid; + + public Integer getResult() { + return result; + } + + public void setResult(Integer result) { + this.result = result; + } + + public Long getMsgid() { + return msgid; + } + + public void setMsgid(Long msgid) { + this.msgid = msgid; + } + + public String getCustid() { + return custid; + } + + public void setCustid(String custid) { + this.custid = custid; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/OrderInfoAfterPay.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/OrderInfoAfterPay.java new file mode 100644 index 0000000..956fc53 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/OrderInfoAfterPay.java @@ -0,0 +1,70 @@ +package com.ruoyi.util.bean; + + +/** + * 支付后返回信息实体类 + */ +public class OrderInfoAfterPay { + + /** + * 订单code + */ + private String orderCode; + + /** + * 判断支付是否成功 + */ + private boolean isSuccess = false; + + /** + * 支付类型 1:订单支付 2:预存款充值 + */ + private int type; + + /** + * 交易流水号 + */ + private String transCode; + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public boolean isSuccess() { + return isSuccess; + } + + public void setSuccess(boolean success) { + isSuccess = success; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getTransCode() { + return transCode; + } + + public void setTransCode(String transCode) { + this.transCode = transCode; + } + + @Override + public String toString() { + return "OrderInfoAfterPay{" + + "orderCode='" + orderCode + '\'' + + ", isSuccess=" + isSuccess + + ", type=" + type + + ", transCode='" + transCode + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/OrderInfoForPay.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/OrderInfoForPay.java new file mode 100644 index 0000000..7148fc0 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/OrderInfoForPay.java @@ -0,0 +1,86 @@ +package com.ruoyi.util.bean; + + +import java.math.BigDecimal; + +/** + * 待付订单信息 + */ +public class OrderInfoForPay { + + /** + * 订单code(或主订单code,必传) + */ + private String orderCode; + + /** + * 单品名称(必传) + */ + private String goodsName; + + /** + * 单品ID 扫码支付必传(微信支付) + */ + private long goodsId; + + /** + * 订单的最终价格 (用户实际付款的金额,必传) + */ + private BigDecimal price; + + /** + * 支付类型 1:订单支付 2:预存款充值(必传) + */ + private int type; + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public long getGoodsId() { + return goodsId; + } + + public void setGoodsId(long goodsId) { + this.goodsId = goodsId; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + @Override + public String toString() { + return "OrderInfoForPay{" + + "orderCode='" + orderCode + '\'' + + ", goodsName='" + goodsName + '\'' + + ", goodsId=" + goodsId + + ", price=" + price + + ", type=" + type + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/OssYunConf.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/OssYunConf.java new file mode 100644 index 0000000..038feef --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/OssYunConf.java @@ -0,0 +1,114 @@ +package com.ruoyi.util.bean; + + +/** + * Created by 魔金商城 on 17/5/8. + * 又拍云配置 + */ + +public class OssYunConf { + + private String accessKeyId; + private String accessKeySecret; + private String bucketName; + private String endPoint; + private String styleName; + private String prefix; + private String address; + + private OssYunConf() { + + } + + private OssYunConf(String accessKeyId, String accessKeySecret, String bucketName, String endPoint, String styleName, String prefix, String address) { + this.accessKeyId = accessKeyId; + this.accessKeySecret = accessKeySecret; + this.bucketName = bucketName; + this.endPoint = endPoint; + this.styleName = styleName; + this.prefix = prefix; + this.address = address; + } + + /** + * @param accessKeyId + * @param accessKeySecret + * @param bucketName + * @param endPoint + * @param styleName + * @param prefix + * @return + */ + public static OssYunConf buildOssYunConf(String accessKeyId, String accessKeySecret, String bucketName, String endPoint, String styleName, String prefix, String address) { + return new OssYunConf(accessKeyId, accessKeySecret, bucketName, endPoint, styleName, prefix, address); + } + + public String getAccessKeyId() { + return accessKeyId; + } + + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; + } + + public String getAccessKeySecret() { + return accessKeySecret; + } + + public void setAccessKeySecret(String accessKeySecret) { + this.accessKeySecret = accessKeySecret; + } + + public String getBucketName() { + return bucketName; + } + + public void setBucketName(String bucketName) { + this.bucketName = bucketName; + } + + public String getEndPoint() { + return endPoint; + } + + public void setEndPoint(String endPoint) { + this.endPoint = endPoint; + } + + public String getStyleName() { + return styleName; + } + + public void setStyleName(String styleName) { + this.styleName = styleName; + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + @Override + public String toString() { + return "OssYunConf{" + + "accessKeyId='" + accessKeyId + '\'' + + ", accessKeySecret='" + accessKeySecret + '\'' + + ", bucketName='" + bucketName + '\'' + + ", endPoint='" + endPoint + '\'' + + ", styleName='" + styleName + '\'' + + ", prefix='" + prefix + '\'' + + ", address='" + address + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/PrepayResult.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/PrepayResult.java new file mode 100644 index 0000000..7d92027 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/PrepayResult.java @@ -0,0 +1,307 @@ +package com.ruoyi.util.bean; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * 统一下单接口返回实体类 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "xml") +@ApiModel(description = "统一下单接口返回实体类") +public class PrepayResult { + + /** + * 返回状态码 + */ + @XmlElement(name = "return_code") + @ApiModelProperty(value = "返回状态码") + private String return_code; + + /** + * 返回信息 + */ + @XmlElement(name = "return_msg") + @ApiModelProperty(value = "返回信息") + private String return_msg; + + /** + * 公众账号ID + */ + @XmlElement(name = "appid") + @ApiModelProperty(value = "公众账号ID") + private String appid; + + /** + * 商户号 + */ + @XmlElement(name = "mch_id") + @ApiModelProperty(value = "商户号") + private String mch_id; + + /** + * 随机字符串 + */ + @XmlElement(name = "nonce_str") + @ApiModelProperty(value = "随机字符串") + private String nonce_str; + + /** + * 签名 + */ + @XmlElement(name = "sign") + @ApiModelProperty(value = "签名") + private String sign; + + /** + * 业务结果 + */ + @XmlElement(name = "result_code") + @ApiModelProperty(value = "业务结果") + private String result_code; + + /** + * 错误代码 + */ + @XmlElement(name = "err_code") + @ApiModelProperty(value = "错误代码") + private String err_code; + + /** + * 错误代码描述 + */ + @XmlElement(name = "err_code_des") + @ApiModelProperty(value = "错误代码描述") + private String err_code_des; + + /** + * 交易类型 + */ + @XmlElement(name = "trade_type") + @ApiModelProperty(value = "交易类型") + private String trade_type; + + /** + * 预支付交易会话标识 + */ + @XmlElement(name = "prepay_id") + @ApiModelProperty(value = "预支付交易会话标识") + private String prepay_id; + + /** + * 二维码链接 + */ + @XmlElement(name = "code_url") + @ApiModelProperty(value = "二维码链接") + private String code_url; + + /** + * H5支付链接 + */ + @XmlElement(name = "mweb_url") + @ApiModelProperty(value = "H5支付链接") + private String mweb_url; + + /** + * 时间戳(公众号支付时返回) + */ + @ApiModelProperty(value = "时间戳(公众号支付时返回)") + private String time_stamp; + + /** + * 订单详情扩展字符串(公众号支付时返回) + */ + @ApiModelProperty(value = "订单详情扩展字符串(公众号支付时返回)") + private String package_; + /** + * 签名方式(公众号支付时返回) + */ + @ApiModelProperty(value = " 签名方式(公众号支付时返回)") + private String sign_type; + /** + * 签名(公众号支付时返回) + */ + @ApiModelProperty(value = "签名(公众号支付时返回)") + private String pay_sign; + + /** + * 生成订单详情扩展字符串 + */ + @JsonIgnore + public void setPackage() { + this.package_ = "prepay_id=" + prepay_id; + } + + /** + * 判断是否失败 + */ + @JsonIgnore + public boolean isError() { + return "FAIL".equals(this.return_code) || "FAIL".equals(this.result_code); + } + + public String getReturn_code() { + return return_code; + } + + public void setReturn_code(String return_code) { + this.return_code = return_code; + } + + public String getReturn_msg() { + return return_msg; + } + + public void setReturn_msg(String return_msg) { + this.return_msg = return_msg; + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public String getMch_id() { + return mch_id; + } + + public void setMch_id(String mch_id) { + this.mch_id = mch_id; + } + + public String getNonce_str() { + return nonce_str; + } + + public void setNonce_str(String nonce_str) { + this.nonce_str = nonce_str; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getResult_code() { + return result_code; + } + + public void setResult_code(String result_code) { + this.result_code = result_code; + } + + public String getErr_code() { + return err_code; + } + + public void setErr_code(String err_code) { + this.err_code = err_code; + } + + public String getErr_code_des() { + return err_code_des; + } + + public void setErr_code_des(String err_code_des) { + this.err_code_des = err_code_des; + } + + public String getTrade_type() { + return trade_type; + } + + public void setTrade_type(String trade_type) { + this.trade_type = trade_type; + } + + public String getPrepay_id() { + return prepay_id; + } + + public void setPrepay_id(String prepay_id) { + this.prepay_id = prepay_id; + } + + public String getCode_url() { + return code_url; + } + + public void setCode_url(String code_url) { + this.code_url = code_url; + } + + public String getMweb_url() { + return mweb_url; + } + + public void setMweb_url(String mweb_url) { + this.mweb_url = mweb_url; + } + + public String getTime_stamp() { + return time_stamp; + } + + public void setTime_stamp(String time_stamp) { + this.time_stamp = time_stamp; + } + + public String getPackage_() { + return package_; + } + + public void setPackage_(String package_) { + this.package_ = package_; + } + + public String getSign_type() { + return sign_type; + } + + public void setSign_type(String sign_type) { + this.sign_type = sign_type; + } + + public String getPay_sign() { + return pay_sign; + } + + public void setPay_sign(String pay_sign) { + this.pay_sign = pay_sign; + } + + @Override + public String toString() { + return "PrepayResult{" + + "return_code='" + return_code + '\'' + + ", return_msg='" + return_msg + '\'' + + ", appid='" + appid + '\'' + + ", mch_id='" + mch_id + '\'' + + ", nonce_str='" + nonce_str + '\'' + + ", sign='" + sign + '\'' + + ", result_code='" + result_code + '\'' + + ", err_code='" + err_code + '\'' + + ", err_code_des='" + err_code_des + '\'' + + ", trade_type='" + trade_type + '\'' + + ", prepay_id='" + prepay_id + '\'' + + ", code_url='" + code_url + '\'' + + ", mweb_url='" + mweb_url + '\'' + + ", time_stamp='" + time_stamp + '\'' + + ", package_='" + package_ + '\'' + + ", sign_type='" + sign_type + '\'' + + ", pay_sign='" + pay_sign + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/RequestParam.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/RequestParam.java new file mode 100644 index 0000000..80a6d05 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/RequestParam.java @@ -0,0 +1,147 @@ +package com.ruoyi.util.bean; + + +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; + +/** + * 发送短信请求变量实体类 + * + * @author 魔金商城 on 2017/9/7. + */ +public class RequestParam extends SendSmsRequest { + /** + * 短信接收号码 + * (支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式) + * 样例取值:15000000000 + * 是否必填:是 + */ + private String phoneNumbers; + /** + * 短信签名 + * 样例取值:云通信 + * 是否必填:是 + */ + private String signName; + /** + * 短信模板ID + * 样例取值:SMS_0000 + * 是否必填:是 + */ + private String templateCode; + /** + * 短信模板变量 + * (友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\r\n,否则会导致JSON在服务端解析失败) + * 样例取值:{“code”:”1234”,”product”:”ytx”} + * 是否必填:否 + */ + private String templateParam; + /** + * 上行短信扩展码,无特殊需要此字段的用户请忽略此字段 + * 样例取值:90999 + * 是否必填:否 + */ + private String smsUpExtendCode; + /** + * 外部流水扩展字段 + * 样例取值:abcdefgh + * 是否必填:否 + */ + private String outId; + /** + * 短信接口URL + */ + private String interfaceUrl; + /** + * accessKeyId + */ + private String accessKeyId; + /** + * accessKeySecret + */ + private String accessKeySecret; + + /** + * 参数 + */ + private String SmsParamString; + + public String getPhoneNumbers() { + return phoneNumbers; + } + + public void setPhoneNumbers(String phoneNumbers) { + this.phoneNumbers = phoneNumbers; + } + + public String getSignName() { + return signName; + } + + public void setSignName(String signName) { + this.signName = signName; + } + + public String getTemplateCode() { + return templateCode; + } + + public void setTemplateCode(String templateCode) { + this.templateCode = templateCode; + } + + public String getTemplateParam() { + return templateParam; + } + + public void setTemplateParam(String templateParam) { + this.templateParam = templateParam; + } + + public String getSmsUpExtendCode() { + return smsUpExtendCode; + } + + public void setSmsUpExtendCode(String smsUpExtendCode) { + this.smsUpExtendCode = smsUpExtendCode; + } + + public String getOutId() { + return outId; + } + + public void setOutId(String outId) { + this.outId = outId; + } + + public String getInterfaceUrl() { + return interfaceUrl; + } + + public void setInterfaceUrl(String interfaceUrl) { + this.interfaceUrl = interfaceUrl; + } + + public String getAccessKeyId() { + return accessKeyId; + } + + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; + } + + public String getAccessKeySecret() { + return accessKeySecret; + } + + public void setAccessKeySecret(String accessKeySecret) { + this.accessKeySecret = accessKeySecret; + } + + public String getSmsParamString() { + return SmsParamString; + } + + public void setSmsParamString(String smsParamString) { + SmsParamString = smsParamString; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/SegUserProfile.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/SegUserProfile.java new file mode 100644 index 0000000..f5023c6 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/SegUserProfile.java @@ -0,0 +1,107 @@ +package com.ruoyi.util.bean; + +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.util.StringUtils; + +/** + * 用户信息返回实体类 + */ +public class SegUserProfile { + + /** + * 用户信息对象 + */ + @JSONField(name = "userInfo") + private String userInfo; + + /** + * 不包括敏感信息的原始数据字符串,用于计算签名 + */ + @JSONField(name = "rawData") + private String rawData; + + /** + * 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息 + */ + @JSONField(name = "signature") + private String signature; + + /** + * 包括敏感数据在内的完整用户信息的加密数据 + */ + @JSONField(name = "encryptedData") + private String encryptedData; + + /** + * 加密算法的初始向量 + */ + @JSONField(name = "iv") + private String iv; + + /** + * 敏感数据对应的云 ID + */ + @JSONField(name = "cloudID") + private String cloudID; + + public String getUserInfo() { + return userInfo; + } + + public void setUserInfo(String userInfo) { + this.userInfo = userInfo; + } + + public String getRawData() { + return rawData; + } + + public void setRawData(String rawData) { + this.rawData = rawData; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + public String getEncryptedData() { + return encryptedData; + } + + public void setEncryptedData(String encryptedData) { + this.encryptedData = encryptedData; + } + + public String getIv() { + return iv; + } + + public void setIv(String iv) { + this.iv = iv; + } + + public String getCloudID() { + return cloudID; + } + + public void setCloudID(String cloudID) { + this.cloudID = cloudID; + } + + @Override + public String toString() { + return "SegUserProfile{" + + "userInfo='" + userInfo + '\'' + + ", rawData='" + rawData + '\'' + + ", signature='" + signature + '\'' + + ", encryptedData='" + encryptedData + '\'' + + ", iv='" + iv + '\'' + + ", cloudID='" + cloudID + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UnionPaySetting.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UnionPaySetting.java new file mode 100644 index 0000000..6bb45a5 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UnionPaySetting.java @@ -0,0 +1,44 @@ +package com.ruoyi.util.bean; + + +/** + * 银联支付设置实体 + */ +public class UnionPaySetting { + /** + * 商户号 + */ + private String merchantNum; + /** + * 前台回调地址 + */ + private String beforeCallbackUrl; + /** + * 后台回调地址 + */ + private String backCallbackUrl; + + public String getMerchantNum() { + return merchantNum; + } + + public void setMerchantNum(String merchantNum) { + this.merchantNum = merchantNum; + } + + public String getBeforeCallbackUrl() { + return beforeCallbackUrl; + } + + public void setBeforeCallbackUrl(String beforeCallbackUrl) { + this.beforeCallbackUrl = beforeCallbackUrl; + } + + public String getBackCallbackUrl() { + return backCallbackUrl; + } + + public void setBackCallbackUrl(String backCallbackUrl) { + this.backCallbackUrl = backCallbackUrl; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UserConstants.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UserConstants.java new file mode 100644 index 0000000..0e038ce --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UserConstants.java @@ -0,0 +1,89 @@ +package com.ruoyi.util.bean; + +/** + * 用户常量信息 + * + * @author shenzhuan + */ +public class UserConstants { + /** + * 平台内系统用户的唯一标志 + */ + public static final String SYS_USER = "SYS_USER"; + + /** + * 正常状态 + */ + public static final String NORMAL = "0"; + + /** + * 异常状态 + */ + public static final String EXCEPTION = "1"; + + /** + * 用户封禁状态 + */ + public static final String USER_DISABLE = "1"; + + /** + * 角色封禁状态 + */ + public static final String ROLE_DISABLE = "1"; + + /** + * 部门正常状态 + */ + public static final String DEPT_NORMAL = "0"; + + /** + * 部门停用状态 + */ + public static final String DEPT_DISABLE = "1"; + + /** + * 字典正常状态 + */ + public static final String DICT_NORMAL = "0"; + + /** + * 是否为系统默认(是) + */ + public static final String YES = "Y"; + + /** + * 是否菜单外链(是) + */ + public static final String YES_FRAME = "0"; + + /** + * 是否菜单外链(否) + */ + public static final String NO_FRAME = "1"; + + /** + * 菜单类型(目录) + */ + public static final String TYPE_DIR = "M"; + + /** + * 菜单类型(菜单) + */ + public static final String TYPE_MENU = "C"; + + /** + * 菜单类型(按钮) + */ + public static final String TYPE_BUTTON = "F"; + + /** + * Layout组件标识 + */ + public final static String LAYOUT = "Layout"; + + /** + * 校验返回结果码 + */ + public final static String UNIQUE = "0"; + public final static String NOT_UNIQUE = "1"; +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UserInfoProfile.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UserInfoProfile.java new file mode 100644 index 0000000..7a8531a --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UserInfoProfile.java @@ -0,0 +1,120 @@ +package com.ruoyi.util.bean; + +import com.alibaba.fastjson.annotation.JSONField; + +/** + * 用户信息返回实体类 + */ +public class UserInfoProfile { + + /** + * 用户昵称 + */ + @JSONField(name = "nickName") + private String nickName; + + /** + * 用户头像图片的 URL + */ + @JSONField(name = "avatarUrl") + private String avatarUrl; + + /** + * 用户性别 + */ + @JSONField(name = "gender") + private String gender; + + /** + * 用户所在国家 + */ + @JSONField(name = "country") + private String country; + + /** + * 省份 + */ + @JSONField(name = "province") + private String province; + + /** + * 城市 + */ + @JSONField(name = "city") + private String city; + + /** + * 语言 + */ + @JSONField(name = "language") + private String language; + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getAvatarUrl() { + return avatarUrl; + } + + public void setAvatarUrl(String avatarUrl) { + this.avatarUrl = avatarUrl; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + @Override + public String toString() { + return "UserInfoProfile{" + + "nickName='" + nickName + '\'' + + ", avatarUrl='" + avatarUrl + '\'' + + ", gender='" + gender + '\'' + + ", country='" + country + '\'' + + ", province='" + province + '\'' + + ", city='" + city + '\'' + + ", language='" + language + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UserInfoResult.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UserInfoResult.java new file mode 100644 index 0000000..9c7e4e7 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/UserInfoResult.java @@ -0,0 +1,179 @@ +package com.ruoyi.util.bean; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.util.StringUtils; + +/** + * 用户信息返回实体类 + */ +public class UserInfoResult { + + /** + * 用户唯一标志 + */ + @JSONField(name = "openid") + private String openid; + + /** + * 昵称 + */ + @JSONField(name = "nickname") + private String nickname; + + /** + * 性别 + */ + @JSONField(name = "sex") + private String sex; + + /** + * 省份 + */ + @JSONField(name = "province") + private String province; + + /** + * 城市 + */ + @JSONField(name = "city") + private String city; + + /** + * 国家 + */ + @JSONField(name = "country") + private String country; + + /** + * + */ + @JSONField(name = "headimgurl") + private String headimgurl; + + /** + * 联合登录id 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。 + */ + @JSONField(name = "unionid") + private String unionid; + + /** + * 错误码(出错时返回) + */ + @JSONField(name = "errcode") + private String errcode; + + /** + * 错误信息(出错时返回) + */ + @JSONField(name = "errmsg") + private String errmsg; + + /** + * 判断是否失败 + */ + @JsonIgnore + public boolean isError() { + return !StringUtils.isEmpty(this.errcode); + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getHeadimgurl() { + return headimgurl; + } + + public void setHeadimgurl(String headimgurl) { + this.headimgurl = headimgurl; + } + + public String getUnionid() { + return unionid; + } + + public void setUnionid(String unionid) { + this.unionid = unionid; + } + + public String getErrcode() { + return errcode; + } + + public void setErrcode(String errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + /** + * 转换为字符串 + */ + @Override + public String toString() { + return "UserInfoResult{" + + "openid='" + openid + '\'' + + ", nickname='" + nickname + '\'' + + ", sex='" + sex + '\'' + + ", province='" + province + '\'' + + ", city='" + city + '\'' + + ", country='" + country + '\'' + + ", headimgurl='" + headimgurl + '\'' + + ", unionid='" + unionid + '\'' + + ", errcode='" + errcode + '\'' + + ", errmsg='" + errmsg + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WeChatAppletCodeRequest.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WeChatAppletCodeRequest.java new file mode 100644 index 0000000..593b555 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WeChatAppletCodeRequest.java @@ -0,0 +1,104 @@ +package com.ruoyi.util.bean; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 生成微信小程序码请求实体类 + * + * @author 魔金商城 created on 2020/4/14 + */ +@ApiModel(description = "生成微信小程序码请求实体") +public class WeChatAppletCodeRequest { + + /** + * 参数,最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式) + */ + @ApiModelProperty(value = "参数") + @JSONField(name = "scene") + private String scene; + + /** + * 路径,必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面 + */ + @ApiModelProperty(value = "路径") + @JSONField(name = "page") + private String page; + + /** + * 二维码的宽度,单位 px,最小 280px,最大 1280px,默认 430 + */ + @ApiModelProperty(value = "二维码的宽度") + @JSONField(name = "width") + private int width; + + /** + * 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调,默认 false + */ + @ApiModelProperty(value = "是否自动配置线条颜色") + @JSONField(name = "auto_color") + private boolean auto_color; + + /** + * 颜色实体,auto_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"} 十进制表示 + */ + @ApiModelProperty(value = "颜色实体") + @JSONField(name = "line_color") + private LineColor line_color; + + /** + * 是否需要透明底色,为 true 时,生成透明底色的小程序,默认 false + */ + @ApiModelProperty(value = "是否需要透明底色") + @JSONField(name = "is_hyaline") + private boolean is_hyaline; + + public String getScene() { + return scene; + } + + public void setScene(String scene) { + this.scene = scene; + } + + public String getPage() { + return page; + } + + public void setPage(String page) { + this.page = page; + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public boolean isAuto_color() { + return auto_color; + } + + public void setAuto_color(boolean auto_color) { + this.auto_color = auto_color; + } + + public LineColor getLine_color() { + return line_color; + } + + public void setLine_color(LineColor line_color) { + this.line_color = line_color; + } + + public boolean isIs_hyaline() { + return is_hyaline; + } + + public void setIs_hyaline(boolean is_hyaline) { + this.is_hyaline = is_hyaline; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatApletPrepayResult.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatApletPrepayResult.java new file mode 100644 index 0000000..b443ae3 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatApletPrepayResult.java @@ -0,0 +1,121 @@ +package com.ruoyi.util.bean; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * 微信公众号,小程序支付返回实体类 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "xml") +@ApiModel(description = "微信公众号,小程序支付返回实体类") +public class WechatApletPrepayResult { + + /** + * 返回状态码 + */ + @XmlElement(name = "appId") + @ApiModelProperty(value = "appId") + private String appId; + + /** + * 随机字符串 + */ + @XmlElement(name = "nonceStr") + @ApiModelProperty(value = "随机字符串") + private String nonceStr; + + /** + * 订单详情扩展字符串(公众号支付时返回) + */ + @XmlElement(name = "package_") + @ApiModelProperty(value = "订单详情扩展字符串(公众号支付时返回)") + private String package_; + + /** + * 签名方式 + */ + @XmlElement(name = "signType") + @ApiModelProperty(value = "签名方式(公众号支付时返回)") + private String signType; + + /** + * 时间戳 + */ + @XmlElement(name = "timeStamp") + @ApiModelProperty(value = "时间戳(公众号支付时返回)") + private String timeStamp; + + /** + * 签名 + */ + @XmlElement(name = "paySign") + @ApiModelProperty(value = "签名(公众号支付时返回)") + private String paySign; + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getNonceStr() { + return nonceStr; + } + + public void setNonceStr(String nonceStr) { + this.nonceStr = nonceStr; + } + + public String getPackage_() { + return package_; + } + + public void setPackage_(String package_) { + this.package_ = package_; + } + + public String getSignType() { + return signType; + } + + public void setSignType(String signType) { + this.signType = signType; + } + + public String getTimeStamp() { + return timeStamp; + } + + public void setTimeStamp(String timeStamp) { + this.timeStamp = timeStamp; + } + + public String getPaySign() { + return paySign; + } + + public void setPaySign(String paySign) { + this.paySign = paySign; + } + + @Override + public String toString() { + return "WechatApletPrepayResult{" + + "appId='" + appId + '\'' + + ", nonceStr='" + nonceStr + '\'' + + ", package_='" + package_ + '\'' + + ", signType='" + signType + '\'' + + ", timeStamp='" + timeStamp + '\'' + + ", paySign='" + paySign + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatNotifyResult.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatNotifyResult.java new file mode 100644 index 0000000..44f7197 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatNotifyResult.java @@ -0,0 +1,225 @@ +package com.ruoyi.util.bean; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * 统一下单接口返回实体类 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "xml") +public class WechatNotifyResult { + + /** + * 返回状态码 + */ + @XmlElement(name = "return_code") + private String return_code; + + /** + * 返回信息 + */ + @XmlElement(name = "return_msg") + private String return_msg; + + /** + * 公众账号ID + */ + @XmlElement(name = "appid") + private String appid; + + /** + * 商户号 + */ + @XmlElement(name = "mch_id") + private String mch_id; + + /** + * 随机字符串 + */ + @XmlElement(name = "nonce_str") + private String nonce_str; + + /** + * 签名 + */ + @XmlElement(name = "sign") + private String sign; + + /** + * 业务结果 + */ + @XmlElement(name = "result_code") + private String result_code; + + /** + * 错误代码 + */ + @XmlElement(name = "err_code") + private String err_code; + + /** + * 错误代码描述 + */ + @XmlElement(name = "err_code_des") + private String err_code_des; + + /** + * 交易类型 + */ + @XmlElement(name = "trade_type") + private String trade_type; + + /** + * 附加参数(交易类型) + */ + @XmlElement(name = "attach") + private int attach; + + /** + * 订单号 + */ + @XmlElement(name = "out_trade_no") + private String out_trade_no; + + /** + * 微信交易流水号 + */ + @XmlElement(name = "transaction_id") + private String transaction_id; + + /** + * 判断是否失败 + */ + @JsonIgnore + public boolean isError() { + return "FAIL".equals(this.return_code); + } + + public String getReturn_code() { + return return_code; + } + + public void setReturn_code(String return_code) { + this.return_code = return_code; + } + + public String getReturn_msg() { + return return_msg; + } + + public void setReturn_msg(String return_msg) { + this.return_msg = return_msg; + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public String getMch_id() { + return mch_id; + } + + public void setMch_id(String mch_id) { + this.mch_id = mch_id; + } + + public String getNonce_str() { + return nonce_str; + } + + public void setNonce_str(String nonce_str) { + this.nonce_str = nonce_str; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getResult_code() { + return result_code; + } + + public void setResult_code(String result_code) { + this.result_code = result_code; + } + + public String getErr_code() { + return err_code; + } + + public void setErr_code(String err_code) { + this.err_code = err_code; + } + + public String getErr_code_des() { + return err_code_des; + } + + public void setErr_code_des(String err_code_des) { + this.err_code_des = err_code_des; + } + + public String getTrade_type() { + return trade_type; + } + + public void setTrade_type(String trade_type) { + this.trade_type = trade_type; + } + + public int getAttach() { + return attach; + } + + public void setAttach(int attach) { + this.attach = attach; + } + + public String getOut_trade_no() { + return out_trade_no; + } + + public void setOut_trade_no(String out_trade_no) { + this.out_trade_no = out_trade_no; + } + + public String getTransaction_id() { + return transaction_id; + } + + public void setTransaction_id(String transaction_id) { + this.transaction_id = transaction_id; + } + + @Override + public String toString() { + return "WechatNotifyResult{" + + "return_code='" + return_code + '\'' + + ", return_msg='" + return_msg + '\'' + + ", appid='" + appid + '\'' + + ", mch_id='" + mch_id + '\'' + + ", nonce_str='" + nonce_str + '\'' + + ", sign='" + sign + '\'' + + ", result_code='" + result_code + '\'' + + ", err_code='" + err_code + '\'' + + ", err_code_des='" + err_code_des + '\'' + + ", trade_type='" + trade_type + '\'' + + ", attach=" + attach + + ", out_trade_no='" + out_trade_no + '\'' + + ", transaction_id='" + transaction_id + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatPayResponse.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatPayResponse.java new file mode 100644 index 0000000..6a14738 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatPayResponse.java @@ -0,0 +1,69 @@ +package com.ruoyi.util.bean; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.math.BigDecimal; + +/** + * 微信支付返回实体(订单支付) + */ +@ApiModel(description = "微信支付返回实体") +public class WechatPayResponse { + + /** + * 订单code + */ + @ApiModelProperty(value = "订单code") + private String orderCode; + + /** + * 订单总金额 + */ + @ApiModelProperty(value = "订单总金额") + private BigDecimal orderMoney; + + /** + * 扫码支付url + */ + @ApiModelProperty(value = "扫码支付url") + private String codeUrl; + + /** + * mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。 + */ + @ApiModelProperty(value = "mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。") + private String mwebUrl; + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public BigDecimal getOrderMoney() { + return orderMoney; + } + + public void setOrderMoney(BigDecimal orderMoney) { + this.orderMoney = orderMoney; + } + + public String getCodeUrl() { + return codeUrl; + } + + public void setCodeUrl(String codeUrl) { + this.codeUrl = codeUrl; + } + + public String getMwebUrl() { + return mwebUrl; + } + + public void setMwebUrl(String mwebUrl) { + this.mwebUrl = mwebUrl; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatPayResponseForRecharge.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatPayResponseForRecharge.java new file mode 100644 index 0000000..89a892d --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WechatPayResponseForRecharge.java @@ -0,0 +1,62 @@ +package com.ruoyi.util.bean; + + +import java.math.BigDecimal; + +/** + * 微信支付返回实体(充值) + */ +public class WechatPayResponseForRecharge { + + /** + * 订单code + */ + private String transCode; + + /** + * 订单总金额 + */ + private BigDecimal money; + + /** + * 扫码支付url + */ + private String codeUrl; + + /** + * mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。 + */ + private String mwebUrl; + + public String getTransCode() { + return transCode; + } + + public void setTransCode(String transCode) { + this.transCode = transCode; + } + + public BigDecimal getMoney() { + return money; + } + + public void setMoney(BigDecimal money) { + this.money = money; + } + + public String getCodeUrl() { + return codeUrl; + } + + public void setCodeUrl(String codeUrl) { + this.codeUrl = codeUrl; + } + + public String getMwebUrl() { + return mwebUrl; + } + + public void setMwebUrl(String mwebUrl) { + this.mwebUrl = mwebUrl; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WithdrawRequest.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WithdrawRequest.java new file mode 100644 index 0000000..5443edd --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WithdrawRequest.java @@ -0,0 +1,73 @@ +package com.ruoyi.util.bean; + + +import java.math.BigDecimal; + +/** + * Created by 魔金商城 on 18/2/7. + * 提现请求实体 + */ +public class WithdrawRequest { + + /** + * 交流流水号 + */ + private String tradeNo; + + /** + * 支付包账户 + */ + private String account; + + /** + * 支付包实名认证姓名 + */ + private String name; + + /** + * 提现金额 + */ + private BigDecimal money; + + public String getTradeNo() { + return tradeNo; + } + + public void setTradeNo(String tradeNo) { + this.tradeNo = tradeNo; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public BigDecimal getMoney() { + return money; + } + + public void setMoney(BigDecimal money) { + this.money = money; + } + + @Override + public String toString() { + return "WithdrawRequest{" + + "tradeNo='" + tradeNo + '\'' + + ", account='" + account + '\'' + + ", name='" + name + '\'' + + ", money=" + money + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WithdrawResponse.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WithdrawResponse.java new file mode 100644 index 0000000..998b02f --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WithdrawResponse.java @@ -0,0 +1,77 @@ +package com.ruoyi.util.bean; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * Created by 魔金商城 on 18/02/07. + * 提现返回实体 + */ +@ApiModel(description = "提现返回实体") +public class WithdrawResponse { + + /** + * 返回code + */ + @ApiModelProperty(value = "返回code") + private String code; + /** + * 业务code + */ + @ApiModelProperty(value = "业务code") + private String subCode; + + private WithdrawResponse() { + + } + + /** + * 构造提现返回实体 + * + * @param code 返回code + * @param subCode 业务返回code + * @return 返回提现返回实体 + */ + public static WithdrawResponse build(String code, String subCode) { + WithdrawResponse withdrawResponse = new WithdrawResponse(); + withdrawResponse.code = code; + withdrawResponse.subCode = subCode; + return withdrawResponse; + } + + /** + * 构造系统异常实体 + * + * @return 返回提现相应实体 + */ + public static WithdrawResponse buildSystemError() { + WithdrawResponse withdrawResponse = new WithdrawResponse(); + withdrawResponse.code = "-10001"; + return withdrawResponse; + } + + /** + * 是否提现成功 + * + * @return 成功返回true + */ + public boolean isSuccess() { + return "10000".equals(this.code); + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getSubCode() { + return subCode; + } + + public void setSubCode(String subCode) { + this.subCode = subCode; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WxTransferResult.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WxTransferResult.java new file mode 100644 index 0000000..b042b07 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/bean/WxTransferResult.java @@ -0,0 +1,352 @@ +package com.ruoyi.util.bean; + +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * 统一下单接口返回实体类 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "xml") +@ApiModel(description = "统一下单接口返回实体类") +public class WxTransferResult { + + /** + * 返回状态码 + */ + @XmlElement(name = "return_code") + @ApiModelProperty(value = "返回状态码") + @JSONField(name = "return_code") + private String return_code; + + /** + * 返回信息 + */ + @XmlElement(name = "return_msg") + @ApiModelProperty(value = "返回信息") + @JSONField(name = "return_msg") + private String return_msg; + + /** + * 公众账号ID + */ + @XmlElement(name = "mch_appid") + @ApiModelProperty(value = "商户appid") + @JSONField(name = "mch_appid") + private String mch_appid; + + /** + * 商户号 + */ + @XmlElement(name = "mchid") + @ApiModelProperty(value = "商户号") + @JSONField(name = "mchid") + private String mchid; + + /** + * 随机字符串 + */ + @XmlElement(name = "nonce_str") + @ApiModelProperty(value = "随机字符串") + @JSONField(name = "nonce_str") + private String nonce_str; + + /** + * 签名 + */ + @XmlElement(name = "sign") + @ApiModelProperty(value = "签名") + private String sign; + + /** + * 业务结果 + */ + @XmlElement(name = "result_code") + @ApiModelProperty(value = "业务结果") + @JSONField(name = "result_code") + private String result_code; + + /** + * 错误代码 + */ + @XmlElement(name = "err_code") + @ApiModelProperty(value = "错误代码") + @JSONField(name = "err_code") + private String err_code; + + /** + * 错误代码描述 + */ + @XmlElement(name = "err_code_des") + @ApiModelProperty(value = "错误代码描述") + @JSONField(name = "err_code_des") + private String err_code_des; + + /** + * 商户订单号 + */ + @XmlElement(name = "partner_trade_no") + @ApiModelProperty(value = "商户订单号") + @JSONField(name = "partner_trade_no") + private String partner_trade_no; + + /** + * 微信付款单号 + */ + @XmlElement(name = "payment_no") + @ApiModelProperty(value = "微信付款单号") + @JSONField(name = "payment_no") + private String payment_no; + + /** + * 付款成功时间 + */ + @XmlElement(name = "payment_time") + @ApiModelProperty(value = "付款成功时间") + @JSONField(name = "payment_time") + private String payment_time; + + /** + * 预支付交易会话标识 + */ + @XmlElement(name = "prepay_id") + @ApiModelProperty(value = "预支付交易会话标识") + @JSONField(name = "prepay_id") + private String prepay_id; + + /** + * 二维码链接 + */ + @XmlElement(name = "code_url") + @ApiModelProperty(value = "二维码链接") + private String code_url; + + /** + * H5支付链接 + */ + @XmlElement(name = "mweb_url") + @ApiModelProperty(value = "H5支付链接") + private String mweb_url; + + /** + * 时间戳(公众号支付时返回) + */ + @ApiModelProperty(value = "时间戳(公众号支付时返回)") + private String time_stamp; + + /** + * 订单详情扩展字符串(公众号支付时返回) + */ + @ApiModelProperty(value = "订单详情扩展字符串(公众号支付时返回)") + private String package_; + /** + * 签名方式(公众号支付时返回) + */ + @ApiModelProperty(value = " 签名方式(公众号支付时返回)") + private String sign_type; + /** + * 签名(公众号支付时返回) + */ + @ApiModelProperty(value = "签名(公众号支付时返回)") + private String pay_sign; + + /** + * 生成订单详情扩展字符串 + */ + @JsonIgnore + public void setPackage() { + this.package_ = "prepay_id=" + prepay_id; + } + + /** + * 判断是否失败 + */ + @JsonIgnore + public boolean isError() { + return "FAIL".equals(this.return_code); + } + + public String getReturn_code() { + return return_code; + } + + public void setReturn_code(String return_code) { + this.return_code = return_code; + } + + public String getReturn_msg() { + return return_msg; + } + + public void setReturn_msg(String return_msg) { + this.return_msg = return_msg; + } + + public String getMch_appid() { + return mch_appid; + } + + public void setMch_appid(String mch_appid) { + this.mch_appid = mch_appid; + } + + public String getMchid() { + return mchid; + } + + public void setMchid(String mchid) { + this.mchid = mchid; + } + + public String getNonce_str() { + return nonce_str; + } + + public void setNonce_str(String nonce_str) { + this.nonce_str = nonce_str; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getResult_code() { + return result_code; + } + + public void setResult_code(String result_code) { + this.result_code = result_code; + } + + public String getErr_code() { + return err_code; + } + + public void setErr_code(String err_code) { + this.err_code = err_code; + } + + public String getErr_code_des() { + return err_code_des; + } + + public void setErr_code_des(String err_code_des) { + this.err_code_des = err_code_des; + } + + public String getPartner_trade_no() { + return partner_trade_no; + } + + public void setPartner_trade_no(String partner_trade_no) { + this.partner_trade_no = partner_trade_no; + } + + public String getPayment_no() { + return payment_no; + } + + public void setPayment_no(String payment_no) { + this.payment_no = payment_no; + } + + public String getPayment_time() { + return payment_time; + } + + public void setPayment_time(String payment_time) { + this.payment_time = payment_time; + } + + public String getPrepay_id() { + return prepay_id; + } + + public void setPrepay_id(String prepay_id) { + this.prepay_id = prepay_id; + } + + public String getCode_url() { + return code_url; + } + + public void setCode_url(String code_url) { + this.code_url = code_url; + } + + public String getMweb_url() { + return mweb_url; + } + + public void setMweb_url(String mweb_url) { + this.mweb_url = mweb_url; + } + + public String getTime_stamp() { + return time_stamp; + } + + public void setTime_stamp(String time_stamp) { + this.time_stamp = time_stamp; + } + + public String getPackage_() { + return package_; + } + + public void setPackage_(String package_) { + this.package_ = package_; + } + + public String getSign_type() { + return sign_type; + } + + public void setSign_type(String sign_type) { + this.sign_type = sign_type; + } + + public String getPay_sign() { + return pay_sign; + } + + public void setPay_sign(String pay_sign) { + this.pay_sign = pay_sign; + } + + @Override + public String toString() { + return "WxTransferResult{" + + "return_code='" + return_code + '\'' + + ", return_msg='" + return_msg + '\'' + + ", mch_appid='" + mch_appid + '\'' + + ", mchid='" + mchid + '\'' + + ", nonce_str='" + nonce_str + '\'' + + ", sign='" + sign + '\'' + + ", result_code='" + result_code + '\'' + + ", err_code='" + err_code + '\'' + + ", err_code_des='" + err_code_des + '\'' + + ", partner_trade_no='" + partner_trade_no + '\'' + + ", payment_no='" + payment_no + '\'' + + ", payment_time='" + payment_time + '\'' + + ", prepay_id='" + prepay_id + '\'' + + ", code_url='" + code_url + '\'' + + ", mweb_url='" + mweb_url + '\'' + + ", time_stamp='" + time_stamp + '\'' + + ", package_='" + package_ + '\'' + + ", sign_type='" + sign_type + '\'' + + ", pay_sign='" + pay_sign + '\'' + + '}'; + } +} diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/md5/MD5.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/md5/MD5.java new file mode 100644 index 0000000..af73692 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/md5/MD5.java @@ -0,0 +1,59 @@ +package com.ruoyi.util.md5; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class MD5 { + + private MD5() { + } + + public final static String getMessageDigest(byte[] buffer) { + //首先初始化一个字符数组,用来存放每个16进制字符 + char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + try { + // 拿到一个MD5转换器(如果想要SHA1参数换成"SHA1") + MessageDigest mdTemp = MessageDigest.getInstance("MD5"); + // buffer 是输入字符串转换得到的字节数组 + mdTemp.update(buffer); + // 转换并返回结果,也是字节数组,包含16个元素 + byte[] md = mdTemp.digest(); + + int j = md.length; + // new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)) + char str[] = new char[j * 2]; + int k = 0; + //遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去 + for (int i = 0; i < j; i++) { + byte byte0 = md[i]; + str[k++] = hexDigits[byte0 >>> 4 & 0xf]; + str[k++] = hexDigits[byte0 & 0xf]; + } + //字符数组转换成字符串返回 + return new String(str); + } catch (Exception e) { + return null; + } + } + + public static String hex(byte[] array) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < array.length; ++i) { + sb.append(Integer.toHexString((array[i] + & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString(); + } + + public static String md5Hex(String message) { + try { + MessageDigest md = + MessageDigest.getInstance("MD5"); + return hex(md.digest(message.getBytes("CP1252"))); + } catch (NoSuchAlgorithmException e) { + } catch (UnsupportedEncodingException e) { + } + return null; + } +} \ No newline at end of file diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/md5/MD5Utils.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/md5/MD5Utils.java new file mode 100644 index 0000000..dabcfa4 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/md5/MD5Utils.java @@ -0,0 +1,121 @@ +package com.ruoyi.util.md5; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * md5工具类 + */ +public class MD5Utils { + + private static final MD5Utils INSTANCE = new MD5Utils(); + /** + * 调试日志 + */ + private Logger logger = LoggerFactory.getLogger(MD5Utils.class); + + private MD5Utils() { + + } + + public static MD5Utils getInstance() { + return INSTANCE; + } + + /** + * 判断订单号是否含有中文 + * + * @param waybillCode 订单号 + * @return true 含有中文 false 不含中文 + */ + public boolean isContainChinese(String waybillCode) { + + Pattern p = Pattern.compile("[\u4e00-\u9fa5]"); + Matcher m = p.matcher(waybillCode); + if (m.find()) { + return true; + } + return false; + } + + /** + * 创建md5值 + * + * @param string 待加密的字符串 + * @return 返回加密后的值 + */ + public String createMd5(String string) { + String result = ""; + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(string.getBytes("utf-8")); + byte b[] = md.digest(); + int i; + StringBuilder buf = new StringBuilder(); + for (int offset = 0; offset < b.length; offset++) { + i = b[offset]; + if (i < 0) { + i += 256; + } + if (i < 16) { + buf.append("0"); + } + + buf.append(Integer.toHexString(i)); + } + return buf.toString(); + } catch (NoSuchAlgorithmException e) { + logger.error("createMd5 fail...", e); + } catch (UnsupportedEncodingException e) { + logger.error("createMd5 fail...", e); + } + return result; + } + + /** + * 生成md5值 + * + * @param is 输入流 + * @return 返回md5加密后的字符串 + * @throws IOException + */ + public String createMd5ForImageUpload(InputStream is) throws IOException { + char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + MessageDigest md5 = null; + try { + md5 = MessageDigest.getInstance("MD5"); + byte[] j = new byte[1024]; + while (true) { + int var14 = is.read(j); + if (var14 > 0) { + md5.update(j, 0, var14); + } + if (var14 == -1) { + is.skip(0L); + break; + } + } + } catch (NoSuchAlgorithmException var12) { + throw new RuntimeException(var12.getMessage()); + } finally { + is.close(); + } + byte[] var15 = md5.digest(); + int var16 = var15.length; + char[] finalValue = new char[var16 * 2]; + int k = 0; + for (byte encoded : var15) { + finalValue[k++] = hexDigits[encoded >> 4 & 15]; + finalValue[k++] = hexDigits[encoded & 15]; + } + return new String(finalValue); + } +} \ No newline at end of file diff --git a/ruoyi-segchk/src/main/java/com/ruoyi/util/md5/MessageSourceUtil.java b/ruoyi-segchk/src/main/java/com/ruoyi/util/md5/MessageSourceUtil.java new file mode 100644 index 0000000..86b3dd6 --- /dev/null +++ b/ruoyi-segchk/src/main/java/com/ruoyi/util/md5/MessageSourceUtil.java @@ -0,0 +1,38 @@ +package com.ruoyi.util.md5; + +import com.ruoyi.common.utils.spring.SpringUtils; +import org.springframework.context.MessageSource; +import org.springframework.context.NoSuchMessageException; +import org.springframework.context.i18n.LocaleContextHolder; + + +/** + * 消息资源根据类 + * Created by 魔金商城 on 17/7/10. + */ +public final class MessageSourceUtil { + private static MessageSource messageSource; + + static { + init((MessageSource) SpringUtils.getBean(MessageSource.class)); + } + + public static void init(MessageSource messageSource) { + MessageSourceUtil.messageSource = messageSource; + } + + + /** + * 根据code 获得国际化文件中的值 + * + * @param code key + * @return 返回值 + */ + public static String getMessage(String code) { + try { + return messageSource.getMessage(code, null, LocaleContextHolder.getLocale()); + } catch (NoSuchMessageException e) { + return null; + } + } +} diff --git a/ruoyi-segchk/src/main/resources/mapper/member/WeChatCustomerLinkMapper.xml b/ruoyi-segchk/src/main/resources/mapper/member/WeChatCustomerLinkMapper.xml new file mode 100644 index 0000000..2ac0ebb --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/member/WeChatCustomerLinkMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + INSERT into ls_wx_customer_link + + + customer_id, + + + wx_union_id, + + + wx_open_id, + + + wx_applet_open_id, + + + + + #{customerId}, + + + #{unionId}, + + + #{openId}, + + + #{appletOpenId}, + + + + + DELETE from ls_wx_customer_link where customer_id=#{customerId} + + + + update ls_wx_customer_link + + + + wx_open_id=#{openId}, + + + wx_applet_open_id=#{appletOpenId}, + + + + where id=#{id}; + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkProviderIndexMapper.xml b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkProviderIndexMapper.xml new file mode 100644 index 0000000..568f7ab --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkProviderIndexMapper.xml @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select openid, union_id, wechat_id, provider_id, nick_name, icon_url, phone_no, flag_id, District_id, create_time, del_time, update_time from segchk_provider_mgt + + + + + + + + insert into segchk_provider_mgt + + openid, + union_id, + wechat_id, + nick_name, + icon_url, + phone_no, + flag_id, + District_id, + create_time, + del_time, + update_time, + + + #{openid}, + #{unionId}, + #{wechatId}, + #{nickName}, + #{iconUrl}, + #{phoneNo}, + #{flagId}, + #{districtId}, + #{createTime}, + #{delTime}, + #{updateTime}, + + + + + update segchk_provider_mgt + + openid = #{openid}, + union_id = #{unionId}, + nick_name = #{nickName}, + icon_url = #{iconUrl}, + phone_no = #{phoneNo}, + flag_id = #{flagId}, + District_id = #{districtId}, + create_time = #{createTime}, + del_time = #{delTime}, + update_time = #{updateTime}, + + where provider_id = #{providerId} + + + + delete from segchk_provider_mgt where provider_id = #{providerId} + + + + delete from segchk_provider_mgt where provider_id in + + #{providerId} + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkStoreIndexMapper.xml b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkStoreIndexMapper.xml new file mode 100644 index 0000000..d2f5cbe --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkStoreIndexMapper.xml @@ -0,0 +1,801 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select provider_id, store_id, store_carousel, sort_id from segchk_carouse_mgt + + + insert into segchk_store_account (store_id, account, reward_id, charge_id, mod_time, provider_id) + + select suc.store_id, if(isnull(ssa.account), #{reward}, ssa.account + #{reward}) as account, reward_id, charge_id, now(), provider_id from + (select #{userRecommenders} as store_id + , #{rewardId} as reward_id + , #{chargeId} as charge_id + , #{providerId} as provider_id + ) suc + left join + ( + + select account, store_id from segchk_store_account where store_id = #{userRecommenders} order by account_id desc limit 1 + ) ssa + on ssa.store_id = suc.store_id + + + insert into segchk_comment_acc ( + star_count + , star_level + , store_id + , provider_id + , mod_time + , comment_id) + select + if(isnull(sca.star_count), ssc.cnt, ssc.cnt + sca.star_count) as star_count + , if(isnull(sca.star_level), ssc.star_level, ssc.star_level + sca.star_level) as start_level + , ssc.store_id + , ssc.provider_id + , now() + , ssc.comment_id from + (select provider_id, store_id, comment_id, 1 as cnt, star_level from segchk_service_comment where comment_id = #{commentId}) ssc + left join + (select provider_id, store_id, star_count, star_level from segchk_comment_acc where store_id = (select store_id from segchk_service_comment where comment_id = #{commentId}) order by update_id limit 1) sca + on sca.provider_id = ssc.provider_id and sca.store_id = ssc.store_id + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkUserIndexMapper.xml b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkUserIndexMapper.xml new file mode 100644 index 0000000..f81ab3f --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/segchk/SegchkUserIndexMapper.xml @@ -0,0 +1,858 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into segchk_user_wechat + + provider_id, + user_id, + openid, + union_id, + nick_name, + icon_url, + mod_time, + + + #{providerId}, + #{userId}, + #{openid}, + #{unionId}, + #{nickName}, + #{iconUrl}, + now(), + + on duplicate key update + + provider_id = #{providerId}, + openid = #{openid}, + union_id = #{unionId}, + nick_name = #{nickName}, + icon_url = #{iconUrl}, + mod_time = now(), + + + + insert into segchk_user_account (user_id, account, provider_id, reward_id, charge_id, mod_time) + + select suc.user_id, if(isnull(ssa.account), #{reward}, ssa.account + #{reward}) as account, provider_id, reward_id, charge_id, now() from + (select + #{userRecommenders} as user_id + , #{rewardId} as reward_id + , #{chargeId} as charge_id + , #{providerId} as provider_id + ) suc + left join + ( + + select account, user_id from segchk_user_account where user_id = #{userRecommenders} order by account_id desc limit 1 + ) ssa + on ssa.user_id = suc.user_id + + + + update segchk_store_basic_info + + openid = #{openid}, + union_id = #{unionId}, + nick_name = #{nickName}, + icon_url = #{iconUrl}, + mod_time = now(), + + where store_id = #{userId} and provider_id = #{providerId} + + + + update segchk_provider_mgt + + openid = #{openid}, + union_id = #{unionId}, + wechat_id = #{wechatId}, + nick_name = #{nickName}, + icon_url = #{iconUrl}, + update_time = now(), + + where provider_id = #{providerId} + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/AreaMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/AreaMapper.xml new file mode 100644 index 0000000..cdac3e7 --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/AreaMapper.xml @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into ls_province + + + name, + + + sort, + + + del_flag, + + + create_time, + + + modify_time, + + + del_time, + + + + + #{name}, + + + #{sort}, + + + #{delFlag}, + + + #{createTime}, + + + #{modifyTime}, + + + #{delTime}, + + + + + + + insert into ls_city + + + name, + + + province_id, + + + sort, + + + del_flag, + + + create_time, + + + modify_time, + + + del_time, + + + + + #{name}, + + + #{provinceId}, + + + #{sort}, + + + #{delFlag}, + + + #{createTime}, + + + #{modifyTime}, + + + #{delTime}, + + + + + + + insert into ls_district + + + name, + + + city_id, + + + sort, + + + del_flag, + + + create_time, + + + modify_time, + + + del_time, + + + + + #{name}, + + + #{cityId}, + + + #{sort}, + + + #{delFlag}, + + + #{createTime}, + + + #{modifyTime}, + + + #{delTime}, + + + + + + + + + + + + + + + update ls_province + set del_flag = '1',del_time = now() + where id = #{provinceId} + + + + update ls_city + set del_flag = '1',del_time = now() + where id = #{cityId} + + + + update ls_district + set del_flag = '1',del_time = now() + where id = #{districtId} + + + + + + + + + update ls_province + + + name = #{name}, + + + sort = #{sort}, + + modify_time = now() + + where id = #{id} + + + + update ls_city + + + name = #{name}, + + + sort = #{sort}, + + modify_time = now() + + where id = #{id} + + + update ls_district + + + name = #{name}, + + + sort = #{sort}, + + modify_time = now() + + where id = #{id} + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/BaseInfoSetMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/BaseInfoSetMapper.xml new file mode 100644 index 0000000..49a749b --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/BaseInfoSetMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,phone,logo,site_url,site_name,label_log,admin_logo,captcha_open,site_login,store_login,site_register,store_register,copyright_info,admin_index_logo, + store_open_protocol,register_protocol + ,user_privacy_agreement,vip_service_agreement + ,store_register_protocol,store_spu_audit,member_price_status,crowdfunding_protocol,h5_call_back_domain,pc_call_back_domain + + + + + UPDATE segchk_system_setting SET + phone=#{phone},logo=#{logo},site_url=#{siteUrl},site_name=#{siteName},label_log=#{labelLog},admin_logo=#{adminLogo}, + site_login=#{siteLoginPic},store_login=#{storeLoginPic},site_register=#{siteRegisterPic},store_register=#{storeRegisterPic}, + copyright_info=#{copyrightInfo},admin_index_logo=#{adminIndexLogo},store_open_protocol=#{storeOpenProtocol},register_protocol=#{siteRegisterProtocol} + ,user_privacy_agreement=#{userPrivacyAgreement}, + ,vip_service_agreement=#{vipServiceAgreement}, + store_register_protocol=#{storeRegisterProtocol},crowdfunding_protocol=#{crowdFundingProtocol}, + h5_call_back_domain=#{h5CallBackDomain},pc_call_back_domain=#{pcCallBackDomain} + + + UPDATE segchk_system_setting SET captcha_open = #{captchaOpen} + + + UPDATE segchk_system_setting SET store_spu_audit = #{storeSpuAudit} + + + UPDATE segchk_system_setting SET member_price_status = #{memberPriceStatus} + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/LsCityMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/LsCityMapper.xml new file mode 100644 index 0000000..cc125f1 --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/LsCityMapper.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + select id, name, province_id, sort, del_flag, create_time, modify_time, del_time from ls_city + + + + + + + + insert into ls_city + + name, + province_id, + sort, + del_flag, + create_time, + modify_time, + del_time, + + + #{name}, + #{provinceId}, + #{sort}, + #{delFlag}, + #{createTime}, + #{modifyTime}, + #{delTime}, + + + + + update ls_city + + name = #{name}, + province_id = #{provinceId}, + sort = #{sort}, + del_flag = #{delFlag}, + create_time = #{createTime}, + modify_time = #{modifyTime}, + del_time = #{delTime}, + + where id = #{id} + + + + delete from ls_city where id = #{id} + + + + delete from ls_city where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/LsDistrictMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/LsDistrictMapper.xml new file mode 100644 index 0000000..7543561 --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/LsDistrictMapper.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + select id, name, city_id, sort, del_flag, create_time, modify_time, del_time from ls_district + + + + + + + + insert into ls_district + + name, + city_id, + sort, + del_flag, + create_time, + modify_time, + del_time, + + + #{name}, + #{cityId}, + #{sort}, + #{delFlag}, + #{createTime}, + #{modifyTime}, + #{delTime}, + + + + + update ls_district + + name = #{name}, + city_id = #{cityId}, + sort = #{sort}, + del_flag = #{delFlag}, + create_time = #{createTime}, + modify_time = #{modifyTime}, + del_time = #{delTime}, + + where id = #{id} + + + + delete from ls_district where id = #{id} + + + + delete from ls_district where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/LsEmailSettingMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/LsEmailSettingMapper.xml new file mode 100644 index 0000000..8e8f2fe --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/LsEmailSettingMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + select id, sender_mail, sender_name, smtp_server, smtp_port, username, password from ls_email_setting + + + + + + + + insert into ls_email_setting + + sender_mail, + sender_name, + smtp_server, + smtp_port, + username, + password, + + + #{senderMail}, + #{senderName}, + #{smtpServer}, + #{smtpPort}, + #{username}, + #{password}, + + + + + update ls_email_setting + + sender_mail = #{senderMail}, + sender_name = #{senderName}, + smtp_server = #{smtpServer}, + smtp_port = #{smtpPort}, + username = #{username}, + password = #{password}, + + where id = #{id} + + + + delete from ls_email_setting where id = #{id} + + + + delete from ls_email_setting where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/LsProvinceMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/LsProvinceMapper.xml new file mode 100644 index 0000000..ff7e269 --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/LsProvinceMapper.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + select id, name, sort, del_flag, create_time, modify_time, del_time from ls_province + + + + + + + + insert into ls_province + + name, + sort, + del_flag, + create_time, + modify_time, + del_time, + + + #{name}, + #{sort}, + #{delFlag}, + #{createTime}, + #{modifyTime}, + #{delTime}, + + + + + update ls_province + + name = #{name}, + sort = #{sort}, + del_flag = #{delFlag}, + create_time = #{createTime}, + modify_time = #{modifyTime}, + del_time = #{delTime}, + + where id = #{id} + + + + delete from ls_province where id = #{id} + + + + delete from ls_province where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/LsSmsSettingMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/LsSmsSettingMapper.xml new file mode 100644 index 0000000..de42d01 --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/LsSmsSettingMapper.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + select id, secret, url, sign, template_id, writeoff_template_id, virtual_order_template_id, `key`, audit_template_id, settlement_template_id, withdraw_template_id, status from segchk_sms_setting + + + + + + + + insert into segchk_sms_setting + + secret, + url, + sign, + template_id, + writeoff_template_id, + virtual_order_template_id, + key, + audit_template_id, + settlement_template_id, + withdraw_template_id, + + + #{secret}, + #{url}, + #{sign}, + #{templateId}, + #{writeoffTemplateId}, + #{virtualOrderTemplateId}, + #{key}, + #{auditTemplateId}, + #{settlementTemplateId}, + #{withdrawTemplateId}, + + + + + update segchk_sms_setting + + secret = #{secret}, + url = #{url}, + sign = #{sign}, + template_id = #{templateId}, + writeoff_template_id = #{writeoffTemplateId}, + virtual_order_template_id = #{virtualOrderTemplateId}, + key = #{key}, + audit_template_id = #{auditTemplateId}, + settlement_template_id = #{settlementTemplateId}, + withdraw_template_id = #{withdrawTemplateId}, + + where id = #{id} + + + + delete from segchk_sms_setting where id = #{id} + + + + delete from segchk_sms_setting where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/LsStationLetterMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/LsStationLetterMapper.xml new file mode 100644 index 0000000..17e1e03 --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/LsStationLetterMapper.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + select id, customer_id, title, content, is_read, del_flag, create_time from ls_station_letter + + + insert into ls_station_letter + + (customer_id,title, content, is_read, del_flag,create_time) + values + + ( + #{stationLetter.customerId}, + #{stationLetter.title}, + #{stationLetter.content}, + '0', + '0', + now() + ) + + + + + + + + + UPDATE ls_station_letter SET del_flag = '1' WHERE id = #{id} + + + + UPDATE ls_station_letter SET is_read = '1' WHERE id = #{id} and customer_id = #{customerId} + + + + + + + + + insert into ls_station_letter + + customer_id, + title, + content, + is_read, + del_flag, + create_time, + + + #{customerId}, + #{title}, + #{content}, + #{isRead}, + #{delFlag}, + #{createTime}, + + + + + update ls_station_letter + + customer_id = #{customerId}, + title = #{title}, + content = #{content}, + is_read = #{isRead}, + del_flag = #{delFlag}, + create_time = #{createTime}, + + where id = #{id} + + + + delete from ls_station_letter where id = #{id} + + + + delete from ls_station_letter where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/LsSystemSeoMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/LsSystemSeoMapper.xml new file mode 100644 index 0000000..298201c --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/LsSystemSeoMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + select id, title, key_word, seo_desc, is_open from ls_system_seo + + + + + + + + insert into ls_system_seo + + title, + key_word, + seo_desc, + is_open, + + + #{title}, + #{keyWord}, + #{seoDesc}, + #{isOpen}, + + + + + update ls_system_seo + + title = #{title}, + key_word = #{keyWord}, + seo_desc = #{seoDesc}, + is_open = #{isOpen}, + + where id = #{id} + + + + delete from ls_system_seo where id = #{id} + + + + delete from ls_system_seo where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/LsWxCustomerLinkMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/LsWxCustomerLinkMapper.xml new file mode 100644 index 0000000..30ccebd --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/LsWxCustomerLinkMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + select id, wx_union_id, customer_id, wx_open_id, wx_applet_open_id from ls_wx_customer_link + + + + + + + + insert into ls_wx_customer_link + + wx_union_id, + customer_id, + wx_open_id, + wx_applet_open_id, + + + #{wxUnionId}, + #{customerId}, + #{wxOpenId}, + #{wxAppletOpenId}, + + + + + update ls_wx_customer_link + + wx_union_id = #{wxUnionId}, + customer_id = #{customerId}, + wx_open_id = #{wxOpenId}, + wx_applet_open_id = #{wxAppletOpenId}, + + where id = #{id} + + + + delete from ls_wx_customer_link where id = #{id} + + + + delete from ls_wx_customer_link where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/OssMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/OssMapper.xml new file mode 100644 index 0000000..ae48799 --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/OssMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + id, + access_key_id, + access_key_secret, + bucket_name, + end_point, + style_name, + prefix, + address + + + + + + + update ls_aliyun_oss_setting + + access_key_id = #{accessKeyId}, + access_key_secret = #{accessKeySecret}, + bucket_name = #{bucketName}, + end_point = #{endPoint}, + style_name = #{styleName}, + prefix = #{prefix}, + address = #{address}, + + where id = #{id} + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/SCommunityBuySettingMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/SCommunityBuySettingMapper.xml new file mode 100644 index 0000000..c8029c9 --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/SCommunityBuySettingMapper.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + select id, name, audit, sms_audit_notice, sms_pay_notice, sms_commission_notice from s_community_buy_setting + + + + + + + + insert into s_community_buy_setting + + name, + audit, + sms_audit_notice, + sms_pay_notice, + sms_commission_notice, + + + #{name}, + #{audit}, + #{smsAuditNotice}, + #{smsPayNotice}, + #{smsCommissionNotice}, + + + + + update s_community_buy_setting + + name = #{name}, + audit = #{audit}, + sms_audit_notice = #{smsAuditNotice}, + sms_pay_notice = #{smsPayNotice}, + sms_commission_notice = #{smsCommissionNotice}, + + where id = #{id} + + + + delete from s_community_buy_setting where id = #{id} + + + + delete from s_community_buy_setting where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/mapper/setting/SegchkPaySettingMapper.xml b/ruoyi-segchk/src/main/resources/mapper/setting/SegchkPaySettingMapper.xml new file mode 100644 index 0000000..4cd8ec1 --- /dev/null +++ b/ruoyi-segchk/src/main/resources/mapper/setting/SegchkPaySettingMapper.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + select id, codeType, column_name, column_value, provider_id from segchk_pay_setting + + + + + + + + insert into segchk_pay_setting + + codeType, + column_name, + column_value, + + + #{codetype}, + #{columnName}, + #{columnValue}, + + + + + update segchk_pay_setting + + codeType = #{codetype}, + column_name = #{columnName}, + column_value = #{columnValue}, + + where id = #{id} + + + + delete from segchk_pay_setting where id = #{id} + + + + delete from segchk_pay_setting where id in + + #{id} + + + + + + + + + + + DELETE FROM segchk_pay_setting WHERE codeType=#{codeType} + + + INSERT INTO segchk_pay_setting (codeType,`column_name`,column_value) VALUES + + ( + #{paySet.codeType},#{paySet.columnName},#{paySet.columnValue} + ) + + + \ No newline at end of file diff --git a/ruoyi-segchk/src/main/resources/templates/posters/bg.jpg b/ruoyi-segchk/src/main/resources/templates/posters/bg.jpg new file mode 100644 index 0000000..ad7c1e6 Binary files /dev/null and b/ruoyi-segchk/src/main/resources/templates/posters/bg.jpg differ diff --git a/ruoyi-segchk/src/main/resources/templates/posters/bigtitle.jpg b/ruoyi-segchk/src/main/resources/templates/posters/bigtitle.jpg new file mode 100644 index 0000000..1700fb0 Binary files /dev/null and b/ruoyi-segchk/src/main/resources/templates/posters/bigtitle.jpg differ diff --git a/ruoyi-segchk/src/main/resources/templates/posters/checkret1.png b/ruoyi-segchk/src/main/resources/templates/posters/checkret1.png new file mode 100644 index 0000000..25569f3 Binary files /dev/null and b/ruoyi-segchk/src/main/resources/templates/posters/checkret1.png differ diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml new file mode 100644 index 0000000..aed5d47 --- /dev/null +++ b/ruoyi-system/pom.xml @@ -0,0 +1,30 @@ + + + + ruoyi + com.ruoyi + 3.6.0 + + + + 4.0.0 + + ruoyi-system + + + system系统模块 + + + + + + + com.ruoyi + ruoyi-common + + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/BaseInfoSet.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/BaseInfoSet.java new file mode 100644 index 0000000..8c0dcd5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/BaseInfoSet.java @@ -0,0 +1,354 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.stereotype.Repository; +import org.springframework.util.StringUtils; + +import java.io.Serializable; + +/** + * 基本信息设置实体类 + * + * @author 魔金商城 on 2017/5/17. + */ +@Repository +public class BaseInfoSet implements Serializable { + + /** + * 序列化id + */ + private static final long serialVersionUID = 1L; + /** + * 主键id + */ + private long id; + /** + * 前端地址 + */ + private String siteUrl; + /** + * 网站名称 + */ + private String siteName; + /** + * 网站LOGO(前端搜索页旁边和店铺登陆页) + */ + private String logo; + /** + * pc端,admin端,store端标签图片 + */ + private String labelLog; + /** + * pc端登录背景图片 + */ + private String siteLoginPic; + /** + * pc端注册背景图片 + */ + private String siteRegisterPic; + /** + * 店铺端登录图片 + */ + private String storeLoginPic; + /** + * 店铺端注册图片 + */ + private String storeRegisterPic; + /** + * 后台版权信息(admin和store底部) + */ + private String copyrightInfo; + /** + * 注册协议(pc端) + */ + private String siteRegisterProtocol; + + + + /** 用户隐私协议 */ + private String userPrivacyAgreement; + + /** vip会员服务协议 */ + private String vipServiceAgreement; + /** + * 店铺端注册协议 + */ + private String storeRegisterProtocol; + /** + * 开店协议 + */ + private String storeOpenProtocol; + /** + * 联系电话 + */ + private String phone; + /** + * admin端登录logo + */ + private String adminLogo; + /** + * admin端首页logo + */ + private String adminIndexLogo; + /** + * 是否开启验证码 0 开启 1 不开启 默认0 + */ + private String captchaOpen; + /** + * 店铺商品审核开关 0 需要审核 1 不需要 默认0 + */ + private String storeSpuAudit; + /** + * 会员等级启用状态 0 启用 1 不启用 默认0 + */ + private String memberPriceStatus; + /** + * 众筹协议 + */ + private String crowdFundingProtocol; + /** + * h5域名 + */ + private String h5CallBackDomain; + /** + * 前端地址 + */ + private String pcCallBackDomain; + + public BaseInfoSet() { + } + + /** + * 判断会员价是否启用 + * + * @return 启用返回true, 否则返回false + */ + @JsonIgnore + public boolean isMemberPriceOpen() { + return "0".equals(this.memberPriceStatus); + } + + /** + * 判断店铺商品是否需要审核 + * + * @return 需要返回true 不需要返回false + */ + @JsonIgnore + public boolean isSpuNeedAudit() { + return "0".equals(this.storeSpuAudit); + } + + /** + * 处理图片地址 + */ + public void dealPicUrl() { + if (!StringUtils.isEmpty(labelLog) && labelLog.contains(":")) { + labelLog = labelLog.substring(labelLog.indexOf(":") + 1); + } + } + + /** + * 返回网站地址,末端加 "/" + */ + public String getSiteUrlWithBias() { + if (StringUtils.isEmpty(this.siteUrl)) { + return null; + } + return this.siteUrl.endsWith("/") ? this.siteUrl : this.siteUrl + "/"; + } + + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getSiteUrl() { + return siteUrl; + } + + public void setSiteUrl(String siteUrl) { + this.siteUrl = siteUrl; + } + + public String getSiteName() { + return siteName; + } + + public void setSiteName(String siteName) { + this.siteName = siteName; + } + + public String getLogo() { + return logo; + } + + public void setLogo(String logo) { + this.logo = logo; + } + + public String getLabelLog() { + return labelLog; + } + + public void setLabelLog(String labelLog) { + this.labelLog = labelLog; + } + + public String getSiteLoginPic() { + return siteLoginPic; + } + + public void setSiteLoginPic(String siteLoginPic) { + this.siteLoginPic = siteLoginPic; + } + + public String getSiteRegisterPic() { + return siteRegisterPic; + } + + public void setSiteRegisterPic(String siteRegisterPic) { + this.siteRegisterPic = siteRegisterPic; + } + + public String getStoreLoginPic() { + return storeLoginPic; + } + + public void setStoreLoginPic(String storeLoginPic) { + this.storeLoginPic = storeLoginPic; + } + + public String getStoreRegisterPic() { + return storeRegisterPic; + } + + public void setStoreRegisterPic(String storeRegisterPic) { + this.storeRegisterPic = storeRegisterPic; + } + + public String getCopyrightInfo() { + return copyrightInfo; + } + + public void setCopyrightInfo(String copyrightInfo) { + this.copyrightInfo = copyrightInfo; + } + + public String getSiteRegisterProtocol() { + return siteRegisterProtocol; + } + + public void setSiteRegisterProtocol(String siteRegisterProtocol) { + this.siteRegisterProtocol = siteRegisterProtocol; + } + + public String getStoreRegisterProtocol() { + return storeRegisterProtocol; + } + + public void setStoreRegisterProtocol(String storeRegisterProtocol) { + this.storeRegisterProtocol = storeRegisterProtocol; + } + + public String getStoreOpenProtocol() { + return storeOpenProtocol; + } + + public void setStoreOpenProtocol(String storeOpenProtocol) { + this.storeOpenProtocol = storeOpenProtocol; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getAdminLogo() { + return adminLogo; + } + + public void setAdminLogo(String adminLogo) { + this.adminLogo = adminLogo; + } + + public String getAdminIndexLogo() { + return adminIndexLogo; + } + + public void setAdminIndexLogo(String adminIndexLogo) { + this.adminIndexLogo = adminIndexLogo; + } + + public String getCaptchaOpen() { + return captchaOpen; + } + + public void setCaptchaOpen(String captchaOpen) { + this.captchaOpen = captchaOpen; + } + + public String getStoreSpuAudit() { + return storeSpuAudit; + } + + public void setStoreSpuAudit(String storeSpuAudit) { + this.storeSpuAudit = storeSpuAudit; + } + + public String getMemberPriceStatus() { + return memberPriceStatus; + } + + public void setMemberPriceStatus(String memberPriceStatus) { + this.memberPriceStatus = memberPriceStatus; + } + + public String getCrowdFundingProtocol() { + return crowdFundingProtocol; + } + + public void setCrowdFundingProtocol(String crowdFundingProtocol) { + this.crowdFundingProtocol = crowdFundingProtocol; + } + + public String getH5CallBackDomain() { + return h5CallBackDomain; + } + + public void setH5CallBackDomain(String h5CallBackDomain) { + this.h5CallBackDomain = h5CallBackDomain; + } + + public String getPcCallBackDomain() { + return pcCallBackDomain; + } + + public void setPcCallBackDomain(String pcCallBackDomain) { + this.pcCallBackDomain = pcCallBackDomain; + } + + public String getUserPrivacyAgreement() { + return userPrivacyAgreement; + } + + public void setUserPrivacyAgreement(String userPrivacyAgreement) { + this.userPrivacyAgreement = userPrivacyAgreement; + } + + public String getVipServiceAgreement() { + return vipServiceAgreement; + } + + public void setVipServiceAgreement(String vipServiceAgreement) { + this.vipServiceAgreement = vipServiceAgreement; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkBaseInfoSet.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkBaseInfoSet.java new file mode 100644 index 0000000..27b5ab3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkBaseInfoSet.java @@ -0,0 +1,328 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.stereotype.Repository; +import org.springframework.util.StringUtils; + +import java.io.Serializable; + +/** + * 基本信息设置实体类 + * + * @author 魔金商城 on 2017/5/17. + */ +@Repository +public class SegchkBaseInfoSet implements Serializable { + + /** + * 序列化id + */ + private static final long serialVersionUID = 1L; + /** + * 主键id + */ + private long id; + /** + * 前端地址 + */ + private String siteUrl; + /** + * 网站名称 + */ + private String siteName; + /** + * 网站LOGO(前端搜索页旁边和店铺登陆页) + */ + private String logo; + /** + * pc端,admin端,store端标签图片 + */ + private String labelLog; + /** + * pc端登录背景图片 + */ + private String siteLoginPic; + /** + * pc端注册背景图片 + */ + private String siteRegisterPic; + /** + * 店铺端登录图片 + */ + private String storeLoginPic; + /** + * 店铺端注册图片 + */ + private String storeRegisterPic; + /** + * 后台版权信息(admin和store底部) + */ + private String copyrightInfo; + /** + * 注册协议(pc端) + */ + private String siteRegisterProtocol; + /** + * 店铺端注册协议 + */ + private String storeRegisterProtocol; + /** + * 开店协议 + */ + private String storeOpenProtocol; + /** + * 联系电话 + */ + private String phone; + /** + * admin端登录logo + */ + private String adminLogo; + /** + * admin端首页logo + */ + private String adminIndexLogo; + /** + * 是否开启验证码 0 开启 1 不开启 默认0 + */ + private String captchaOpen; + /** + * 店铺商品审核开关 0 需要审核 1 不需要 默认0 + */ + private String storeSpuAudit; + /** + * 会员等级启用状态 0 启用 1 不启用 默认0 + */ + private String memberPriceStatus; + /** + * 众筹协议 + */ + private String crowdFundingProtocol; + /** + * h5域名 + */ + private String h5CallBackDomain; + /** + * 前端地址 + */ + private String pcCallBackDomain; + + public SegchkBaseInfoSet() { + } + + /** + * 判断会员价是否启用 + * + * @return 启用返回true, 否则返回false + */ + @JsonIgnore + public boolean isMemberPriceOpen() { + return "0".equals(this.memberPriceStatus); + } + + /** + * 判断店铺商品是否需要审核 + * + * @return 需要返回true 不需要返回false + */ + @JsonIgnore + public boolean isSpuNeedAudit() { + return "0".equals(this.storeSpuAudit); + } + + /** + * 处理图片地址 + */ + public void dealPicUrl() { + if (!StringUtils.isEmpty(labelLog) && labelLog.contains(":")) { + labelLog = labelLog.substring(labelLog.indexOf(":") + 1); + } + } + + /** + * 返回网站地址,末端加 "/" + */ + public String getSiteUrlWithBias() { + if (StringUtils.isEmpty(this.siteUrl)) { + return null; + } + return this.siteUrl.endsWith("/") ? this.siteUrl : this.siteUrl + "/"; + } + + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getSiteUrl() { + return siteUrl; + } + + public void setSiteUrl(String siteUrl) { + this.siteUrl = siteUrl; + } + + public String getSiteName() { + return siteName; + } + + public void setSiteName(String siteName) { + this.siteName = siteName; + } + + public String getLogo() { + return logo; + } + + public void setLogo(String logo) { + this.logo = logo; + } + + public String getLabelLog() { + return labelLog; + } + + public void setLabelLog(String labelLog) { + this.labelLog = labelLog; + } + + public String getSiteLoginPic() { + return siteLoginPic; + } + + public void setSiteLoginPic(String siteLoginPic) { + this.siteLoginPic = siteLoginPic; + } + + public String getSiteRegisterPic() { + return siteRegisterPic; + } + + public void setSiteRegisterPic(String siteRegisterPic) { + this.siteRegisterPic = siteRegisterPic; + } + + public String getStoreLoginPic() { + return storeLoginPic; + } + + public void setStoreLoginPic(String storeLoginPic) { + this.storeLoginPic = storeLoginPic; + } + + public String getStoreRegisterPic() { + return storeRegisterPic; + } + + public void setStoreRegisterPic(String storeRegisterPic) { + this.storeRegisterPic = storeRegisterPic; + } + + public String getCopyrightInfo() { + return copyrightInfo; + } + + public void setCopyrightInfo(String copyrightInfo) { + this.copyrightInfo = copyrightInfo; + } + + public String getSiteRegisterProtocol() { + return siteRegisterProtocol; + } + + public void setSiteRegisterProtocol(String siteRegisterProtocol) { + this.siteRegisterProtocol = siteRegisterProtocol; + } + + public String getStoreRegisterProtocol() { + return storeRegisterProtocol; + } + + public void setStoreRegisterProtocol(String storeRegisterProtocol) { + this.storeRegisterProtocol = storeRegisterProtocol; + } + + public String getStoreOpenProtocol() { + return storeOpenProtocol; + } + + public void setStoreOpenProtocol(String storeOpenProtocol) { + this.storeOpenProtocol = storeOpenProtocol; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getAdminLogo() { + return adminLogo; + } + + public void setAdminLogo(String adminLogo) { + this.adminLogo = adminLogo; + } + + public String getAdminIndexLogo() { + return adminIndexLogo; + } + + public void setAdminIndexLogo(String adminIndexLogo) { + this.adminIndexLogo = adminIndexLogo; + } + + public String getCaptchaOpen() { + return captchaOpen; + } + + public void setCaptchaOpen(String captchaOpen) { + this.captchaOpen = captchaOpen; + } + + public String getStoreSpuAudit() { + return storeSpuAudit; + } + + public void setStoreSpuAudit(String storeSpuAudit) { + this.storeSpuAudit = storeSpuAudit; + } + + public String getMemberPriceStatus() { + return memberPriceStatus; + } + + public void setMemberPriceStatus(String memberPriceStatus) { + this.memberPriceStatus = memberPriceStatus; + } + + public String getCrowdFundingProtocol() { + return crowdFundingProtocol; + } + + public void setCrowdFundingProtocol(String crowdFundingProtocol) { + this.crowdFundingProtocol = crowdFundingProtocol; + } + + public String getH5CallBackDomain() { + return h5CallBackDomain; + } + + public void setH5CallBackDomain(String h5CallBackDomain) { + this.h5CallBackDomain = h5CallBackDomain; + } + + public String getPcCallBackDomain() { + return pcCallBackDomain; + } + + public void setPcCallBackDomain(String pcCallBackDomain) { + this.pcCallBackDomain = pcCallBackDomain; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkCarouseMgt.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkCarouseMgt.java new file mode 100644 index 0000000..144704e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkCarouseMgt.java @@ -0,0 +1,125 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg首页轮播图管理对象 segchk_carouse_mgt + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkCarouseMgt extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 轮播图id */ + @Excel(name = "轮播图id") + private Long carouseId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 商家轮播图1路径,默认用于首页推荐轮播图 */ + @Excel(name = "商家轮播图1路径,默认用于首页推荐轮播图") + private String storeCarousel; + + /** 管理状态,0有效,-1失效 */ + @Excel(name = "管理状态,0有效,-1失效") + private Integer mgtState; + + /** 排序id */ + @Excel(name = "排序id") + private Integer sortId; + + /** 修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public void setCarouseId(Long carouseId) + { + this.carouseId = carouseId; + } + + public Long getCarouseId() + { + return carouseId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setStoreCarousel(String storeCarousel) + { + this.storeCarousel = storeCarousel; + } + + public String getStoreCarousel() + { + return storeCarousel; + } + public void setMgtState(Integer mgtState) + { + this.mgtState = mgtState; + } + + public Integer getMgtState() + { + return mgtState; + } + public void setSortId(Integer sortId) + { + this.sortId = sortId; + } + + public Integer getSortId() + { + return sortId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("carouseId", getCarouseId()) + .append("providerId", getProviderId()) + .append("storeId", getStoreId()) + .append("storeCarousel", getStoreCarousel()) + .append("mgtState", getMgtState()) + .append("sortId", getSortId()) + .append("modTime", getModTime()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkChargeCard.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkChargeCard.java new file mode 100644 index 0000000..72b2c3c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkChargeCard.java @@ -0,0 +1,123 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg充值卡管理对象 segchk_charge_card + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkChargeCard extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 卡类型id */ + @Excel(name = "卡类型id") + private Long cardTypeId; + + /** 卡类型名称(9.9,99,199,299) */ + @Excel(name = "卡类型名称(9.9,99,199,299)") + private String cardTypeName; + + /** 卡面额 */ + @Excel(name = "卡面额") + private BigDecimal cardTypeValue; + + /** 有效期时长 */ + @Excel(name = "有效期时长") + private Integer effectiveTime; + + /** 可购买次数 */ + @Excel(name = "可购买次数") + private Integer buyCount; + + /** 卡类型总核消次数 */ + @Excel(name = "卡类型总核消次数") + private Integer cardTypeChkcount; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setCardTypeId(Long cardTypeId) + { + this.cardTypeId = cardTypeId; + } + + public Long getCardTypeId() + { + return cardTypeId; + } + public void setCardTypeName(String cardTypeName) + { + this.cardTypeName = cardTypeName; + } + + public String getCardTypeName() + { + return cardTypeName; + } + public void setCardTypeValue(BigDecimal cardTypeValue) + { + this.cardTypeValue = cardTypeValue; + } + + public BigDecimal getCardTypeValue() + { + return cardTypeValue; + } + public void setEffectiveTime(Integer effectiveTime) + { + this.effectiveTime = effectiveTime; + } + + public Integer getEffectiveTime() + { + return effectiveTime; + } + public void setBuyCount(Integer buyCount) + { + this.buyCount = buyCount; + } + + public Integer getBuyCount() + { + return buyCount; + } + public void setCardTypeChkcount(Integer cardTypeChkcount) + { + this.cardTypeChkcount = cardTypeChkcount; + } + + public Integer getCardTypeChkcount() + { + return cardTypeChkcount; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("cardTypeId", getCardTypeId()) + .append("cardTypeName", getCardTypeName()) + .append("cardTypeValue", getCardTypeValue()) + .append("effectiveTime", getEffectiveTime()) + .append("buyCount", getBuyCount()) + .append("cardTypeChkcount", getCardTypeChkcount()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkChargeRet.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkChargeRet.java new file mode 100644 index 0000000..0b221a0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkChargeRet.java @@ -0,0 +1,47 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg充值卡管理对象 segchk_charge_card + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkChargeRet extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 充值id */ + @Excel(name = "充值id") + private Long chargeId; + + /** 卡id */ + @Excel(name = "卡id") + private Long cardId; + + public Long getChargeId() { + return chargeId; + } + + public void setChargeId(Long chargeId) { + this.chargeId = chargeId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + @Override + public String toString() { + return "SegchkChargeRet{" + + "chargeId=" + chargeId + + ", cardId=" + cardId + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkCommentAcc.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkCommentAcc.java new file mode 100644 index 0000000..b3ef66c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkCommentAcc.java @@ -0,0 +1,124 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商家累积评价对象 segchk_comment_acc + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkCommentAcc extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 更新id,全表唯一 */ + @Excel(name = "更新id,全表唯一") + private Long updateId; + + /** 评价次数 */ + @Excel(name = "评价次数") + private Long starCount; + + /** 评价总分 */ + @Excel(name = "评价总分") + private Long starLevel; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 评价id */ + @Excel(name = "评价id") + private Long commentId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public void setUpdateId(Long updateId) + { + this.updateId = updateId; + } + + public Long getUpdateId() + { + return updateId; + } + public void setStarCount(Long starCount) + { + this.starCount = starCount; + } + + public Long getStarCount() + { + return starCount; + } + public void setStarLevel(Long starLevel) + { + this.starLevel = starLevel; + } + + public Long getStarLevel() + { + return starLevel; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + public Long getCommentId() { + return commentId; + } + + public void setCommentId(Long commentId) { + this.commentId = commentId; + } + + @Override + public String toString() { + return "SegchkCommentAcc{" + + "updateId=" + updateId + + ", starCount=" + starCount + + ", starLevel=" + starLevel + + ", storeId=" + storeId + + ", providerId=" + providerId + + ", commentId=" + commentId + + ", modTime=" + modTime + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkDistrictInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkDistrictInfo.java new file mode 100644 index 0000000..214341a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkDistrictInfo.java @@ -0,0 +1,80 @@ +package com.ruoyi.segchk.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg行政区域代码对象 segchk_district_info + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkDistrictInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 行政区代码 */ + @Excel(name = "行政区代码") + private Integer districtId; + + /** 行政区名称 */ + @Excel(name = "行政区名称") + private String districtName; + + /** 归属行政区代码 */ + @Excel(name = "归属行政区代码") + private Integer districtParent; + + /** 行政区等级,0省直辖市,1地市,2县区 */ + @Excel(name = "行政区等级,0省直辖市,1地市,2县区") + private Integer districtLevel; + + public void setDistrictId(Integer districtId) + { + this.districtId = districtId; + } + + public Integer getDistrictId() + { + return districtId; + } + public void setDistrictName(String districtName) + { + this.districtName = districtName; + } + + public String getDistrictName() + { + return districtName; + } + public void setDistrictParent(Integer districtParent) + { + this.districtParent = districtParent; + } + + public Integer getDistrictParent() + { + return districtParent; + } + public void setDistrictLevel(Integer districtLevel) + { + this.districtLevel = districtLevel; + } + + public Integer getDistrictLevel() + { + return districtLevel; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("districtId", getDistrictId()) + .append("districtName", getDistrictName()) + .append("districtParent", getDistrictParent()) + .append("districtLevel", getDistrictLevel()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkKeywordLable.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkKeywordLable.java new file mode 100644 index 0000000..c0417bb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkKeywordLable.java @@ -0,0 +1,97 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg关键字管理对象 segchk_keyword_lable + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkKeywordLable extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 关键字id */ + @Excel(name = "关键字id") + private Long keywordId; + + /** 卡类型名称(如:餐饮,美容美发,洗车等) */ + @Excel(name = "卡类型名称(如:餐饮,美容美发,洗车等)") + private String keywordName; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 关键字图片地址 */ + @Excel(name = "关键字图片地址") + private String keywordUrl; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setKeywordId(Long keywordId) + { + this.keywordId = keywordId; + } + + public Long getKeywordId() + { + return keywordId; + } + public void setKeywordName(String keywordName) + { + this.keywordName = keywordName; + } + + public String getKeywordName() + { + return keywordName; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setKeywordUrl(String keywordUrl) + { + this.keywordUrl = keywordUrl; + } + + public String getKeywordUrl() + { + return keywordUrl; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("keywordId", getKeywordId()) + .append("keywordName", getKeywordName()) + .append("modTime", getModTime()) + .append("keywordUrl", getKeywordUrl()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkLableMgt.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkLableMgt.java new file mode 100644 index 0000000..1f36860 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkLableMgt.java @@ -0,0 +1,148 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg首页标签管理对象 segchk_lable_mgt + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkLableMgt extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 管理id,全局唯一 */ + private Long mgtId; + + /** 运营商id,全局唯一 */ + private Long providerId; + + /** 卡类型id */ + private Long cardTypeId; + + /** 卡类型名称(9.9,99,199,299) */ + @Excel(name = "卡类型名称(9.9,99,199,299)") + private String cardTypeName; + + /** 管理状态,0有效,-1失效 */ + @Excel(name = "管理状态,0有效,-1失效") + private Integer mgtState; + + /** 修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 展示序号(首页根据此id进行顺序展示) */ + @Excel(name = "展示序号", readConverterExp = "首=页根据此id进行顺序展示") + private Integer sortId; + + /** 标签标识 0来自类型卡,1来自商家关键字 */ + private Integer lableFlag; + + /** 标签图标路径 */ + @Excel(name = "标签图标路径") + private String iconUrl; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setCardTypeId(Long cardTypeId) + { + this.cardTypeId = cardTypeId; + } + + public Long getCardTypeId() + { + return cardTypeId; + } + public void setCardTypeName(String cardTypeName) + { + this.cardTypeName = cardTypeName; + } + + public String getCardTypeName() + { + return cardTypeName; + } + public void setMgtState(Integer mgtState) + { + this.mgtState = mgtState; + } + + public Integer getMgtState() + { + return mgtState; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setSortId(Integer sortId) + { + this.sortId = sortId; + } + + public Integer getSortId() + { + return sortId; + } + public void setLableFlag(Integer lableFlag) + { + this.lableFlag = lableFlag; + } + + public Integer getLableFlag() + { + return lableFlag; + } + public void setIconUrl(String iconUrl) + { + this.iconUrl = iconUrl; + } + + public String getIconUrl() + { + return iconUrl; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("mgtId", getMgtId()) + .append("providerId", getProviderId()) + .append("cardTypeId", getCardTypeId()) + .append("cardTypeName", getCardTypeName()) + .append("mgtState", getMgtState()) + .append("modTime", getModTime()) + .append("sortId", getSortId()) + .append("lableFlag", getLableFlag()) + .append("iconUrl", getIconUrl()) + .toString(); + } + + public Long getMgtId() { + return mgtId; + } + + public void setMgtId(Long mgtId) { + this.mgtId = mgtId; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkLogionDetail.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkLogionDetail.java new file mode 100644 index 0000000..dc9aa69 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkLogionDetail.java @@ -0,0 +1,97 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg登录记录对象 segchk_logion_detail + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkLogionDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 登录时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "登录时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date logionTime; + + /** 用户等级,0运营商,1商家,2vip会员,3普通会员 */ + @Excel(name = "用户等级,0运营商,1商家,2vip会员,3普通会员") + private String userLevel; + + /** 登录id */ + @Excel(name = "登录id") + private Long loginId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setLogionTime(Date logionTime) + { + this.logionTime = logionTime; + } + + public Date getLogionTime() + { + return logionTime; + } + public void setUserLevel(String userLevel) + { + this.userLevel = userLevel; + } + + public String getUserLevel() + { + return userLevel; + } + public void setLoginId(Long loginId) + { + this.loginId = loginId; + } + + public Long getLoginId() + { + return loginId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("logionTime", getLogionTime()) + .append("userLevel", getUserLevel()) + .append("loginId", getLoginId()) + .append("providerId", getProviderId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkMsgDetail.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkMsgDetail.java new file mode 100644 index 0000000..f81c77f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkMsgDetail.java @@ -0,0 +1,181 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg消息记录对象 segchk_msg_detail + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkMsgDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 源id */ + @Excel(name = "源id") + private Long fromId; + + /** 目标id */ + @Excel(name = "目标id") + private Long toId; + + /** 消息类型,0系统消息,1交易消息,2提醒消息,3评价消息,4核消消息 */ + @Excel(name = "消息类型,0系统消息,1交易消息,2提醒消息,3评价消息,4核消消息") + private String msgType; + + /** 消息内容 */ + @Excel(name = "消息内容") + private String msgContent; + + /** 消息标题 */ + @Excel(name = "消息标题") + private String msgTitle; + + /** 发送时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "发送时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date fromTime; + + /** 接收时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "接收时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date getTime; + + /** 消息id */ + private Long msgId; + + /** 消息状态,0未发送,1,未读,2已读,3删除 */ + @Excel(name = "消息状态,0未发送,1,未读,2已读,3删除") + private String msgFlag; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 接收人等级,0运营商,1商家,2会员 */ + @Excel(name = "接收人等级,0运营商,1商家,2会员") + private String recvLevel; + + public void setFromId(Long fromId) + { + this.fromId = fromId; + } + + public Long getFromId() + { + return fromId; + } + public void setToId(Long toId) + { + this.toId = toId; + } + + public Long getToId() + { + return toId; + } + public void setMsgType(String msgType) + { + this.msgType = msgType; + } + + public String getMsgType() + { + return msgType; + } + public void setMsgContent(String msgContent) + { + this.msgContent = msgContent; + } + + public String getMsgContent() + { + return msgContent; + } + public void setMsgTitle(String msgTitle) + { + this.msgTitle = msgTitle; + } + + public String getMsgTitle() + { + return msgTitle; + } + public void setFromTime(Date fromTime) + { + this.fromTime = fromTime; + } + + public Date getFromTime() + { + return fromTime; + } + public void setGetTime(Date getTime) + { + this.getTime = getTime; + } + + public Date getGetTime() + { + return getTime; + } + public void setMsgId(Long msgId) + { + this.msgId = msgId; + } + + public Long getMsgId() + { + return msgId; + } + public void setMsgFlag(String msgFlag) + { + this.msgFlag = msgFlag; + } + + public String getMsgFlag() + { + return msgFlag; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setRecvLevel(String recvLevel) + { + this.recvLevel = recvLevel; + } + + public String getRecvLevel() + { + return recvLevel; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("fromId", getFromId()) + .append("toId", getToId()) + .append("msgType", getMsgType()) + .append("msgContent", getMsgContent()) + .append("msgTitle", getMsgTitle()) + .append("fromTime", getFromTime()) + .append("getTime", getGetTime()) + .append("msgId", getMsgId()) + .append("msgFlag", getMsgFlag()) + .append("providerId", getProviderId()) + .append("recvLevel", getRecvLevel()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkMsgWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkMsgWebResp.java new file mode 100644 index 0000000..d477638 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkMsgWebResp.java @@ -0,0 +1,91 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg用户奖励对象 segchk_user_reward + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkMsgWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 消息类型,0系统消息,1交易消息,2提醒消息,3评价消息,4核消消息 */ + @Excel(name = "消息类型,0系统消息,1交易消息,2提醒消息,3评价消息,4核消消息") + private String msgType; + + /** 消息内容 */ + @Excel(name = "消息内容") + private String msgContent; + + /** 消息标题 */ + @Excel(name = "消息标题") + private String msgTitle; + + + /** 消息状态,0未发送,1,未读,2已读,3删除 */ + @Excel(name = "消息状态,0未发送,1,未读,2已读,3删除") + private String msgFlag; + + /** 接收时间 */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + @Excel(name = "接收时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") + private Date fromTime; + + public String getMsgType() { + return msgType; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public String getMsgContent() { + return msgContent; + } + + public void setMsgContent(String msgContent) { + this.msgContent = msgContent; + } + + public String getMsgTitle() { + return msgTitle; + } + + public void setMsgTitle(String msgTitle) { + this.msgTitle = msgTitle; + } + + public String getMsgFlag() { + return msgFlag; + } + + public void setMsgFlag(String msgFlag) { + this.msgFlag = msgFlag; + } + + public Date getFromTime() { + return fromTime; + } + + public void setFromTime(Date fromTime) { + this.fromTime = fromTime; + } + + @Override + public String toString() { + return "SegchkMsgWebResp{" + + "msgType='" + msgType + '\'' + + ", msgContent='" + msgContent + '\'' + + ", msgTitle='" + msgTitle + '\'' + + ", msgFlag='" + msgFlag + '\'' + + ", fromTime=" + fromTime + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkPreferenceLable.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkPreferenceLable.java new file mode 100644 index 0000000..93ba27a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkPreferenceLable.java @@ -0,0 +1,97 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg优惠管理对象 segchk_preference_lable + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkPreferenceLable extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 优惠id */ + @Excel(name = "优惠id") + private Long preferenceId; + + /** 优惠名称(团购,打折等) */ + @Excel(name = "优惠名称(团购,打折等)") + private String preferenceName; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 优惠图片地址 */ + @Excel(name = "优惠图片地址") + private String preferenceUrl; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setPreferenceId(Long preferenceId) + { + this.preferenceId = preferenceId; + } + + public Long getPreferenceId() + { + return preferenceId; + } + public void setPreferenceName(String preferenceName) + { + this.preferenceName = preferenceName; + } + + public String getPreferenceName() + { + return preferenceName; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setPreferenceUrl(String preferenceUrl) + { + this.preferenceUrl = preferenceUrl; + } + + public String getPreferenceUrl() + { + return preferenceUrl; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("preferenceId", getPreferenceId()) + .append("preferenceName", getPreferenceName()) + .append("modTime", getModTime()) + .append("preferenceUrl", getPreferenceUrl()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderMgt.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderMgt.java new file mode 100644 index 0000000..29efd6a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkProviderMgt.java @@ -0,0 +1,181 @@ +package com.ruoyi.segchk.domain; + +import java.util.List; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg运营商管理对象 segchk_provider_mgt + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkProviderMgt extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 小程序的openid */ + @Excel(name = "小程序的openid") + private String openid; + + /** 微信的联合登录id */ + @Excel(name = "微信的联合登录id") + private String unionId; + + /** 微信号 */ + @Excel(name = "微信号") + private String wechatId; + + /** 运营商id */ + @Excel(name = "运营商id") + private Long providerId; + + /** 昵称 */ + @Excel(name = "昵称") + private String nickName; + + /** 头像地址 */ + @Excel(name = "头像地址") + private String iconUrl; + + /** 手机号码 */ + @Excel(name = "手机号码") + private String phoneNo; + + /** 状态,0正常,1失效,2删除 */ + @Excel(name = "状态,0正常,1失效,2删除") + private Integer flagId; + + /** 区县行政代码 */ + @Excel(name = "区县行政代码") + private Integer districtId; + + /** 删除时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date delTime; + + /** seg首页标签管理信息 */ + private List segchkLableMgtList; + + public void setOpenid(String openid) + { + this.openid = openid; + } + + public String getOpenid() + { + return openid; + } + public void setUnionId(String unionId) + { + this.unionId = unionId; + } + + public String getUnionId() + { + return unionId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setNickName(String nickName) + { + this.nickName = nickName; + } + + public String getNickName() + { + return nickName; + } + public void setIconUrl(String iconUrl) + { + this.iconUrl = iconUrl; + } + + public String getIconUrl() + { + return iconUrl; + } + public void setPhoneNo(String phoneNo) + { + this.phoneNo = phoneNo; + } + + public String getPhoneNo() + { + return phoneNo; + } + public void setFlagId(Integer flagId) + { + this.flagId = flagId; + } + + public Integer getFlagId() + { + return flagId; + } + public void setDistrictId(Integer districtId) + { + this.districtId = districtId; + } + + public Integer getDistrictId() + { + return districtId; + } + public void setDelTime(Date delTime) + { + this.delTime = delTime; + } + + public Date getDelTime() + { + return delTime; + } + + public List getSegchkLableMgtList() + { + return segchkLableMgtList; + } + + public void setSegchkLableMgtList(List segchkLableMgtList) + { + this.segchkLableMgtList = segchkLableMgtList; + } + + public String getWechatId() { + return wechatId; + } + + public void setWechatId(String wechatId) { + this.wechatId = wechatId; + } + + @Override + public String toString() { + return "SegchkProviderMgt{" + + "openid='" + openid + '\'' + + ", unionId='" + unionId + '\'' + + ", wechatId='" + wechatId + '\'' + + ", providerId=" + providerId + + ", nickName='" + nickName + '\'' + + ", iconUrl='" + iconUrl + '\'' + + ", phoneNo='" + phoneNo + '\'' + + ", flagId=" + flagId + + ", districtId=" + districtId + + ", delTime=" + delTime + + ", segchkLableMgtList=" + segchkLableMgtList + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStore.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStore.java new file mode 100644 index 0000000..e8f5f29 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStore.java @@ -0,0 +1,111 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg首页推荐商户对象 segchk_recommender_store + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkRecommenderStore extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 管理状态,0有效,-1失效 */ + @Excel(name = "管理状态,0有效,-1失效") + private Integer mgtState; + + /** 修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 展示序号(首页根据此id进行顺序展示) */ + @Excel(name = "展示序号", readConverterExp = "首=页根据此id进行顺序展示") + private Integer sortId; + + /** id,全表唯一 */ + @Excel(name = "id,全表唯一") + private Long recommenderId; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setMgtState(Integer mgtState) + { + this.mgtState = mgtState; + } + + public Integer getMgtState() + { + return mgtState; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setSortId(Integer sortId) + { + this.sortId = sortId; + } + + public Integer getSortId() + { + return sortId; + } + public void setRecommenderId(Long recommenderId) + { + this.recommenderId = recommenderId; + } + + public Long getRecommenderId() + { + return recommenderId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("storeId", getStoreId()) + .append("mgtState", getMgtState()) + .append("modTime", getModTime()) + .append("sortId", getSortId()) + .append("recommenderId", getRecommenderId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreLableWeb.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreLableWeb.java new file mode 100644 index 0000000..fc462d6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreLableWeb.java @@ -0,0 +1,87 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg返回首页推荐商户对象 segchk_recommender_storeweb + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkRecommenderStoreLableWeb extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + + /** 商户标签id */ + @Excel(name = "商户标签id") + private Integer lableId; + + /** 商户标签显示顺序id */ + @Excel(name = "商户标签显示顺序id") + private Integer lableSortId; + + /** 商户标签类型id */ + @Excel(name = "商户标签类型id") + private Integer lableTypeId; + + /** 商户标签名称 */ + @Excel(name = "商户标签名称") + private String lableName; + + /** 标签图片 */ + @Excel(name = "标签图片") + private String lablePic; + + public Integer getLableId() { + return lableId; + } + + public void setLableId(Integer lableId) { + this.lableId = lableId; + } + + public Integer getLableSortId() { + return lableSortId; + } + + public void setLableSortId(Integer lableSortId) { + this.lableSortId = lableSortId; + } + + public Integer getLableTypeId() { + return lableTypeId; + } + + public void setLableTypeId(Integer lableTypeId) { + this.lableTypeId = lableTypeId; + } + + public String getLableName() { + return lableName; + } + + public void setLableName(String lableName) { + this.lableName = lableName; + } + + public String getLablePic() { + return lablePic; + } + + public void setLablePic(String lablePic) { + this.lablePic = lablePic; + } + + @Override + public String toString() { + return "SegchkRecommenderStoreLableWeb{" + + "lableId=" + lableId + + ", lableSortId=" + lableSortId + + ", lableTypeId=" + lableTypeId + + ", lableName='" + lableName + '\'' + + ", lablePic='" + lablePic + '\'' + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebReq.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebReq.java new file mode 100644 index 0000000..65291be --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebReq.java @@ -0,0 +1,89 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg返回首页推荐商户对象 segchk_recommender_storeweb + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkRecommenderStoreWebReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 排序类型 */ + @Excel(name = "排序类型") + private Integer sortType; + + + /** 用户经度 */ + @Excel(name = "用户经度") + private BigDecimal userLon; + + /** 用户纬度 */ + @Excel(name = "用户纬度") + private BigDecimal userLat; + + /** 用户距离限制 */ + @Excel(name = "用户距离限制") + private BigDecimal userDist; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Integer getSortType() { + return sortType; + } + + public void setSortType(Integer sortType) { + this.sortType = sortType; + } + + public BigDecimal getUserLon() { + return userLon; + } + + public void setUserLon(BigDecimal userLon) { + this.userLon = userLon; + } + + public BigDecimal getUserLat() { + return userLat; + } + + public void setUserLat(BigDecimal userLat) { + this.userLat = userLat; + } + + public BigDecimal getUserDist() { + return userDist; + } + + public void setUserDist(BigDecimal userDist) { + this.userDist = userDist; + } + + @Override + public String toString() { + return "SegchkRecommenderStoreWebReq{" + + "providerId=" + providerId + + ", sortType=" + sortType + + ", userLon=" + userLon + + ", userLat=" + userLat + + ", userDist=" + userDist + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java new file mode 100644 index 0000000..85d54ab --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkRecommenderStoreWebResp.java @@ -0,0 +1,182 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.List; + +/** + * seg返回首页推荐商户对象 segchk_recommender_storeweb + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkRecommenderStoreWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 商户显示序号 */ + @Excel(name = "商户显示序号") + private Integer storeSort; + + /** 商户列表模式时的图标 */ + @Excel(name = "商户列表模式时的图标") + private String storeIcon; + + /** 商户的大图标 */ + @Excel(name = "商户的大图标") + private String storeGificon; + + /** 商户经度 */ + @Excel(name = "商户经度") + private BigDecimal storeLon; + + /** 商户纬度 */ + @Excel(name = "商户纬度") + private BigDecimal storeLat; + + /** 商户累积核消次数 */ + @Excel(name = "商户累积核消次数") + private Integer chkCount; + + /** 商户平均星评 */ + @Excel(name = "商户平均星评") + private BigDecimal starAvg; + + /** 用户距离 */ + @Excel(name = "用户距离") + private BigDecimal userDist; + + + /** 商户标签列表 */ + @Valid + private List lables; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Integer getStoreSort() { + return storeSort; + } + + public void setStoreSort(Integer storeSort) { + this.storeSort = storeSort; + } + + public String getStoreIcon() { + return storeIcon; + } + + public void setStoreIcon(String storeIcon) { + this.storeIcon = storeIcon; + } + + public String getStoreGificon() { + return storeGificon; + } + + public void setStoreGificon(String storeGificon) { + this.storeGificon = storeGificon; + } + + public BigDecimal getStoreLon() { + return storeLon; + } + + public void setStoreLon(BigDecimal storeLon) { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLat() { + return storeLat; + } + + public void setStoreLat(BigDecimal storeLat) { + this.storeLat = storeLat; + } + + public Integer getChkCount() { + return chkCount; + } + + public void setChkCount(Integer chkCount) { + this.chkCount = chkCount; + } + + public BigDecimal getStarAvg() { + return starAvg; + } + + public void setStarAvg(BigDecimal starAvg) { + this.starAvg = starAvg; + } + + public List getLables() { + return lables; + } + + public void setLables(List lables) { + this.lables = lables; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + @Override + public String toString() { + return "SegchkRecommenderStoreWebResp{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", storeName=" + storeName + + ", storeSort=" + storeSort + + ", storeIcon='" + storeIcon + '\'' + + ", storeGificon='" + storeGificon + '\'' + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", chkCount=" + chkCount + + ", starAvg=" + starAvg + + ", lables=" + lables + + ", userDist=" + userDist + + '}'; + } + + public BigDecimal getUserDist() { + return userDist; + } + + public void setUserDist(BigDecimal userDist) { + this.userDist = userDist; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSalerInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSalerInfo.java new file mode 100644 index 0000000..a82dacb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSalerInfo.java @@ -0,0 +1,125 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg销售人员信息对象 segchk_saler_info + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkSalerInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 销售人员id */ + @Excel(name = "销售人员id") + private Integer salerId; + + /** 销售人员姓名 */ + @Excel(name = "销售人员姓名") + private String salerName; + + /** 销售人员电话 */ + @Excel(name = "销售人员电话") + private String salerPhone; + + /** 销售人员身份证号 */ + @Excel(name = "销售人员身份证号") + private String salerCard; + + /** 销售人员状态,0工作,1非工作状态,2删除 */ + @Excel(name = "销售人员状态,0工作,1非工作状态,2删除") + private Integer salerState; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setSalerId(Integer salerId) + { + this.salerId = salerId; + } + + public Integer getSalerId() + { + return salerId; + } + public void setSalerName(String salerName) + { + this.salerName = salerName; + } + + public String getSalerName() + { + return salerName; + } + public void setSalerPhone(String salerPhone) + { + this.salerPhone = salerPhone; + } + + public String getSalerPhone() + { + return salerPhone; + } + public void setSalerCard(String salerCard) + { + this.salerCard = salerCard; + } + + public String getSalerCard() + { + return salerCard; + } + public void setSalerState(Integer salerState) + { + this.salerState = salerState; + } + + public Integer getSalerState() + { + return salerState; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("modTime", getModTime()) + .append("salerId", getSalerId()) + .append("salerName", getSalerName()) + .append("salerPhone", getSalerPhone()) + .append("salerCard", getSalerCard()) + .append("salerState", getSalerState()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSelfServiceChk.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSelfServiceChk.java new file mode 100644 index 0000000..81265c1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSelfServiceChk.java @@ -0,0 +1,111 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg自定义卡核消记录对象 segchk_self_service_chk + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkSelfServiceChk extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 会员卡号id,全局惟一 */ + @Excel(name = "会员卡号id,全局惟一") + private Long cardId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 核消id,全表唯一 */ + @Excel(name = "核消id,全表唯一") + private Long chkServiceId; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setCardId(Long cardId) + { + this.cardId = cardId; + } + + public Long getCardId() + { + return cardId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setChkServiceId(Long chkServiceId) + { + this.chkServiceId = chkServiceId; + } + + public Long getChkServiceId() + { + return chkServiceId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("cardId", getCardId()) + .append("storeId", getStoreId()) + .append("userId", getUserId()) + .append("modTime", getModTime()) + .append("chkServiceId", getChkServiceId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleDetailWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleDetailWebResp.java new file mode 100644 index 0000000..4cfe77a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleDetailWebResp.java @@ -0,0 +1,90 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceAndSaleDetailWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 会员卡号 */ + @Excel(name = "会员卡号") + private Long cardId; + + /** 卡类型名称 */ + @Excel(name = "卡类型名称") + private String cardName; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 统计结果 */ + @Excel(name = "统计结果") + private Long staticCount; + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public Long getStaticCount() { + return staticCount; + } + + public void setStaticCount(Long staticCount) { + this.staticCount = staticCount; + } + + @Override + public String toString() { + return "SegchkServiceAndSaleDetailWebResp{" + + "modTime=" + modTime + + ", cardId=" + cardId + + ", cardName='" + cardName + '\'' + + ", storeName='" + storeName + '\'' + + ", staticCount=" + staticCount + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebReq.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebReq.java new file mode 100644 index 0000000..a1ebce6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebReq.java @@ -0,0 +1,98 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceAndSaleWebReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商户id */ + @Excel(name = "商户id") + private Long storeId; + + /** 统计等级,0按月统计,1按月查询统计 */ + @Excel(name = "统计等级") + private Integer staticLevel; + + /** 统计月份,只在staticLevel为1时有效,0时为统计的月数 */ + @Excel(name = "统计月份") + private String staticMonth; + + /** 用户身份,0运营商,1商家 */ + @Excel(name = "用户身份") + private Integer userLevel; + + /** 数据源选择,0核消,1售卡 */ + @Excel(name = "数据源选择") + private Integer srcFlag; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Integer getStaticLevel() { + return staticLevel; + } + + public void setStaticLevel(Integer staticLevel) { + this.staticLevel = staticLevel; + } + + public String getStaticMonth() { + return staticMonth; + } + + public void setStaticMonth(String staticMonth) { + this.staticMonth = staticMonth; + } + + public Integer getUserLevel() { + return userLevel; + } + + public void setUserLevel(Integer userLevel) { + this.userLevel = userLevel; + } + + @Override + public String toString() { + return "SegchkServiceAndSaleWebReq{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", staticLevel='" + staticLevel + '\'' + + ", staticMonth='" + staticMonth + '\'' + + ", userLevel=" + userLevel + + '}'; + } + + public Integer getSrcFlag() { + return srcFlag; + } + + public void setSrcFlag(Integer srcFlag) { + this.srcFlag = srcFlag; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebResp.java new file mode 100644 index 0000000..245db7b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceAndSaleWebResp.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceAndSaleWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + + /** 统计月份,只在staticLevel为1时有效 */ + @Excel(name = "统计月份") + private String staticMonth; + + /** staticMonth与staticMonth同义,只是为yyyy-mm-01使用查询具备详单时使用 */ + @Excel(name = "统计月份") + private String queryMon; + + /** 统计结果 */ + @Excel(name = "统计结果") + private Long staticCount; + + public String getStaticMonth() { + return staticMonth; + } + + public void setStaticMonth(String staticMonth) { + this.staticMonth = staticMonth; + } + + public Long getStaticCount() { + return staticCount; + } + + public void setStaticCount(Long staticCount) { + this.staticCount = staticCount; + } + + public String getQueryMon() { + return queryMon; + } + + public void setQueryMon(String queryMon) { + this.queryMon = queryMon; + } + + @Override + public String toString() { + return "SegchkServiceAndSaleWebResp{" + + "staticMonth='" + staticMonth + '\'' + + ", queryMon='" + queryMon + '\'' + + ", staticCount=" + staticCount + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceChk.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceChk.java new file mode 100644 index 0000000..0922d80 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceChk.java @@ -0,0 +1,139 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg核消记录对象 segchk_service_chk + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkServiceChk extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 会员卡号id,全局惟一 */ + @Excel(name = "会员卡号id,全局惟一") + private Long cardId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 会员卡类型,0--9块9,1---99 */ + @Excel(name = "会员卡类型,0--9块9,1---99") + private Long cardTypeId; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 核消id,全表唯一 */ + @Excel(name = "核消id,全表唯一") + private Long chkServiceId; + + /** 评价id */ + @Excel(name = "评价id") + private Long commentId; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setCardId(Long cardId) + { + this.cardId = cardId; + } + + public Long getCardId() + { + return cardId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setCardTypeId(Long cardTypeId) + { + this.cardTypeId = cardTypeId; + } + + public Long getCardTypeId() + { + return cardTypeId; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setChkServiceId(Long chkServiceId) + { + this.chkServiceId = chkServiceId; + } + + public Long getChkServiceId() + { + return chkServiceId; + } + public void setCommentId(Long commentId) + { + this.commentId = commentId; + } + + public Long getCommentId() + { + return commentId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("cardId", getCardId()) + .append("storeId", getStoreId()) + .append("cardTypeId", getCardTypeId()) + .append("userId", getUserId()) + .append("modTime", getModTime()) + .append("chkServiceId", getChkServiceId()) + .append("commentId", getCommentId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceComment.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceComment.java new file mode 100644 index 0000000..f3f38b0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceComment.java @@ -0,0 +1,111 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg评价记录对象 segchk_service_comment + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkServiceComment extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 评价id */ + @Excel(name = "评价id") + private Long commentId; + + /** 星级评价 */ + @Excel(name = "星级评价") + private Integer starLevel; + + /** 评价内容 */ + @Excel(name = "评价内容") + private String contentText; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + public void setCommentId(Long commentId) + { + this.commentId = commentId; + } + + public Long getCommentId() + { + return commentId; + } + public void setStarLevel(Integer starLevel) + { + this.starLevel = starLevel; + } + + public Integer getStarLevel() + { + return starLevel; + } + public void setContentText(String contentText) + { + this.contentText = contentText; + } + + public String getContentText() + { + return contentText; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("commentId", getCommentId()) + .append("starLevel", getStarLevel()) + .append("contentText", getContentText()) + .append("modTime", getModTime()) + .append("providerId", getProviderId()) + .append("storeId", getStoreId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentUserReq.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentUserReq.java new file mode 100644 index 0000000..e3b70a2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentUserReq.java @@ -0,0 +1,89 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg评价记录对象 SegchkServiceCommentUserReq + * + * @author yinzhiying + * @date 2021-07-30 + */ +public class SegchkServiceCommentUserReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 评价id */ + private Long commentId; + + /** 星级评价 */ + @Excel(name = "星级评价") + private Integer starLevel; + + /** 评价内容 */ + @Excel(name = "评价内容") + private String contentText; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 核消id,全表唯一 */ + @Excel(name = "核消id,全表唯一") + private Long chkServiceId; + + public Long getCommentId() { + return commentId; + } + + public void setCommentId(Long commentId) { + this.commentId = commentId; + } + + public Integer getStarLevel() { + return starLevel; + } + + public void setStarLevel(Integer starLevel) { + this.starLevel = starLevel; + } + + public String getContentText() { + return contentText; + } + + public void setContentText(String contentText) { + this.contentText = contentText; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public Long getChkServiceId() { + return chkServiceId; + } + + public void setChkServiceId(Long chkServiceId) { + this.chkServiceId = chkServiceId; + } + + @Override + public String toString() { + return "SegchkServiceCommentUserReq{" + + "commentId=" + commentId + + ", starLevel=" + starLevel + + ", contentText='" + contentText + '\'' + + ", modTime=" + modTime + + ", chkServiceId=" + chkServiceId + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentWebResp.java new file mode 100644 index 0000000..6efaa49 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceCommentWebResp.java @@ -0,0 +1,116 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg评价记录对象 segchk_service_comment + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceCommentWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 星级评价 */ + @Excel(name = "星级评价") + private Integer starLevel; + + /** 评价内容 */ + @Excel(name = "评价内容") + private String contentText; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 充值卡id */ + @Excel(name = "充值卡名称") + private String cardName; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private String userName; + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Integer getStarLevel() { + return starLevel; + } + + public void setStarLevel(Integer starLevel) { + this.starLevel = starLevel; + } + + public String getContentText() { + return contentText; + } + + public void setContentText(String contentText) { + this.contentText = contentText; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + @Override + public String toString() { + return "SegchkServiceCommentWebResp{" + + "storeId=" + storeId + + ", starLevel=" + starLevel + + ", contentText='" + contentText + '\'' + + ", modTime=" + modTime + + ", providerId=" + providerId + + ", cardName='" + cardName + '\'' + + ", userName='" + userName + '\'' + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkResp.java new file mode 100644 index 0000000..a33f110 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkResp.java @@ -0,0 +1,138 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceOrderChkResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id */ + @Excel(name = "运营商id") + private Long providerId; + + /** 商户id */ + @Excel(name = "商户id") + private Long storeId; + + /** 用户id */ + @Excel(name = "用户id") + private Long userId; + + /** 卡id */ + @Excel(name = "卡id") + private Long cardId; + + /** 会员卡或优惠券下的标签id */ + @Excel(name = "会员卡或优惠券下的标签id") + private Integer lableId; + + /** 卡类型 0 会员卡,1赠卡,2优惠券 */ + @Excel(name = "卡类型") + private Integer typeId; + + /** 卡名称 */ + @Excel(name = "卡名称") + private String cardName; + + /** 剩余次数 */ + @Excel(name = "卡名称") + private Integer leftCount; + + /** 是否支持 */ + @Excel(name = "是否支持") + private Integer isSupported; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Integer getLableId() { + return lableId; + } + + public void setLableId(Integer lableId) { + this.lableId = lableId; + } + + public Integer getTypeId() { + return typeId; + } + + public void setTypeId(Integer typeId) { + this.typeId = typeId; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public Integer getLeftCount() { + return leftCount; + } + + public void setLeftCount(Integer leftCount) { + this.leftCount = leftCount; + } + + public Integer getIsSupported() { + return isSupported; + } + + public void setIsSupported(Integer isSupported) { + this.isSupported = isSupported; + } + + @Override + public String toString() { + return "SegchkServiceOrderChkResp{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", userId=" + userId + + ", cardId=" + cardId + + ", lableId=" + lableId + + ", typeId=" + typeId + + ", cardName='" + cardName + '\'' + + ", leftCount=" + leftCount + + ", isSupported=" + isSupported + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkTestResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkTestResp.java new file mode 100644 index 0000000..90bee67 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderChkTestResp.java @@ -0,0 +1,222 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.util.Date; +import java.util.List; + +/** + * seg用户核消确认信息对象 SegchkServiceOrderChkTestResp + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceOrderChkTestResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 预约单id */ + @Excel(name = "预约单id") + private Long likegoId; + + /** 运营商id */ + @Excel(name = "运营商id") + private Long providerId; + + /** 商户id */ + @Excel(name = "商户id") + private Long storeId; + + /** 用户id */ + @Excel(name = "用户id") + private Long userId; + + /** 我想去订单核消卡id */ + @Excel(name = "我想去订单核消卡id") + private Long cardId; + + /** 我想去订单核消卡类型id,0会员卡,1自定义卡,2赠卡 */ + @Excel(name = "我想去订单核消卡类型id") + private Integer cardType; + + /** 我想去订单状态 */ + @Excel(name = "我想去订单状态") + private Integer mgtState; + + /** 我想去订单核消卡名称 */ + @Excel(name = "我想去订单核消卡名称") + private String cardName; + + /** 我想去订单核消卡可使用次数 */ + @Excel(name = "我想去订单核消卡可使用次数") + private Integer totalCount; + + /** 我想去订单核消卡剩余次数 */ + @Excel(name = "我想去订单核消卡剩余次数") + private Integer hasLeftCount; + + /** 我想去订单核消卡状态 */ + @Excel(name = "我想去订单核消卡状态") + private Integer cardStatus; + + /** 是否可赠送卡0可赠,1已有 */ + @Excel(name = "卡id") + private Integer canFree; + + /** 是否过期 0未过期,1过期 */ + @Excel(name = "是否过期") + private Integer isExpire; + + /** 有效期时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 商户可赠优惠券标签列表 */ + @Valid + private List segchkRecommenderStoreLableWebList; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Integer getCardType() { + return cardType; + } + + public void setCardType(Integer cardType) { + this.cardType = cardType; + } + + public Integer getMgtState() { + return mgtState; + } + + public void setMgtState(Integer mgtState) { + this.mgtState = mgtState; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public Integer getTotalCount() { + return totalCount; + } + + public void setTotalCount(Integer totalCount) { + this.totalCount = totalCount; + } + + public Integer getHasLeftCount() { + return hasLeftCount; + } + + public void setHasLeftCount(Integer hasLeftCount) { + this.hasLeftCount = hasLeftCount; + } + + public Integer getCardStatus() { + return cardStatus; + } + + public void setCardStatus(Integer cardStatus) { + this.cardStatus = cardStatus; + } + + public Integer getCanFree() { + return canFree; + } + + public void setCanFree(Integer canFree) { + this.canFree = canFree; + } + + public Integer getIsExpire() { + return isExpire; + } + + public void setIsExpire(Integer isExpire) { + this.isExpire = isExpire; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public List getSegchkRecommenderStoreLableWebList() { + return segchkRecommenderStoreLableWebList; + } + + public void setSegchkRecommenderStoreLableWebList(List segchkRecommenderStoreLableWebList) { + this.segchkRecommenderStoreLableWebList = segchkRecommenderStoreLableWebList; + } + + @Override + public String toString() { + return "SegchkServiceOrderChkTestResp{" + + "likegoId=" + likegoId + + "providerId=" + providerId + + ", storeId=" + storeId + + ", userId=" + userId + + ", cardId=" + cardId + + ", cardType=" + cardType + + ", mgtState=" + mgtState + + ", cardName='" + cardName + '\'' + + ", totalCount=" + totalCount + + ", hasLeftCount=" + hasLeftCount + + ", cardStatus=" + cardStatus + + ", canFree=" + canFree + + ", isExpire=" + isExpire + + ", modTime=" + modTime + + ", segchkRecommenderStoreLableWebList=" + segchkRecommenderStoreLableWebList + + '}'; + } + + public Long getLikegoId() { + return likegoId; + } + + public void setLikegoId(Long likegoId) { + this.likegoId = likegoId; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java new file mode 100644 index 0000000..f12f38b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkServiceOrderWebReq.java @@ -0,0 +1,112 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkServiceOrderWebReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id */ + @Excel(name = "运营商id") + private Long providerId; + + /** 商户id */ + @Excel(name = "商户id") + private Long storeId; + + /** 用户id */ + @Excel(name = "用户id") + private Long userId; + + /** 卡id */ + @Excel(name = "卡id") + private Long cardId; + + /** 会员卡或优惠券下的标签id */ + @Excel(name = "会员卡或优惠券下的标签id") + private Integer lableId; + + /** 卡类型 0 会员卡,1赠卡,2优惠券 */ + @Excel(name = "卡类型") + private Integer typeId; + + /** 卡名称 */ + @Excel(name = "卡名称") + private String cardName; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Integer getLableId() { + return lableId; + } + + public void setLableId(Integer lableId) { + this.lableId = lableId; + } + + public Integer getTypeId() { + return typeId; + } + + public void setTypeId(Integer typeId) { + this.typeId = typeId; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + @Override + public String toString() { + return "SegchkServiceOrderWebReq{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", userId=" + userId + + ", cardId=" + cardId + + ", lableId=" + lableId + + ", typeId=" + typeId + + ", cardName='" + cardName + '\'' + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSmsDetail.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSmsDetail.java new file mode 100644 index 0000000..980020a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSmsDetail.java @@ -0,0 +1,95 @@ +package com.ruoyi.segchk.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg短信记录对象 segchk_sms_detail + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkSmsDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 手机号 */ + @Excel(name = "手机号") + private String phoneNo; + + /** 验证码 */ + @Excel(name = "验证码") + private String validateCode; + + /** 标识,0已发送,1已验证 */ + @Excel(name = "标识,0已发送,1已验证") + private String flag; + + /** 短信码id */ + @Excel(name = "短信码id") + private Long shortMsgId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + public void setPhoneNo(String phoneNo) + { + this.phoneNo = phoneNo; + } + + public String getPhoneNo() + { + return phoneNo; + } + public void setValidateCode(String validateCode) + { + this.validateCode = validateCode; + } + + public String getValidateCode() + { + return validateCode; + } + public void setFlag(String flag) + { + this.flag = flag; + } + + public String getFlag() + { + return flag; + } + public void setShortMsgId(Long shortMsgId) + { + this.shortMsgId = shortMsgId; + } + + public Long getShortMsgId() + { + return shortMsgId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("phoneNo", getPhoneNo()) + .append("createTime", getCreateTime()) + .append("validateCode", getValidateCode()) + .append("flag", getFlag()) + .append("shortMsgId", getShortMsgId()) + .append("providerId", getProviderId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreAccount.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreAccount.java new file mode 100644 index 0000000..7a05880 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreAccount.java @@ -0,0 +1,154 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商户余额信息对象 segchk_store_account + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreAccount extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 余额 */ + @Excel(name = "余额") + private BigDecimal account; + + /** 余额类型 */ + @Excel(name = "余额类型") + private String accountType; + + /** 余额id */ + @Excel(name = "余额id") + private Long accountId; + + /** 奖励id */ + @Excel(name = "奖励id") + private Long rewardId; + + /** 充值id */ + @Excel(name = "充值id") + private Long chargeId; + + /** 充值id */ + @Excel(name = "充值id") + private Long cashId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setAccount(BigDecimal account) + { + this.account = account; + } + + public BigDecimal getAccount() + { + return account; + } + public void setAccountType(String accountType) + { + this.accountType = accountType; + } + + public String getAccountType() + { + return accountType; + } + public void setAccountId(Long accountId) + { + this.accountId = accountId; + } + + public Long getAccountId() + { + return accountId; + } + public void setRewardId(Long rewardId) + { + this.rewardId = rewardId; + } + + public Long getRewardId() + { + return rewardId; + } + public void setChargeId(Long chargeId) + { + this.chargeId = chargeId; + } + + public Long getChargeId() + { + return chargeId; + } + public void setCashId(Long cashId) + { + this.cashId = cashId; + } + + public Long getCashId() + { + return cashId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("storeId", getStoreId()) + .append("account", getAccount()) + .append("accountType", getAccountType()) + .append("accountId", getAccountId()) + .append("rewardId", getRewardId()) + .append("chargeId", getChargeId()) + .append("cashId", getCashId()) + .append("modTime", getModTime()) + .append("providerId", getProviderId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfo.java new file mode 100644 index 0000000..d1a8d9a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreBasicInfo.java @@ -0,0 +1,414 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商家基础信息对象 segchk_store_basic_info + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreBasicInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + private Long storeId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 商家电话 */ + @Excel(name = "商家电话") + private String storePhone; + + /** 微信唯一识别号,用于转账等 */ + @Excel(name = "微信唯一识别号,用于转账等") + private String openid; + + /** 微信的联合登录id */ + @Excel(name = "微信的联合登录id") + private String unionId; + + /** 商家微信昵称 */ + @Excel(name = "商家微信昵称") + private String nickName; + + /** 商家微信头像 */ + @Excel(name = "商家微信头像") + private String iconUrl; + + /** 服务状态,0在线,1下线 */ + @Excel(name = "服务状态,0在线,1下线") + private String serviceState; + + /** 销售id */ + @Excel(name = "销售id") + private Integer salerId; + + /** 合同日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "合同日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date effectiveDate; + + /** 商家执照编号 */ + @Excel(name = "商家执照编号") + private String storeCorporation; + + /** 商家地址 */ + @Excel(name = "商家地址") + private String storeAddr; + + /** 商家法人身份证 */ + @Excel(name = "商家法人身份证") + private String storeCard; + + /** 是否发送通知消息,0发送,1不发送 */ + @Excel(name = "是否发送通知消息,0发送,1不发送") + private String withMsg; + + /** 提现额门限 */ + @Excel(name = "提现额门限") + private BigDecimal cashThreshold; + + /** 提现到账日期,0当天到账,n--N个工作日后到账 */ + @Excel(name = "提现到账日期,0当天到账,n--N个工作日后到账") + private Integer cashDay; + + /** 下线平均星评门限 */ + @Excel(name = "下线平均星评门限") + private BigDecimal serviceDownThreshold; + + /** 是否人工干预,0自动,1人工 */ + @Excel(name = "是否人工干预,0自动,1人工") + private String stateFlag; + + /** 商家经度 */ + @Excel(name = "商家经度") + private BigDecimal storeLon; + + /** 商家纬度 */ + @Excel(name = "商家纬度") + private BigDecimal storeLat; + + /** 商家运营时间 */ + @Excel(name = "商家运营时间") + private String onService; + + /** 商家描述详情 */ + @Excel(name = "商家描述详情") + private String detail; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** seg商家图片信息信息 */ + private List segchkStoreImageList; + + /** seg商家核消卡管理信息 */ + private List segchkStoreChkMgtList; + + /** seg商家标签管理信息 */ + private List segchkStoreLableMgtList; + + /** seg商家密码管理信息 */ + private List segchkStoreSecurityList; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setStoreName(String storeName) + { + this.storeName = storeName; + } + + public String getStoreName() + { + return storeName; + } + public void setStorePhone(String storePhone) + { + this.storePhone = storePhone; + } + + public String getStorePhone() + { + return storePhone; + } + public void setOpenid(String openid) + { + this.openid = openid; + } + + public String getOpenid() + { + return openid; + } + public void setNickName(String nickName) + { + this.nickName = nickName; + } + + public String getNickName() + { + return nickName; + } + public void setIconUrl(String iconUrl) + { + this.iconUrl = iconUrl; + } + + public String getIconUrl() + { + return iconUrl; + } + public void setServiceState(String serviceState) + { + this.serviceState = serviceState; + } + + public String getServiceState() + { + return serviceState; + } + public void setSalerId(Integer salerId) + { + this.salerId = salerId; + } + + public Integer getSalerId() + { + return salerId; + } + public void setEffectiveDate(Date effectiveDate) + { + this.effectiveDate = effectiveDate; + } + + public Date getEffectiveDate() + { + return effectiveDate; + } + public void setStoreCorporation(String storeCorporation) + { + this.storeCorporation = storeCorporation; + } + + public String getStoreCorporation() + { + return storeCorporation; + } + public void setStoreAddr(String storeAddr) + { + this.storeAddr = storeAddr; + } + + public String getStoreAddr() + { + return storeAddr; + } + public void setStoreCard(String storeCard) + { + this.storeCard = storeCard; + } + + public String getStoreCard() + { + return storeCard; + } + public void setWithMsg(String withMsg) + { + this.withMsg = withMsg; + } + + public String getWithMsg() + { + return withMsg; + } + public void setCashThreshold(BigDecimal cashThreshold) + { + this.cashThreshold = cashThreshold; + } + + public BigDecimal getCashThreshold() + { + return cashThreshold; + } + public void setCashDay(Integer cashDay) + { + this.cashDay = cashDay; + } + + public Integer getCashDay() + { + return cashDay; + } + public void setServiceDownThreshold(BigDecimal serviceDownThreshold) + { + this.serviceDownThreshold = serviceDownThreshold; + } + + public BigDecimal getServiceDownThreshold() + { + return serviceDownThreshold; + } + public void setStateFlag(String stateFlag) + { + this.stateFlag = stateFlag; + } + + public String getStateFlag() + { + return stateFlag; + } + public void setStoreLon(BigDecimal storeLon) + { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLon() + { + return storeLon; + } + public void setStoreLat(BigDecimal storeLat) + { + this.storeLat = storeLat; + } + + public BigDecimal getStoreLat() + { + return storeLat; + } + public void setOnService(String onService) + { + this.onService = onService; + } + + public String getOnService() + { + return onService; + } + public void setDetail(String detail) + { + this.detail = detail; + } + + public String getDetail() + { + return detail; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + public List getSegchkStoreImageList() + { + return segchkStoreImageList; + } + + public void setSegchkStoreImageList(List segchkStoreImageList) + { + this.segchkStoreImageList = segchkStoreImageList; + } + + public List getSegchkStoreChkMgtList() { + return segchkStoreChkMgtList; + } + + public void setSegchkStoreChkMgtList(List segchkStoreChkMgtList) { + this.segchkStoreChkMgtList = segchkStoreChkMgtList; + } + + public List getSegchkStoreLableMgtList() { + return segchkStoreLableMgtList; + } + + public void setSegchkStoreLableMgtList(List segchkStoreLableMgtList) { + this.segchkStoreLableMgtList = segchkStoreLableMgtList; + } + + public List getSegchkStoreSecurityList() { + return segchkStoreSecurityList; + } + + public void setSegchkStoreSecurityList(List segchkStoreSecurityList) { + this.segchkStoreSecurityList = segchkStoreSecurityList; + } + + public String getUnionId() { + return unionId; + } + + public void setUnionId(String unionId) { + this.unionId = unionId; + } + + @Override + public String toString() { + return "SegchkStoreBasicInfo{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", storeName='" + storeName + '\'' + + ", storePhone='" + storePhone + '\'' + + ", openid='" + openid + '\'' + + ", unionId='" + unionId + '\'' + + ", nickName='" + nickName + '\'' + + ", iconUrl='" + iconUrl + '\'' + + ", serviceState='" + serviceState + '\'' + + ", salerId=" + salerId + + ", effectiveDate=" + effectiveDate + + ", storeCorporation='" + storeCorporation + '\'' + + ", storeAddr='" + storeAddr + '\'' + + ", storeCard='" + storeCard + '\'' + + ", withMsg='" + withMsg + '\'' + + ", cashThreshold=" + cashThreshold + + ", cashDay=" + cashDay + + ", serviceDownThreshold=" + serviceDownThreshold + + ", stateFlag='" + stateFlag + '\'' + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", onService='" + onService + '\'' + + ", detail='" + detail + '\'' + + ", modTime=" + modTime + + ", segchkStoreImageList=" + segchkStoreImageList + + ", segchkStoreChkMgtList=" + segchkStoreChkMgtList + + ", segchkStoreLableMgtList=" + segchkStoreLableMgtList + + ", segchkStoreSecurityList=" + segchkStoreSecurityList + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCash.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCash.java new file mode 100644 index 0000000..a51c602 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCash.java @@ -0,0 +1,139 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商户户提现记录对象 segchk_store_cash + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreCash extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 提现额 */ + @Excel(name = "提现额") + private BigDecimal cash; + + /** 提现类型 */ + @Excel(name = "提现类型") + private String cashType; + + /** 提现id,全表唯一 */ + @Excel(name = "提现id,全表唯一") + private Long cashId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 提现结果,0未完成,1成功,2失败 */ + @Excel(name = "提现结果,0未完成,1成功,2失败") + private String retFlag; + + /** 关联的余额id */ + @Excel(name = "关联的余额id") + private String accountId; + + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setCash(BigDecimal cash) + { + this.cash = cash; + } + + public BigDecimal getCash() + { + return cash; + } + public void setCashType(String cashType) + { + this.cashType = cashType; + } + + public String getCashType() + { + return cashType; + } + public void setCashId(Long cashId) + { + this.cashId = cashId; + } + + public Long getCashId() + { + return cashId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setRetFlag(String retFlag) + { + this.retFlag = retFlag; + } + + public String getRetFlag() + { + return retFlag; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + @Override + public String toString() { + return "SegchkStoreCash{" + + "storeId=" + storeId + + ", cash=" + cash + + ", cashType='" + cashType + '\'' + + ", cashId=" + cashId + + ", providerId=" + providerId + + ", modTime=" + modTime + + ", retFlag='" + retFlag + '\'' + + ", accountId='" + accountId + '\'' + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCharge.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCharge.java new file mode 100644 index 0000000..aae4fcb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreCharge.java @@ -0,0 +1,126 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商户充值记录对象 segchk_store_charge + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreCharge extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 充值额 */ + @Excel(name = "充值额") + private BigDecimal charge; + + /** 充值类型 */ + @Excel(name = "充值类型") + private String chargeType; + + /** 充值id,全表唯一 */ + @Excel(name = "充值id,全表唯一") + private Long chargeId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 结果,0未完成,1成功,2失败 */ + @Excel(name = "结果,0未完成,1成功,2失败") + private String retFlag; + + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setCharge(BigDecimal charge) + { + this.charge = charge; + } + + public BigDecimal getCharge() + { + return charge; + } + public void setChargeType(String chargeType) + { + this.chargeType = chargeType; + } + + public String getChargeType() + { + return chargeType; + } + public void setChargeId(Long chargeId) + { + this.chargeId = chargeId; + } + + public Long getChargeId() + { + return chargeId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setRetFlag(String retFlag) + { + this.retFlag = retFlag; + } + + public String getRetFlag() + { + return retFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("storeId", getStoreId()) + .append("charge", getCharge()) + .append("chargeType", getChargeType()) + .append("chargeId", getChargeId()) + .append("providerId", getProviderId()) + .append("modTime", getModTime()) + .append("retFlag", getRetFlag()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreChkMgt.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreChkMgt.java new file mode 100644 index 0000000..720a404 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreChkMgt.java @@ -0,0 +1,137 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商家核消卡管理对象 segchk_store_chk_mgt + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreChkMgt extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 卡类型id */ + @Excel(name = "卡类型id") + private Long cardTypeId; + + /** 该商家针对该类型卡可核消次数 */ + @Excel(name = "该商家针对该类型卡可核消次数") + private Integer chkCount; + + /** 该商家针对该类型卡每月可售卡量 */ + @Excel(name = "该商家针对该类型卡每月可售卡量") + private Integer saleCount; + + /** 售卡奖励 */ + @Excel(name = "售卡奖励") + private BigDecimal cardCommission; + + /** 对应销售人员奖励 */ + @Excel(name = "对应销售人员奖励") + private BigDecimal salerCommission; + + /** 商家核消信息管理id */ + @Excel(name = "商家核消信息管理id") + private Integer mgtId; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setCardTypeId(Long cardTypeId) + { + this.cardTypeId = cardTypeId; + } + + public Long getCardTypeId() + { + return cardTypeId; + } + public void setChkCount(Integer chkCount) + { + this.chkCount = chkCount; + } + + public Integer getChkCount() + { + return chkCount; + } + public void setSaleCount(Integer saleCount) + { + this.saleCount = saleCount; + } + + public Integer getSaleCount() + { + return saleCount; + } + public void setCardCommission(BigDecimal cardCommission) + { + this.cardCommission = cardCommission; + } + + public BigDecimal getCardCommission() + { + return cardCommission; + } + public void setSalerCommission(BigDecimal salerCommission) + { + this.salerCommission = salerCommission; + } + + public BigDecimal getSalerCommission() + { + return salerCommission; + } + public void setMgtId(Integer mgtId) + { + this.mgtId = mgtId; + } + + public Integer getMgtId() + { + return mgtId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("storeId", getStoreId()) + .append("cardTypeId", getCardTypeId()) + .append("chkCount", getChkCount()) + .append("saleCount", getSaleCount()) + .append("cardCommission", getCardCommission()) + .append("salerCommission", getSalerCommission()) + .append("mgtId", getMgtId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreImage.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreImage.java new file mode 100644 index 0000000..7f6ff99 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreImage.java @@ -0,0 +1,265 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商家图片信息对象 segchk_store_image + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreImage extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 商家营业执照图1路径 */ + @Excel(name = "商家营业执照图1路径") + private String storeCertificate1; + + /** 商家营业执照图2路径 */ + @Excel(name = "商家营业执照图2路径") + private String storeCertificate2; + + /** 商家图标路径,用于在商家列表中显示 */ + @Excel(name = "商家图标路径,用于在商家列表中显示") + private String storeIcon; + + /** 商家大图标路径,用于在商家列表中显示 */ + @Excel(name = "商家大图标路径,用于在商家列表中显示") + private String storeGificon; + + /** 商家轮播图1路径,默认用于首页推荐轮播图 */ + @Excel(name = "商家轮播图1路径,默认用于首页推荐轮播图") + private String storeCarousel1; + + /** 商家轮播图2路径 */ + @Excel(name = "商家轮播图2路径") + private String storeCarousel2; + + /** 商家轮播图3路径 */ + @Excel(name = "商家轮播图3路径") + private String storeCarousel3; + + /** 商家轮播图4路径 */ + @Excel(name = "商家轮播图4路径") + private String storeCarousel4; + + /** 商家轮播图5路径 */ + @Excel(name = "商家轮播图5路径") + private String storeCarousel5; + + /** 商家轮播图6路径 */ + @Excel(name = "商家轮播图6路径") + private String storeCarousel6; + + /** 商家环境图1 */ + @Excel(name = "商家环境图1") + private String storeEnv1; + + /** 商家环境图2 */ + @Excel(name = "商家环境图2") + private String storeEnv2; + + /** 商家环境图3 */ + @Excel(name = "商家环境图3") + private String storeEnv3; + + /** 商家环境图4 */ + @Excel(name = "商家环境图4") + private String storeEnv4; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setStoreCertificate1(String storeCertificate1) + { + this.storeCertificate1 = storeCertificate1; + } + + public String getStoreCertificate1() + { + return storeCertificate1; + } + public void setStoreCertificate2(String storeCertificate2) + { + this.storeCertificate2 = storeCertificate2; + } + + public String getStoreCertificate2() + { + return storeCertificate2; + } + public void setStoreIcon(String storeIcon) + { + this.storeIcon = storeIcon; + } + + public String getStoreIcon() + { + return storeIcon; + } + public void setStoreGificon(String storeGificon) + { + this.storeGificon = storeGificon; + } + + public String getStoreGificon() + { + return storeGificon; + } + public void setStoreCarousel1(String storeCarousel1) + { + this.storeCarousel1 = storeCarousel1; + } + + public String getStoreCarousel1() + { + return storeCarousel1; + } + public void setStoreCarousel2(String storeCarousel2) + { + this.storeCarousel2 = storeCarousel2; + } + + public String getStoreCarousel2() + { + return storeCarousel2; + } + public void setStoreCarousel3(String storeCarousel3) + { + this.storeCarousel3 = storeCarousel3; + } + + public String getStoreCarousel3() + { + return storeCarousel3; + } + public void setStoreCarousel4(String storeCarousel4) + { + this.storeCarousel4 = storeCarousel4; + } + + public String getStoreCarousel4() + { + return storeCarousel4; + } + public void setStoreCarousel5(String storeCarousel5) + { + this.storeCarousel5 = storeCarousel5; + } + + public String getStoreCarousel5() + { + return storeCarousel5; + } + public void setStoreCarousel6(String storeCarousel6) + { + this.storeCarousel6 = storeCarousel6; + } + + public String getStoreCarousel6() + { + return storeCarousel6; + } + public void setStoreEnv1(String storeEnv1) + { + this.storeEnv1 = storeEnv1; + } + + public String getStoreEnv1() + { + return storeEnv1; + } + public void setStoreEnv2(String storeEnv2) + { + this.storeEnv2 = storeEnv2; + } + + public String getStoreEnv2() + { + return storeEnv2; + } + public void setStoreEnv3(String storeEnv3) + { + this.storeEnv3 = storeEnv3; + } + + public String getStoreEnv3() + { + return storeEnv3; + } + public void setStoreEnv4(String storeEnv4) + { + this.storeEnv4 = storeEnv4; + } + + public String getStoreEnv4() + { + return storeEnv4; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("storeId", getStoreId()) + .append("storeCertificate1", getStoreCertificate1()) + .append("storeCertificate2", getStoreCertificate2()) + .append("storeIcon", getStoreIcon()) + .append("storeGificon", getStoreGificon()) + .append("storeCarousel1", getStoreCarousel1()) + .append("storeCarousel2", getStoreCarousel2()) + .append("storeCarousel3", getStoreCarousel3()) + .append("storeCarousel4", getStoreCarousel4()) + .append("storeCarousel5", getStoreCarousel5()) + .append("storeCarousel6", getStoreCarousel6()) + .append("storeEnv1", getStoreEnv1()) + .append("storeEnv2", getStoreEnv2()) + .append("storeEnv3", getStoreEnv3()) + .append("storeEnv4", getStoreEnv4()) + .append("modTime", getModTime()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java new file mode 100644 index 0000000..8dd6873 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreIndexWebResp.java @@ -0,0 +1,209 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.List; + +/** + * seg返回首页推荐商户对象 segchk_recommender_storeweb + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkStoreIndexWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 商家状态 */ + @Excel(name = "商家状态") + private String serviceState; + + /** 商户显示序号 */ + @Excel(name = "商户显示序号") + private Integer storeSort; + + /** 商户列表模式时的图标 */ + @Excel(name = "商户列表模式时的图标") + private String storeIcon; + + /** 商户的大图标 */ + @Excel(name = "商户的大图标") + private String storeGificon; + + /** 商户经度 */ + @Excel(name = "商户经度") + private BigDecimal storeLon; + + /** 商户纬度 */ + @Excel(name = "商户纬度") + private BigDecimal storeLat; + + /** 用户距离 */ + @Excel(name = "用户距离") + private BigDecimal userDist; + + /** 商户累积核消次数 */ + @Excel(name = "商户累积核消次数") + private Integer chkCount; + + /** 商户平均星评 */ + @Excel(name = "商户平均星评") + private BigDecimal starAvg; + + /** 在线状态 */ + @Excel(name = "对应的销售id") + private Integer salerId; + + + /** 商户标签列表 */ + @Valid + private List lables; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Integer getStoreSort() { + return storeSort; + } + + public void setStoreSort(Integer storeSort) { + this.storeSort = storeSort; + } + + public String getStoreIcon() { + return storeIcon; + } + + public void setStoreIcon(String storeIcon) { + this.storeIcon = storeIcon; + } + + public String getStoreGificon() { + return storeGificon; + } + + public void setStoreGificon(String storeGificon) { + this.storeGificon = storeGificon; + } + + public BigDecimal getStoreLon() { + return storeLon; + } + + public void setStoreLon(BigDecimal storeLon) { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLat() { + return storeLat; + } + + public void setStoreLat(BigDecimal storeLat) { + this.storeLat = storeLat; + } + + public Integer getChkCount() { + return chkCount; + } + + public void setChkCount(Integer chkCount) { + this.chkCount = chkCount; + } + + public BigDecimal getStarAvg() { + return starAvg; + } + + public void setStarAvg(BigDecimal starAvg) { + this.starAvg = starAvg; + } + + public List getLables() { + return lables; + } + + public void setLables(List lables) { + this.lables = lables; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + + public String getServiceState() { + return serviceState; + } + + public void setServiceState(String serviceState) { + this.serviceState = serviceState; + } + + public Integer getSalerId() { + return salerId; + } + + public void setSalerId(Integer salerId) { + this.salerId = salerId; + } + + @Override + public String toString() { + return "SegchkStoreIndexWebResp{" + + "providerId=" + providerId + + ", storeId=" + storeId + + ", storeName='" + storeName + '\'' + + ", serviceState='" + serviceState + '\'' + + ", storeSort=" + storeSort + + ", storeIcon='" + storeIcon + '\'' + + ", storeGificon='" + storeGificon + '\'' + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", chkCount=" + chkCount + + ", starAvg=" + starAvg + + ", salerId=" + salerId + + ", lables=" + lables + + ", userDist=" + userDist + + '}'; + } + + public BigDecimal getUserDist() { + return userDist; + } + + public void setUserDist(BigDecimal userDist) { + this.userDist = userDist; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreLableMgt.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreLableMgt.java new file mode 100644 index 0000000..42c6421 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreLableMgt.java @@ -0,0 +1,139 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商家标签管理对象 segchk_store_lable_mgt + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreLableMgt extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 标签id */ + @Excel(name = "标签id") + private Long lableId; + + /** 显示顺序id */ + @Excel(name = "显示顺序id") + private Integer sortId; + + /** 标签来源id,0关键字,1优惠标签 */ + @Excel(name = "标签来源id,0关键字,1优惠标签") + private Integer typeId; + + /** 管理状态,0有效,-1失效 */ + @Excel(name = "管理状态,0有效,-1失效") + private Integer mgtState; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 商家核消信息管理id */ + @Excel(name = "商家核消信息管理id") + private Integer mgtId; + + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setLableId(Long lableId) + { + this.lableId = lableId; + } + + public Long getLableId() + { + return lableId; + } + public void setSortId(Integer sortId) + { + this.sortId = sortId; + } + + public Integer getSortId() + { + return sortId; + } + public void setTypeId(Integer typeId) + { + this.typeId = typeId; + } + + public Integer getTypeId() + { + return typeId; + } + public void setMgtState(Integer mgtState) + { + this.mgtState = mgtState; + } + + public Integer getMgtState() + { + return mgtState; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setMgtId(Integer mgtId) + { + this.mgtId = mgtId; + } + + public Integer getMgtId() + { + return mgtId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("storeId", getStoreId()) + .append("providerId", getProviderId()) + .append("lableId", getLableId()) + .append("sortId", getSortId()) + .append("typeId", getTypeId()) + .append("mgtState", getMgtState()) + .append("modTime", getModTime()) + .append("mgtId", getMgtId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreReward.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreReward.java new file mode 100644 index 0000000..91c76ce --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreReward.java @@ -0,0 +1,140 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商户奖励对象 segchk_store_reward + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreReward extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 奖励额 */ + @Excel(name = "奖励额") + private BigDecimal reward; + + /** 奖励类型 */ + @Excel(name = "奖励类型") + private String rewardType; + + /** 奖励卡号 */ + @Excel(name = "奖励卡号") + private Long rewardCardId; + + /** 奖励卡类型,0--9块9卡,1--99卡 */ + @Excel(name = "奖励卡类型,0--9块9卡,1--99卡") + private Long rewardCardTypeId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 奖励id号,全表唯一 */ + @Excel(name = "奖励id号,全表唯一") + private Long rewardId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setReward(BigDecimal reward) + { + this.reward = reward; + } + + public BigDecimal getReward() + { + return reward; + } + public void setRewardType(String rewardType) + { + this.rewardType = rewardType; + } + + public String getRewardType() + { + return rewardType; + } + public void setRewardCardId(Long rewardCardId) + { + this.rewardCardId = rewardCardId; + } + + public Long getRewardCardId() + { + return rewardCardId; + } + public void setRewardCardTypeId(Long rewardCardTypeId) + { + this.rewardCardTypeId = rewardCardTypeId; + } + + public Long getRewardCardTypeId() + { + return rewardCardTypeId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setRewardId(Long rewardId) + { + this.rewardId = rewardId; + } + + public Long getRewardId() + { + return rewardId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("storeId", getStoreId()) + .append("reward", getReward()) + .append("rewardType", getRewardType()) + .append("rewardCardId", getRewardCardId()) + .append("rewardCardTypeId", getRewardCardTypeId()) + .append("modTime", getModTime()) + .append("rewardId", getRewardId()) + .append("providerId", getProviderId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSecurity.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSecurity.java new file mode 100644 index 0000000..a86727d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSecurity.java @@ -0,0 +1,97 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商户密码对象 segchk_store_security + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreSecurity extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 密码 */ + @Excel(name = "密码") + private String passwd; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 密码id,全表唯一 */ + @Excel(name = "密码id,全表唯一") + private Long pwdId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setPasswd(String passwd) + { + this.passwd = passwd; + } + + public String getPasswd() + { + return passwd; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setPwdId(Long pwdId) + { + this.pwdId = pwdId; + } + + public Long getPwdId() + { + return pwdId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("storeId", getStoreId()) + .append("passwd", getPasswd()) + .append("modTime", getModTime()) + .append("pwdId", getPwdId()) + .append("providerId", getProviderId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSelfMgt.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSelfMgt.java new file mode 100644 index 0000000..144144d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkStoreSelfMgt.java @@ -0,0 +1,209 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg商家自定义卡管理对象 segchk_store_self_mgt + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkStoreSelfMgt extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 赠卡id */ + @Excel(name = "赠卡id") + private Long freeCardId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 会员卡号id,全局惟一 */ + @Excel(name = "会员卡号id,全局惟一") + private Long cardId; + + /** 标签id,只在优惠标签时有效 */ + @Excel(name = "标签id,只在优惠标签时有效") + private Long lableId; + + /** 标签来源id,0自定义卡,2优惠标签 */ + @Excel(name = "标签来源id,0自定义卡,2优惠标签") + private Integer typeId; + + /** 权益次数 */ + @Excel(name = "权益次数") + private Integer freeCount; + + /** 权益卡名称 */ + @Excel(name = "权益卡名称") + private String freeName; + + /** 权益内容 */ + @Excel(name = "权益内容") + private String freeContent; + + /** 剩余权益次数 */ + @Excel(name = "剩余权益次数") + private Integer leftCount; + + /** 状态,0正常,1过期 */ + @Excel(name = "状态,0正常,1过期") + private String status; + + public void setFreeCardId(Long freeCardId) + { + this.freeCardId = freeCardId; + } + + public Long getFreeCardId() + { + return freeCardId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setCardId(Long cardId) + { + this.cardId = cardId; + } + + public Long getCardId() + { + return cardId; + } + public void setLableId(Long lableId) + { + this.lableId = lableId; + } + + public Long getLableId() + { + return lableId; + } + public void setTypeId(Integer typeId) + { + this.typeId = typeId; + } + + public Integer getTypeId() + { + return typeId; + } + public void setFreeCount(Integer freeCount) + { + this.freeCount = freeCount; + } + + public Integer getFreeCount() + { + return freeCount; + } + public void setFreeName(String freeName) + { + this.freeName = freeName; + } + + public String getFreeName() + { + return freeName; + } + public void setFreeContent(String freeContent) + { + this.freeContent = freeContent; + } + + public String getFreeContent() + { + return freeContent; + } + public void setLeftCount(Integer leftCount) + { + this.leftCount = leftCount; + } + + public Integer getLeftCount() + { + return leftCount; + } + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("freeCardId", getFreeCardId()) + .append("modTime", getModTime()) + .append("storeId", getStoreId()) + .append("providerId", getProviderId()) + .append("userId", getUserId()) + .append("cardId", getCardId()) + .append("lableId", getLableId()) + .append("typeId", getTypeId()) + .append("freeCount", getFreeCount()) + .append("freeName", getFreeName()) + .append("freeContent", getFreeContent()) + .append("leftCount", getLeftCount()) + .append("status", getStatus()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSystemSetting.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSystemSetting.java new file mode 100644 index 0000000..1c52ece --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkSystemSetting.java @@ -0,0 +1,357 @@ +package com.ruoyi.segchk.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 系统设置对象 segchk_system_setting + * + * @author yinzhiying + * @date 2021-10-27 + */ +public class SegchkSystemSetting extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键id */ + private Long id; + + /** 前端地址 */ + @Excel(name = "前端地址") + private String siteUrl; + + /** 网站名称 */ + @Excel(name = "网站名称") + private String siteName; + + /** 网站LOGO(前端搜索页旁边和店铺登陆页) */ + @Excel(name = "网站LOGO(前端搜索页旁边和店铺登陆页)") + private String logo; + + /** pc端,admin端,store端标签图片 */ + @Excel(name = "pc端,admin端,store端标签图片") + private String labelLog; + + /** pc端登录背景图片 */ + @Excel(name = "pc端登录背景图片") + private String siteLogin; + + /** pc端注册背景图片 */ + @Excel(name = "pc端注册背景图片") + private String siteRegister; + + /** 店铺端登录图片 */ + @Excel(name = "店铺端登录图片") + private String storeLogin; + + /** 店铺端注册图片 */ + @Excel(name = "店铺端注册图片") + private String storeRegister; + + /** 版权信息(pc和store底部) */ + @Excel(name = "版权信息", readConverterExp = "p=c和store底部") + private String copyrightInfo; + + /** 注册协议(pc端) */ + @Excel(name = "注册协议", readConverterExp = "p=c端") + private String registerProtocol; + + /** 用户隐私协议 */ + @Excel(name = "用户隐私协议", readConverterExp = "p=c端") + private String userPrivacyAgreement; + + /** vip会员服务协议 */ + @Excel(name = "vip会员服务协议", readConverterExp = "p=c端") + private String vipServiceAgreement; + + /** 店铺端注册协议 */ + @Excel(name = "店铺端注册协议") + private String storeRegisterProtocol; + + /** 店铺端开店协议 */ + @Excel(name = "店铺端开店协议") + private String storeOpenProtocol; + + /** 联系电话 */ + @Excel(name = "联系电话") + private String phone; + + /** admin端登录logo */ + @Excel(name = "admin端登录logo") + private String adminLogo; + + /** admin端首页logo */ + @Excel(name = "admin端首页logo") + private String adminIndexLogo; + + /** 是否开启验证码 0 开启 1 不开启 默认0 */ + @Excel(name = "是否开启验证码 0 开启 1 不开启 默认0 ") + private String captchaOpen; + + /** 店铺商品审核开关 0 需要审核 1 不需要 默认0 */ + @Excel(name = "店铺商品审核开关 0 需要审核 1 不需要 默认0 ") + private String storeSpuAudit; + + /** 会员价开关状态 0开启 1不开启 默认0 */ + @Excel(name = "会员价开关状态 0开启 1不开启 默认0") + private String memberPriceStatus; + + /** 众筹协议 */ + @Excel(name = "众筹协议") + private String crowdfundingProtocol; + + /** h5域名 */ + @Excel(name = "h5域名") + private String h5CallBackDomain; + + /** pc域名 */ + @Excel(name = "pc域名") + private String pcCallBackDomain; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setSiteUrl(String siteUrl) + { + this.siteUrl = siteUrl; + } + + public String getSiteUrl() + { + return siteUrl; + } + public void setSiteName(String siteName) + { + this.siteName = siteName; + } + + public String getSiteName() + { + return siteName; + } + public void setLogo(String logo) + { + this.logo = logo; + } + + public String getLogo() + { + return logo; + } + public void setLabelLog(String labelLog) + { + this.labelLog = labelLog; + } + + public String getLabelLog() + { + return labelLog; + } + public void setSiteLogin(String siteLogin) + { + this.siteLogin = siteLogin; + } + + public String getSiteLogin() + { + return siteLogin; + } + public void setSiteRegister(String siteRegister) + { + this.siteRegister = siteRegister; + } + + public String getSiteRegister() + { + return siteRegister; + } + public void setStoreLogin(String storeLogin) + { + this.storeLogin = storeLogin; + } + + public String getStoreLogin() + { + return storeLogin; + } + public void setStoreRegister(String storeRegister) + { + this.storeRegister = storeRegister; + } + + public String getStoreRegister() + { + return storeRegister; + } + public void setCopyrightInfo(String copyrightInfo) + { + this.copyrightInfo = copyrightInfo; + } + + public String getCopyrightInfo() + { + return copyrightInfo; + } + public void setRegisterProtocol(String registerProtocol) + { + this.registerProtocol = registerProtocol; + } + + public String getRegisterProtocol() + { + return registerProtocol; + } + public void setStoreRegisterProtocol(String storeRegisterProtocol) + { + this.storeRegisterProtocol = storeRegisterProtocol; + } + + public String getStoreRegisterProtocol() + { + return storeRegisterProtocol; + } + public void setStoreOpenProtocol(String storeOpenProtocol) + { + this.storeOpenProtocol = storeOpenProtocol; + } + + public String getStoreOpenProtocol() + { + return storeOpenProtocol; + } + public void setPhone(String phone) + { + this.phone = phone; + } + + public String getPhone() + { + return phone; + } + public void setAdminLogo(String adminLogo) + { + this.adminLogo = adminLogo; + } + + public String getAdminLogo() + { + return adminLogo; + } + public void setAdminIndexLogo(String adminIndexLogo) + { + this.adminIndexLogo = adminIndexLogo; + } + + public String getAdminIndexLogo() + { + return adminIndexLogo; + } + public void setCaptchaOpen(String captchaOpen) + { + this.captchaOpen = captchaOpen; + } + + public String getCaptchaOpen() + { + return captchaOpen; + } + public void setStoreSpuAudit(String storeSpuAudit) + { + this.storeSpuAudit = storeSpuAudit; + } + + public String getStoreSpuAudit() + { + return storeSpuAudit; + } + public void setMemberPriceStatus(String memberPriceStatus) + { + this.memberPriceStatus = memberPriceStatus; + } + + public String getMemberPriceStatus() + { + return memberPriceStatus; + } + public void setCrowdfundingProtocol(String crowdfundingProtocol) + { + this.crowdfundingProtocol = crowdfundingProtocol; + } + + public String getCrowdfundingProtocol() + { + return crowdfundingProtocol; + } + public void setH5CallBackDomain(String h5CallBackDomain) + { + this.h5CallBackDomain = h5CallBackDomain; + } + + public String getH5CallBackDomain() + { + return h5CallBackDomain; + } + public void setPcCallBackDomain(String pcCallBackDomain) + { + this.pcCallBackDomain = pcCallBackDomain; + } + + public String getPcCallBackDomain() + { + return pcCallBackDomain; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("siteUrl", getSiteUrl()) + .append("siteName", getSiteName()) + .append("logo", getLogo()) + .append("labelLog", getLabelLog()) + .append("siteLogin", getSiteLogin()) + .append("siteRegister", getSiteRegister()) + .append("storeLogin", getStoreLogin()) + .append("storeRegister", getStoreRegister()) + .append("copyrightInfo", getCopyrightInfo()) + .append("registerProtocol", getRegisterProtocol()) + .append("userPrivacyAgreement", getUserPrivacyAgreement()) + .append("vipServiceAgreement", getVipServiceAgreement()) + .append("storeRegisterProtocol", getStoreRegisterProtocol()) + .append("storeOpenProtocol", getStoreOpenProtocol()) + .append("phone", getPhone()) + .append("adminLogo", getAdminLogo()) + .append("adminIndexLogo", getAdminIndexLogo()) + .append("captchaOpen", getCaptchaOpen()) + .append("storeSpuAudit", getStoreSpuAudit()) + .append("memberPriceStatus", getMemberPriceStatus()) + .append("crowdfundingProtocol", getCrowdfundingProtocol()) + .append("h5CallBackDomain", getH5CallBackDomain()) + .append("pcCallBackDomain", getPcCallBackDomain()) + .toString(); + } + + public String getUserPrivacyAgreement() { + return userPrivacyAgreement; + } + + public void setUserPrivacyAgreement(String userPrivacyAgreement) { + this.userPrivacyAgreement = userPrivacyAgreement; + } + + public String getVipServiceAgreement() { + return vipServiceAgreement; + } + + public void setVipServiceAgreement(String vipServiceAgreement) { + this.vipServiceAgreement = vipServiceAgreement; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccount.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccount.java new file mode 100644 index 0000000..ccd1e71 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccount.java @@ -0,0 +1,137 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户余额信息对象 segchk_user_account + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserAccount extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 余额 */ + @Excel(name = "余额") + private BigDecimal account; + + /** 余额类型 */ + @Excel(name = "余额类型") + private String accountType; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 余额id */ + @Excel(name = "余额id") + private Long accountId; + + /** 奖励id号 */ + @Excel(name = "奖励id号") + private Long rewardId; + + /** 充值id */ + @Excel(name = "充值id") + private Long chargeId; + + /** 提现id */ + @Excel(name = "提现id") + private Long cashId; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setAccount(BigDecimal account) + { + this.account = account; + } + + public BigDecimal getAccount() + { + return account; + } + public void setAccountType(String accountType) + { + this.accountType = accountType; + } + + public String getAccountType() + { + return accountType; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setAccountId(Long accountId) + { + this.accountId = accountId; + } + + public Long getAccountId() + { + return accountId; + } + public void setRewardId(Long rewardId) + { + this.rewardId = rewardId; + } + + public Long getRewardId() + { + return rewardId; + } + public void setChargeId(Long chargeId) + { + this.chargeId = chargeId; + } + + public Long getChargeId() + { + return chargeId; + } + public void setCashId(Long cashId) + { + this.cashId = cashId; + } + + public Long getCashId() + { + return cashId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("account", getAccount()) + .append("accountType", getAccountType()) + .append("providerId", getProviderId()) + .append("accountId", getAccountId()) + .append("rewardId", getRewardId()) + .append("chargeId", getChargeId()) + .append("cashId", getCashId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccountCheck.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccountCheck.java new file mode 100644 index 0000000..b2c4024 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserAccountCheck.java @@ -0,0 +1,76 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg用户余额信息对象 segchk_user_account + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserAccountCheck extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 余额 */ + @Excel(name = "余额") + private BigDecimal account; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 余额id */ + @Excel(name = "余额id") + private Long accountId; + + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public BigDecimal getAccount() { + return account; + } + + public void setAccount(BigDecimal account) { + this.account = account; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + @Override + public String toString() { + return "SegchkUserAccountCheck{" + + "userId=" + userId + + ", account=" + account + + ", providerId=" + providerId + + ", accountId=" + accountId + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserBasicInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserBasicInfo.java new file mode 100644 index 0000000..3f674ca --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserBasicInfo.java @@ -0,0 +1,123 @@ +package com.ruoyi.segchk.domain; + +import java.util.List; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户基本信息对象 segchk_user_basic_info + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserBasicInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 用户手机号 */ + @Excel(name = "用户手机号") + private String phoneNo; + + /** 用户头像,与微信头像一致 */ + @Excel(name = "用户头像,与微信头像一致") + private String userIcon; + + /** 是否绑定微信 */ + @Excel(name = "是否绑定微信") + private String hasWechat; + + /** 卡类型id,NULL普通用户,其他,不同vip卡 */ + @Excel(name = "卡类型id,NULL普通用户,其他,不同vip卡") + private Long cardTypeId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** seg用户实名认证信息信息 */ + private List segchkUserCertificationInfoList; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setPhoneNo(String phoneNo) + { + this.phoneNo = phoneNo; + } + + public String getPhoneNo() + { + return phoneNo; + } + public void setUserIcon(String userIcon) + { + this.userIcon = userIcon; + } + + public String getUserIcon() + { + return userIcon; + } + public void setHasWechat(String hasWechat) + { + this.hasWechat = hasWechat; + } + + public String getHasWechat() + { + return hasWechat; + } + public void setCardTypeId(Long cardTypeId) + { + this.cardTypeId = cardTypeId; + } + + public Long getCardTypeId() + { + return cardTypeId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + public List getSegchkUserCertificationInfoList() + { + return segchkUserCertificationInfoList; + } + + public void setSegchkUserCertificationInfoList(List segchkUserCertificationInfoList) + { + this.segchkUserCertificationInfoList = segchkUserCertificationInfoList; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("phoneNo", getPhoneNo()) + .append("userIcon", getUserIcon()) + .append("hasWechat", getHasWechat()) + .append("cardTypeId", getCardTypeId()) + .append("providerId", getProviderId()) + .append("segchkUserCertificationInfoList", getSegchkUserCertificationInfoList()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCash.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCash.java new file mode 100644 index 0000000..41e4fc8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCash.java @@ -0,0 +1,139 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户提现记录对象 segchk_user_cash + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserCash extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 提现额 */ + @Excel(name = "提现额") + private BigDecimal cash; + + /** 提现类型 */ + @Excel(name = "提现类型") + private String cashType; + + /** 提现id,全表唯一 */ + @Excel(name = "提现id,全表唯一") + private Long cashId; + + /** 余额id */ + @Excel(name = "余额id,") + private Long accountId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 结果,0未完成,1成功,2失败 */ + @Excel(name = "结果,0未完成,1成功,2失败") + private Integer retFlag; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setCash(BigDecimal cash) + { + this.cash = cash; + } + + public BigDecimal getCash() + { + return cash; + } + public void setCashType(String cashType) + { + this.cashType = cashType; + } + + public String getCashType() + { + return cashType; + } + public void setCashId(Long cashId) + { + this.cashId = cashId; + } + + public Long getCashId() + { + return cashId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setRetFlag(Integer retFlag) + { + this.retFlag = retFlag; + } + + public Integer getRetFlag() + { + return retFlag; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + @Override + public String toString() { + return "SegchkUserCash{" + + "userId=" + userId + + ", cash=" + cash + + ", cashType='" + cashType + '\'' + + ", cashId=" + cashId + + ", accountId=" + accountId + + ", providerId=" + providerId + + ", modTime=" + modTime + + ", retFlag=" + retFlag + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsReq.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsReq.java new file mode 100644 index 0000000..cddc18c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsReq.java @@ -0,0 +1,124 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * seg用户提现记录对象 segchk_user_cash + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserCashOpsReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 提现额 */ + @Excel(name = "提现额") + private BigDecimal cash; + + /** 提现id,全表唯一 */ + @Excel(name = "提现id,全表唯一") + private Long cashId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 用户身份,0运营商,1商家,2用户 */ + @Excel(name = "用户身份") + private int userLevel; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 结果,0未完成,1成功,2失败 */ + @Excel(name = "结果,0未完成,1成功,2失败") + private Integer retFlag; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setCash(BigDecimal cash) + { + this.cash = cash; + } + + public Long getCashId() + { + return cashId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setRetFlag(Integer retFlag) + { + this.retFlag = retFlag; + } + + public Integer getRetFlag() + { + return retFlag; + } + + public BigDecimal getCash() { + return cash; + } + + public void setCashId(Long cashId) { + this.cashId = cashId; + } + + public int getUserLevel() { + return userLevel; + } + + public void setUserLevel(int userLevel) { + this.userLevel = userLevel; + } + + @Override + public String toString() { + return "SegchkUserCashOpsReq{" + + "userId=" + userId + + ", cash=" + cash + + ", cashId=" + cashId + + ", providerId=" + providerId + + ", userLevel=" + userLevel + + ", modTime=" + modTime + + ", retFlag=" + retFlag + + ", code=" + getSearchValue() + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsResp.java new file mode 100644 index 0000000..76f541d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashOpsResp.java @@ -0,0 +1,49 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg用户提现记录对象 segchk_user_cash + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserCashOpsResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 提现额 */ + @Excel(name = "提现额") + private BigDecimal account; + + /** 提现id,全表唯一 */ + @Excel(name = "提现id,全表唯一") + private Long cashId; + + public BigDecimal getAccount() { + return account; + } + + public void setAccount(BigDecimal account) { + this.account = account; + } + + public Long getCashId() { + return cashId; + } + + public void setCashId(Long cashId) { + this.cashId = cashId; + } + + @Override + public String toString() { + return "SegchkUserCashOpsResp{" + + "account=" + account + + ", cashId=" + cashId + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashWebResp.java new file mode 100644 index 0000000..2390fee --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCashWebResp.java @@ -0,0 +1,66 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * seg用户奖励对象 segchk_user_reward + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserCashWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal cash; + + /** 奖励卡号 */ + @Excel(name = "奖励卡号") + private String retFlag; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") + private Date modTime; + + + public BigDecimal getCash() { + return cash; + } + + public void setCash(BigDecimal cash) { + this.cash = cash; + } + + public String getRetFlag() { + return retFlag; + } + + public void setRetFlag(String retFlag) { + this.retFlag = retFlag; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + @Override + public String toString() { + return "SegchkUserCashWebResp{" + + "cash=" + cash + + ", retFlag='" + retFlag + '\'' + + ", modTime=" + modTime + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCertificationInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCertificationInfo.java new file mode 100644 index 0000000..9a7d7fe --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCertificationInfo.java @@ -0,0 +1,139 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户实名认证信息对象 segchk_user_certification_info + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserCertificationInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 身份证信息id,全表唯一 */ + @Excel(name = "身份证信息id,全表唯一") + private Long usercardId; + + /** 用户真实姓名 */ + @Excel(name = "用户真实姓名") + private String userName; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 身份证号 */ + @Excel(name = "身份证号") + private String idcard; + + /** 身份证正面照片路径 */ + @Excel(name = "身份证正面照片路径") + private String card1; + + /** 身份证反面照片路径 */ + @Excel(name = "身份证反面照片路径") + private String card2; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public void setUsercardId(Long usercardId) + { + this.usercardId = usercardId; + } + + public Long getUsercardId() + { + return usercardId; + } + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getUserName() + { + return userName; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setIdcard(String idcard) + { + this.idcard = idcard; + } + + public String getIdcard() + { + return idcard; + } + public void setCard1(String card1) + { + this.card1 = card1; + } + + public String getCard1() + { + return card1; + } + public void setCard2(String card2) + { + this.card2 = card2; + } + + public String getCard2() + { + return card2; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("usercardId", getUsercardId()) + .append("userName", getUserName()) + .append("userId", getUserId()) + .append("providerId", getProviderId()) + .append("idcard", getIdcard()) + .append("card1", getCard1()) + .append("card2", getCard2()) + .append("modTime", getModTime()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCharge.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCharge.java new file mode 100644 index 0000000..ac57e1a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCharge.java @@ -0,0 +1,182 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户充值记录对象 segchk_user_charge + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserCharge extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 充值额 */ + @Excel(name = "充值额") + private BigDecimal charge; + + /** 使用的余额部分 */ + @Excel(name = "使用的余额部分") + private BigDecimal accountUsed; + + /** 会员卡号id,全局惟一 */ + @Excel(name = "会员卡号id,全局惟一") + private Long cardId; + + /** 会员卡类型,0--9块9,1---99 */ + @Excel(name = "会员卡类型,0--9块9,1---99") + private Long cardTypeId; + + /** 充值类型 */ + @Excel(name = "充值类型") + private String chargeType; + + /** 充值id,全表唯一 */ + @Excel(name = "充值id,全表唯一") + private Long chargeId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 结果,0未完成,1成功,2失败 */ + @Excel(name = "结果,0未完成,1成功,2失败") + private Integer retFlag; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setCharge(BigDecimal charge) + { + this.charge = charge; + } + + public BigDecimal getCharge() + { + return charge; + } + public void setAccountUsed(BigDecimal accountUsed) + { + this.accountUsed = accountUsed; + } + + public BigDecimal getAccountUsed() + { + return accountUsed; + } + public void setCardId(Long cardId) + { + this.cardId = cardId; + } + + public Long getCardId() + { + return cardId; + } + public void setCardTypeId(Long cardTypeId) + { + this.cardTypeId = cardTypeId; + } + + public Long getCardTypeId() + { + return cardTypeId; + } + public void setChargeType(String chargeType) + { + this.chargeType = chargeType; + } + + public String getChargeType() + { + return chargeType; + } + public void setChargeId(Long chargeId) + { + this.chargeId = chargeId; + } + + public Long getChargeId() + { + return chargeId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setRetFlag(Integer retFlag) + { + this.retFlag = retFlag; + } + + public Integer getRetFlag() + { + return retFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("storeId", getStoreId()) + .append("charge", getCharge()) + .append("accountUsed", getAccountUsed()) + .append("cardId", getCardId()) + .append("cardTypeId", getCardTypeId()) + .append("chargeType", getChargeType()) + .append("chargeId", getChargeId()) + .append("providerId", getProviderId()) + .append("modTime", getModTime()) + .append("retFlag", getRetFlag()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeCard.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeCard.java new file mode 100644 index 0000000..b27b0eb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeCard.java @@ -0,0 +1,153 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; + +/** + * seg用户充值可选卡对象 SegchkUserChargeCard + * + * @author yinzhiying + * @date 2021-07-30 + */ +public class SegchkUserChargeCard extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id */ + @Excel(name = "运营商id") + private Long providerId; + + /** 卡类型id */ + @Excel(name = "卡类型id") + private Long cardTypeId; + + /** 会员卡id */ + @Excel(name = "会员卡id") + private Long cardId; + + /** 会员卡名称 */ + @Excel(name = "会员卡名称") + private String cardTypeName; + + /** 已购买次数 */ + @Excel(name = "已购买次数") + private Integer hadBuy; + + /** 可购买次数 */ + @Excel(name = "可购买次数") + private Integer buyCount; + + /** 会员卡面值 */ + @Excel(name = "会员卡面值") + private BigDecimal cardTypeValue; + + /** 是否可以购买,0可,1有卡正在使用,2购买次数超限 */ + @Excel(name = "是否可以购买") + private Integer canBuy; + + /** 会员卡权益次数 */ + @Excel(name = "会员卡权益次数") + private Integer cardTypeChkcount; + + /** 会员卡有效天数 */ + @Excel(name = "会员卡有效天数") + private Integer effectiveTime; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getCardTypeId() { + return cardTypeId; + } + + public void setCardTypeId(Long cardTypeId) { + this.cardTypeId = cardTypeId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public String getCardTypeName() { + return cardTypeName; + } + + public void setCardTypeName(String cardTypeName) { + this.cardTypeName = cardTypeName; + } + + public Integer getHadBuy() { + return hadBuy; + } + + public void setHadBuy(Integer hadBuy) { + this.hadBuy = hadBuy; + } + + public Integer getBuyCount() { + return buyCount; + } + + public void setBuyCount(Integer buyCount) { + this.buyCount = buyCount; + } + + public BigDecimal getCardTypeValue() { + return cardTypeValue; + } + + public void setCardTypeValue(BigDecimal cardTypeValue) { + this.cardTypeValue = cardTypeValue; + } + + public Integer getCanBuy() { + return canBuy; + } + + public void setCanBuy(Integer canBuy) { + this.canBuy = canBuy; + } + + public Integer getCardTypeChkcount() { + return cardTypeChkcount; + } + + public void setCardTypeChkcount(Integer cardTypeChkcount) { + this.cardTypeChkcount = cardTypeChkcount; + } + + public Integer getEffectiveTime() { + return effectiveTime; + } + + public void setEffectiveTime(Integer effectiveTime) { + this.effectiveTime = effectiveTime; + } + + @Override + public String toString() { + return "SegchkUserChargeCard{" + + "providerId=" + providerId + + ", cardTypeId=" + cardTypeId + + ", cardId=" + cardId + + ", cardTypeName='" + cardTypeName + '\'' + + ", hadBuy=" + hadBuy + + ", buyCount=" + buyCount + + ", cardTypeValue=" + cardTypeValue + + ", canBuy=" + canBuy + + ", cardTypeChkcount=" + cardTypeChkcount + + ", effectiveTime=" + effectiveTime + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeWebResp.java new file mode 100644 index 0000000..201c238 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserChargeWebResp.java @@ -0,0 +1,78 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * seg用户奖励对象 segchk_user_reward + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserChargeWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal charge; + + /** 奖励类型 */ + @Excel(name = "奖励类型") + private String cardName; + + /** 奖励卡号 */ + @Excel(name = "奖励卡号") + private String retFlag; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") + private Date modTime; + + public BigDecimal getCharge() { + return charge; + } + + public void setCharge(BigDecimal charge) { + this.charge = charge; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getRetFlag() { + return retFlag; + } + + public void setRetFlag(String retFlag) { + this.retFlag = retFlag; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + @Override + public String toString() { + return "SegchkUserChargeWebResp{" + + "charge=" + charge + + ", cardName='" + cardName + '\'' + + ", retFlag=" + retFlag + + ", modTime=" + modTime + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollect.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollect.java new file mode 100644 index 0000000..a17b13f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollect.java @@ -0,0 +1,131 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户收藏记录对象 segchk_user_collect + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserCollect extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 收藏id */ + @Excel(name = "收藏id") + private Long collectId; + + /** 收藏类型,0商家,1商品 */ + @Excel(name = "收藏类型,0商家,1商品") + private String collectType; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 管理状态,0有效,1失效 */ + @Excel(name = "管理状态,0有效,1失效") + private Integer mgtState; + + public void setCollectId(Long collectId) + { + this.collectId = collectId; + } + + public Long getCollectId() + { + return collectId; + } + public void setCollectType(String collectType) + { + this.collectType = collectType; + } + + public String getCollectType() + { + return collectType; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setMgtState(Integer mgtState) + { + this.mgtState = mgtState; + } + + public Integer getMgtState() + { + return mgtState; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("collectId", getCollectId()) + .append("collectType", getCollectType()) + .append("providerId", getProviderId()) + .append("userId", getUserId()) + .append("storeId", getStoreId()) + .append("modTime", getModTime()) + .append("mgtState", getMgtState()) + .toString(); + } + + public boolean isValid() { + return ObjectUtils.isNotEmpty(this.providerId) + && ObjectUtils.isNotEmpty(this.userId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollectWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollectWebResp.java new file mode 100644 index 0000000..259ca96 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserCollectWebResp.java @@ -0,0 +1,185 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * seg会员卡对象 segchk_user_vip + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserCollectWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 收藏id */ + @Excel(name = "收藏id") + private Long collectId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id */ + @Excel(name = "商家id,全局惟一") + private Long storeId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 商家图标 */ + @Excel(name = "会员卡类型,0--9块9,1---99") + private String storeIcon; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long serviceState; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal storeLon; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal storeLat; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long chkCount; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal starAvg; + + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 商户标签列表 */ + @Valid + private List segchkRecommenderStoreLableWebList; + + public Long getCollectId() { + return collectId; + } + + public void setCollectId(Long collectId) { + this.collectId = collectId; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public String getStoreIcon() { + return storeIcon; + } + + public void setStoreIcon(String storeIcon) { + this.storeIcon = storeIcon; + } + + public Long getServiceState() { + return serviceState; + } + + public void setServiceState(Long serviceState) { + this.serviceState = serviceState; + } + + public BigDecimal getStoreLon() { + return storeLon; + } + + public void setStoreLon(BigDecimal storeLon) { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLat() { + return storeLat; + } + + public void setStoreLat(BigDecimal storeLat) { + this.storeLat = storeLat; + } + + public Long getChkCount() { + return chkCount; + } + + public void setChkCount(Long chkCount) { + this.chkCount = chkCount; + } + + public BigDecimal getStarAvg() { + return starAvg; + } + + public void setStarAvg(BigDecimal starAvg) { + this.starAvg = starAvg; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public List getSegchkRecommenderStoreLableWebList() { + return segchkRecommenderStoreLableWebList; + } + + public void setSegchkRecommenderStoreLableWebList(List segchkRecommenderStoreLableWebList) { + this.segchkRecommenderStoreLableWebList = segchkRecommenderStoreLableWebList; + } + + @Override + public String toString() { + return "SegchkUserCollectWebResp{" + + "collectId=" + collectId + + ", providerId=" + providerId + + ", storeId=" + storeId + + ", storeName='" + storeName + '\'' + + ", storeIcon='" + storeIcon + '\'' + + ", serviceState=" + serviceState + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", chkCount=" + chkCount + + ", starAvg=" + starAvg + + ", modTime=" + modTime + + ", segchkRecommenderStoreLableWebList=" + segchkRecommenderStoreLableWebList + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserExtInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserExtInfo.java new file mode 100644 index 0000000..a0f7695 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserExtInfo.java @@ -0,0 +1,97 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户扩展信息对象 segchk_user_ext_info + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserExtInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 推荐人id(用户id或商家id或运营商id) */ + @Excel(name = "推荐人id", readConverterExp = "用=户id或商家id或运营商id") + private Long userRecommenders; + + /** 推荐人等级,0运营商,1商家,2vip会员,3普通会员 */ + @Excel(name = "推荐人等级,0运营商,1商家,2vip会员,3普通会员") + private String recommendersLevel; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setUserRecommenders(Long userRecommenders) + { + this.userRecommenders = userRecommenders; + } + + public Long getUserRecommenders() + { + return userRecommenders; + } + public void setRecommendersLevel(String recommendersLevel) + { + this.recommendersLevel = recommendersLevel; + } + + public String getRecommendersLevel() + { + return recommendersLevel; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("userRecommenders", getUserRecommenders()) + .append("recommendersLevel", getRecommendersLevel()) + .append("providerId", getProviderId()) + .append("modTime", getModTime()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLevelInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLevelInfo.java new file mode 100644 index 0000000..dce2c19 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLevelInfo.java @@ -0,0 +1,77 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.List; + +/** + * seg用户角色信息对象 SegchkUserLevelInfo + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserLevelInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 用户角色 */ + @Excel(name = "用户角色") + private Long userLevel; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** token */ + @Excel(name = "token") + private String token; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getUserLevel() { + return userLevel; + } + + public void setUserLevel(Long userLevel) { + this.userLevel = userLevel; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + @Override + public String toString() { + return "SegchkUserLevelInfo{" + + "userId=" + userId + + ", userLevel=" + userLevel + + ", providerId=" + providerId + + ", token='" + token + '\'' + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikeGoWebResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikeGoWebResp.java new file mode 100644 index 0000000..c2fde46 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikeGoWebResp.java @@ -0,0 +1,237 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.Valid; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * seg会员卡对象 segchk_user_vip + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserLikeGoWebResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 想去id */ + @Excel(name = "想去id") + private Long likegoId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 商家id */ + @Excel(name = "商家id,全局惟一") + private Long storeId; + + /** 会员卡id */ + @Excel(name = "会员卡id,充值卡或自定义卡") + private Long cardId; + + /** 用户id */ + @Excel(name = "用户id,全局惟一") + private Long userId; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 卡名称 */ + @Excel(name = "卡名称") + private String cardName; + + /** 二维码 */ + @Excel(name = "二维码") + private String qrCode; + + /** 商家小图标 */ + @Excel(name = "商家小图标") + private String storeIcon; + + /** 商家服务状态,是否在线 */ + @Excel(name = "商家服务状态") + private Long serviceState; + + /** 商家经度 */ + @Excel(name = "商家经度") + private BigDecimal storeLon; + + /** 商家纬度 */ + @Excel(name = "商家纬度") + private BigDecimal storeLat; + + /** 商家累积核次数 */ + @Excel(name = "商家累积核次数") + private Long chkCount; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private BigDecimal starAvg; + + + /** 预约时间 */ + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss") + @Excel(name = "预约时间", width = 30, dateFormat = "yyyy-MM-dd hh:mm:ss") + private Date modTime; + + /** 商户标签列表 */ + @Valid + private List segchkRecommenderStoreLableWebList; + + public Long getLikegoId() { + return likegoId; + } + + public void setLikegoId(Long likegoId) { + this.likegoId = likegoId; + } + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getQrCode() { + return qrCode; + } + + public void setQrCode(String qrCode) { + this.qrCode = qrCode; + } + + public String getStoreIcon() { + return storeIcon; + } + + public void setStoreIcon(String storeIcon) { + this.storeIcon = storeIcon; + } + + public Long getServiceState() { + return serviceState; + } + + public void setServiceState(Long serviceState) { + this.serviceState = serviceState; + } + + public BigDecimal getStoreLon() { + return storeLon; + } + + public void setStoreLon(BigDecimal storeLon) { + this.storeLon = storeLon; + } + + public BigDecimal getStoreLat() { + return storeLat; + } + + public void setStoreLat(BigDecimal storeLat) { + this.storeLat = storeLat; + } + + public Long getChkCount() { + return chkCount; + } + + public void setChkCount(Long chkCount) { + this.chkCount = chkCount; + } + + public BigDecimal getStarAvg() { + return starAvg; + } + + public void setStarAvg(BigDecimal starAvg) { + this.starAvg = starAvg; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public List getSegchkRecommenderStoreLableWebList() { + return segchkRecommenderStoreLableWebList; + } + + public void setSegchkRecommenderStoreLableWebList(List segchkRecommenderStoreLableWebList) { + this.segchkRecommenderStoreLableWebList = segchkRecommenderStoreLableWebList; + } + + @Override + public String toString() { + return "SegchkUserLikeGoWebResp{" + + "likegoId=" + likegoId + + ", providerId=" + providerId + + ", storeId=" + storeId + + ", cardId=" + cardId + + ", userId=" + userId + + ", storeName='" + storeName + '\'' + + ", cardName='" + cardName + '\'' + + ", qrCode='" + qrCode + '\'' + + ", storeIcon='" + storeIcon + '\'' + + ", serviceState=" + serviceState + + ", storeLon=" + storeLon + + ", storeLat=" + storeLat + + ", chkCount=" + chkCount + + ", starAvg=" + starAvg + + ", modTime=" + modTime + + ", segchkRecommenderStoreLableWebList=" + segchkRecommenderStoreLableWebList + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikego.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikego.java new file mode 100644 index 0000000..a3685ea --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserLikego.java @@ -0,0 +1,153 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户想去记录对象 segchk_user_likego + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserLikego extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 想去id */ + @Excel(name = "想去id") + private Long likegoId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 商家id,全局唯一 */ + @Excel(name = "商家id,全局唯一") + private Long storeId; + + /** 用户计划使用的卡号 */ + @Excel(name = "用户计划使用的卡号") + private Long cardId; + + /** 卡类型id,0充值卡,1商家赠卡,2优惠券卡 */ + @Excel(name = "卡类型id,0充值卡,1商家赠卡,2优惠券卡") + private Integer cardType; + + /** 预约二维码 */ + @Excel(name = "预约二维码") + private String qrCode; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 管理状态,0有效,1失效,2已使用 */ + @Excel(name = "管理状态,0有效,1失效,2已使用") + private Integer mgtState; + + public void setLikegoId(Long likegoId) + { + this.likegoId = likegoId; + } + + public Long getLikegoId() + { + return likegoId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setStoreId(Long storeId) + { + this.storeId = storeId; + } + + public Long getStoreId() + { + return storeId; + } + public void setCardId(Long cardId) + { + this.cardId = cardId; + } + + public Long getCardId() + { + return cardId; + } + public void setCardType(Integer cardType) + { + this.cardType = cardType; + } + + public Integer getCardType() + { + return cardType; + } + public void setQrCode(String qrCode) + { + this.qrCode = qrCode; + } + + public String getQrCode() + { + return qrCode; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setMgtState(Integer mgtState) + { + this.mgtState = mgtState; + } + + public Integer getMgtState() + { + return mgtState; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("likegoId", getLikegoId()) + .append("providerId", getProviderId()) + .append("userId", getUserId()) + .append("storeId", getStoreId()) + .append("cardId", getCardId()) + .append("cardType", getCardType()) + .append("qrCode", getQrCode()) + .append("modTime", getModTime()) + .append("mgtState", getMgtState()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserReward.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserReward.java new file mode 100644 index 0000000..1dd2f1d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserReward.java @@ -0,0 +1,140 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户奖励对象 segchk_user_reward + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserReward extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 奖励额 */ + @Excel(name = "奖励额") + private BigDecimal reward; + + /** 奖励类型 */ + @Excel(name = "奖励类型") + private String rewardType; + + /** 奖励卡号 */ + @Excel(name = "奖励卡号") + private Long rewardCardId; + + /** 奖励卡类型id */ + @Excel(name = "奖励卡类型id") + private Long rewardCardTypeId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 奖励id号,全表唯一 */ + @Excel(name = "奖励id号,全表唯一") + private Long rewardId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setReward(BigDecimal reward) + { + this.reward = reward; + } + + public BigDecimal getReward() + { + return reward; + } + public void setRewardType(String rewardType) + { + this.rewardType = rewardType; + } + + public String getRewardType() + { + return rewardType; + } + public void setRewardCardId(Long rewardCardId) + { + this.rewardCardId = rewardCardId; + } + + public Long getRewardCardId() + { + return rewardCardId; + } + public void setRewardCardTypeId(Long rewardCardTypeId) + { + this.rewardCardTypeId = rewardCardTypeId; + } + + public Long getRewardCardTypeId() + { + return rewardCardTypeId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setRewardId(Long rewardId) + { + this.rewardId = rewardId; + } + + public Long getRewardId() + { + return rewardId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("reward", getReward()) + .append("rewardType", getRewardType()) + .append("rewardCardId", getRewardCardId()) + .append("rewardCardTypeId", getRewardCardTypeId()) + .append("modTime", getModTime()) + .append("rewardId", getRewardId()) + .append("providerId", getProviderId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserRewardCtl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserRewardCtl.java new file mode 100644 index 0000000..a4701ce --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserRewardCtl.java @@ -0,0 +1,112 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg会员推荐控制对象 segchk_user_reward_ctl + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserRewardCtl extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 控制id */ + @Excel(name = "控制id") + private Integer rewardCtlId; + + /** 运营商id */ + @Excel(name = "运营商id") + private Long providerId; + + /** 卡类型id,-1,普通用户,其他会员卡类型id */ + @Excel(name = "卡类型id,-1,普通用户,其他会员卡类型id") + private Long fromId; + + /** 奖励额 */ + @Excel(name = "奖励额") + private BigDecimal reward; + + /** 卡类型id */ + @Excel(name = "卡类型id") + private Long toId; + + /** 修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public void setRewardCtlId(Integer rewardCtlId) + { + this.rewardCtlId = rewardCtlId; + } + + public Integer getRewardCtlId() + { + return rewardCtlId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setFromId(Long fromId) + { + this.fromId = fromId; + } + + public Long getFromId() + { + return fromId; + } + public void setReward(BigDecimal reward) + { + this.reward = reward; + } + + public BigDecimal getReward() + { + return reward; + } + public void setToId(Long toId) + { + this.toId = toId; + } + + public Long getToId() + { + return toId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("rewardCtlId", getRewardCtlId()) + .append("providerId", getProviderId()) + .append("fromId", getFromId()) + .append("reward", getReward()) + .append("toId", getToId()) + .append("modTime", getModTime()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserSecurity.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserSecurity.java new file mode 100644 index 0000000..71dd916 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserSecurity.java @@ -0,0 +1,97 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户密码对象 segchk_user_security + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserSecurity extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 密码 */ + @Excel(name = "密码") + private String passwd; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 密码id,全表唯一 */ + @Excel(name = "密码id,全表唯一") + private Long pwdId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setPasswd(String passwd) + { + this.passwd = passwd; + } + + public String getPasswd() + { + return passwd; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setPwdId(Long pwdId) + { + this.pwdId = pwdId; + } + + public Long getPwdId() + { + return pwdId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("passwd", getPasswd()) + .append("modTime", getModTime()) + .append("pwdId", getPwdId()) + .append("providerId", getProviderId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserSetInfoReq.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserSetInfoReq.java new file mode 100644 index 0000000..60658e6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserSetInfoReq.java @@ -0,0 +1,104 @@ +package com.ruoyi.segchk.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户修改信息对象 SegchkUserSetInfoReq + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserSetInfoReq extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 密码 */ + @Excel(name = "密码") + private String passwd; + + /** 密码id,全表唯一 */ + @Excel(name = "密码id,全表唯一") + private Long pwdId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 用户手机号 */ + @Excel(name = "用户手机号") + private String phoneNo; + + /** 用户等级 */ + @Excel(name = "用户等级") + private Integer userLevel; + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setPasswd(String passwd) + { + this.passwd = passwd; + } + + public void setPwdId(Long pwdId) + { + this.pwdId = pwdId; + } + + public Long getPwdId() + { + return pwdId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + + public String getPasswd() { + return passwd; + } + + public String getPhoneNo() { + return phoneNo; + } + + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + + public Integer getUserLevel() { + return userLevel; + } + + public void setUserLevel(Integer userLevel) { + this.userLevel = userLevel; + } + + @Override + public String toString() { + return "SegchkUserSetInfoReq{" + + "userId=" + userId + + ", passwd='" + passwd + '\'' + + ", pwdId=" + pwdId + + ", providerId=" + providerId + + ", phoneNo='" + phoneNo + '\'' + + ", userLevel=" + userLevel + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserVip.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserVip.java new file mode 100644 index 0000000..599e695 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserVip.java @@ -0,0 +1,154 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg会员卡对象 segchk_user_vip + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserVip extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 会员卡号id,全局惟一 */ + @Excel(name = "会员卡号id,全局惟一") + private Long cardId; + + /** 会员卡类型,0--9块9,1---99 */ + @Excel(name = "会员卡类型,0--9块9,1---99") + private Long cardTypeId; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 有效期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd") + private Date effectiveTime; + + /** 使用次数 */ + @Excel(name = "使用次数") + private Integer useCount; + + /** 剩余次数 */ + @Excel(name = "剩余次数") + private Integer leftCount; + + /** 状态,0正常,1过期 */ + @Excel(name = "状态,0正常,1过期") + private String status; + + public void setCardId(Long cardId) + { + this.cardId = cardId; + } + + public Long getCardId() + { + return cardId; + } + public void setCardTypeId(Long cardTypeId) + { + this.cardTypeId = cardTypeId; + } + + public Long getCardTypeId() + { + return cardTypeId; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setEffectiveTime(Date effectiveTime) + { + this.effectiveTime = effectiveTime; + } + + public Date getEffectiveTime() + { + return effectiveTime; + } + public void setUseCount(Integer useCount) + { + this.useCount = useCount; + } + + public Integer getUseCount() + { + return useCount; + } + public void setLeftCount(Integer leftCount) + { + this.leftCount = leftCount; + } + + public Integer getLeftCount() + { + return leftCount; + } + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("cardId", getCardId()) + .append("cardTypeId", getCardTypeId()) + .append("userId", getUserId()) + .append("providerId", getProviderId()) + .append("modTime", getModTime()) + .append("effectiveTime", getEffectiveTime()) + .append("useCount", getUseCount()) + .append("leftCount", getLeftCount()) + .append("status", getStatus()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebSCResp.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebSCResp.java new file mode 100644 index 0000000..6de73e9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserWebSCResp.java @@ -0,0 +1,184 @@ +package com.ruoyi.segchk.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * seg用户核消列表对象 SegchkUserWebSCResp + * + * @author yinzhiying + * @date 2021-07-01 + */ +public class SegchkUserWebSCResp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + + /** 卡号id */ + @Excel(name = "卡号id") + private Long cardId; + + /** 商家id */ + @Excel(name = "商家id") + private Long storeId; + + /** 商家图标 */ + @Excel(name = "商家图标") + private String storeIcon; + + + /** 卡类型id */ + @Excel(name = "卡类型id") + private Long cardTypeId; + + /** 用户id */ + @Excel(name = "用户id") + private Long userId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 核消id */ + @Excel(name = "核消id") + private Long chkServiceId; + + /** 评论id */ + @Excel(name = "评论id") + private Long commentId; + + /** 卡类型名称 */ + @Excel(name = "卡类型名称") + private String cardTypeName; + + /** 商家名称 */ + @Excel(name = "商家名称") + private String storeName; + + /** 卡来源,0充值卡,1优惠券,2商家自定义卡 */ + @Excel(name = "卡来源") + private Integer chkSource; + + public Long getProviderId() { + return providerId; + } + + public void setProviderId(Long providerId) { + this.providerId = providerId; + } + + public Long getCardId() { + return cardId; + } + + public void setCardId(Long cardId) { + this.cardId = cardId; + } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public Long getCardTypeId() { + return cardTypeId; + } + + public void setCardTypeId(Long cardTypeId) { + this.cardTypeId = cardTypeId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Date getModTime() { + return modTime; + } + + public void setModTime(Date modTime) { + this.modTime = modTime; + } + + public Long getChkServiceId() { + return chkServiceId; + } + + public void setChkServiceId(Long chkServiceId) { + this.chkServiceId = chkServiceId; + } + + public Long getCommentId() { + return commentId; + } + + public void setCommentId(Long commentId) { + this.commentId = commentId; + } + + public String getCardTypeName() { + return cardTypeName; + } + + public void setCardTypeName(String cardTypeName) { + this.cardTypeName = cardTypeName; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public Integer getChkSource() { + return chkSource; + } + + public void setChkSource(Integer chkSource) { + this.chkSource = chkSource; + } + + public String getStoreIcon() { + return storeIcon; + } + + public void setStoreIcon(String storeIcon) { + this.storeIcon = storeIcon; + } + + @Override + public String toString() { + return "SegchkUserWebSCResp{" + + "providerId=" + providerId + + ", cardId=" + cardId + + ", storeId=" + storeId + + ", storeIcon='" + storeIcon + '\'' + + ", cardTypeId=" + cardTypeId + + ", userId=" + userId + + ", modTime=" + modTime + + ", chkServiceId=" + chkServiceId + + ", commentId=" + commentId + + ", cardTypeName='" + cardTypeName + '\'' + + ", storeName='" + storeName + '\'' + + ", chkSource=" + chkSource + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserWechat.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserWechat.java new file mode 100644 index 0000000..367f408 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkUserWechat.java @@ -0,0 +1,124 @@ +package com.ruoyi.segchk.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg用户微信信息对象 segchk_user_wechat + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkUserWechat extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 用户id,全局唯一 */ + @Excel(name = "用户id,全局唯一") + private Long userId; + + /** 微信唯一识别号,用于转账等 */ + @Excel(name = "微信唯一识别号,用于转账等") + private String openid; + + /** 微信的联合登录id */ + @Excel(name = "微信的联合登录id") + private String unionId; + + /** 微信昵称 */ + @Excel(name = "微信昵称") + private String nickName; + + /** 微信头像 */ + @Excel(name = "微信头像") + private String iconUrl; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setOpenid(String openid) + { + this.openid = openid; + } + + public String getOpenid() + { + return openid; + } + public void setNickName(String nickName) + { + this.nickName = nickName; + } + + public String getNickName() + { + return nickName; + } + public void setIconUrl(String iconUrl) + { + this.iconUrl = iconUrl; + } + + public String getIconUrl() + { + return iconUrl; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + + public String getUnionId() { + return unionId; + } + + public void setUnionId(String unionId) { + this.unionId = unionId; + } + + @Override + public String toString() { + return "SegchkUserWechat{" + + "providerId=" + providerId + + ", userId=" + userId + + ", openid='" + openid + '\'' + + ", unionId='" + unionId + '\'' + + ", nickName='" + nickName + '\'' + + ", iconUrl='" + iconUrl + '\'' + + ", modTime=" + modTime + + '}'; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkVipSetInfo.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkVipSetInfo.java new file mode 100644 index 0000000..18f80b8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/domain/SegchkVipSetInfo.java @@ -0,0 +1,140 @@ +package com.ruoyi.segchk.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * seg会员卡设置对象 segchk_vip_set_info + * + * @author yinzhiying + * @date 2021-08-23 + */ +public class SegchkVipSetInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 运营商id,全局唯一 */ + @Excel(name = "运营商id,全局唯一") + private Long providerId; + + /** 创建或修改时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建或修改时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date modTime; + + /** 提现额门限 */ + @Excel(name = "提现额门限") + private BigDecimal cashThrehold; + + /** 提现到账日期,0当天到账,n--N个工作日后到账 */ + @Excel(name = "提现到账日期,0当天到账,n--N个工作日后到账") + private Integer cashDay; + + /** 是否允许自助续费,0允许,1禁止 */ + @Excel(name = "是否允许自助续费,0允许,1禁止") + private String selfCharge; + + /** 有效期提醒时间,天 */ + @Excel(name = "有效期提醒时间,天") + private Integer effectiveRemind; + + /** 模板id,全表唯一 */ + @Excel(name = "模板id,全表唯一") + private Integer modeId; + + /** 激活标识,0激活,1去激活,根据每个运营商一个模板id为激活状态 */ + @Excel(name = "激活标识,0激活,1去激活,根据每个运营商一个模板id为激活状态") + private String activeFlag; + + public void setProviderId(Long providerId) + { + this.providerId = providerId; + } + + public Long getProviderId() + { + return providerId; + } + public void setModTime(Date modTime) + { + this.modTime = modTime; + } + + public Date getModTime() + { + return modTime; + } + public void setCashThrehold(BigDecimal cashThrehold) + { + this.cashThrehold = cashThrehold; + } + + public BigDecimal getCashThrehold() + { + return cashThrehold; + } + public void setCashDay(Integer cashDay) + { + this.cashDay = cashDay; + } + + public Integer getCashDay() + { + return cashDay; + } + public void setSelfCharge(String selfCharge) + { + this.selfCharge = selfCharge; + } + + public String getSelfCharge() + { + return selfCharge; + } + public void setEffectiveRemind(Integer effectiveRemind) + { + this.effectiveRemind = effectiveRemind; + } + + public Integer getEffectiveRemind() + { + return effectiveRemind; + } + public void setModeId(Integer modeId) + { + this.modeId = modeId; + } + + public Integer getModeId() + { + return modeId; + } + public void setActiveFlag(String activeFlag) + { + this.activeFlag = activeFlag; + } + + public String getActiveFlag() + { + return activeFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("providerId", getProviderId()) + .append("modTime", getModTime()) + .append("cashThrehold", getCashThrehold()) + .append("cashDay", getCashDay()) + .append("selfCharge", getSelfCharge()) + .append("effectiveRemind", getEffectiveRemind()) + .append("modeId", getModeId()) + .append("activeFlag", getActiveFlag()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkCarouseMgtMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkCarouseMgtMapper.java new file mode 100644 index 0000000..d574066 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkCarouseMgtMapper.java @@ -0,0 +1,66 @@ +package com.ruoyi.segchk.mapper; + +import java.util.HashMap; +import java.util.List; +import com.ruoyi.segchk.domain.SegchkCarouseMgt; + +/** + * seg首页轮播图管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkCarouseMgtMapper +{ + /** + * 查询seg首页轮播图管理 + * + * @param carouseId seg首页轮播图管理主键 + * @return seg首页轮播图管理 + */ + public SegchkCarouseMgt selectSegchkCarouseMgtByCarouseId(Long carouseId); + + /** + * 查询seg首页轮播图管理列表 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return seg首页轮播图管理集合 + */ + public List selectSegchkCarouseMgtList(SegchkCarouseMgt segchkCarouseMgt); + + /** + * 新增seg首页轮播图管理 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return 结果 + */ + public int insertSegchkCarouseMgt(SegchkCarouseMgt segchkCarouseMgt); + + /** + * 修改seg首页轮播图管理 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return 结果 + */ + public int updateSegchkCarouseMgt(SegchkCarouseMgt segchkCarouseMgt); + + /** + * 删除seg首页轮播图管理 + * + * @param carouseId seg首页轮播图管理主键 + * @return 结果 + */ + public int deleteSegchkCarouseMgtByCarouseId(Long carouseId); + + /** + * 批量删除seg首页轮播图管理 + * + * @param carouseIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkCarouseMgtByCarouseIds(Long[] carouseIds); + + public int deleteSegchkCarouseMgtByStoreIds(Long[] storeIds); + + public int updateSegchkCarouseMgtSortBatch(List> collect); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkChargeCardMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkChargeCardMapper.java new file mode 100644 index 0000000..4b3726b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkChargeCardMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkChargeCard; + +/** + * seg充值卡管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkChargeCardMapper +{ + /** + * 查询seg充值卡管理 + * + * @param cardTypeId seg充值卡管理主键 + * @return seg充值卡管理 + */ + public SegchkChargeCard selectSegchkChargeCardBycardTypeId(Long cardTypeId); + + /** + * 查询seg充值卡管理列表 + * + * @param segchkChargeCard seg充值卡管理 + * @return seg充值卡管理集合 + */ + public List selectSegchkChargeCardList(SegchkChargeCard segchkChargeCard); + + /** + * 新增seg充值卡管理 + * + * @param segchkChargeCard seg充值卡管理 + * @return 结果 + */ + public int insertSegchkChargeCard(SegchkChargeCard segchkChargeCard); + + /** + * 修改seg充值卡管理 + * + * @param segchkChargeCard seg充值卡管理 + * @return 结果 + */ + public int updateSegchkChargeCard(SegchkChargeCard segchkChargeCard); + + /** + * 删除seg充值卡管理 + * + * @param cardTypeId seg充值卡管理主键 + * @return 结果 + */ + public int deleteSegchkChargeCardByCardTypeId(Long cardTypeId); + + /** + * 批量删除seg充值卡管理 + * + * @param cardTypeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkChargeCardByCardTypeIds(String[] cardTypeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkCommentAccMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkCommentAccMapper.java new file mode 100644 index 0000000..de3e187 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkCommentAccMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkCommentAcc; + +/** + * seg商家累积评价Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkCommentAccMapper +{ + /** + * 查询seg商家累积评价 + * + * @param updateId seg商家累积评价主键 + * @return seg商家累积评价 + */ + public SegchkCommentAcc selectSegchkCommentAccByUpdateId(Long updateId); + + /** + * 查询seg商家累积评价列表 + * + * @param segchkCommentAcc seg商家累积评价 + * @return seg商家累积评价集合 + */ + public List selectSegchkCommentAccList(SegchkCommentAcc segchkCommentAcc); + + /** + * 新增seg商家累积评价 + * + * @param segchkCommentAcc seg商家累积评价 + * @return 结果 + */ + public int insertSegchkCommentAcc(SegchkCommentAcc segchkCommentAcc); + + /** + * 修改seg商家累积评价 + * + * @param segchkCommentAcc seg商家累积评价 + * @return 结果 + */ + public int updateSegchkCommentAcc(SegchkCommentAcc segchkCommentAcc); + + /** + * 删除seg商家累积评价 + * + * @param updateId seg商家累积评价主键 + * @return 结果 + */ + public int deleteSegchkCommentAccByUpdateId(Long updateId); + + /** + * 批量删除seg商家累积评价 + * + * @param updateIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkCommentAccByUpdateIds(Long[] updateIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkDistrictInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkDistrictInfoMapper.java new file mode 100644 index 0000000..e0b3dd8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkDistrictInfoMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkDistrictInfo; + +/** + * seg行政区域代码Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkDistrictInfoMapper +{ + /** + * 查询seg行政区域代码 + * + * @param districtId seg行政区域代码主键 + * @return seg行政区域代码 + */ + public SegchkDistrictInfo selectSegchkDistrictInfoByDistrictId(Integer districtId); + + /** + * 查询seg行政区域代码列表 + * + * @param segchkDistrictInfo seg行政区域代码 + * @return seg行政区域代码集合 + */ + public List selectSegchkDistrictInfoList(SegchkDistrictInfo segchkDistrictInfo); + + /** + * 新增seg行政区域代码 + * + * @param segchkDistrictInfo seg行政区域代码 + * @return 结果 + */ + public int insertSegchkDistrictInfo(SegchkDistrictInfo segchkDistrictInfo); + + /** + * 修改seg行政区域代码 + * + * @param segchkDistrictInfo seg行政区域代码 + * @return 结果 + */ + public int updateSegchkDistrictInfo(SegchkDistrictInfo segchkDistrictInfo); + + /** + * 删除seg行政区域代码 + * + * @param districtId seg行政区域代码主键 + * @return 结果 + */ + public int deleteSegchkDistrictInfoByDistrictId(Integer districtId); + + /** + * 批量删除seg行政区域代码 + * + * @param districtIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkDistrictInfoByDistrictIds(Integer[] districtIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexCarouseMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexCarouseMapper.java new file mode 100644 index 0000000..1c4c099 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexCarouseMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.segchk.mapper; + +import com.ruoyi.segchk.domain.SegchkCarouseMgt; + +import java.util.List; + +/** + * seg首页轮播图管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkIndexCarouseMapper +{ + /** + * 查询seg首页轮播图管理 + * + * @param carouseId seg首页轮播图管理主键 + * @return seg首页轮播图管理 + */ + public SegchkCarouseMgt selectSegchkCarouseMgtByCarouseId(Long carouseId); + + /** + * 查询seg首页轮播图管理列表 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return seg首页轮播图管理集合 + */ + public List selectSegchkCarouseMgtList(SegchkCarouseMgt segchkCarouseMgt); + + /** + * 新增seg首页轮播图管理 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return 结果 + */ + public int insertSegchkCarouseMgt(SegchkCarouseMgt segchkCarouseMgt); + + /** + * 修改seg首页轮播图管理 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return 结果 + */ + public int updateSegchkCarouseMgt(SegchkCarouseMgt segchkCarouseMgt); + + /** + * 删除seg首页轮播图管理 + * + * @param carouseId seg首页轮播图管理主键 + * @return 结果 + */ + public int deleteSegchkCarouseMgtByCarouseId(Long carouseId); + + /** + * 批量删除seg首页轮播图管理 + * + * @param carouseIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkCarouseMgtByCarouseIds(Long[] carouseIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexStoreAccountMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexStoreAccountMapper.java new file mode 100644 index 0000000..6e4c8cb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexStoreAccountMapper.java @@ -0,0 +1,79 @@ +package com.ruoyi.segchk.mapper; + +import com.ruoyi.segchk.domain.SegchkStoreAccount; +import com.ruoyi.segchk.domain.SegchkStoreCash; + +import java.util.List; + +/** + * seg商户余额信息Mapper接口 + * + * @author yinzhiying + * @date 2021-07-01 + */ +public interface SegchkIndexStoreAccountMapper +{ + /** + * 查询seg商户余额信息 + * + * @param accountId seg商户余额信息ID + * @return seg商户余额信息 + */ + public SegchkStoreAccount selectSegchkStoreAccountById(Long accountId); + + /** + * 查询seg商户余额信息列表 + * + * @param segchkStoreAccount seg商户余额信息 + * @return seg商户余额信息集合 + */ + public List selectSegchkStoreAccountList(SegchkStoreAccount segchkStoreAccount); + + /** + * 新增seg商户余额信息 + * + * @param segchkStoreAccount seg商户余额信息 + * @return 结果 + */ + public int insertSegchkStoreAccount(SegchkStoreAccount segchkStoreAccount); + + /** + * 修改seg商户余额信息 + * + * @param segchkStoreAccount seg商户余额信息 + * @return 结果 + */ + public int updateSegchkStoreAccount(SegchkStoreAccount segchkStoreAccount); + + /** + * 删除seg商户余额信息 + * + * @param accountId seg商户余额信息ID + * @return 结果 + */ + public int deleteSegchkStoreAccountById(Long accountId); + + /** + * 批量删除seg商户余额信息 + * + * @param accountIds 需要删除的数据ID + * @return 结果 + */ + public int deleteSegchkStoreAccountByIds(String[] accountIds); + + /** + * 根据提现记录,更新商户余额记录 + * + * @param segchkStoreCash 提现记录 + * @return 结果 + */ + public int insertSegchkStoreAccountByCash(SegchkStoreCash segchkStoreCash); + + /** + * 根据提现id,删除相关商家余额记录 + * + * @param segchkStoreCash 提现记录 + * @return 结果 + */ + public int deleteSegchkStoreAccountByCash(SegchkStoreCash segchkStoreCash); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserAccountMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserAccountMapper.java new file mode 100644 index 0000000..673457f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserAccountMapper.java @@ -0,0 +1,112 @@ +package com.ruoyi.segchk.mapper; + +import com.ruoyi.segchk.domain.*; + +import java.math.BigDecimal; +import java.util.List; + +/** + * seg用户余额信息Mapper接口 + * + * @author yinzhiying + * @date 2021-07-01 + */ +public interface SegchkIndexUserAccountMapper +{ + /** + * 查询seg用户余额信息 + * + * @param accountId seg用户余额信息ID + * @return seg用户余额信息 + */ + public SegchkUserAccount selectSegchkUserAccountById(Long accountId); + + /** + * 查询seg用户余额信息列表 + * + * @param segchkUserAccount seg用户余额信息 + * @return seg用户余额信息集合 + */ + public List selectSegchkUserAccountList(SegchkUserAccount segchkUserAccount); + + /** + * 新增seg用户余额信息 + * + * @param segchkUserAccount seg用户余额信息 + * @return 结果 + */ + public int insertSegchkUserAccount(SegchkUserAccount segchkUserAccount); + + /** + * 修改seg用户余额信息 + * + * @param segchkUserAccount seg用户余额信息 + * @return 结果 + */ + public int updateSegchkUserAccount(SegchkUserAccount segchkUserAccount); + + /** + * 删除seg用户余额信息 + * + * @param accountId seg用户余额信息ID + * @return 结果 + */ + public int deleteSegchkUserAccountById(Long accountId); + + /** + * 批量删除seg用户余额信息 + * + * @param accountIds 需要删除的数据ID + * @return 结果 + */ + public int deleteSegchkUserAccountByIds(String[] accountIds); + + + /** + * 根据用户要充值的金额与账号余额对比并返回结果 + * + * @param segchkUserAccountCheck 用户充值使用余额信息 + * @return 结果 + */ + public BigDecimal checkSegchkUserAccount(SegchkUserAccountCheck segchkUserAccountCheck); + + /** + * 根据用户要充值的金额更新用户余额 + * + * @param segchkUserAccountCheck 用户充值使用余额信息 + * @return 结果 + */ + public int updateSegchkUserAccountBycharge(SegchkUserAccountCheck segchkUserAccountCheck); + + /** + * 当用户充值失败时,则需要根据充值id,将用户中的对应余额记录删除 + * + * @param segchkUserCharge 用户充值使用余额信息 + * @return 结果 + */ + public int deleteSegchkUserAccountByCharge(SegchkUserCharge segchkUserCharge); + + /** + * 根据用户id(或者商户id),运营商id,用户身份查询用户余额 + * + * @param segchkUserCashOpsReq 用户请示信息体 + * @return 结果 + */ + public SegchkUserCashOpsResp selectSegchkUserAccountForCash(SegchkUserCashOpsReq segchkUserCashOpsReq); + + /** + * 根据提现,重新计算用户最新全额 + * + * @param segchkUserCash 用户请示信息体 + * @return 结果 + */ + public int insertSegchkStoreAccountByCash(SegchkUserCash segchkUserCash); + + /** + * 根据提现id,删除相应的余额记录 + * + * @param segchkUserCash 用户请示信息体 + * @return 结果 + */ + public int deleteSegchkUserAccountByCash(SegchkUserCash segchkUserCash); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserVipMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserVipMapper.java new file mode 100644 index 0000000..333ceea --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkIndexUserVipMapper.java @@ -0,0 +1,39 @@ +package com.ruoyi.segchk.mapper; + +import com.ruoyi.segchk.domain.SegchkChargeRet; +import com.ruoyi.segchk.domain.SegchkUserVip; + +import java.util.List; + +/** + * seg会员卡Mapper接口 + * + * @author yinzhiying + * @date 2021-07-01 + */ +public interface SegchkIndexUserVipMapper +{ + /** + * 针对单张卡进行核消 + * + * @param cardId 需要删除的数据ID + * @return 结果 + */ + public int updateSegchkUserVipCheck(Long cardId); + + /** + * 根据充值卡id,获取充值记录相关信息,插入生成会员卡 + * + * @param segchkChargeRet 充值id + * @return 结果 + */ + public int insertSegchkUserVipByCharge(SegchkChargeRet segchkChargeRet); + + /** + * 根据用户信息返回用户身份 + * + * @param phoneno 用户信息 + * @return 更新结果 + */ + public int selectUserLevel(String phoneno); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkKeywordLableMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkKeywordLableMapper.java new file mode 100644 index 0000000..74bfe81 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkKeywordLableMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkKeywordLable; + +/** + * seg关键字管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkKeywordLableMapper +{ + /** + * 查询seg关键字管理 + * + * @param keywordId seg关键字管理主键 + * @return seg关键字管理 + */ + public SegchkKeywordLable selectSegchkKeywordLableByKeywordId(Long keywordId); + + /** + * 查询seg关键字管理列表 + * + * @param segchkKeywordLable seg关键字管理 + * @return seg关键字管理集合 + */ + public List selectSegchkKeywordLableList(SegchkKeywordLable segchkKeywordLable); + + /** + * 新增seg关键字管理 + * + * @param segchkKeywordLable seg关键字管理 + * @return 结果 + */ + public int insertSegchkKeywordLable(SegchkKeywordLable segchkKeywordLable); + + /** + * 修改seg关键字管理 + * + * @param segchkKeywordLable seg关键字管理 + * @return 结果 + */ + public int updateSegchkKeywordLable(SegchkKeywordLable segchkKeywordLable); + + /** + * 删除seg关键字管理 + * + * @param providerId seg关键字管理主键 + * @return 结果 + */ + public int deleteSegchkKeywordLableByProviderId(Long providerId); + + /** + * 批量删除seg关键字管理 + * + * @param keywordIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkKeywordLableByKeywordIds(Long[] keywordIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkLableMgtMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkLableMgtMapper.java new file mode 100644 index 0000000..336fb34 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkLableMgtMapper.java @@ -0,0 +1,65 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import java.util.Map; + +import com.ruoyi.segchk.domain.SegchkLableMgt; + +/** + * seg首页标签管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkLableMgtMapper +{ + /** + * 查询seg首页标签管理 + * + * @param providerId seg首页标签管理主键 + * @return seg首页标签管理 + */ + public SegchkLableMgt selectSegchkLableMgtByMgtId(Long providerId); + + /** + * 查询seg首页标签管理列表 + * + * @param segchkLableMgt seg首页标签管理 + * @return seg首页标签管理集合 + */ + public List selectSegchkLableMgtList(SegchkLableMgt segchkLableMgt); + + /** + * 新增seg首页标签管理 + * + * @param segchkLableMgt seg首页标签管理 + * @return 结果 + */ + public int insertSegchkLableMgt(SegchkLableMgt segchkLableMgt); + + /** + * 修改seg首页标签管理 + * + * @param segchkLableMgt seg首页标签管理 + * @return 结果 + */ + public int updateSegchkLableMgt(SegchkLableMgt segchkLableMgt); + + /** + * 删除seg首页标签管理 + * + * @param providerId seg首页标签管理主键 + * @return 结果 + */ + public int deleteSegchkLableMgtByMgtId(Long providerId); + + /** + * 批量删除seg首页标签管理 + * + * @param mgtIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkLableMgtByMgtIds(Long[] mgtIds); + + public int deleteSegchkLableMgtByCardTypeIds(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkLogionDetailMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkLogionDetailMapper.java new file mode 100644 index 0000000..4307fa2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkLogionDetailMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkLogionDetail; + +/** + * seg登录记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkLogionDetailMapper +{ + /** + * 查询seg登录记录 + * + * @param loginId seg登录记录主键 + * @return seg登录记录 + */ + public SegchkLogionDetail selectSegchkLogionDetailByLoginId(Long loginId); + + /** + * 查询seg登录记录列表 + * + * @param segchkLogionDetail seg登录记录 + * @return seg登录记录集合 + */ + public List selectSegchkLogionDetailList(SegchkLogionDetail segchkLogionDetail); + + /** + * 新增seg登录记录 + * + * @param segchkLogionDetail seg登录记录 + * @return 结果 + */ + public int insertSegchkLogionDetail(SegchkLogionDetail segchkLogionDetail); + + /** + * 修改seg登录记录 + * + * @param segchkLogionDetail seg登录记录 + * @return 结果 + */ + public int updateSegchkLogionDetail(SegchkLogionDetail segchkLogionDetail); + + /** + * 删除seg登录记录 + * + * @param loginId seg登录记录主键 + * @return 结果 + */ + public int deleteSegchkLogionDetailByLoginId(Long loginId); + + /** + * 批量删除seg登录记录 + * + * @param loginIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkLogionDetailByLoginIds(Long[] loginIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkMsgDetailMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkMsgDetailMapper.java new file mode 100644 index 0000000..79d24ce --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkMsgDetailMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkMsgDetail; + +/** + * seg消息记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkMsgDetailMapper +{ + /** + * 查询seg消息记录 + * + * @param msgId seg消息记录主键 + * @return seg消息记录 + */ + public SegchkMsgDetail selectSegchkMsgDetailByMsgId(Long msgId); + + /** + * 查询seg消息记录列表 + * + * @param segchkMsgDetail seg消息记录 + * @return seg消息记录集合 + */ + public List selectSegchkMsgDetailList(SegchkMsgDetail segchkMsgDetail); + + /** + * 新增seg消息记录 + * + * @param segchkMsgDetail seg消息记录 + * @return 结果 + */ + public int insertSegchkMsgDetail(SegchkMsgDetail segchkMsgDetail); + + /** + * 修改seg消息记录 + * + * @param segchkMsgDetail seg消息记录 + * @return 结果 + */ + public int updateSegchkMsgDetail(SegchkMsgDetail segchkMsgDetail); + + /** + * 删除seg消息记录 + * + * @param msgId seg消息记录主键 + * @return 结果 + */ + public int deleteSegchkMsgDetailByMsgId(Long msgId); + + /** + * 批量删除seg消息记录 + * + * @param msgIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkMsgDetailByMsgIds(Long[] msgIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkPreferenceLableMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkPreferenceLableMapper.java new file mode 100644 index 0000000..8ae4315 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkPreferenceLableMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkPreferenceLable; + +/** + * seg优惠管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkPreferenceLableMapper +{ + /** + * 查询seg优惠管理 + * + * @param preferenceId seg优惠管理主键 + * @return seg优惠管理 + */ + public SegchkPreferenceLable selectSegchkPreferenceLableByPreferenceId(Long preferenceId); + + /** + * 查询seg优惠管理列表 + * + * @param segchkPreferenceLable seg优惠管理 + * @return seg优惠管理集合 + */ + public List selectSegchkPreferenceLableList(SegchkPreferenceLable segchkPreferenceLable); + + /** + * 新增seg优惠管理 + * + * @param segchkPreferenceLable seg优惠管理 + * @return 结果 + */ + public int insertSegchkPreferenceLable(SegchkPreferenceLable segchkPreferenceLable); + + /** + * 修改seg优惠管理 + * + * @param segchkPreferenceLable seg优惠管理 + * @return 结果 + */ + public int updateSegchkPreferenceLable(SegchkPreferenceLable segchkPreferenceLable); + + /** + * 删除seg优惠管理 + * + * @param providerId seg优惠管理主键 + * @return 结果 + */ + public int deleteSegchkPreferenceLableByProviderId(Long providerId); + + /** + * 批量删除seg优惠管理 + * + * @param preferenceIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkPreferenceLableByPreferenceIds(Long[] preferenceIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderMgtMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderMgtMapper.java new file mode 100644 index 0000000..8fb01fc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkProviderMgtMapper.java @@ -0,0 +1,92 @@ +package com.ruoyi.segchk.mapper; + +import java.util.HashMap; +import java.util.List; +import com.ruoyi.segchk.domain.SegchkProviderMgt; +import com.ruoyi.segchk.domain.SegchkLableMgt; + +/** + * seg运营商管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkProviderMgtMapper +{ + /** + * 查询seg运营商管理 + * + * @param providerId seg运营商管理主键 + * @return seg运营商管理 + */ + public SegchkProviderMgt selectSegchkProviderMgtByProviderId(Long providerId); + + /** + * 查询seg运营商管理列表 + * + * @param segchkProviderMgt seg运营商管理 + * @return seg运营商管理集合 + */ + public List selectSegchkProviderMgtList(SegchkProviderMgt segchkProviderMgt); + + /** + * 新增seg运营商管理 + * + * @param segchkProviderMgt seg运营商管理 + * @return 结果 + */ + public int insertSegchkProviderMgt(SegchkProviderMgt segchkProviderMgt); + + /** + * 修改seg运营商管理 + * + * @param segchkProviderMgt seg运营商管理 + * @return 结果 + */ + public int updateSegchkProviderMgt(SegchkProviderMgt segchkProviderMgt); + + /** + * 删除seg运营商管理 + * + * @param providerId seg运营商管理主键 + * @return 结果 + */ + public int deleteSegchkProviderMgtByProviderId(Long providerId); + + /** + * 批量删除seg运营商管理 + * + * @param providerIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkProviderMgtByProviderIds(Long[] providerIds); + + /** + * 批量删除seg首页标签管理 + * + * @param providerIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkLableMgtByProviderIds(Long[] providerIds); + + /** + * 批量新增seg首页标签管理 + * + * @param segchkLableMgtList seg首页标签管理列表 + * @return 结果 + */ + public int batchSegchkLableMgt(List segchkLableMgtList); + + + /** + * 通过seg运营商管理主键删除seg首页标签管理信息 + * + * @param providerId seg运营商管理ID + * @return 结果 + */ + public int deleteSegchkLableMgtByProviderId(Long providerId); + + HashMap getCustomService(Long providerId); + + Long getProviderIdByPhoneNo(String phonenumber); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderIndexMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderIndexMapper.java new file mode 100644 index 0000000..8b5542b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderIndexMapper.java @@ -0,0 +1,66 @@ +package com.ruoyi.segchk.mapper; + +import com.ruoyi.segchk.domain.SegchkRecommenderStore; +import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebReq; +import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebResp; + +import java.util.List; + +/** + * seg首页推荐商户Mapper接口 + * + * @author yinzhiying + * @date 2021-07-01 + */ +public interface SegchkRecommenderIndexMapper +{ + /** + * 查询seg首页推荐商户 + * + * @param recommenderId seg首页推荐商户ID + * @return seg首页推荐商户 + */ + public SegchkRecommenderStore selectSegchkRecommenderStoreById(Long recommenderId); + + /** + * 查询seg首页推荐商户列表 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return seg首页推荐商户集合 + */ + public List selectSegchkRecommenderStoreList(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 新增seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + public int insertSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 修改seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + public int updateSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 删除seg首页推荐商户 + * + * @param recommenderId seg首页推荐商户ID + * @return 结果 + */ + public int deleteSegchkRecommenderStoreById(Long recommenderId); + + /** + * 批量删除seg首页推荐商户 + * + * @param recommenderIds 需要删除的数据ID + * @return 结果 + */ + public int deleteSegchkRecommenderStoreByIds(String[] recommenderIds); + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderStoreMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderStoreMapper.java new file mode 100644 index 0000000..5bfd732 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkRecommenderStoreMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkRecommenderStore; + +/** + * seg首页推荐商户Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkRecommenderStoreMapper +{ + /** + * 查询seg首页推荐商户 + * + * @param recommenderId seg首页推荐商户主键 + * @return seg首页推荐商户 + */ + public SegchkRecommenderStore selectSegchkRecommenderStoreByRecommenderId(Long recommenderId); + + /** + * 查询seg首页推荐商户列表 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return seg首页推荐商户集合 + */ + public List selectSegchkRecommenderStoreList(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 新增seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + public int insertSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 修改seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + public int updateSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 删除seg首页推荐商户 + * + * @param recommenderId seg首页推荐商户主键 + * @return 结果 + */ + public int deleteSegchkRecommenderStoreByRecommenderId(Long recommenderId); + + /** + * 批量删除seg首页推荐商户 + * + * @param recommenderIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkRecommenderStoreByRecommenderIds(Long[] recommenderIds); + + public int deleteSegchkRecommenderStoreByStoreIds(Long[] storeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSalerInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSalerInfoMapper.java new file mode 100644 index 0000000..4886d06 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSalerInfoMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkSalerInfo; + +/** + * seg销售人员信息Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkSalerInfoMapper +{ + /** + * 查询seg销售人员信息 + * + * @param salerId seg销售人员信息主键 + * @return seg销售人员信息 + */ + public SegchkSalerInfo selectSegchkSalerInfoBySalerId(Integer salerId); + + /** + * 查询seg销售人员信息列表 + * + * @param segchkSalerInfo seg销售人员信息 + * @return seg销售人员信息集合 + */ + public List selectSegchkSalerInfoList(SegchkSalerInfo segchkSalerInfo); + + /** + * 新增seg销售人员信息 + * + * @param segchkSalerInfo seg销售人员信息 + * @return 结果 + */ + public int insertSegchkSalerInfo(SegchkSalerInfo segchkSalerInfo); + + /** + * 修改seg销售人员信息 + * + * @param segchkSalerInfo seg销售人员信息 + * @return 结果 + */ + public int updateSegchkSalerInfo(SegchkSalerInfo segchkSalerInfo); + + /** + * 删除seg销售人员信息 + * + * @param salerId seg销售人员信息主键 + * @return 结果 + */ + public int deleteSegchkSalerInfoBySalerId(Integer salerId); + + /** + * 批量删除seg销售人员信息 + * + * @param salerIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkSalerInfoBySalerIds(Integer[] salerIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSelfServiceChkMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSelfServiceChkMapper.java new file mode 100644 index 0000000..f692b1e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSelfServiceChkMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkSelfServiceChk; + +/** + * seg自定义卡核消记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkSelfServiceChkMapper +{ + /** + * 查询seg自定义卡核消记录 + * + * @param chkServiceId seg自定义卡核消记录主键 + * @return seg自定义卡核消记录 + */ + public SegchkSelfServiceChk selectSegchkSelfServiceChkByChkServiceId(Long chkServiceId); + + /** + * 查询seg自定义卡核消记录列表 + * + * @param segchkSelfServiceChk seg自定义卡核消记录 + * @return seg自定义卡核消记录集合 + */ + public List selectSegchkSelfServiceChkList(SegchkSelfServiceChk segchkSelfServiceChk); + + /** + * 新增seg自定义卡核消记录 + * + * @param segchkSelfServiceChk seg自定义卡核消记录 + * @return 结果 + */ + public int insertSegchkSelfServiceChk(SegchkSelfServiceChk segchkSelfServiceChk); + + /** + * 修改seg自定义卡核消记录 + * + * @param segchkSelfServiceChk seg自定义卡核消记录 + * @return 结果 + */ + public int updateSegchkSelfServiceChk(SegchkSelfServiceChk segchkSelfServiceChk); + + /** + * 删除seg自定义卡核消记录 + * + * @param chkServiceId seg自定义卡核消记录主键 + * @return 结果 + */ + public int deleteSegchkSelfServiceChkByChkServiceId(Long chkServiceId); + + /** + * 批量删除seg自定义卡核消记录 + * + * @param chkServiceIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkSelfServiceChkByChkServiceIds(Long[] chkServiceIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkServiceChkMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkServiceChkMapper.java new file mode 100644 index 0000000..df90a9d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkServiceChkMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkServiceChk; + +/** + * seg核消记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkServiceChkMapper +{ + /** + * 查询seg核消记录 + * + * @param chkServiceId seg核消记录主键 + * @return seg核消记录 + */ + public SegchkServiceChk selectSegchkServiceChkByChkServiceId(Long chkServiceId); + + /** + * 查询seg核消记录列表 + * + * @param segchkServiceChk seg核消记录 + * @return seg核消记录集合 + */ + public List selectSegchkServiceChkList(SegchkServiceChk segchkServiceChk); + + /** + * 新增seg核消记录 + * + * @param segchkServiceChk seg核消记录 + * @return 结果 + */ + public int insertSegchkServiceChk(SegchkServiceChk segchkServiceChk); + + /** + * 修改seg核消记录 + * + * @param segchkServiceChk seg核消记录 + * @return 结果 + */ + public int updateSegchkServiceChk(SegchkServiceChk segchkServiceChk); + + /** + * 删除seg核消记录 + * + * @param chkServiceId seg核消记录主键 + * @return 结果 + */ + public int deleteSegchkServiceChkByChkServiceId(Long chkServiceId); + + /** + * 批量删除seg核消记录 + * + * @param chkServiceIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkServiceChkByChkServiceIds(Long[] chkServiceIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkServiceCommentMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkServiceCommentMapper.java new file mode 100644 index 0000000..7ece367 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkServiceCommentMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkServiceComment; +import com.ruoyi.segchk.domain.SegchkServiceCommentUserReq; + +/** + * seg评价记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkServiceCommentMapper +{ + /** + * 查询seg评价记录 + * + * @param commentId seg评价记录主键 + * @return seg评价记录 + */ + public SegchkServiceComment selectSegchkServiceCommentByCommentId(Long commentId); + + /** + * 查询seg评价记录列表 + * + * @param segchkServiceComment seg评价记录 + * @return seg评价记录集合 + */ + public List selectSegchkServiceCommentList(SegchkServiceComment segchkServiceComment); + + /** + * 新增seg评价记录 + * + * @param segchkServiceComment seg评价记录 + * @return 结果 + */ + public int insertSegchkServiceComment(SegchkServiceComment segchkServiceComment); + + /** + * 修改seg评价记录 + * + * @param segchkServiceComment seg评价记录 + * @return 结果 + */ + public int updateSegchkServiceComment(SegchkServiceComment segchkServiceComment); + + /** + * 删除seg评价记录 + * + * @param commentId seg评价记录主键 + * @return 结果 + */ + public int deleteSegchkServiceCommentByCommentId(Long commentId); + + /** + * 批量删除seg评价记录 + * + * @param commentIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkServiceCommentByCommentIds(Long[] commentIds); + + + /** + * 根据用户评价及核消id,新增用户评价 + * + * @param segchkServiceCommentUserReq 用户评价实体 + * @return 结果 + */ + public int insertSegchkServiceCommentByChk(SegchkServiceCommentUserReq segchkServiceCommentUserReq); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSmsDetailMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSmsDetailMapper.java new file mode 100644 index 0000000..7afdde7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSmsDetailMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkSmsDetail; + +/** + * seg短信记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkSmsDetailMapper +{ + /** + * 查询seg短信记录 + * + * @param shortMsgId seg短信记录主键 + * @return seg短信记录 + */ + public SegchkSmsDetail selectSegchkSmsDetailByShortMsgId(Long shortMsgId); + + /** + * 查询seg短信记录列表 + * + * @param segchkSmsDetail seg短信记录 + * @return seg短信记录集合 + */ + public List selectSegchkSmsDetailList(SegchkSmsDetail segchkSmsDetail); + + /** + * 新增seg短信记录 + * + * @param segchkSmsDetail seg短信记录 + * @return 结果 + */ + public int insertSegchkSmsDetail(SegchkSmsDetail segchkSmsDetail); + + /** + * 修改seg短信记录 + * + * @param segchkSmsDetail seg短信记录 + * @return 结果 + */ + public int updateSegchkSmsDetail(SegchkSmsDetail segchkSmsDetail); + + /** + * 删除seg短信记录 + * + * @param shortMsgId seg短信记录主键 + * @return 结果 + */ + public int deleteSegchkSmsDetailByShortMsgId(Long shortMsgId); + + /** + * 批量删除seg短信记录 + * + * @param shortMsgIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkSmsDetailByShortMsgIds(Long[] shortMsgIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreAccountMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreAccountMapper.java new file mode 100644 index 0000000..35be856 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreAccountMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreAccount; + +/** + * seg商户余额信息Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreAccountMapper +{ + /** + * 查询seg商户余额信息 + * + * @param accountId seg商户余额信息主键 + * @return seg商户余额信息 + */ + public SegchkStoreAccount selectSegchkStoreAccountByAccountId(Long accountId); + + /** + * 查询seg商户余额信息列表 + * + * @param segchkStoreAccount seg商户余额信息 + * @return seg商户余额信息集合 + */ + public List selectSegchkStoreAccountList(SegchkStoreAccount segchkStoreAccount); + + /** + * 新增seg商户余额信息 + * + * @param segchkStoreAccount seg商户余额信息 + * @return 结果 + */ + public int insertSegchkStoreAccount(SegchkStoreAccount segchkStoreAccount); + + /** + * 修改seg商户余额信息 + * + * @param segchkStoreAccount seg商户余额信息 + * @return 结果 + */ + public int updateSegchkStoreAccount(SegchkStoreAccount segchkStoreAccount); + + /** + * 删除seg商户余额信息 + * + * @param accountId seg商户余额信息主键 + * @return 结果 + */ + public int deleteSegchkStoreAccountByAccountId(Long accountId); + + /** + * 批量删除seg商户余额信息 + * + * @param accountIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreAccountByAccountIds(Long[] accountIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreBasicInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreBasicInfoMapper.java new file mode 100644 index 0000000..c29e601 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreBasicInfoMapper.java @@ -0,0 +1,168 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; + +import com.ruoyi.segchk.domain.*; + +/** + * seg商家基础信息Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreBasicInfoMapper +{ + /** + * 查询seg商家基础信息 + * + * @param storeId seg商家基础信息主键 + * @return seg商家基础信息 + */ + public SegchkStoreBasicInfo selectSegchkStoreBasicInfoByStoreId(Long storeId); + + /** + * 查询seg商家基础信息列表 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return seg商家基础信息集合 + */ + public List selectSegchkStoreBasicInfoList(SegchkStoreBasicInfo segchkStoreBasicInfo); + + /** + * 新增seg商家基础信息 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return 结果 + */ + public int insertSegchkStoreBasicInfo(SegchkStoreBasicInfo segchkStoreBasicInfo); + + /** + * 修改seg商家基础信息 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return 结果 + */ + public int updateSegchkStoreBasicInfo(SegchkStoreBasicInfo segchkStoreBasicInfo); + + /** + * 删除seg商家基础信息 + * + * @param storeId seg商家基础信息主键 + * @return 结果 + */ + public int deleteSegchkStoreBasicInfoByStoreId(Long storeId); + + /** + * 批量删除seg商家基础信息 + * + * @param storeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreBasicInfoByStoreIds(Long[] storeIds); + + /** + * 批量删除seg商家图片信息 + * + * @param storeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreImageByStoreIds(Long[] storeIds); + + /** + * 批量删除seg商家核消管理信息 + * + * @param storeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreChkMgtByStoreIds(Long[] storeIds); + + /** + * 批量删除seg商家标签管理信息 + * + * @param storeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreLableMgtByStoreIds(Long[] storeIds); + + /** + * 批量删除seg商家标签管理信息 + * + * @param storeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreSecurityByStoreIds(Long[] storeIds); + + /** + * 批量新增seg商家图片信息 + * + * @param segchkStoreImageList seg商家图片信息列表 + * @return 结果 + */ + public int batchSegchkStoreImage(List segchkStoreImageList); + + /** + * 批量新增seg商家图片信息 + * + * @param segchkStoreChkMgtList seg商家图片信息列表 + * @return 结果 + */ + public int batchSegchkStoreChkMgt(List segchkStoreChkMgtList); + + /** + * 批量新增seg商家图片信息 + * + * @param segchkStoreLableMgtList seg商家图片信息列表 + * @return 结果 + */ + public int batchSegchkStoreLableMgt(List segchkStoreLableMgtList); + + /** + * 批量新增seg商家密码信息 + * + * @param segchkStoreSecurityList seg商家图片信息列表 + * @return 结果 + */ + public int batchSegchkStoreSecurity(List segchkStoreSecurityList); + + + /** + * 通过seg商家基础信息主键删除seg商家图片信息信息 + * + * @param storeId seg商家基础信息ID + * @return 结果 + */ + public int deleteSegchkStoreImageByStoreId(Long storeId); + /** + * 通过seg商家基础信息主键删除seg商家核消管理信息信息 + * + * @param storeId seg商家基础信息ID + * @return 结果 + */ + public int deleteSegchkStoreChkMgtByStoreId(Long storeId); + /** + * 通过seg商家基础信息主键删除seg商家标签管理信息信息 + * + * @param storeId seg商家基础信息ID + * @return 结果 + */ + public int deleteSegchkStoreLableMgtByStoreId(Long storeId); + /** + * 通过seg商家基础信息主键删除seg商家标签管理信息信息 + * + * @param storeId seg商家基础信息ID + * @return 结果 + */ + public int deleteSegchkStoreSecurityByStoreId(Long storeId); + + /** + * 修改seg商家服务状态 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return 结果 + */ + public int updateSegchkStoreServiceStatus(SegchkStoreBasicInfo segchkStoreBasicInfo); + + public Long selectStoreIdByPhone(String phone); + + int updateSegchkStoreDetail(SegchkStoreBasicInfo segchkStoreBasicInfo); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreCashMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreCashMapper.java new file mode 100644 index 0000000..4c84eb3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreCashMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreCash; + +/** + * seg商户户提现记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreCashMapper +{ + /** + * 查询seg商户户提现记录 + * + * @param cashId seg商户户提现记录主键 + * @return seg商户户提现记录 + */ + public SegchkStoreCash selectSegchkStoreCashByCashId(Long cashId); + + /** + * 查询seg商户户提现记录列表 + * + * @param segchkStoreCash seg商户户提现记录 + * @return seg商户户提现记录集合 + */ + public List selectSegchkStoreCashList(SegchkStoreCash segchkStoreCash); + + /** + * 新增seg商户户提现记录 + * + * @param segchkStoreCash seg商户户提现记录 + * @return 结果 + */ + public int insertSegchkStoreCash(SegchkStoreCash segchkStoreCash); + + /** + * 修改seg商户户提现记录 + * + * @param segchkStoreCash seg商户户提现记录 + * @return 结果 + */ + public int updateSegchkStoreCash(SegchkStoreCash segchkStoreCash); + + /** + * 删除seg商户户提现记录 + * + * @param cashId seg商户户提现记录主键 + * @return 结果 + */ + public int deleteSegchkStoreCashByCashId(Long cashId); + + /** + * 批量删除seg商户户提现记录 + * + * @param cashIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreCashByCashIds(Long[] cashIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreChargeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreChargeMapper.java new file mode 100644 index 0000000..586538d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreChargeMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreCharge; + +/** + * seg商户充值记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreChargeMapper +{ + /** + * 查询seg商户充值记录 + * + * @param chargeId seg商户充值记录主键 + * @return seg商户充值记录 + */ + public SegchkStoreCharge selectSegchkStoreChargeByChargeId(Long chargeId); + + /** + * 查询seg商户充值记录列表 + * + * @param segchkStoreCharge seg商户充值记录 + * @return seg商户充值记录集合 + */ + public List selectSegchkStoreChargeList(SegchkStoreCharge segchkStoreCharge); + + /** + * 新增seg商户充值记录 + * + * @param segchkStoreCharge seg商户充值记录 + * @return 结果 + */ + public int insertSegchkStoreCharge(SegchkStoreCharge segchkStoreCharge); + + /** + * 修改seg商户充值记录 + * + * @param segchkStoreCharge seg商户充值记录 + * @return 结果 + */ + public int updateSegchkStoreCharge(SegchkStoreCharge segchkStoreCharge); + + /** + * 删除seg商户充值记录 + * + * @param chargeId seg商户充值记录主键 + * @return 结果 + */ + public int deleteSegchkStoreChargeByChargeId(Long chargeId); + + /** + * 批量删除seg商户充值记录 + * + * @param chargeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreChargeByChargeIds(Long[] chargeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreChkMgtMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreChkMgtMapper.java new file mode 100644 index 0000000..16ee2a8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreChkMgtMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreChkMgt; + +/** + * seg商家核消卡管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreChkMgtMapper +{ + /** + * 查询seg商家核消卡管理 + * + * @param mgtId seg商家核消卡管理主键 + * @return seg商家核消卡管理 + */ + public SegchkStoreChkMgt selectSegchkStoreChkMgtByMgtId(Integer mgtId); + + /** + * 查询seg商家核消卡管理列表 + * + * @param segchkStoreChkMgt seg商家核消卡管理 + * @return seg商家核消卡管理集合 + */ + public List selectSegchkStoreChkMgtList(SegchkStoreChkMgt segchkStoreChkMgt); + + /** + * 新增seg商家核消卡管理 + * + * @param segchkStoreChkMgt seg商家核消卡管理 + * @return 结果 + */ + public int insertSegchkStoreChkMgt(SegchkStoreChkMgt segchkStoreChkMgt); + + /** + * 修改seg商家核消卡管理 + * + * @param segchkStoreChkMgt seg商家核消卡管理 + * @return 结果 + */ + public int updateSegchkStoreChkMgt(SegchkStoreChkMgt segchkStoreChkMgt); + + /** + * 删除seg商家核消卡管理 + * + * @param mgtId seg商家核消卡管理主键 + * @return 结果 + */ + public int deleteSegchkStoreChkMgtByMgtId(Integer mgtId); + + /** + * 批量删除seg商家核消卡管理 + * + * @param mgtIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreChkMgtByMgtIds(Integer[] mgtIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreImageMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreImageMapper.java new file mode 100644 index 0000000..68eae8d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreImageMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreImage; + +/** + * seg商家图片信息Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreImageMapper +{ + /** + * 查询seg商家图片信息 + * + * @param storeId seg商家图片信息主键 + * @return seg商家图片信息 + */ + public SegchkStoreImage selectSegchkStoreImageByStoreId(Long storeId); + + /** + * 查询seg商家图片信息列表 + * + * @param segchkStoreImage seg商家图片信息 + * @return seg商家图片信息集合 + */ + public List selectSegchkStoreImageList(SegchkStoreImage segchkStoreImage); + + /** + * 新增seg商家图片信息 + * + * @param segchkStoreImage seg商家图片信息 + * @return 结果 + */ + public int insertSegchkStoreImage(SegchkStoreImage segchkStoreImage); + + /** + * 修改seg商家图片信息 + * + * @param segchkStoreImage seg商家图片信息 + * @return 结果 + */ + public int updateSegchkStoreImage(SegchkStoreImage segchkStoreImage); + + /** + * 删除seg商家图片信息 + * + * @param storeId seg商家图片信息主键 + * @return 结果 + */ + public int deleteSegchkStoreImageByStoreId(Long storeId); + + /** + * 批量删除seg商家图片信息 + * + * @param storeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreImageByStoreIds(Long[] storeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreLableMgtMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreLableMgtMapper.java new file mode 100644 index 0000000..df5ac0e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreLableMgtMapper.java @@ -0,0 +1,65 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import java.util.Map; + +import com.ruoyi.segchk.domain.SegchkStoreLableMgt; + +/** + * seg商家标签管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreLableMgtMapper +{ + /** + * 查询seg商家标签管理 + * + * @param mgtId seg商家标签管理主键 + * @return seg商家标签管理 + */ + public SegchkStoreLableMgt selectSegchkStoreLableMgtByMgtId(Integer mgtId); + + /** + * 查询seg商家标签管理列表 + * + * @param segchkStoreLableMgt seg商家标签管理 + * @return seg商家标签管理集合 + */ + public List selectSegchkStoreLableMgtList(SegchkStoreLableMgt segchkStoreLableMgt); + + /** + * 新增seg商家标签管理 + * + * @param segchkStoreLableMgt seg商家标签管理 + * @return 结果 + */ + public int insertSegchkStoreLableMgt(SegchkStoreLableMgt segchkStoreLableMgt); + + /** + * 修改seg商家标签管理 + * + * @param segchkStoreLableMgt seg商家标签管理 + * @return 结果 + */ + public int updateSegchkStoreLableMgt(SegchkStoreLableMgt segchkStoreLableMgt); + + /** + * 删除seg商家标签管理 + * + * @param mgtId seg商家标签管理主键 + * @return 结果 + */ + public int deleteSegchkStoreLableMgtByMgtId(Integer mgtId); + + /** + * 批量删除seg商家标签管理 + * + * @param mgtIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreLableMgtByMgtIds(Integer[] mgtIds); + + int deleteSegchkStoreLableMgtByCardTypeIds(Map paramsMap); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreRewardMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreRewardMapper.java new file mode 100644 index 0000000..1adaacc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreRewardMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreReward; + +/** + * seg商户奖励Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreRewardMapper +{ + /** + * 查询seg商户奖励 + * + * @param rewardId seg商户奖励主键 + * @return seg商户奖励 + */ + public SegchkStoreReward selectSegchkStoreRewardByRewardId(Long rewardId); + + /** + * 查询seg商户奖励列表 + * + * @param segchkStoreReward seg商户奖励 + * @return seg商户奖励集合 + */ + public List selectSegchkStoreRewardList(SegchkStoreReward segchkStoreReward); + + /** + * 新增seg商户奖励 + * + * @param segchkStoreReward seg商户奖励 + * @return 结果 + */ + public int insertSegchkStoreReward(SegchkStoreReward segchkStoreReward); + + /** + * 修改seg商户奖励 + * + * @param segchkStoreReward seg商户奖励 + * @return 结果 + */ + public int updateSegchkStoreReward(SegchkStoreReward segchkStoreReward); + + /** + * 删除seg商户奖励 + * + * @param rewardId seg商户奖励主键 + * @return 结果 + */ + public int deleteSegchkStoreRewardByRewardId(Long rewardId); + + /** + * 批量删除seg商户奖励 + * + * @param rewardIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreRewardByRewardIds(Long[] rewardIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreSecurityMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreSecurityMapper.java new file mode 100644 index 0000000..1f486e8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreSecurityMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreSecurity; + +/** + * seg商户密码Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreSecurityMapper +{ + /** + * 查询seg商户密码 + * + * @param pwdId seg商户密码主键 + * @return seg商户密码 + */ + public SegchkStoreSecurity selectSegchkStoreSecurityByPwdId(Long pwdId); + + /** + * 查询seg商户密码列表 + * + * @param segchkStoreSecurity seg商户密码 + * @return seg商户密码集合 + */ + public List selectSegchkStoreSecurityList(SegchkStoreSecurity segchkStoreSecurity); + + /** + * 新增seg商户密码 + * + * @param segchkStoreSecurity seg商户密码 + * @return 结果 + */ + public int insertSegchkStoreSecurity(SegchkStoreSecurity segchkStoreSecurity); + + /** + * 修改seg商户密码 + * + * @param segchkStoreSecurity seg商户密码 + * @return 结果 + */ + public int updateSegchkStoreSecurity(SegchkStoreSecurity segchkStoreSecurity); + + /** + * 删除seg商户密码 + * + * @param pwdId seg商户密码主键 + * @return 结果 + */ + public int deleteSegchkStoreSecurityByPwdId(Long pwdId); + + /** + * 批量删除seg商户密码 + * + * @param pwdIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreSecurityByPwdIds(Long[] pwdIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreSelfMgtMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreSelfMgtMapper.java new file mode 100644 index 0000000..b49c0ff --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkStoreSelfMgtMapper.java @@ -0,0 +1,69 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreSelfMgt; + +/** + * seg商家自定义卡管理Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkStoreSelfMgtMapper +{ + /** + * 查询seg商家自定义卡管理 + * + * @param freeCardId seg商家自定义卡管理主键 + * @return seg商家自定义卡管理 + */ + public SegchkStoreSelfMgt selectSegchkStoreSelfMgtByFreeCardId(Long freeCardId); + + /** + * 查询seg商家自定义卡管理列表 + * + * @param segchkStoreSelfMgt seg商家自定义卡管理 + * @return seg商家自定义卡管理集合 + */ + public List selectSegchkStoreSelfMgtList(SegchkStoreSelfMgt segchkStoreSelfMgt); + + /** + * 新增seg商家自定义卡管理 + * + * @param segchkStoreSelfMgt seg商家自定义卡管理 + * @return 结果 + */ + public int insertSegchkStoreSelfMgt(SegchkStoreSelfMgt segchkStoreSelfMgt); + + /** + * 修改seg商家自定义卡管理 + * + * @param segchkStoreSelfMgt seg商家自定义卡管理 + * @return 结果 + */ + public int updateSegchkStoreSelfMgt(SegchkStoreSelfMgt segchkStoreSelfMgt); + + /** + * 删除seg商家自定义卡管理 + * + * @param freeCardId seg商家自定义卡管理主键 + * @return 结果 + */ + public int deleteSegchkStoreSelfMgtByFreeCardId(Long freeCardId); + + /** + * 批量删除seg商家自定义卡管理 + * + * @param freeCardIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkStoreSelfMgtByFreeCardIds(Long[] freeCardIds); + + /** + * 针对单张卡进行核消 + * + * @param cardId 需要删除的数据ID + * @return 结果 + */ + public int updateSegchkUserVipCheck(Long cardId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSystemSettingMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSystemSettingMapper.java new file mode 100644 index 0000000..d9d328e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkSystemSettingMapper.java @@ -0,0 +1,108 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; + +import com.ruoyi.segchk.domain.BaseInfoSet; +import com.ruoyi.segchk.domain.SegchkBaseInfoSet; +import com.ruoyi.segchk.domain.SegchkSystemSetting; + +/** + * 系统设置Mapper接口 + * + * @author yinzhiying + * @date 2021-10-27 + */ +public interface SegchkSystemSettingMapper +{ + /** + * 查询系统设置 + * + * @param id 系统设置主键 + * @return 系统设置 + */ + public SegchkSystemSetting selectSegchkSystemSettingById(Long id); + + /** + * 查询系统设置列表 + * + * @param segchkSystemSetting 系统设置 + * @return 系统设置集合 + */ + public List selectSegchkSystemSettingList(SegchkSystemSetting segchkSystemSetting); + + /** + * 新增系统设置 + * + * @param segchkSystemSetting 系统设置 + * @return 结果 + */ + public int insertSegchkSystemSetting(SegchkSystemSetting segchkSystemSetting); + + /** + * 修改系统设置 + * + * @param segchkSystemSetting 系统设置 + * @return 结果 + */ + public int updateSegchkSystemSetting(SegchkSystemSetting segchkSystemSetting); + + /** + * 删除系统设置 + * + * @param id 系统设置主键 + * @return 结果 + */ + public int deleteSegchkSystemSettingById(Long id); + + /** + * 批量删除系统设置 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkSystemSettingByIds(Long[] ids); + + /** + * 查询基本信息设置 + * + * @return 基本信息设置实体类 + */ + + BaseInfoSet queryBaseInfoSet(); + + /** + * 编辑基本信息 + * + * @param baseInfoSet 信息实体类 + * @return 编辑返回码 + */ + + int editBaseInfoSetA(BaseInfoSet baseInfoSet); + + /** + * 编辑高级信息 + * + * @param baseInfoSet 信息实体类 + * @return 编辑返回码 + */ + + int editBaseInfoSetB(BaseInfoSet baseInfoSet); + + /** + * 设置审核开关 + * + * @param storeSpuAudit 店铺商品审核开关 0 需要审核 1 不需要 默认0 + * @return 成功返回1,失败返回0 + */ + + int setAuditSwitch(String storeSpuAudit); + + /** + * 设置审核开关 + * + * @param memberPriceStatus 会员等级启用状态 0 启用 1 不启用 默认0 + * @return 成功返回1,失败返回0 + */ + + int setMemberPriceStatus(String memberPriceStatus); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserAccountMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserAccountMapper.java new file mode 100644 index 0000000..9f241d1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserAccountMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserAccount; + +/** + * seg用户余额信息Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserAccountMapper +{ + /** + * 查询seg用户余额信息 + * + * @param accountId seg用户余额信息主键 + * @return seg用户余额信息 + */ + public SegchkUserAccount selectSegchkUserAccountByAccountId(Long accountId); + + /** + * 查询seg用户余额信息列表 + * + * @param segchkUserAccount seg用户余额信息 + * @return seg用户余额信息集合 + */ + public List selectSegchkUserAccountList(SegchkUserAccount segchkUserAccount); + + /** + * 新增seg用户余额信息 + * + * @param segchkUserAccount seg用户余额信息 + * @return 结果 + */ + public int insertSegchkUserAccount(SegchkUserAccount segchkUserAccount); + + /** + * 修改seg用户余额信息 + * + * @param segchkUserAccount seg用户余额信息 + * @return 结果 + */ + public int updateSegchkUserAccount(SegchkUserAccount segchkUserAccount); + + /** + * 删除seg用户余额信息 + * + * @param accountId seg用户余额信息主键 + * @return 结果 + */ + public int deleteSegchkUserAccountByAccountId(Long accountId); + + /** + * 批量删除seg用户余额信息 + * + * @param accountIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserAccountByAccountIds(Long[] accountIds); + + public int insertSegchkUserAccountBuyCharge(SegchkUserAccount segchkUserAccount); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserBasicInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserBasicInfoMapper.java new file mode 100644 index 0000000..5367a27 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserBasicInfoMapper.java @@ -0,0 +1,87 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserBasicInfo; +import com.ruoyi.segchk.domain.SegchkUserCertificationInfo; + +/** + * seg用户基本信息Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserBasicInfoMapper +{ + /** + * 查询seg用户基本信息 + * + * @param userId seg用户基本信息主键 + * @return seg用户基本信息 + */ + public SegchkUserBasicInfo selectSegchkUserBasicInfoByUserId(Long userId); + + /** + * 查询seg用户基本信息列表 + * + * @param segchkUserBasicInfo seg用户基本信息 + * @return seg用户基本信息集合 + */ + public List selectSegchkUserBasicInfoList(SegchkUserBasicInfo segchkUserBasicInfo); + + /** + * 新增seg用户基本信息 + * + * @param segchkUserBasicInfo seg用户基本信息 + * @return 结果 + */ + public int insertSegchkUserBasicInfo(SegchkUserBasicInfo segchkUserBasicInfo); + + /** + * 修改seg用户基本信息 + * + * @param segchkUserBasicInfo seg用户基本信息 + * @return 结果 + */ + public int updateSegchkUserBasicInfo(SegchkUserBasicInfo segchkUserBasicInfo); + + /** + * 删除seg用户基本信息 + * + * @param userId seg用户基本信息主键 + * @return 结果 + */ + public int deleteSegchkUserBasicInfoByUserId(Long userId); + + /** + * 批量删除seg用户基本信息 + * + * @param userIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserBasicInfoByUserIds(Long[] userIds); + + /** + * 批量删除seg用户实名认证信息 + * + * @param userIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserCertificationInfoByUserIds(Long[] userIds); + + /** + * 批量新增seg用户实名认证信息 + * + * @param segchkUserCertificationInfoList seg用户实名认证信息列表 + * @return 结果 + */ + public int batchSegchkUserCertificationInfo(List segchkUserCertificationInfoList); + + + /** + * 通过seg用户基本信息主键删除seg用户实名认证信息信息 + * + * @param userId seg用户基本信息ID + * @return 结果 + */ + public int deleteSegchkUserCertificationInfoByUserId(Long userId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserCashMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserCashMapper.java new file mode 100644 index 0000000..b2abccc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserCashMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserCash; + +/** + * seg用户提现记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserCashMapper +{ + /** + * 查询seg用户提现记录 + * + * @param cashId seg用户提现记录主键 + * @return seg用户提现记录 + */ + public SegchkUserCash selectSegchkUserCashByCashId(Long cashId); + + /** + * 查询seg用户提现记录列表 + * + * @param segchkUserCash seg用户提现记录 + * @return seg用户提现记录集合 + */ + public List selectSegchkUserCashList(SegchkUserCash segchkUserCash); + + /** + * 新增seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + public int insertSegchkUserCash(SegchkUserCash segchkUserCash); + + /** + * 修改seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + public int updateSegchkUserCash(SegchkUserCash segchkUserCash); + + /** + * 删除seg用户提现记录 + * + * @param cashId seg用户提现记录主键 + * @return 结果 + */ + public int deleteSegchkUserCashByCashId(Long cashId); + + /** + * 批量删除seg用户提现记录 + * + * @param cashIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserCashByCashIds(Long[] cashIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserCertificationInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserCertificationInfoMapper.java new file mode 100644 index 0000000..2e96fb8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserCertificationInfoMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserCertificationInfo; + +/** + * seg用户实名认证信息Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserCertificationInfoMapper +{ + /** + * 查询seg用户实名认证信息 + * + * @param usercardId seg用户实名认证信息主键 + * @return seg用户实名认证信息 + */ + public SegchkUserCertificationInfo selectSegchkUserCertificationInfoByUsercardId(Long usercardId); + + /** + * 查询seg用户实名认证信息列表 + * + * @param segchkUserCertificationInfo seg用户实名认证信息 + * @return seg用户实名认证信息集合 + */ + public List selectSegchkUserCertificationInfoList(SegchkUserCertificationInfo segchkUserCertificationInfo); + + /** + * 新增seg用户实名认证信息 + * + * @param segchkUserCertificationInfo seg用户实名认证信息 + * @return 结果 + */ + public int insertSegchkUserCertificationInfo(SegchkUserCertificationInfo segchkUserCertificationInfo); + + /** + * 修改seg用户实名认证信息 + * + * @param segchkUserCertificationInfo seg用户实名认证信息 + * @return 结果 + */ + public int updateSegchkUserCertificationInfo(SegchkUserCertificationInfo segchkUserCertificationInfo); + + /** + * 删除seg用户实名认证信息 + * + * @param usercardId seg用户实名认证信息主键 + * @return 结果 + */ + public int deleteSegchkUserCertificationInfoByUsercardId(Long usercardId); + + /** + * 批量删除seg用户实名认证信息 + * + * @param usercardIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserCertificationInfoByUsercardIds(Long[] usercardIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserChargeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserChargeMapper.java new file mode 100644 index 0000000..25107a5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserChargeMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserCharge; + +/** + * seg用户充值记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserChargeMapper +{ + /** + * 查询seg用户充值记录 + * + * @param chargeId seg用户充值记录主键 + * @return seg用户充值记录 + */ + public SegchkUserCharge selectSegchkUserChargeByChargeId(Long chargeId); + + /** + * 查询seg用户充值记录列表 + * + * @param segchkUserCharge seg用户充值记录 + * @return seg用户充值记录集合 + */ + public List selectSegchkUserChargeList(SegchkUserCharge segchkUserCharge); + + /** + * 新增seg用户充值记录 + * + * @param segchkUserCharge seg用户充值记录 + * @return 结果 + */ + public int insertSegchkUserCharge(SegchkUserCharge segchkUserCharge); + + /** + * 修改seg用户充值记录 + * + * @param segchkUserCharge seg用户充值记录 + * @return 结果 + */ + public int updateSegchkUserCharge(SegchkUserCharge segchkUserCharge); + + /** + * 删除seg用户充值记录 + * + * @param chargeId seg用户充值记录主键 + * @return 结果 + */ + public int deleteSegchkUserChargeByChargeId(Long chargeId); + + /** + * 批量删除seg用户充值记录 + * + * @param chargeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserChargeByChargeIds(Long[] chargeIds); + + /** + * 根据充值id,结果状态进行充值更新 + * + * @param segchkUserCharge 充值实体 + * @return 结果 + */ + public int updateSegchkUserChargeByRet(SegchkUserCharge segchkUserCharge); + + int addSegchkUserChargeWithRecommend(SegchkUserCharge segchkUserCharge); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserCollectMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserCollectMapper.java new file mode 100644 index 0000000..f2142b1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserCollectMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserCollect; + +/** + * seg用户收藏记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserCollectMapper +{ + /** + * 查询seg用户收藏记录 + * + * @param collectId seg用户收藏记录主键 + * @return seg用户收藏记录 + */ + public SegchkUserCollect selectSegchkUserCollectByCollectId(Long collectId); + + /** + * 查询seg用户收藏记录列表 + * + * @param segchkUserCollect seg用户收藏记录 + * @return seg用户收藏记录集合 + */ + public List selectSegchkUserCollectList(SegchkUserCollect segchkUserCollect); + + /** + * 新增seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + public int insertSegchkUserCollect(SegchkUserCollect segchkUserCollect); + + /** + * 修改seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + public int updateSegchkUserCollect(SegchkUserCollect segchkUserCollect); + + /** + * 删除seg用户收藏记录 + * + * @param collectId seg用户收藏记录主键 + * @return 结果 + */ + public int deleteSegchkUserCollectByCollectId(Long collectId); + + /** + * 批量删除seg用户收藏记录 + * + * @param collectIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserCollectByCollectIds(Long[] collectIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserExtInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserExtInfoMapper.java new file mode 100644 index 0000000..367bc1e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserExtInfoMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserExtInfo; + +/** + * seg用户扩展信息Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserExtInfoMapper +{ + /** + * 查询seg用户扩展信息 + * + * @param userId seg用户扩展信息主键 + * @return seg用户扩展信息 + */ + public SegchkUserExtInfo selectSegchkUserExtInfoByUserId(Long userId); + + /** + * 查询seg用户扩展信息列表 + * + * @param segchkUserExtInfo seg用户扩展信息 + * @return seg用户扩展信息集合 + */ + public List selectSegchkUserExtInfoList(SegchkUserExtInfo segchkUserExtInfo); + + /** + * 新增seg用户扩展信息 + * + * @param segchkUserExtInfo seg用户扩展信息 + * @return 结果 + */ + public int insertSegchkUserExtInfo(SegchkUserExtInfo segchkUserExtInfo); + + /** + * 修改seg用户扩展信息 + * + * @param segchkUserExtInfo seg用户扩展信息 + * @return 结果 + */ + public int updateSegchkUserExtInfo(SegchkUserExtInfo segchkUserExtInfo); + + /** + * 删除seg用户扩展信息 + * + * @param userId seg用户扩展信息主键 + * @return 结果 + */ + public int deleteSegchkUserExtInfoByUserId(Long userId); + + /** + * 批量删除seg用户扩展信息 + * + * @param userIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserExtInfoByUserIds(Long[] userIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserLikegoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserLikegoMapper.java new file mode 100644 index 0000000..bb0ff52 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserLikegoMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserLikego; + +/** + * seg用户想去记录Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserLikegoMapper +{ + /** + * 查询seg用户想去记录 + * + * @param likegoId seg用户想去记录主键 + * @return seg用户想去记录 + */ + public SegchkUserLikego selectSegchkUserLikegoByLikegoId(Long likegoId); + + /** + * 查询seg用户想去记录列表 + * + * @param segchkUserLikego seg用户想去记录 + * @return seg用户想去记录集合 + */ + public List selectSegchkUserLikegoList(SegchkUserLikego segchkUserLikego); + + /** + * 新增seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + public int insertSegchkUserLikego(SegchkUserLikego segchkUserLikego); + + /** + * 修改seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + public int updateSegchkUserLikego(SegchkUserLikego segchkUserLikego); + + /** + * 删除seg用户想去记录 + * + * @param likegoId seg用户想去记录主键 + * @return 结果 + */ + public int deleteSegchkUserLikegoByLikegoId(Long likegoId); + + /** + * 批量删除seg用户想去记录 + * + * @param likegoIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserLikegoByLikegoIds(Long[] likegoIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserRewardCtlMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserRewardCtlMapper.java new file mode 100644 index 0000000..6894cbe --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserRewardCtlMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserRewardCtl; + +/** + * seg会员推荐控制Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserRewardCtlMapper +{ + /** + * 查询seg会员推荐控制 + * + * @param rewardCtlId seg会员推荐控制主键 + * @return seg会员推荐控制 + */ + public SegchkUserRewardCtl selectSegchkUserRewardCtlByRewardCtlId(Integer rewardCtlId); + + /** + * 查询seg会员推荐控制列表 + * + * @param segchkUserRewardCtl seg会员推荐控制 + * @return seg会员推荐控制集合 + */ + public List selectSegchkUserRewardCtlList(SegchkUserRewardCtl segchkUserRewardCtl); + + /** + * 新增seg会员推荐控制 + * + * @param segchkUserRewardCtl seg会员推荐控制 + * @return 结果 + */ + public int insertSegchkUserRewardCtl(SegchkUserRewardCtl segchkUserRewardCtl); + + /** + * 修改seg会员推荐控制 + * + * @param segchkUserRewardCtl seg会员推荐控制 + * @return 结果 + */ + public int updateSegchkUserRewardCtl(SegchkUserRewardCtl segchkUserRewardCtl); + + /** + * 删除seg会员推荐控制 + * + * @param rewardCtlId seg会员推荐控制主键 + * @return 结果 + */ + public int deleteSegchkUserRewardCtlByRewardCtlId(Integer rewardCtlId); + + /** + * 批量删除seg会员推荐控制 + * + * @param rewardCtlIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserRewardCtlByRewardCtlIds(Integer[] rewardCtlIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserRewardMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserRewardMapper.java new file mode 100644 index 0000000..560ede7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserRewardMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserReward; + +/** + * seg用户奖励Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserRewardMapper +{ + /** + * 查询seg用户奖励 + * + * @param rewardId seg用户奖励主键 + * @return seg用户奖励 + */ + public SegchkUserReward selectSegchkUserRewardByRewardId(Long rewardId); + + /** + * 查询seg用户奖励列表 + * + * @param segchkUserReward seg用户奖励 + * @return seg用户奖励集合 + */ + public List selectSegchkUserRewardList(SegchkUserReward segchkUserReward); + + /** + * 新增seg用户奖励 + * + * @param segchkUserReward seg用户奖励 + * @return 结果 + */ + public int insertSegchkUserReward(SegchkUserReward segchkUserReward); + + /** + * 修改seg用户奖励 + * + * @param segchkUserReward seg用户奖励 + * @return 结果 + */ + public int updateSegchkUserReward(SegchkUserReward segchkUserReward); + + /** + * 删除seg用户奖励 + * + * @param rewardId seg用户奖励主键 + * @return 结果 + */ + public int deleteSegchkUserRewardByRewardId(Long rewardId); + + /** + * 批量删除seg用户奖励 + * + * @param rewardIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserRewardByRewardIds(Long[] rewardIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserSecurityMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserSecurityMapper.java new file mode 100644 index 0000000..41cdcf0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserSecurityMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserSecurity; + +/** + * seg用户密码Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserSecurityMapper +{ + /** + * 查询seg用户密码 + * + * @param pwdId seg用户密码主键 + * @return seg用户密码 + */ + public SegchkUserSecurity selectSegchkUserSecurityByPwdId(Long pwdId); + + /** + * 查询seg用户密码列表 + * + * @param segchkUserSecurity seg用户密码 + * @return seg用户密码集合 + */ + public List selectSegchkUserSecurityList(SegchkUserSecurity segchkUserSecurity); + + /** + * 新增seg用户密码 + * + * @param segchkUserSecurity seg用户密码 + * @return 结果 + */ + public int insertSegchkUserSecurity(SegchkUserSecurity segchkUserSecurity); + + /** + * 修改seg用户密码 + * + * @param segchkUserSecurity seg用户密码 + * @return 结果 + */ + public int updateSegchkUserSecurity(SegchkUserSecurity segchkUserSecurity); + + /** + * 删除seg用户密码 + * + * @param pwdId seg用户密码主键 + * @return 结果 + */ + public int deleteSegchkUserSecurityByPwdId(Long pwdId); + + /** + * 批量删除seg用户密码 + * + * @param pwdIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserSecurityByPwdIds(Long[] pwdIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserVipMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserVipMapper.java new file mode 100644 index 0000000..4e5c1ad --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserVipMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserVip; + +/** + * seg会员卡Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserVipMapper +{ + /** + * 查询seg会员卡 + * + * @param cardId seg会员卡主键 + * @return seg会员卡 + */ + public SegchkUserVip selectSegchkUserVipByCardId(Long cardId); + + /** + * 查询seg会员卡列表 + * + * @param segchkUserVip seg会员卡 + * @return seg会员卡集合 + */ + public List selectSegchkUserVipList(SegchkUserVip segchkUserVip); + + /** + * 新增seg会员卡 + * + * @param segchkUserVip seg会员卡 + * @return 结果 + */ + public int insertSegchkUserVip(SegchkUserVip segchkUserVip); + + /** + * 修改seg会员卡 + * + * @param segchkUserVip seg会员卡 + * @return 结果 + */ + public int updateSegchkUserVip(SegchkUserVip segchkUserVip); + + /** + * 删除seg会员卡 + * + * @param cardId seg会员卡主键 + * @return 结果 + */ + public int deleteSegchkUserVipByCardId(Long cardId); + + /** + * 批量删除seg会员卡 + * + * @param cardIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserVipByCardIds(Long[] cardIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserWechatMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserWechatMapper.java new file mode 100644 index 0000000..1421093 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkUserWechatMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserWechat; + +/** + * seg用户微信信息Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkUserWechatMapper +{ + /** + * 查询seg用户微信信息 + * + * @param userId seg用户微信信息主键 + * @return seg用户微信信息 + */ + public SegchkUserWechat selectSegchkUserWechatByUserId(Long userId); + + /** + * 查询seg用户微信信息列表 + * + * @param segchkUserWechat seg用户微信信息 + * @return seg用户微信信息集合 + */ + public List selectSegchkUserWechatList(SegchkUserWechat segchkUserWechat); + + /** + * 新增seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + public int insertSegchkUserWechat(SegchkUserWechat segchkUserWechat); + + /** + * 修改seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + public int updateSegchkUserWechat(SegchkUserWechat segchkUserWechat); + + /** + * 删除seg用户微信信息 + * + * @param userId seg用户微信信息主键 + * @return 结果 + */ + public int deleteSegchkUserWechatByUserId(Long userId); + + /** + * 批量删除seg用户微信信息 + * + * @param userIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkUserWechatByUserIds(Long[] userIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkVipSetInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkVipSetInfoMapper.java new file mode 100644 index 0000000..ad61e6f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/mapper/SegchkVipSetInfoMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.mapper; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkVipSetInfo; + +/** + * seg会员卡设置Mapper接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface SegchkVipSetInfoMapper +{ + /** + * 查询seg会员卡设置 + * + * @param modeId seg会员卡设置主键 + * @return seg会员卡设置 + */ + public SegchkVipSetInfo selectSegchkVipSetInfoByModeId(Integer modeId); + + /** + * 查询seg会员卡设置列表 + * + * @param segchkVipSetInfo seg会员卡设置 + * @return seg会员卡设置集合 + */ + public List selectSegchkVipSetInfoList(SegchkVipSetInfo segchkVipSetInfo); + + /** + * 新增seg会员卡设置 + * + * @param segchkVipSetInfo seg会员卡设置 + * @return 结果 + */ + public int insertSegchkVipSetInfo(SegchkVipSetInfo segchkVipSetInfo); + + /** + * 修改seg会员卡设置 + * + * @param segchkVipSetInfo seg会员卡设置 + * @return 结果 + */ + public int updateSegchkVipSetInfo(SegchkVipSetInfo segchkVipSetInfo); + + /** + * 删除seg会员卡设置 + * + * @param modeId seg会员卡设置主键 + * @return 结果 + */ + public int deleteSegchkVipSetInfoByModeId(Integer modeId); + + /** + * 批量删除seg会员卡设置 + * + * @param modeIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSegchkVipSetInfoByModeIds(Integer[] modeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkCarouseMgtService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkCarouseMgtService.java new file mode 100644 index 0000000..d5b6677 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkCarouseMgtService.java @@ -0,0 +1,65 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkCarouseMgt; + +/** + * seg首页轮播图管理Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkCarouseMgtService +{ + /** + * 查询seg首页轮播图管理 + * + * @param carouseId seg首页轮播图管理主键 + * @return seg首页轮播图管理 + */ + public SegchkCarouseMgt selectSegchkCarouseMgtByCarouseId(Long carouseId); + + /** + * 查询seg首页轮播图管理列表 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return seg首页轮播图管理集合 + */ + public List selectSegchkCarouseMgtList(SegchkCarouseMgt segchkCarouseMgt); + + /** + * 新增seg首页轮播图管理 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return 结果 + */ + public int insertSegchkCarouseMgt(SegchkCarouseMgt segchkCarouseMgt); + + /** + * 修改seg首页轮播图管理 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return 结果 + */ + public int updateSegchkCarouseMgt(SegchkCarouseMgt segchkCarouseMgt); + + /** + * 批量删除seg首页轮播图管理 + * + * @param carouseIds 需要删除的seg首页轮播图管理主键集合 + * @return 结果 + */ + public int deleteSegchkCarouseMgtByCarouseIds(Long[] carouseIds); + + /** + * 删除seg首页轮播图管理信息 + * + * @param carouseId seg首页轮播图管理主键 + * @return 结果 + */ + public int deleteSegchkCarouseMgtByCarouseId(Long carouseId); + + public int deleteSegchkCarouseMgtByStoreIds(Long[] storeIds); + + public int updateSegchkCarouseMgtSort(String[] sortInfos); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkChargeCardService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkChargeCardService.java new file mode 100644 index 0000000..d940d6c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkChargeCardService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkChargeCard; + +/** + * seg充值卡管理Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkChargeCardService +{ + /** + * 查询seg充值卡管理 + * + * @param cardTypeId seg充值卡管理主键 + * @return seg充值卡管理 + */ + public SegchkChargeCard selectSegchkChargeCardByCardTypeId(Long cardTypeId); + + /** + * 查询seg充值卡管理列表 + * + * @param segchkChargeCard seg充值卡管理 + * @return seg充值卡管理集合 + */ + public List selectSegchkChargeCardList(SegchkChargeCard segchkChargeCard); + + /** + * 新增seg充值卡管理 + * + * @param segchkChargeCard seg充值卡管理 + * @return 结果 + */ + public int insertSegchkChargeCard(SegchkChargeCard segchkChargeCard); + + /** + * 修改seg充值卡管理 + * + * @param segchkChargeCard seg充值卡管理 + * @return 结果 + */ + public int updateSegchkChargeCard(SegchkChargeCard segchkChargeCard); + + /** + * 批量删除seg充值卡管理 + * + * @param cardTypeIds 需要删除的seg充值卡管理主键集合 + * @return 结果 + */ + public int deleteSegchkChargeCardByCardTypeIds(String[] cardTypeIds); + + /** + * 删除seg充值卡管理信息 + * + * @param cardTypeId seg充值卡管理主键 + * @return 结果 + */ + public int deleteSegchkChargeCardByCardTypeId(Long cardTypeId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkCommentAccService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkCommentAccService.java new file mode 100644 index 0000000..c616ffe --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkCommentAccService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkCommentAcc; + +/** + * seg商家累积评价Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkCommentAccService +{ + /** + * 查询seg商家累积评价 + * + * @param updateId seg商家累积评价主键 + * @return seg商家累积评价 + */ + public SegchkCommentAcc selectSegchkCommentAccByUpdateId(Long updateId); + + /** + * 查询seg商家累积评价列表 + * + * @param segchkCommentAcc seg商家累积评价 + * @return seg商家累积评价集合 + */ + public List selectSegchkCommentAccList(SegchkCommentAcc segchkCommentAcc); + + /** + * 新增seg商家累积评价 + * + * @param segchkCommentAcc seg商家累积评价 + * @return 结果 + */ + public int insertSegchkCommentAcc(SegchkCommentAcc segchkCommentAcc); + + /** + * 修改seg商家累积评价 + * + * @param segchkCommentAcc seg商家累积评价 + * @return 结果 + */ + public int updateSegchkCommentAcc(SegchkCommentAcc segchkCommentAcc); + + /** + * 批量删除seg商家累积评价 + * + * @param updateIds 需要删除的seg商家累积评价主键集合 + * @return 结果 + */ + public int deleteSegchkCommentAccByUpdateIds(Long[] updateIds); + + /** + * 删除seg商家累积评价信息 + * + * @param updateId seg商家累积评价主键 + * @return 结果 + */ + public int deleteSegchkCommentAccByUpdateId(Long updateId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkDistrictInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkDistrictInfoService.java new file mode 100644 index 0000000..ac72f6d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkDistrictInfoService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkDistrictInfo; + +/** + * seg行政区域代码Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkDistrictInfoService +{ + /** + * 查询seg行政区域代码 + * + * @param districtId seg行政区域代码主键 + * @return seg行政区域代码 + */ + public SegchkDistrictInfo selectSegchkDistrictInfoByDistrictId(Integer districtId); + + /** + * 查询seg行政区域代码列表 + * + * @param segchkDistrictInfo seg行政区域代码 + * @return seg行政区域代码集合 + */ + public List selectSegchkDistrictInfoList(SegchkDistrictInfo segchkDistrictInfo); + + /** + * 新增seg行政区域代码 + * + * @param segchkDistrictInfo seg行政区域代码 + * @return 结果 + */ + public int insertSegchkDistrictInfo(SegchkDistrictInfo segchkDistrictInfo); + + /** + * 修改seg行政区域代码 + * + * @param segchkDistrictInfo seg行政区域代码 + * @return 结果 + */ + public int updateSegchkDistrictInfo(SegchkDistrictInfo segchkDistrictInfo); + + /** + * 批量删除seg行政区域代码 + * + * @param districtIds 需要删除的seg行政区域代码主键集合 + * @return 结果 + */ + public int deleteSegchkDistrictInfoByDistrictIds(Integer[] districtIds); + + /** + * 删除seg行政区域代码信息 + * + * @param districtId seg行政区域代码主键 + * @return 结果 + */ + public int deleteSegchkDistrictInfoByDistrictId(Integer districtId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkKeywordLableService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkKeywordLableService.java new file mode 100644 index 0000000..f4b4bc3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkKeywordLableService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkKeywordLable; + +/** + * seg关键字管理Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkKeywordLableService +{ + /** + * 查询seg关键字管理 + * + * @param keywordId seg关键字管理主键 + * @return seg关键字管理 + */ + public SegchkKeywordLable selectSegchkKeywordLableByKeywordId(Long keywordId); + + /** + * 查询seg关键字管理列表 + * + * @param segchkKeywordLable seg关键字管理 + * @return seg关键字管理集合 + */ + public List selectSegchkKeywordLableList(SegchkKeywordLable segchkKeywordLable); + + /** + * 新增seg关键字管理 + * + * @param segchkKeywordLable seg关键字管理 + * @return 结果 + */ + public int insertSegchkKeywordLable(SegchkKeywordLable segchkKeywordLable); + + /** + * 修改seg关键字管理 + * + * @param segchkKeywordLable seg关键字管理 + * @return 结果 + */ + public int updateSegchkKeywordLable(SegchkKeywordLable segchkKeywordLable); + + /** + * 批量删除seg关键字管理 + * + * @param keywordIds 需要删除的seg关键字管理主键集合 + * @return 结果 + */ + public int deleteSegchkKeywordLableByKeywordIds(Long[] keywordIds); + + /** + * 删除seg关键字管理信息 + * + * @param providerId seg关键字管理主键 + * @return 结果 + */ + public int deleteSegchkKeywordLableByProviderId(Long providerId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkLableMgtService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkLableMgtService.java new file mode 100644 index 0000000..d052966 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkLableMgtService.java @@ -0,0 +1,65 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import java.util.Map; + +import com.ruoyi.segchk.domain.SegchkLableMgt; + +/** + * seg首页标签管理Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkLableMgtService +{ + /** + * 查询seg首页标签管理 + * + * @param mgtId seg首页标签管理主键 + * @return seg首页标签管理 + */ + public SegchkLableMgt selectSegchkLableMgtByMgtId(Long mgtId); + + /** + * 查询seg首页标签管理列表 + * + * @param segchkLableMgt seg首页标签管理 + * @return seg首页标签管理集合 + */ + public List selectSegchkLableMgtList(SegchkLableMgt segchkLableMgt); + + /** + * 新增seg首页标签管理 + * + * @param segchkLableMgt seg首页标签管理 + * @return 结果 + */ + public int insertSegchkLableMgt(SegchkLableMgt segchkLableMgt); + + /** + * 修改seg首页标签管理 + * + * @param segchkLableMgt seg首页标签管理 + * @return 结果 + */ + public int updateSegchkLableMgt(SegchkLableMgt segchkLableMgt); + + /** + * 批量删除seg首页标签管理 + * + * @param mgtIds 需要删除的seg首页标签管理主键集合 + * @return 结果 + */ + public int deleteSegchkLableMgtByProviderIds(Long[] mgtIds); + + /** + * 删除seg首页标签管理信息 + * + * @param mgtId seg首页标签管理主键 + * @return 结果 + */ + public int deleteSegchkLableMgtByProviderId(Long mgtId); + + public int deleteSegchkLableMgtByCardTypeIds(Map paramsMap); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkLogionDetailService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkLogionDetailService.java new file mode 100644 index 0000000..95c8254 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkLogionDetailService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkLogionDetail; + +/** + * seg登录记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkLogionDetailService +{ + /** + * 查询seg登录记录 + * + * @param loginId seg登录记录主键 + * @return seg登录记录 + */ + public SegchkLogionDetail selectSegchkLogionDetailByLoginId(Long loginId); + + /** + * 查询seg登录记录列表 + * + * @param segchkLogionDetail seg登录记录 + * @return seg登录记录集合 + */ + public List selectSegchkLogionDetailList(SegchkLogionDetail segchkLogionDetail); + + /** + * 新增seg登录记录 + * + * @param segchkLogionDetail seg登录记录 + * @return 结果 + */ + public int insertSegchkLogionDetail(SegchkLogionDetail segchkLogionDetail); + + /** + * 修改seg登录记录 + * + * @param segchkLogionDetail seg登录记录 + * @return 结果 + */ + public int updateSegchkLogionDetail(SegchkLogionDetail segchkLogionDetail); + + /** + * 批量删除seg登录记录 + * + * @param loginIds 需要删除的seg登录记录主键集合 + * @return 结果 + */ + public int deleteSegchkLogionDetailByLoginIds(Long[] loginIds); + + /** + * 删除seg登录记录信息 + * + * @param loginId seg登录记录主键 + * @return 结果 + */ + public int deleteSegchkLogionDetailByLoginId(Long loginId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkMsgDetailService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkMsgDetailService.java new file mode 100644 index 0000000..751eff0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkMsgDetailService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkMsgDetail; + +/** + * seg消息记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkMsgDetailService +{ + /** + * 查询seg消息记录 + * + * @param msgId seg消息记录主键 + * @return seg消息记录 + */ + public SegchkMsgDetail selectSegchkMsgDetailByMsgId(Long msgId); + + /** + * 查询seg消息记录列表 + * + * @param segchkMsgDetail seg消息记录 + * @return seg消息记录集合 + */ + public List selectSegchkMsgDetailList(SegchkMsgDetail segchkMsgDetail); + + /** + * 新增seg消息记录 + * + * @param segchkMsgDetail seg消息记录 + * @return 结果 + */ + public int insertSegchkMsgDetail(SegchkMsgDetail segchkMsgDetail); + + /** + * 修改seg消息记录 + * + * @param segchkMsgDetail seg消息记录 + * @return 结果 + */ + public int updateSegchkMsgDetail(SegchkMsgDetail segchkMsgDetail); + + /** + * 批量删除seg消息记录 + * + * @param msgIds 需要删除的seg消息记录主键集合 + * @return 结果 + */ + public int deleteSegchkMsgDetailByMsgIds(Long[] msgIds); + + /** + * 删除seg消息记录信息 + * + * @param msgId seg消息记录主键 + * @return 结果 + */ + public int deleteSegchkMsgDetailByMsgId(Long msgId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkPreferenceLableService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkPreferenceLableService.java new file mode 100644 index 0000000..4ba8a15 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkPreferenceLableService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkPreferenceLable; + +/** + * seg优惠管理Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkPreferenceLableService +{ + /** + * 查询seg优惠管理 + * + * @param preferenceId seg优惠管理主键 + * @return seg优惠管理 + */ + public SegchkPreferenceLable selectSegchkPreferenceLableByPreferenceId(Long preferenceId); + + /** + * 查询seg优惠管理列表 + * + * @param segchkPreferenceLable seg优惠管理 + * @return seg优惠管理集合 + */ + public List selectSegchkPreferenceLableList(SegchkPreferenceLable segchkPreferenceLable); + + /** + * 新增seg优惠管理 + * + * @param segchkPreferenceLable seg优惠管理 + * @return 结果 + */ + public int insertSegchkPreferenceLable(SegchkPreferenceLable segchkPreferenceLable); + + /** + * 修改seg优惠管理 + * + * @param segchkPreferenceLable seg优惠管理 + * @return 结果 + */ + public int updateSegchkPreferenceLable(SegchkPreferenceLable segchkPreferenceLable); + + /** + * 批量删除seg优惠管理 + * + * @param preferenceIds 需要删除的seg优惠管理主键集合 + * @return 结果 + */ + public int deleteSegchkPreferenceLableByPreferenceIds(Long[] preferenceIds); + + /** + * 删除seg优惠管理信息 + * + * @param providerId seg优惠管理主键 + * @return 结果 + */ + public int deleteSegchkPreferenceLableByProviderId(Long providerId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderMgtService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderMgtService.java new file mode 100644 index 0000000..6fba952 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkProviderMgtService.java @@ -0,0 +1,66 @@ +package com.ruoyi.segchk.service; + +import java.util.HashMap; +import java.util.List; +import com.ruoyi.segchk.domain.SegchkProviderMgt; + +/** + * seg运营商管理Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkProviderMgtService +{ + /** + * 查询seg运营商管理 + * + * @param providerId seg运营商管理主键 + * @return seg运营商管理 + */ + public SegchkProviderMgt selectSegchkProviderMgtByProviderId(Long providerId); + + /** + * 查询seg运营商管理列表 + * + * @param segchkProviderMgt seg运营商管理 + * @return seg运营商管理集合 + */ + public List selectSegchkProviderMgtList(SegchkProviderMgt segchkProviderMgt); + + /** + * 新增seg运营商管理 + * + * @param segchkProviderMgt seg运营商管理 + * @return 结果 + */ + public int insertSegchkProviderMgt(SegchkProviderMgt segchkProviderMgt); + + /** + * 修改seg运营商管理 + * + * @param segchkProviderMgt seg运营商管理 + * @return 结果 + */ + public int updateSegchkProviderMgt(SegchkProviderMgt segchkProviderMgt); + + /** + * 批量删除seg运营商管理 + * + * @param providerIds 需要删除的seg运营商管理主键集合 + * @return 结果 + */ + public int deleteSegchkProviderMgtByProviderIds(Long[] providerIds); + + /** + * 删除seg运营商管理信息 + * + * @param providerId seg运营商管理主键 + * @return 结果 + */ + public int deleteSegchkProviderMgtByProviderId(Long providerId); + + HashMap getCustomService(Long providerId); + + Long getProviderIdByPhoneNo(String phonenumber); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderIndexService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderIndexService.java new file mode 100644 index 0000000..41df076 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderIndexService.java @@ -0,0 +1,65 @@ +package com.ruoyi.segchk.service; + +import com.ruoyi.segchk.domain.SegchkRecommenderStore; +import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebReq; +import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebResp; + +import java.util.List; + +/** + * seg首页推荐商户Service接口 + * + * @author yinzhiying + * @date 2021-07-01 + */ +public interface ISegchkRecommenderIndexService +{ + /** + * 查询seg首页推荐商户 + * + * @param recommenderId seg首页推荐商户ID + * @return seg首页推荐商户 + */ + public SegchkRecommenderStore selectSegchkRecommenderStoreById(Long recommenderId); + + /** + * 查询seg首页推荐商户列表 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return seg首页推荐商户集合 + */ + public List selectSegchkRecommenderStoreList(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 新增seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + public int insertSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 修改seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + public int updateSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 批量删除seg首页推荐商户 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSegchkRecommenderStoreByIds(String ids); + + /** + * 删除seg首页推荐商户信息 + * + * @param recommenderId seg首页推荐商户ID + * @return 结果 + */ + public int deleteSegchkRecommenderStoreById(Long recommenderId); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderStoreService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderStoreService.java new file mode 100644 index 0000000..26c0912 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkRecommenderStoreService.java @@ -0,0 +1,63 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkRecommenderStore; + +/** + * seg首页推荐商户Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkRecommenderStoreService +{ + /** + * 查询seg首页推荐商户 + * + * @param recommenderId seg首页推荐商户主键 + * @return seg首页推荐商户 + */ + public SegchkRecommenderStore selectSegchkRecommenderStoreByRecommenderId(Long recommenderId); + + /** + * 查询seg首页推荐商户列表 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return seg首页推荐商户集合 + */ + public List selectSegchkRecommenderStoreList(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 新增seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + public int insertSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 修改seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + public int updateSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore); + + /** + * 批量删除seg首页推荐商户 + * + * @param recommenderIds 需要删除的seg首页推荐商户主键集合 + * @return 结果 + */ + public int deleteSegchkRecommenderStoreByRecommenderIds(Long[] recommenderIds); + + /** + * 删除seg首页推荐商户信息 + * + * @param recommenderId seg首页推荐商户主键 + * @return 结果 + */ + public int deleteSegchkRecommenderStoreByRecommenderId(Long recommenderId); + + public int deleteSegchkRecommenderStoreByStoreIds(Long[] storeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSalerInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSalerInfoService.java new file mode 100644 index 0000000..a17ef24 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSalerInfoService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkSalerInfo; + +/** + * seg销售人员信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkSalerInfoService +{ + /** + * 查询seg销售人员信息 + * + * @param salerId seg销售人员信息主键 + * @return seg销售人员信息 + */ + public SegchkSalerInfo selectSegchkSalerInfoBySalerId(Integer salerId); + + /** + * 查询seg销售人员信息列表 + * + * @param segchkSalerInfo seg销售人员信息 + * @return seg销售人员信息集合 + */ + public List selectSegchkSalerInfoList(SegchkSalerInfo segchkSalerInfo); + + /** + * 新增seg销售人员信息 + * + * @param segchkSalerInfo seg销售人员信息 + * @return 结果 + */ + public int insertSegchkSalerInfo(SegchkSalerInfo segchkSalerInfo); + + /** + * 修改seg销售人员信息 + * + * @param segchkSalerInfo seg销售人员信息 + * @return 结果 + */ + public int updateSegchkSalerInfo(SegchkSalerInfo segchkSalerInfo); + + /** + * 批量删除seg销售人员信息 + * + * @param salerIds 需要删除的seg销售人员信息主键集合 + * @return 结果 + */ + public int deleteSegchkSalerInfoBySalerIds(Integer[] salerIds); + + /** + * 删除seg销售人员信息信息 + * + * @param salerId seg销售人员信息主键 + * @return 结果 + */ + public int deleteSegchkSalerInfoBySalerId(Integer salerId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSelfServiceChkService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSelfServiceChkService.java new file mode 100644 index 0000000..35d1f1f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSelfServiceChkService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkSelfServiceChk; + +/** + * seg自定义卡核消记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkSelfServiceChkService +{ + /** + * 查询seg自定义卡核消记录 + * + * @param chkServiceId seg自定义卡核消记录主键 + * @return seg自定义卡核消记录 + */ + public SegchkSelfServiceChk selectSegchkSelfServiceChkByChkServiceId(Long chkServiceId); + + /** + * 查询seg自定义卡核消记录列表 + * + * @param segchkSelfServiceChk seg自定义卡核消记录 + * @return seg自定义卡核消记录集合 + */ + public List selectSegchkSelfServiceChkList(SegchkSelfServiceChk segchkSelfServiceChk); + + /** + * 新增seg自定义卡核消记录 + * + * @param segchkSelfServiceChk seg自定义卡核消记录 + * @return 结果 + */ + public int insertSegchkSelfServiceChk(SegchkSelfServiceChk segchkSelfServiceChk); + + /** + * 修改seg自定义卡核消记录 + * + * @param segchkSelfServiceChk seg自定义卡核消记录 + * @return 结果 + */ + public int updateSegchkSelfServiceChk(SegchkSelfServiceChk segchkSelfServiceChk); + + /** + * 批量删除seg自定义卡核消记录 + * + * @param chkServiceIds 需要删除的seg自定义卡核消记录主键集合 + * @return 结果 + */ + public int deleteSegchkSelfServiceChkByChkServiceIds(Long[] chkServiceIds); + + /** + * 删除seg自定义卡核消记录信息 + * + * @param chkServiceId seg自定义卡核消记录主键 + * @return 结果 + */ + public int deleteSegchkSelfServiceChkByChkServiceId(Long chkServiceId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkServiceChkService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkServiceChkService.java new file mode 100644 index 0000000..b073dcf --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkServiceChkService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkServiceChk; + +/** + * seg核消记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkServiceChkService +{ + /** + * 查询seg核消记录 + * + * @param chkServiceId seg核消记录主键 + * @return seg核消记录 + */ + public SegchkServiceChk selectSegchkServiceChkByChkServiceId(Long chkServiceId); + + /** + * 查询seg核消记录列表 + * + * @param segchkServiceChk seg核消记录 + * @return seg核消记录集合 + */ + public List selectSegchkServiceChkList(SegchkServiceChk segchkServiceChk); + + /** + * 新增seg核消记录 + * + * @param segchkServiceChk seg核消记录 + * @return 结果 + */ + public int insertSegchkServiceChk(SegchkServiceChk segchkServiceChk); + + /** + * 修改seg核消记录 + * + * @param segchkServiceChk seg核消记录 + * @return 结果 + */ + public int updateSegchkServiceChk(SegchkServiceChk segchkServiceChk); + + /** + * 批量删除seg核消记录 + * + * @param chkServiceIds 需要删除的seg核消记录主键集合 + * @return 结果 + */ + public int deleteSegchkServiceChkByChkServiceIds(Long[] chkServiceIds); + + /** + * 删除seg核消记录信息 + * + * @param chkServiceId seg核消记录主键 + * @return 结果 + */ + public int deleteSegchkServiceChkByChkServiceId(Long chkServiceId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkServiceCommentService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkServiceCommentService.java new file mode 100644 index 0000000..f932d3e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkServiceCommentService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkServiceComment; + +/** + * seg评价记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkServiceCommentService +{ + /** + * 查询seg评价记录 + * + * @param commentId seg评价记录主键 + * @return seg评价记录 + */ + public SegchkServiceComment selectSegchkServiceCommentByCommentId(Long commentId); + + /** + * 查询seg评价记录列表 + * + * @param segchkServiceComment seg评价记录 + * @return seg评价记录集合 + */ + public List selectSegchkServiceCommentList(SegchkServiceComment segchkServiceComment); + + /** + * 新增seg评价记录 + * + * @param segchkServiceComment seg评价记录 + * @return 结果 + */ + public int insertSegchkServiceComment(SegchkServiceComment segchkServiceComment); + + /** + * 修改seg评价记录 + * + * @param segchkServiceComment seg评价记录 + * @return 结果 + */ + public int updateSegchkServiceComment(SegchkServiceComment segchkServiceComment); + + /** + * 批量删除seg评价记录 + * + * @param commentIds 需要删除的seg评价记录主键集合 + * @return 结果 + */ + public int deleteSegchkServiceCommentByCommentIds(Long[] commentIds); + + /** + * 删除seg评价记录信息 + * + * @param commentId seg评价记录主键 + * @return 结果 + */ + public int deleteSegchkServiceCommentByCommentId(Long commentId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSmsDetailService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSmsDetailService.java new file mode 100644 index 0000000..8b8ebe5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSmsDetailService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkSmsDetail; + +/** + * seg短信记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkSmsDetailService +{ + /** + * 查询seg短信记录 + * + * @param shortMsgId seg短信记录主键 + * @return seg短信记录 + */ + public SegchkSmsDetail selectSegchkSmsDetailByShortMsgId(Long shortMsgId); + + /** + * 查询seg短信记录列表 + * + * @param segchkSmsDetail seg短信记录 + * @return seg短信记录集合 + */ + public List selectSegchkSmsDetailList(SegchkSmsDetail segchkSmsDetail); + + /** + * 新增seg短信记录 + * + * @param segchkSmsDetail seg短信记录 + * @return 结果 + */ + public int insertSegchkSmsDetail(SegchkSmsDetail segchkSmsDetail); + + /** + * 修改seg短信记录 + * + * @param segchkSmsDetail seg短信记录 + * @return 结果 + */ + public int updateSegchkSmsDetail(SegchkSmsDetail segchkSmsDetail); + + /** + * 批量删除seg短信记录 + * + * @param shortMsgIds 需要删除的seg短信记录主键集合 + * @return 结果 + */ + public int deleteSegchkSmsDetailByShortMsgIds(Long[] shortMsgIds); + + /** + * 删除seg短信记录信息 + * + * @param shortMsgId seg短信记录主键 + * @return 结果 + */ + public int deleteSegchkSmsDetailByShortMsgId(Long shortMsgId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreAccountService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreAccountService.java new file mode 100644 index 0000000..9b8aa12 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreAccountService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreAccount; + +/** + * seg商户余额信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreAccountService +{ + /** + * 查询seg商户余额信息 + * + * @param accountId seg商户余额信息主键 + * @return seg商户余额信息 + */ + public SegchkStoreAccount selectSegchkStoreAccountByAccountId(Long accountId); + + /** + * 查询seg商户余额信息列表 + * + * @param segchkStoreAccount seg商户余额信息 + * @return seg商户余额信息集合 + */ + public List selectSegchkStoreAccountList(SegchkStoreAccount segchkStoreAccount); + + /** + * 新增seg商户余额信息 + * + * @param segchkStoreAccount seg商户余额信息 + * @return 结果 + */ + public int insertSegchkStoreAccount(SegchkStoreAccount segchkStoreAccount); + + /** + * 修改seg商户余额信息 + * + * @param segchkStoreAccount seg商户余额信息 + * @return 结果 + */ + public int updateSegchkStoreAccount(SegchkStoreAccount segchkStoreAccount); + + /** + * 批量删除seg商户余额信息 + * + * @param accountIds 需要删除的seg商户余额信息主键集合 + * @return 结果 + */ + public int deleteSegchkStoreAccountByAccountIds(Long[] accountIds); + + /** + * 删除seg商户余额信息信息 + * + * @param accountId seg商户余额信息主键 + * @return 结果 + */ + public int deleteSegchkStoreAccountByAccountId(Long accountId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreBasicInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreBasicInfoService.java new file mode 100644 index 0000000..9769b64 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreBasicInfoService.java @@ -0,0 +1,73 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreBasicInfo; + +/** + * seg商家基础信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreBasicInfoService +{ + /** + * 查询seg商家基础信息 + * + * @param storeId seg商家基础信息主键 + * @return seg商家基础信息 + */ + public SegchkStoreBasicInfo selectSegchkStoreBasicInfoByStoreId(Long storeId); + + /** + * 查询seg商家基础信息列表 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return seg商家基础信息集合 + */ + public List selectSegchkStoreBasicInfoList(SegchkStoreBasicInfo segchkStoreBasicInfo); + + /** + * 新增seg商家基础信息 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return 结果 + */ + public int insertSegchkStoreBasicInfo(SegchkStoreBasicInfo segchkStoreBasicInfo); + + /** + * 修改seg商家基础信息 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return 结果 + */ + public int updateSegchkStoreBasicInfo(SegchkStoreBasicInfo segchkStoreBasicInfo); + + /** + * 批量删除seg商家基础信息 + * + * @param storeIds 需要删除的seg商家基础信息主键集合 + * @return 结果 + */ + public int deleteSegchkStoreBasicInfoByStoreIds(Long[] storeIds); + + /** + * 删除seg商家基础信息信息 + * + * @param storeId seg商家基础信息主键 + * @return 结果 + */ + public int deleteSegchkStoreBasicInfoByStoreId(Long storeId); + + /** + * 修改seg商家服务状态 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return 结果 + */ + public int updateSegchkStoreServiceStatus(SegchkStoreBasicInfo segchkStoreBasicInfo); + + int updateSegchkStoreDetail(SegchkStoreBasicInfo segchkStoreBasicInfo); + +// int addSegchkStoreVR(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreCashService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreCashService.java new file mode 100644 index 0000000..0c17912 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreCashService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreCash; + +/** + * seg商户户提现记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreCashService +{ + /** + * 查询seg商户户提现记录 + * + * @param cashId seg商户户提现记录主键 + * @return seg商户户提现记录 + */ + public SegchkStoreCash selectSegchkStoreCashByCashId(Long cashId); + + /** + * 查询seg商户户提现记录列表 + * + * @param segchkStoreCash seg商户户提现记录 + * @return seg商户户提现记录集合 + */ + public List selectSegchkStoreCashList(SegchkStoreCash segchkStoreCash); + + /** + * 新增seg商户户提现记录 + * + * @param segchkStoreCash seg商户户提现记录 + * @return 结果 + */ + public int insertSegchkStoreCash(SegchkStoreCash segchkStoreCash); + + /** + * 修改seg商户户提现记录 + * + * @param segchkStoreCash seg商户户提现记录 + * @return 结果 + */ + public int updateSegchkStoreCash(SegchkStoreCash segchkStoreCash); + + /** + * 批量删除seg商户户提现记录 + * + * @param cashIds 需要删除的seg商户户提现记录主键集合 + * @return 结果 + */ + public int deleteSegchkStoreCashByCashIds(Long[] cashIds); + + /** + * 删除seg商户户提现记录信息 + * + * @param cashId seg商户户提现记录主键 + * @return 结果 + */ + public int deleteSegchkStoreCashByCashId(Long cashId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreChargeService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreChargeService.java new file mode 100644 index 0000000..391803b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreChargeService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreCharge; + +/** + * seg商户充值记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreChargeService +{ + /** + * 查询seg商户充值记录 + * + * @param chargeId seg商户充值记录主键 + * @return seg商户充值记录 + */ + public SegchkStoreCharge selectSegchkStoreChargeByChargeId(Long chargeId); + + /** + * 查询seg商户充值记录列表 + * + * @param segchkStoreCharge seg商户充值记录 + * @return seg商户充值记录集合 + */ + public List selectSegchkStoreChargeList(SegchkStoreCharge segchkStoreCharge); + + /** + * 新增seg商户充值记录 + * + * @param segchkStoreCharge seg商户充值记录 + * @return 结果 + */ + public int insertSegchkStoreCharge(SegchkStoreCharge segchkStoreCharge); + + /** + * 修改seg商户充值记录 + * + * @param segchkStoreCharge seg商户充值记录 + * @return 结果 + */ + public int updateSegchkStoreCharge(SegchkStoreCharge segchkStoreCharge); + + /** + * 批量删除seg商户充值记录 + * + * @param chargeIds 需要删除的seg商户充值记录主键集合 + * @return 结果 + */ + public int deleteSegchkStoreChargeByChargeIds(Long[] chargeIds); + + /** + * 删除seg商户充值记录信息 + * + * @param chargeId seg商户充值记录主键 + * @return 结果 + */ + public int deleteSegchkStoreChargeByChargeId(Long chargeId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreChkMgtService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreChkMgtService.java new file mode 100644 index 0000000..22448a2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreChkMgtService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreChkMgt; + +/** + * seg商家核消卡管理Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreChkMgtService +{ + /** + * 查询seg商家核消卡管理 + * + * @param mgtId seg商家核消卡管理主键 + * @return seg商家核消卡管理 + */ + public SegchkStoreChkMgt selectSegchkStoreChkMgtByMgtId(Integer mgtId); + + /** + * 查询seg商家核消卡管理列表 + * + * @param segchkStoreChkMgt seg商家核消卡管理 + * @return seg商家核消卡管理集合 + */ + public List selectSegchkStoreChkMgtList(SegchkStoreChkMgt segchkStoreChkMgt); + + /** + * 新增seg商家核消卡管理 + * + * @param segchkStoreChkMgt seg商家核消卡管理 + * @return 结果 + */ + public int insertSegchkStoreChkMgt(SegchkStoreChkMgt segchkStoreChkMgt); + + /** + * 修改seg商家核消卡管理 + * + * @param segchkStoreChkMgt seg商家核消卡管理 + * @return 结果 + */ + public int updateSegchkStoreChkMgt(SegchkStoreChkMgt segchkStoreChkMgt); + + /** + * 批量删除seg商家核消卡管理 + * + * @param mgtIds 需要删除的seg商家核消卡管理主键集合 + * @return 结果 + */ + public int deleteSegchkStoreChkMgtByMgtIds(Integer[] mgtIds); + + /** + * 删除seg商家核消卡管理信息 + * + * @param mgtId seg商家核消卡管理主键 + * @return 结果 + */ + public int deleteSegchkStoreChkMgtByMgtId(Integer mgtId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreImageService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreImageService.java new file mode 100644 index 0000000..2b68610 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreImageService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreImage; + +/** + * seg商家图片信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreImageService +{ + /** + * 查询seg商家图片信息 + * + * @param storeId seg商家图片信息主键 + * @return seg商家图片信息 + */ + public SegchkStoreImage selectSegchkStoreImageByStoreId(Long storeId); + + /** + * 查询seg商家图片信息列表 + * + * @param segchkStoreImage seg商家图片信息 + * @return seg商家图片信息集合 + */ + public List selectSegchkStoreImageList(SegchkStoreImage segchkStoreImage); + + /** + * 新增seg商家图片信息 + * + * @param segchkStoreImage seg商家图片信息 + * @return 结果 + */ + public int insertSegchkStoreImage(SegchkStoreImage segchkStoreImage); + + /** + * 修改seg商家图片信息 + * + * @param segchkStoreImage seg商家图片信息 + * @return 结果 + */ + public int updateSegchkStoreImage(SegchkStoreImage segchkStoreImage); + + /** + * 批量删除seg商家图片信息 + * + * @param storeIds 需要删除的seg商家图片信息主键集合 + * @return 结果 + */ + public int deleteSegchkStoreImageByStoreIds(Long[] storeIds); + + /** + * 删除seg商家图片信息信息 + * + * @param storeId seg商家图片信息主键 + * @return 结果 + */ + public int deleteSegchkStoreImageByStoreId(Long storeId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreLableMgtService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreLableMgtService.java new file mode 100644 index 0000000..eac6719 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreLableMgtService.java @@ -0,0 +1,65 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import java.util.Map; + +import com.ruoyi.segchk.domain.SegchkStoreLableMgt; + +/** + * seg商家标签管理Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreLableMgtService +{ + /** + * 查询seg商家标签管理 + * + * @param mgtId seg商家标签管理主键 + * @return seg商家标签管理 + */ + public SegchkStoreLableMgt selectSegchkStoreLableMgtByMgtId(Integer mgtId); + + /** + * 查询seg商家标签管理列表 + * + * @param segchkStoreLableMgt seg商家标签管理 + * @return seg商家标签管理集合 + */ + public List selectSegchkStoreLableMgtList(SegchkStoreLableMgt segchkStoreLableMgt); + + /** + * 新增seg商家标签管理 + * + * @param segchkStoreLableMgt seg商家标签管理 + * @return 结果 + */ + public int insertSegchkStoreLableMgt(SegchkStoreLableMgt segchkStoreLableMgt); + + /** + * 修改seg商家标签管理 + * + * @param segchkStoreLableMgt seg商家标签管理 + * @return 结果 + */ + public int updateSegchkStoreLableMgt(SegchkStoreLableMgt segchkStoreLableMgt); + + /** + * 批量删除seg商家标签管理 + * + * @param mgtIds 需要删除的seg商家标签管理主键集合 + * @return 结果 + */ + public int deleteSegchkStoreLableMgtByMgtIds(Integer[] mgtIds); + + /** + * 删除seg商家标签管理信息 + * + * @param mgtId seg商家标签管理主键 + * @return 结果 + */ + public int deleteSegchkStoreLableMgtByMgtId(Integer mgtId); + + public int deleteSegchkStoreLableMgtByCardTypeIds(Map paramsMap); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreRewardService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreRewardService.java new file mode 100644 index 0000000..43f6dc6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreRewardService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreReward; + +/** + * seg商户奖励Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreRewardService +{ + /** + * 查询seg商户奖励 + * + * @param rewardId seg商户奖励主键 + * @return seg商户奖励 + */ + public SegchkStoreReward selectSegchkStoreRewardByRewardId(Long rewardId); + + /** + * 查询seg商户奖励列表 + * + * @param segchkStoreReward seg商户奖励 + * @return seg商户奖励集合 + */ + public List selectSegchkStoreRewardList(SegchkStoreReward segchkStoreReward); + + /** + * 新增seg商户奖励 + * + * @param segchkStoreReward seg商户奖励 + * @return 结果 + */ + public int insertSegchkStoreReward(SegchkStoreReward segchkStoreReward); + + /** + * 修改seg商户奖励 + * + * @param segchkStoreReward seg商户奖励 + * @return 结果 + */ + public int updateSegchkStoreReward(SegchkStoreReward segchkStoreReward); + + /** + * 批量删除seg商户奖励 + * + * @param rewardIds 需要删除的seg商户奖励主键集合 + * @return 结果 + */ + public int deleteSegchkStoreRewardByRewardIds(Long[] rewardIds); + + /** + * 删除seg商户奖励信息 + * + * @param rewardId seg商户奖励主键 + * @return 结果 + */ + public int deleteSegchkStoreRewardByRewardId(Long rewardId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreSecurityService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreSecurityService.java new file mode 100644 index 0000000..e9c5071 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreSecurityService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreSecurity; + +/** + * seg商户密码Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreSecurityService +{ + /** + * 查询seg商户密码 + * + * @param pwdId seg商户密码主键 + * @return seg商户密码 + */ + public SegchkStoreSecurity selectSegchkStoreSecurityByPwdId(Long pwdId); + + /** + * 查询seg商户密码列表 + * + * @param segchkStoreSecurity seg商户密码 + * @return seg商户密码集合 + */ + public List selectSegchkStoreSecurityList(SegchkStoreSecurity segchkStoreSecurity); + + /** + * 新增seg商户密码 + * + * @param segchkStoreSecurity seg商户密码 + * @return 结果 + */ + public int insertSegchkStoreSecurity(SegchkStoreSecurity segchkStoreSecurity); + + /** + * 修改seg商户密码 + * + * @param segchkStoreSecurity seg商户密码 + * @return 结果 + */ + public int updateSegchkStoreSecurity(SegchkStoreSecurity segchkStoreSecurity); + + /** + * 批量删除seg商户密码 + * + * @param pwdIds 需要删除的seg商户密码主键集合 + * @return 结果 + */ + public int deleteSegchkStoreSecurityByPwdIds(Long[] pwdIds); + + /** + * 删除seg商户密码信息 + * + * @param pwdId seg商户密码主键 + * @return 结果 + */ + public int deleteSegchkStoreSecurityByPwdId(Long pwdId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreSelfMgtService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreSelfMgtService.java new file mode 100644 index 0000000..35bf4c8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkStoreSelfMgtService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkStoreSelfMgt; + +/** + * seg商家自定义卡管理Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkStoreSelfMgtService +{ + /** + * 查询seg商家自定义卡管理 + * + * @param freeCardId seg商家自定义卡管理主键 + * @return seg商家自定义卡管理 + */ + public SegchkStoreSelfMgt selectSegchkStoreSelfMgtByFreeCardId(Long freeCardId); + + /** + * 查询seg商家自定义卡管理列表 + * + * @param segchkStoreSelfMgt seg商家自定义卡管理 + * @return seg商家自定义卡管理集合 + */ + public List selectSegchkStoreSelfMgtList(SegchkStoreSelfMgt segchkStoreSelfMgt); + + /** + * 新增seg商家自定义卡管理 + * + * @param segchkStoreSelfMgt seg商家自定义卡管理 + * @return 结果 + */ + public int insertSegchkStoreSelfMgt(SegchkStoreSelfMgt segchkStoreSelfMgt); + + /** + * 修改seg商家自定义卡管理 + * + * @param segchkStoreSelfMgt seg商家自定义卡管理 + * @return 结果 + */ + public int updateSegchkStoreSelfMgt(SegchkStoreSelfMgt segchkStoreSelfMgt); + + /** + * 批量删除seg商家自定义卡管理 + * + * @param freeCardIds 需要删除的seg商家自定义卡管理主键集合 + * @return 结果 + */ + public int deleteSegchkStoreSelfMgtByFreeCardIds(Long[] freeCardIds); + + /** + * 删除seg商家自定义卡管理信息 + * + * @param freeCardId seg商家自定义卡管理主键 + * @return 结果 + */ + public int deleteSegchkStoreSelfMgtByFreeCardId(Long freeCardId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSystemSettingService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSystemSettingService.java new file mode 100644 index 0000000..2ee670b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkSystemSettingService.java @@ -0,0 +1,103 @@ +package com.ruoyi.segchk.service; + +import java.util.List; + +import com.ruoyi.segchk.domain.BaseInfoSet; +import com.ruoyi.segchk.domain.SegchkBaseInfoSet; +import com.ruoyi.segchk.domain.SegchkSystemSetting; + +/** + * 系统设置Service接口 + * + * @author yinzhiying + * @date 2021-10-27 + */ +public interface ISegchkSystemSettingService +{ + /** + * 查询系统设置 + * + * @param id 系统设置主键 + * @return 系统设置 + */ + public SegchkSystemSetting selectSegchkSystemSettingById(Long id); + + /** + * 查询系统设置列表 + * + * @param segchkSystemSetting 系统设置 + * @return 系统设置集合 + */ + public List selectSegchkSystemSettingList(SegchkSystemSetting segchkSystemSetting); + + /** + * 新增系统设置 + * + * @param segchkSystemSetting 系统设置 + * @return 结果 + */ + public int insertSegchkSystemSetting(SegchkSystemSetting segchkSystemSetting); + + /** + * 修改系统设置 + * + * @param segchkSystemSetting 系统设置 + * @return 结果 + */ + public int updateSegchkSystemSetting(SegchkSystemSetting segchkSystemSetting); + + /** + * 批量删除系统设置 + * + * @param ids 需要删除的系统设置主键集合 + * @return 结果 + */ + public int deleteSegchkSystemSettingByIds(Long[] ids); + + /** + * 删除系统设置信息 + * + * @param id 系统设置主键 + * @return 结果 + */ + public int deleteSegchkSystemSettingById(Long id); + + /** + * 查询基本信息和高级信息设置 + * + * @return 基本信息设置实体类 + */ + BaseInfoSet queryBaseInfoSet(); + + /** + * 编辑基本信息和高级信息 + * + * @param baseInfoSet 基本信息实体类 + * @param type 1 基本信息 0高级信息 + * @return -1编辑失败 1编辑成功 0编辑失败 + */ + int editBaseInfoSet(BaseInfoSet baseInfoSet, int type); + + /** + * 设置审核开关 + * + * @param storeSpuAudit 店铺商品审核开关 0 需要审核 1 不需要 默认0 + * @return 成功返回1,失败返回0 + */ + int setAuditSwitch(String storeSpuAudit); + + /** + * 设置会员价启用状态 + * + * @param memberPriceStatus 会员等级启用状态 0 启用 1 不启用 默认0 + * @return 成功返回1,失败返回0 + */ + int setMemberPriceStatus(String memberPriceStatus); + + /** + * 判断单品是否需要审核 + * + * @return 需要审核返回true 不需要返回false + */ + boolean isSkuNeedAudit(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserAccountService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserAccountService.java new file mode 100644 index 0000000..cd65f06 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserAccountService.java @@ -0,0 +1,63 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserAccount; + +/** + * seg用户余额信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserAccountService +{ + /** + * 查询seg用户余额信息 + * + * @param accountId seg用户余额信息主键 + * @return seg用户余额信息 + */ + public SegchkUserAccount selectSegchkUserAccountByAccountId(Long accountId); + + /** + * 查询seg用户余额信息列表 + * + * @param segchkUserAccount seg用户余额信息 + * @return seg用户余额信息集合 + */ + public List selectSegchkUserAccountList(SegchkUserAccount segchkUserAccount); + + /** + * 新增seg用户余额信息 + * + * @param segchkUserAccount seg用户余额信息 + * @return 结果 + */ + public int insertSegchkUserAccount(SegchkUserAccount segchkUserAccount); + + /** + * 修改seg用户余额信息 + * + * @param segchkUserAccount seg用户余额信息 + * @return 结果 + */ + public int updateSegchkUserAccount(SegchkUserAccount segchkUserAccount); + + /** + * 批量删除seg用户余额信息 + * + * @param accountIds 需要删除的seg用户余额信息主键集合 + * @return 结果 + */ + public int deleteSegchkUserAccountByAccountIds(Long[] accountIds); + + /** + * 删除seg用户余额信息信息 + * + * @param accountId seg用户余额信息主键 + * @return 结果 + */ + public int deleteSegchkUserAccountByAccountId(Long accountId); + + public int insertSegchkUserAccountBuyCharge(SegchkUserAccount segchkUserAccount); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserBasicInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserBasicInfoService.java new file mode 100644 index 0000000..ed1b4bb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserBasicInfoService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserBasicInfo; + +/** + * seg用户基本信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserBasicInfoService +{ + /** + * 查询seg用户基本信息 + * + * @param userId seg用户基本信息主键 + * @return seg用户基本信息 + */ + public SegchkUserBasicInfo selectSegchkUserBasicInfoByUserId(Long userId); + + /** + * 查询seg用户基本信息列表 + * + * @param segchkUserBasicInfo seg用户基本信息 + * @return seg用户基本信息集合 + */ + public List selectSegchkUserBasicInfoList(SegchkUserBasicInfo segchkUserBasicInfo); + + /** + * 新增seg用户基本信息 + * + * @param segchkUserBasicInfo seg用户基本信息 + * @return 结果 + */ + public int insertSegchkUserBasicInfo(SegchkUserBasicInfo segchkUserBasicInfo); + + /** + * 修改seg用户基本信息 + * + * @param segchkUserBasicInfo seg用户基本信息 + * @return 结果 + */ + public int updateSegchkUserBasicInfo(SegchkUserBasicInfo segchkUserBasicInfo); + + /** + * 批量删除seg用户基本信息 + * + * @param userIds 需要删除的seg用户基本信息主键集合 + * @return 结果 + */ + public int deleteSegchkUserBasicInfoByUserIds(Long[] userIds); + + /** + * 删除seg用户基本信息信息 + * + * @param userId seg用户基本信息主键 + * @return 结果 + */ + public int deleteSegchkUserBasicInfoByUserId(Long userId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserCashService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserCashService.java new file mode 100644 index 0000000..b35123b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserCashService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserCash; + +/** + * seg用户提现记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserCashService +{ + /** + * 查询seg用户提现记录 + * + * @param cashId seg用户提现记录主键 + * @return seg用户提现记录 + */ + public SegchkUserCash selectSegchkUserCashByCashId(Long cashId); + + /** + * 查询seg用户提现记录列表 + * + * @param segchkUserCash seg用户提现记录 + * @return seg用户提现记录集合 + */ + public List selectSegchkUserCashList(SegchkUserCash segchkUserCash); + + /** + * 新增seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + public int insertSegchkUserCash(SegchkUserCash segchkUserCash); + + /** + * 修改seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + public int updateSegchkUserCash(SegchkUserCash segchkUserCash); + + /** + * 批量删除seg用户提现记录 + * + * @param cashIds 需要删除的seg用户提现记录主键集合 + * @return 结果 + */ + public int deleteSegchkUserCashByCashIds(Long[] cashIds); + + /** + * 删除seg用户提现记录信息 + * + * @param cashId seg用户提现记录主键 + * @return 结果 + */ + public int deleteSegchkUserCashByCashId(Long cashId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserCertificationInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserCertificationInfoService.java new file mode 100644 index 0000000..07685b3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserCertificationInfoService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserCertificationInfo; + +/** + * seg用户实名认证信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserCertificationInfoService +{ + /** + * 查询seg用户实名认证信息 + * + * @param usercardId seg用户实名认证信息主键 + * @return seg用户实名认证信息 + */ + public SegchkUserCertificationInfo selectSegchkUserCertificationInfoByUsercardId(Long usercardId); + + /** + * 查询seg用户实名认证信息列表 + * + * @param segchkUserCertificationInfo seg用户实名认证信息 + * @return seg用户实名认证信息集合 + */ + public List selectSegchkUserCertificationInfoList(SegchkUserCertificationInfo segchkUserCertificationInfo); + + /** + * 新增seg用户实名认证信息 + * + * @param segchkUserCertificationInfo seg用户实名认证信息 + * @return 结果 + */ + public int insertSegchkUserCertificationInfo(SegchkUserCertificationInfo segchkUserCertificationInfo); + + /** + * 修改seg用户实名认证信息 + * + * @param segchkUserCertificationInfo seg用户实名认证信息 + * @return 结果 + */ + public int updateSegchkUserCertificationInfo(SegchkUserCertificationInfo segchkUserCertificationInfo); + + /** + * 批量删除seg用户实名认证信息 + * + * @param usercardIds 需要删除的seg用户实名认证信息主键集合 + * @return 结果 + */ + public int deleteSegchkUserCertificationInfoByUsercardIds(Long[] usercardIds); + + /** + * 删除seg用户实名认证信息信息 + * + * @param usercardId seg用户实名认证信息主键 + * @return 结果 + */ + public int deleteSegchkUserCertificationInfoByUsercardId(Long usercardId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserChargeService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserChargeService.java new file mode 100644 index 0000000..15c03fc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserChargeService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserCharge; + +/** + * seg用户充值记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserChargeService +{ + /** + * 查询seg用户充值记录 + * + * @param chargeId seg用户充值记录主键 + * @return seg用户充值记录 + */ + public SegchkUserCharge selectSegchkUserChargeByChargeId(Long chargeId); + + /** + * 查询seg用户充值记录列表 + * + * @param segchkUserCharge seg用户充值记录 + * @return seg用户充值记录集合 + */ + public List selectSegchkUserChargeList(SegchkUserCharge segchkUserCharge); + + /** + * 新增seg用户充值记录 + * + * @param segchkUserCharge seg用户充值记录 + * @return 结果 + */ + public int insertSegchkUserCharge(SegchkUserCharge segchkUserCharge); + + /** + * 修改seg用户充值记录 + * + * @param segchkUserCharge seg用户充值记录 + * @return 结果 + */ + public int updateSegchkUserCharge(SegchkUserCharge segchkUserCharge); + + /** + * 批量删除seg用户充值记录 + * + * @param chargeIds 需要删除的seg用户充值记录主键集合 + * @return 结果 + */ + public int deleteSegchkUserChargeByChargeIds(Long[] chargeIds); + + /** + * 删除seg用户充值记录信息 + * + * @param chargeId seg用户充值记录主键 + * @return 结果 + */ + public int deleteSegchkUserChargeByChargeId(Long chargeId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserCollectService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserCollectService.java new file mode 100644 index 0000000..2e5986c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserCollectService.java @@ -0,0 +1,69 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserCollect; + +/** + * seg用户收藏记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserCollectService +{ + /** + * 查询seg用户收藏记录 + * + * @param collectId seg用户收藏记录主键 + * @return seg用户收藏记录 + */ + public SegchkUserCollect selectSegchkUserCollectByCollectId(Long collectId); + + /** + * 查询seg用户收藏记录列表 + * + * @param segchkUserCollect seg用户收藏记录 + * @return seg用户收藏记录集合 + */ + public List selectSegchkUserCollectList(SegchkUserCollect segchkUserCollect); + + /** + * 新增seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + public int insertSegchkUserCollect(SegchkUserCollect segchkUserCollect); + + /** + * 修改seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + public int updateSegchkUserCollect(SegchkUserCollect segchkUserCollect); + + /** + * 批量删除seg用户收藏记录 + * + * @param collectIds 需要删除的seg用户收藏记录主键集合 + * @return 结果 + */ + public int deleteSegchkUserCollectByCollectIds(Long[] collectIds); + + /** + * 删除seg用户收藏记录信息 + * + * @param collectId seg用户收藏记录主键 + * @return 结果 + */ + public int deleteSegchkUserCollectByCollectId(Long collectId); + + /** + * 批量删除seg用户收藏记录 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSegchkUserCollectByIds(String ids); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserExtInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserExtInfoService.java new file mode 100644 index 0000000..369e112 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserExtInfoService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserExtInfo; + +/** + * seg用户扩展信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserExtInfoService +{ + /** + * 查询seg用户扩展信息 + * + * @param userId seg用户扩展信息主键 + * @return seg用户扩展信息 + */ + public SegchkUserExtInfo selectSegchkUserExtInfoByUserId(Long userId); + + /** + * 查询seg用户扩展信息列表 + * + * @param segchkUserExtInfo seg用户扩展信息 + * @return seg用户扩展信息集合 + */ + public List selectSegchkUserExtInfoList(SegchkUserExtInfo segchkUserExtInfo); + + /** + * 新增seg用户扩展信息 + * + * @param segchkUserExtInfo seg用户扩展信息 + * @return 结果 + */ + public int insertSegchkUserExtInfo(SegchkUserExtInfo segchkUserExtInfo); + + /** + * 修改seg用户扩展信息 + * + * @param segchkUserExtInfo seg用户扩展信息 + * @return 结果 + */ + public int updateSegchkUserExtInfo(SegchkUserExtInfo segchkUserExtInfo); + + /** + * 批量删除seg用户扩展信息 + * + * @param userIds 需要删除的seg用户扩展信息主键集合 + * @return 结果 + */ + public int deleteSegchkUserExtInfoByUserIds(Long[] userIds); + + /** + * 删除seg用户扩展信息信息 + * + * @param userId seg用户扩展信息主键 + * @return 结果 + */ + public int deleteSegchkUserExtInfoByUserId(Long userId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserLikegoService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserLikegoService.java new file mode 100644 index 0000000..8ad5c8c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserLikegoService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserLikego; + +/** + * seg用户想去记录Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserLikegoService +{ + /** + * 查询seg用户想去记录 + * + * @param likegoId seg用户想去记录主键 + * @return seg用户想去记录 + */ + public SegchkUserLikego selectSegchkUserLikegoByLikegoId(Long likegoId); + + /** + * 查询seg用户想去记录列表 + * + * @param segchkUserLikego seg用户想去记录 + * @return seg用户想去记录集合 + */ + public List selectSegchkUserLikegoList(SegchkUserLikego segchkUserLikego); + + /** + * 新增seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + public int insertSegchkUserLikego(SegchkUserLikego segchkUserLikego); + + /** + * 修改seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + public int updateSegchkUserLikego(SegchkUserLikego segchkUserLikego); + + /** + * 批量删除seg用户想去记录 + * + * @param likegoIds 需要删除的seg用户想去记录主键集合 + * @return 结果 + */ + public int deleteSegchkUserLikegoByLikegoIds(Long[] likegoIds); + + /** + * 删除seg用户想去记录信息 + * + * @param likegoId seg用户想去记录主键 + * @return 结果 + */ + public int deleteSegchkUserLikegoByLikegoId(Long likegoId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserRewardCtlService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserRewardCtlService.java new file mode 100644 index 0000000..67fb6cd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserRewardCtlService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserRewardCtl; + +/** + * seg会员推荐控制Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserRewardCtlService +{ + /** + * 查询seg会员推荐控制 + * + * @param rewardCtlId seg会员推荐控制主键 + * @return seg会员推荐控制 + */ + public SegchkUserRewardCtl selectSegchkUserRewardCtlByRewardCtlId(Integer rewardCtlId); + + /** + * 查询seg会员推荐控制列表 + * + * @param segchkUserRewardCtl seg会员推荐控制 + * @return seg会员推荐控制集合 + */ + public List selectSegchkUserRewardCtlList(SegchkUserRewardCtl segchkUserRewardCtl); + + /** + * 新增seg会员推荐控制 + * + * @param segchkUserRewardCtl seg会员推荐控制 + * @return 结果 + */ + public int insertSegchkUserRewardCtl(SegchkUserRewardCtl segchkUserRewardCtl); + + /** + * 修改seg会员推荐控制 + * + * @param segchkUserRewardCtl seg会员推荐控制 + * @return 结果 + */ + public int updateSegchkUserRewardCtl(SegchkUserRewardCtl segchkUserRewardCtl); + + /** + * 批量删除seg会员推荐控制 + * + * @param rewardCtlIds 需要删除的seg会员推荐控制主键集合 + * @return 结果 + */ + public int deleteSegchkUserRewardCtlByRewardCtlIds(Integer[] rewardCtlIds); + + /** + * 删除seg会员推荐控制信息 + * + * @param rewardCtlId seg会员推荐控制主键 + * @return 结果 + */ + public int deleteSegchkUserRewardCtlByRewardCtlId(Integer rewardCtlId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserRewardService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserRewardService.java new file mode 100644 index 0000000..61c85a3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserRewardService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserReward; + +/** + * seg用户奖励Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserRewardService +{ + /** + * 查询seg用户奖励 + * + * @param rewardId seg用户奖励主键 + * @return seg用户奖励 + */ + public SegchkUserReward selectSegchkUserRewardByRewardId(Long rewardId); + + /** + * 查询seg用户奖励列表 + * + * @param segchkUserReward seg用户奖励 + * @return seg用户奖励集合 + */ + public List selectSegchkUserRewardList(SegchkUserReward segchkUserReward); + + /** + * 新增seg用户奖励 + * + * @param segchkUserReward seg用户奖励 + * @return 结果 + */ + public int insertSegchkUserReward(SegchkUserReward segchkUserReward); + + /** + * 修改seg用户奖励 + * + * @param segchkUserReward seg用户奖励 + * @return 结果 + */ + public int updateSegchkUserReward(SegchkUserReward segchkUserReward); + + /** + * 批量删除seg用户奖励 + * + * @param rewardIds 需要删除的seg用户奖励主键集合 + * @return 结果 + */ + public int deleteSegchkUserRewardByRewardIds(Long[] rewardIds); + + /** + * 删除seg用户奖励信息 + * + * @param rewardId seg用户奖励主键 + * @return 结果 + */ + public int deleteSegchkUserRewardByRewardId(Long rewardId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserSecurityService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserSecurityService.java new file mode 100644 index 0000000..ef78da0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserSecurityService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserSecurity; + +/** + * seg用户密码Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserSecurityService +{ + /** + * 查询seg用户密码 + * + * @param pwdId seg用户密码主键 + * @return seg用户密码 + */ + public SegchkUserSecurity selectSegchkUserSecurityByPwdId(Long pwdId); + + /** + * 查询seg用户密码列表 + * + * @param segchkUserSecurity seg用户密码 + * @return seg用户密码集合 + */ + public List selectSegchkUserSecurityList(SegchkUserSecurity segchkUserSecurity); + + /** + * 新增seg用户密码 + * + * @param segchkUserSecurity seg用户密码 + * @return 结果 + */ + public int insertSegchkUserSecurity(SegchkUserSecurity segchkUserSecurity); + + /** + * 修改seg用户密码 + * + * @param segchkUserSecurity seg用户密码 + * @return 结果 + */ + public int updateSegchkUserSecurity(SegchkUserSecurity segchkUserSecurity); + + /** + * 批量删除seg用户密码 + * + * @param pwdIds 需要删除的seg用户密码主键集合 + * @return 结果 + */ + public int deleteSegchkUserSecurityByPwdIds(Long[] pwdIds); + + /** + * 删除seg用户密码信息 + * + * @param pwdId seg用户密码主键 + * @return 结果 + */ + public int deleteSegchkUserSecurityByPwdId(Long pwdId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserVipService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserVipService.java new file mode 100644 index 0000000..9f623ce --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserVipService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserVip; + +/** + * seg会员卡Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserVipService +{ + /** + * 查询seg会员卡 + * + * @param cardId seg会员卡主键 + * @return seg会员卡 + */ + public SegchkUserVip selectSegchkUserVipByCardId(Long cardId); + + /** + * 查询seg会员卡列表 + * + * @param segchkUserVip seg会员卡 + * @return seg会员卡集合 + */ + public List selectSegchkUserVipList(SegchkUserVip segchkUserVip); + + /** + * 新增seg会员卡 + * + * @param segchkUserVip seg会员卡 + * @return 结果 + */ + public int insertSegchkUserVip(SegchkUserVip segchkUserVip); + + /** + * 修改seg会员卡 + * + * @param segchkUserVip seg会员卡 + * @return 结果 + */ + public int updateSegchkUserVip(SegchkUserVip segchkUserVip); + + /** + * 批量删除seg会员卡 + * + * @param cardIds 需要删除的seg会员卡主键集合 + * @return 结果 + */ + public int deleteSegchkUserVipByCardIds(Long[] cardIds); + + /** + * 删除seg会员卡信息 + * + * @param cardId seg会员卡主键 + * @return 结果 + */ + public int deleteSegchkUserVipByCardId(Long cardId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserWechatService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserWechatService.java new file mode 100644 index 0000000..f5ede79 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkUserWechatService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkUserWechat; + +/** + * seg用户微信信息Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkUserWechatService +{ + /** + * 查询seg用户微信信息 + * + * @param userId seg用户微信信息主键 + * @return seg用户微信信息 + */ + public SegchkUserWechat selectSegchkUserWechatByUserId(Long userId); + + /** + * 查询seg用户微信信息列表 + * + * @param segchkUserWechat seg用户微信信息 + * @return seg用户微信信息集合 + */ + public List selectSegchkUserWechatList(SegchkUserWechat segchkUserWechat); + + /** + * 新增seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + public int insertSegchkUserWechat(SegchkUserWechat segchkUserWechat); + + /** + * 修改seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + public int updateSegchkUserWechat(SegchkUserWechat segchkUserWechat); + + /** + * 批量删除seg用户微信信息 + * + * @param userIds 需要删除的seg用户微信信息主键集合 + * @return 结果 + */ + public int deleteSegchkUserWechatByUserIds(Long[] userIds); + + /** + * 删除seg用户微信信息信息 + * + * @param userId seg用户微信信息主键 + * @return 结果 + */ + public int deleteSegchkUserWechatByUserId(Long userId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkVipSetInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkVipSetInfoService.java new file mode 100644 index 0000000..8ec1266 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/ISegchkVipSetInfoService.java @@ -0,0 +1,61 @@ +package com.ruoyi.segchk.service; + +import java.util.List; +import com.ruoyi.segchk.domain.SegchkVipSetInfo; + +/** + * seg会员卡设置Service接口 + * + * @author yinzhiying + * @date 2021-08-23 + */ +public interface ISegchkVipSetInfoService +{ + /** + * 查询seg会员卡设置 + * + * @param modeId seg会员卡设置主键 + * @return seg会员卡设置 + */ + public SegchkVipSetInfo selectSegchkVipSetInfoByModeId(Integer modeId); + + /** + * 查询seg会员卡设置列表 + * + * @param segchkVipSetInfo seg会员卡设置 + * @return seg会员卡设置集合 + */ + public List selectSegchkVipSetInfoList(SegchkVipSetInfo segchkVipSetInfo); + + /** + * 新增seg会员卡设置 + * + * @param segchkVipSetInfo seg会员卡设置 + * @return 结果 + */ + public int insertSegchkVipSetInfo(SegchkVipSetInfo segchkVipSetInfo); + + /** + * 修改seg会员卡设置 + * + * @param segchkVipSetInfo seg会员卡设置 + * @return 结果 + */ + public int updateSegchkVipSetInfo(SegchkVipSetInfo segchkVipSetInfo); + + /** + * 批量删除seg会员卡设置 + * + * @param modeIds 需要删除的seg会员卡设置主键集合 + * @return 结果 + */ + public int deleteSegchkVipSetInfoByModeIds(Integer[] modeIds); + + /** + * 删除seg会员卡设置信息 + * + * @param modeId seg会员卡设置主键 + * @return 结果 + */ + public int deleteSegchkVipSetInfoByModeId(Integer modeId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkCarouseMgtServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkCarouseMgtServiceImpl.java new file mode 100644 index 0000000..60a9077 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkCarouseMgtServiceImpl.java @@ -0,0 +1,116 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkCarouseMgtMapper; +import com.ruoyi.segchk.domain.SegchkCarouseMgt; +import com.ruoyi.segchk.service.ISegchkCarouseMgtService; +import org.springframework.transaction.annotation.Transactional; + +/** + * seg首页轮播图管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkCarouseMgtServiceImpl implements ISegchkCarouseMgtService +{ + @Autowired + private SegchkCarouseMgtMapper segchkCarouseMgtMapper; + + /** + * 查询seg首页轮播图管理 + * + * @param carouseId seg首页轮播图管理主键 + * @return seg首页轮播图管理 + */ + @Override + public SegchkCarouseMgt selectSegchkCarouseMgtByCarouseId(Long carouseId) + { + return segchkCarouseMgtMapper.selectSegchkCarouseMgtByCarouseId(carouseId); + } + + /** + * 查询seg首页轮播图管理列表 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return seg首页轮播图管理 + */ + @Override + public List selectSegchkCarouseMgtList(SegchkCarouseMgt segchkCarouseMgt) + { + return segchkCarouseMgtMapper.selectSegchkCarouseMgtList(segchkCarouseMgt); + } + + /** + * 新增seg首页轮播图管理 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return 结果 + */ + @Override + public int insertSegchkCarouseMgt(SegchkCarouseMgt segchkCarouseMgt) + { + return segchkCarouseMgtMapper.insertSegchkCarouseMgt(segchkCarouseMgt); + } + + /** + * 修改seg首页轮播图管理 + * + * @param segchkCarouseMgt seg首页轮播图管理 + * @return 结果 + */ + @Override + public int updateSegchkCarouseMgt(SegchkCarouseMgt segchkCarouseMgt) + { + return segchkCarouseMgtMapper.updateSegchkCarouseMgt(segchkCarouseMgt); + } + + /** + * 批量删除seg首页轮播图管理 + * + * @param carouseIds 需要删除的seg首页轮播图管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkCarouseMgtByCarouseIds(Long[] carouseIds) + { + return segchkCarouseMgtMapper.deleteSegchkCarouseMgtByCarouseIds(carouseIds); + } + + /** + * 删除seg首页轮播图管理信息 + * + * @param carouseId seg首页轮播图管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkCarouseMgtByCarouseId(Long carouseId) + { + return segchkCarouseMgtMapper.deleteSegchkCarouseMgtByCarouseId(carouseId); + } + + @Override + public int deleteSegchkCarouseMgtByStoreIds(Long[] storeIds) { + return segchkCarouseMgtMapper.deleteSegchkCarouseMgtByStoreIds(storeIds); + } + + @Override + @Transactional + public int updateSegchkCarouseMgtSort(String[] sortInfos) { + List> collect = Arrays.stream(sortInfos).map(v -> { + String[] split = v.split(":", -1); + return new HashMap() {{ + put("carouseId", split[0]); + put("sortId", split[1]); + }}; + }).collect(Collectors.toList()); + return segchkCarouseMgtMapper.updateSegchkCarouseMgtSortBatch(collect); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkChargeCardServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkChargeCardServiceImpl.java new file mode 100644 index 0000000..9d377c6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkChargeCardServiceImpl.java @@ -0,0 +1,125 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.ruoyi.segchk.service.ISegchkLableMgtService; +import com.ruoyi.segchk.service.ISegchkStoreLableMgtService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkChargeCardMapper; +import com.ruoyi.segchk.domain.SegchkChargeCard; +import com.ruoyi.segchk.service.ISegchkChargeCardService; +import org.springframework.transaction.annotation.Transactional; + +/** + * seg充值卡管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkChargeCardServiceImpl implements ISegchkChargeCardService +{ + @Autowired + private SegchkChargeCardMapper segchkChargeCardMapper; + + @Autowired + private ISegchkLableMgtService segchkLableMgtService; + + @Autowired + private ISegchkStoreLableMgtService segchkStoreLableMgtService; + /** + * 查询seg充值卡管理 + * + * @param cardTypeId seg充值卡管理主键 + * @return seg充值卡管理 + */ + @Override + public SegchkChargeCard selectSegchkChargeCardByCardTypeId(Long cardTypeId) + { + return segchkChargeCardMapper.selectSegchkChargeCardBycardTypeId(cardTypeId); + } + + /** + * 查询seg充值卡管理列表 + * + * @param segchkChargeCard seg充值卡管理 + * @return seg充值卡管理 + */ + @Override + public List selectSegchkChargeCardList(SegchkChargeCard segchkChargeCard) + { + return segchkChargeCardMapper.selectSegchkChargeCardList(segchkChargeCard); + } + + /** + * 新增seg充值卡管理 + * + * @param segchkChargeCard seg充值卡管理 + * @return 结果 + */ + @Override + public int insertSegchkChargeCard(SegchkChargeCard segchkChargeCard) + { + /*if(ObjectUtils.isEmpty(segchkChargeCard.getCardTypeId())) { + SegchkChargeCard segchkChargeCard1 = new SegchkChargeCard(); + segchkChargeCard1.setProviderId(segchkChargeCard.getProviderId()); + List segchkChargeCards = segchkChargeCardMapper.selectSegchkChargeCardList(segchkChargeCard1); + int carttypeid = ObjectUtils.isEmpty(segchkChargeCards) ? -1 : + (segchkChargeCards.stream().mapToInt(v -> v.getCardTypeId().intValue()).max().getAsInt()); + segchkChargeCard.setCardTypeId(Long.valueOf(carttypeid) + 1); + }*/ + return segchkChargeCardMapper.insertSegchkChargeCard(segchkChargeCard); + } + + /** + * 修改seg充值卡管理 + * + * @param segchkChargeCard seg充值卡管理 + * @return 结果 + */ + @Override + public int updateSegchkChargeCard(SegchkChargeCard segchkChargeCard) + { + return segchkChargeCardMapper.updateSegchkChargeCard(segchkChargeCard); + } + + /** + * 批量删除seg充值卡管理 + * + * @param cardTypeIds 需要删除的seg充值卡管理主键 + * @return 结果 + */ + @Override + @Transactional + public int deleteSegchkChargeCardByCardTypeIds(String[] cardTypeIds) + { + Map paramsMap = new HashMap(); + paramsMap.put("cardTypeIds", cardTypeIds); + paramsMap.put("typeId", 0); + segchkLableMgtService.deleteSegchkLableMgtByCardTypeIds(paramsMap); + segchkStoreLableMgtService.deleteSegchkStoreLableMgtByCardTypeIds(paramsMap); + return segchkChargeCardMapper.deleteSegchkChargeCardByCardTypeIds(cardTypeIds); + } + + /** + * 删除seg充值卡管理信息 + * + * @param cardTypeId seg充值卡管理主键 + * @return 结果 + */ + @Override + @Transactional + public int deleteSegchkChargeCardByCardTypeId(Long cardTypeId) + { + String[] cardTypeIds = new String[]{cardTypeId.toString()}; + Map paramsMap = new HashMap(); + paramsMap.put("cardTypeIds", cardTypeIds); + paramsMap.put("typeId", 0); + segchkLableMgtService.deleteSegchkLableMgtByCardTypeIds(paramsMap); + segchkStoreLableMgtService.deleteSegchkStoreLableMgtByCardTypeIds(paramsMap); + return segchkChargeCardMapper.deleteSegchkChargeCardByCardTypeId(cardTypeId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkCommentAccServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkCommentAccServiceImpl.java new file mode 100644 index 0000000..634c6dc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkCommentAccServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkCommentAccMapper; +import com.ruoyi.segchk.domain.SegchkCommentAcc; +import com.ruoyi.segchk.service.ISegchkCommentAccService; + +/** + * seg商家累积评价Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkCommentAccServiceImpl implements ISegchkCommentAccService +{ + @Autowired + private SegchkCommentAccMapper segchkCommentAccMapper; + + /** + * 查询seg商家累积评价 + * + * @param updateId seg商家累积评价主键 + * @return seg商家累积评价 + */ + @Override + public SegchkCommentAcc selectSegchkCommentAccByUpdateId(Long updateId) + { + return segchkCommentAccMapper.selectSegchkCommentAccByUpdateId(updateId); + } + + /** + * 查询seg商家累积评价列表 + * + * @param segchkCommentAcc seg商家累积评价 + * @return seg商家累积评价 + */ + @Override + public List selectSegchkCommentAccList(SegchkCommentAcc segchkCommentAcc) + { + return segchkCommentAccMapper.selectSegchkCommentAccList(segchkCommentAcc); + } + + /** + * 新增seg商家累积评价 + * + * @param segchkCommentAcc seg商家累积评价 + * @return 结果 + */ + @Override + public int insertSegchkCommentAcc(SegchkCommentAcc segchkCommentAcc) + { + return segchkCommentAccMapper.insertSegchkCommentAcc(segchkCommentAcc); + } + + /** + * 修改seg商家累积评价 + * + * @param segchkCommentAcc seg商家累积评价 + * @return 结果 + */ + @Override + public int updateSegchkCommentAcc(SegchkCommentAcc segchkCommentAcc) + { + return segchkCommentAccMapper.updateSegchkCommentAcc(segchkCommentAcc); + } + + /** + * 批量删除seg商家累积评价 + * + * @param updateIds 需要删除的seg商家累积评价主键 + * @return 结果 + */ + @Override + public int deleteSegchkCommentAccByUpdateIds(Long[] updateIds) + { + return segchkCommentAccMapper.deleteSegchkCommentAccByUpdateIds(updateIds); + } + + /** + * 删除seg商家累积评价信息 + * + * @param updateId seg商家累积评价主键 + * @return 结果 + */ + @Override + public int deleteSegchkCommentAccByUpdateId(Long updateId) + { + return segchkCommentAccMapper.deleteSegchkCommentAccByUpdateId(updateId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkDistrictInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkDistrictInfoServiceImpl.java new file mode 100644 index 0000000..7a17b62 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkDistrictInfoServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkDistrictInfoMapper; +import com.ruoyi.segchk.domain.SegchkDistrictInfo; +import com.ruoyi.segchk.service.ISegchkDistrictInfoService; + +/** + * seg行政区域代码Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkDistrictInfoServiceImpl implements ISegchkDistrictInfoService +{ + @Autowired + private SegchkDistrictInfoMapper segchkDistrictInfoMapper; + + /** + * 查询seg行政区域代码 + * + * @param districtId seg行政区域代码主键 + * @return seg行政区域代码 + */ + @Override + public SegchkDistrictInfo selectSegchkDistrictInfoByDistrictId(Integer districtId) + { + return segchkDistrictInfoMapper.selectSegchkDistrictInfoByDistrictId(districtId); + } + + /** + * 查询seg行政区域代码列表 + * + * @param segchkDistrictInfo seg行政区域代码 + * @return seg行政区域代码 + */ + @Override + public List selectSegchkDistrictInfoList(SegchkDistrictInfo segchkDistrictInfo) + { + return segchkDistrictInfoMapper.selectSegchkDistrictInfoList(segchkDistrictInfo); + } + + /** + * 新增seg行政区域代码 + * + * @param segchkDistrictInfo seg行政区域代码 + * @return 结果 + */ + @Override + public int insertSegchkDistrictInfo(SegchkDistrictInfo segchkDistrictInfo) + { + return segchkDistrictInfoMapper.insertSegchkDistrictInfo(segchkDistrictInfo); + } + + /** + * 修改seg行政区域代码 + * + * @param segchkDistrictInfo seg行政区域代码 + * @return 结果 + */ + @Override + public int updateSegchkDistrictInfo(SegchkDistrictInfo segchkDistrictInfo) + { + return segchkDistrictInfoMapper.updateSegchkDistrictInfo(segchkDistrictInfo); + } + + /** + * 批量删除seg行政区域代码 + * + * @param districtIds 需要删除的seg行政区域代码主键 + * @return 结果 + */ + @Override + public int deleteSegchkDistrictInfoByDistrictIds(Integer[] districtIds) + { + return segchkDistrictInfoMapper.deleteSegchkDistrictInfoByDistrictIds(districtIds); + } + + /** + * 删除seg行政区域代码信息 + * + * @param districtId seg行政区域代码主键 + * @return 结果 + */ + @Override + public int deleteSegchkDistrictInfoByDistrictId(Integer districtId) + { + return segchkDistrictInfoMapper.deleteSegchkDistrictInfoByDistrictId(districtId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkKeywordLableServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkKeywordLableServiceImpl.java new file mode 100644 index 0000000..ea96efb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkKeywordLableServiceImpl.java @@ -0,0 +1,111 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.ruoyi.segchk.service.ISegchkLableMgtService; +import com.ruoyi.segchk.service.ISegchkStoreLableMgtService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkKeywordLableMapper; +import com.ruoyi.segchk.domain.SegchkKeywordLable; +import com.ruoyi.segchk.service.ISegchkKeywordLableService; + +/** + * seg关键字管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkKeywordLableServiceImpl implements ISegchkKeywordLableService +{ + @Autowired + private SegchkKeywordLableMapper segchkKeywordLableMapper; + + @Autowired + private ISegchkLableMgtService segchkLableMgtService; + + + @Autowired + private ISegchkStoreLableMgtService segchkStoreLableMgtService; + /** + * 查询seg关键字管理 + * + * @param keywordId seg关键字管理主键 + * @return seg关键字管理 + */ + @Override + public SegchkKeywordLable selectSegchkKeywordLableByKeywordId(Long keywordId) + { + return segchkKeywordLableMapper.selectSegchkKeywordLableByKeywordId(keywordId); + } + + /** + * 查询seg关键字管理列表 + * + * @param segchkKeywordLable seg关键字管理 + * @return seg关键字管理 + */ + @Override + public List selectSegchkKeywordLableList(SegchkKeywordLable segchkKeywordLable) + { + return segchkKeywordLableMapper.selectSegchkKeywordLableList(segchkKeywordLable); + } + + /** + * 新增seg关键字管理 + * + * @param segchkKeywordLable seg关键字管理 + * @return 结果 + */ + @Override + public int insertSegchkKeywordLable(SegchkKeywordLable segchkKeywordLable) + { + return segchkKeywordLableMapper.insertSegchkKeywordLable(segchkKeywordLable); + } + + /** + * 修改seg关键字管理 + * + * @param segchkKeywordLable seg关键字管理 + * @return 结果 + */ + @Override + public int updateSegchkKeywordLable(SegchkKeywordLable segchkKeywordLable) + { + return segchkKeywordLableMapper.updateSegchkKeywordLable(segchkKeywordLable); + } + + /** + * 批量删除seg关键字管理 + * + * @param keywordIds 需要删除的seg关键字管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkKeywordLableByKeywordIds(Long[] keywordIds) + { +// String[] cardTypeIds = new String[]{keywordIds.toString()}; + Map paramsMap = new HashMap(); + paramsMap.put("cardTypeIds", keywordIds); + paramsMap.put("typeId", 1); + segchkLableMgtService.deleteSegchkLableMgtByCardTypeIds(paramsMap); + segchkStoreLableMgtService.deleteSegchkStoreLableMgtByCardTypeIds(paramsMap); + return segchkKeywordLableMapper.deleteSegchkKeywordLableByKeywordIds(keywordIds); + } + + /** + * 删除seg关键字管理信息 + * + * @param providerId seg关键字管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkKeywordLableByProviderId(Long providerId) + { + + return segchkKeywordLableMapper.deleteSegchkKeywordLableByProviderId(providerId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkLableMgtServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkLableMgtServiceImpl.java new file mode 100644 index 0000000..ef41da3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkLableMgtServiceImpl.java @@ -0,0 +1,106 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkLableMgtMapper; +import com.ruoyi.segchk.domain.SegchkLableMgt; +import com.ruoyi.segchk.service.ISegchkLableMgtService; + +/** + * seg首页标签管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkLableMgtServiceImpl implements ISegchkLableMgtService +{ + @Autowired + private SegchkLableMgtMapper segchkLableMgtMapper; + + private static final Logger logger = LoggerFactory.getLogger(SegchkLableMgtServiceImpl.class); + /** + * 查询seg首页标签管理 + * + * @param mgtId seg首页标签管理主键 + * @return seg首页标签管理 + */ + @Override + public SegchkLableMgt selectSegchkLableMgtByMgtId(Long mgtId) + { + return segchkLableMgtMapper.selectSegchkLableMgtByMgtId(mgtId); + } + + /** + * 查询seg首页标签管理列表 + * + * @param segchkLableMgt seg首页标签管理 + * @return seg首页标签管理 + */ + @Override + public List selectSegchkLableMgtList(SegchkLableMgt segchkLableMgt) + { + return segchkLableMgtMapper.selectSegchkLableMgtList(segchkLableMgt); + } + + /** + * 新增seg首页标签管理 + * + * @param segchkLableMgt seg首页标签管理 + * @return 结果 + */ + @Override + public int insertSegchkLableMgt(SegchkLableMgt segchkLableMgt) + { + return segchkLableMgtMapper.insertSegchkLableMgt(segchkLableMgt); + } + + /** + * 修改seg首页标签管理 + * + * @param segchkLableMgt seg首页标签管理 + * @return 结果 + */ + @Override + public int updateSegchkLableMgt(SegchkLableMgt segchkLableMgt) + { + return segchkLableMgtMapper.updateSegchkLableMgt(segchkLableMgt); + } + + /** + * 批量删除seg首页标签管理 + * + * @param mgtIds 需要删除的seg首页标签管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkLableMgtByProviderIds(Long[] mgtIds) + { + return segchkLableMgtMapper.deleteSegchkLableMgtByMgtIds(mgtIds); + } + + /** + * 删除seg首页标签管理信息 + * + * @param mgtId seg首页标签管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkLableMgtByProviderId(Long mgtId) + { + return segchkLableMgtMapper.deleteSegchkLableMgtByMgtId(mgtId); + } + + @Override + public int deleteSegchkLableMgtByCardTypeIds(Map paramsMap) { + int ret = segchkLableMgtMapper.deleteSegchkLableMgtByCardTypeIds(paramsMap); + logger.debug("deleteSegchkLableMgtByCardTypeIds res: {} \t with: {}", ret, paramsMap.toString()); + return ret; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkLogionDetailServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkLogionDetailServiceImpl.java new file mode 100644 index 0000000..9339674 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkLogionDetailServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkLogionDetailMapper; +import com.ruoyi.segchk.domain.SegchkLogionDetail; +import com.ruoyi.segchk.service.ISegchkLogionDetailService; + +/** + * seg登录记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkLogionDetailServiceImpl implements ISegchkLogionDetailService +{ + @Autowired + private SegchkLogionDetailMapper segchkLogionDetailMapper; + + /** + * 查询seg登录记录 + * + * @param loginId seg登录记录主键 + * @return seg登录记录 + */ + @Override + public SegchkLogionDetail selectSegchkLogionDetailByLoginId(Long loginId) + { + return segchkLogionDetailMapper.selectSegchkLogionDetailByLoginId(loginId); + } + + /** + * 查询seg登录记录列表 + * + * @param segchkLogionDetail seg登录记录 + * @return seg登录记录 + */ + @Override + public List selectSegchkLogionDetailList(SegchkLogionDetail segchkLogionDetail) + { + return segchkLogionDetailMapper.selectSegchkLogionDetailList(segchkLogionDetail); + } + + /** + * 新增seg登录记录 + * + * @param segchkLogionDetail seg登录记录 + * @return 结果 + */ + @Override + public int insertSegchkLogionDetail(SegchkLogionDetail segchkLogionDetail) + { + return segchkLogionDetailMapper.insertSegchkLogionDetail(segchkLogionDetail); + } + + /** + * 修改seg登录记录 + * + * @param segchkLogionDetail seg登录记录 + * @return 结果 + */ + @Override + public int updateSegchkLogionDetail(SegchkLogionDetail segchkLogionDetail) + { + return segchkLogionDetailMapper.updateSegchkLogionDetail(segchkLogionDetail); + } + + /** + * 批量删除seg登录记录 + * + * @param loginIds 需要删除的seg登录记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkLogionDetailByLoginIds(Long[] loginIds) + { + return segchkLogionDetailMapper.deleteSegchkLogionDetailByLoginIds(loginIds); + } + + /** + * 删除seg登录记录信息 + * + * @param loginId seg登录记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkLogionDetailByLoginId(Long loginId) + { + return segchkLogionDetailMapper.deleteSegchkLogionDetailByLoginId(loginId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkMsgDetailServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkMsgDetailServiceImpl.java new file mode 100644 index 0000000..123bd6b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkMsgDetailServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkMsgDetailMapper; +import com.ruoyi.segchk.domain.SegchkMsgDetail; +import com.ruoyi.segchk.service.ISegchkMsgDetailService; + +/** + * seg消息记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkMsgDetailServiceImpl implements ISegchkMsgDetailService +{ + @Autowired + private SegchkMsgDetailMapper segchkMsgDetailMapper; + + /** + * 查询seg消息记录 + * + * @param msgId seg消息记录主键 + * @return seg消息记录 + */ + @Override + public SegchkMsgDetail selectSegchkMsgDetailByMsgId(Long msgId) + { + return segchkMsgDetailMapper.selectSegchkMsgDetailByMsgId(msgId); + } + + /** + * 查询seg消息记录列表 + * + * @param segchkMsgDetail seg消息记录 + * @return seg消息记录 + */ + @Override + public List selectSegchkMsgDetailList(SegchkMsgDetail segchkMsgDetail) + { + return segchkMsgDetailMapper.selectSegchkMsgDetailList(segchkMsgDetail); + } + + /** + * 新增seg消息记录 + * + * @param segchkMsgDetail seg消息记录 + * @return 结果 + */ + @Override + public int insertSegchkMsgDetail(SegchkMsgDetail segchkMsgDetail) + { + return segchkMsgDetailMapper.insertSegchkMsgDetail(segchkMsgDetail); + } + + /** + * 修改seg消息记录 + * + * @param segchkMsgDetail seg消息记录 + * @return 结果 + */ + @Override + public int updateSegchkMsgDetail(SegchkMsgDetail segchkMsgDetail) + { + return segchkMsgDetailMapper.updateSegchkMsgDetail(segchkMsgDetail); + } + + /** + * 批量删除seg消息记录 + * + * @param msgIds 需要删除的seg消息记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkMsgDetailByMsgIds(Long[] msgIds) + { + return segchkMsgDetailMapper.deleteSegchkMsgDetailByMsgIds(msgIds); + } + + /** + * 删除seg消息记录信息 + * + * @param msgId seg消息记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkMsgDetailByMsgId(Long msgId) + { + return segchkMsgDetailMapper.deleteSegchkMsgDetailByMsgId(msgId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkPreferenceLableServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkPreferenceLableServiceImpl.java new file mode 100644 index 0000000..ef8f11c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkPreferenceLableServiceImpl.java @@ -0,0 +1,110 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.ruoyi.segchk.service.ISegchkLableMgtService; +import com.ruoyi.segchk.service.ISegchkStoreLableMgtService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkPreferenceLableMapper; +import com.ruoyi.segchk.domain.SegchkPreferenceLable; +import com.ruoyi.segchk.service.ISegchkPreferenceLableService; + +/** + * seg优惠管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkPreferenceLableServiceImpl implements ISegchkPreferenceLableService +{ + @Autowired + private SegchkPreferenceLableMapper segchkPreferenceLableMapper; + + @Autowired + private ISegchkLableMgtService segchkLableMgtService; + + @Autowired + private ISegchkStoreLableMgtService segchkStoreLableMgtService; + + /** + * 查询seg优惠管理 + * + * @param preferenceId seg优惠管理主键 + * @return seg优惠管理 + */ + @Override + public SegchkPreferenceLable selectSegchkPreferenceLableByPreferenceId(Long preferenceId) + { + return segchkPreferenceLableMapper.selectSegchkPreferenceLableByPreferenceId(preferenceId); + } + + /** + * 查询seg优惠管理列表 + * + * @param segchkPreferenceLable seg优惠管理 + * @return seg优惠管理 + */ + @Override + public List selectSegchkPreferenceLableList(SegchkPreferenceLable segchkPreferenceLable) + { + return segchkPreferenceLableMapper.selectSegchkPreferenceLableList(segchkPreferenceLable); + } + + /** + * 新增seg优惠管理 + * + * @param segchkPreferenceLable seg优惠管理 + * @return 结果 + */ + @Override + public int insertSegchkPreferenceLable(SegchkPreferenceLable segchkPreferenceLable) + { + return segchkPreferenceLableMapper.insertSegchkPreferenceLable(segchkPreferenceLable); + } + + /** + * 修改seg优惠管理 + * + * @param segchkPreferenceLable seg优惠管理 + * @return 结果 + */ + @Override + public int updateSegchkPreferenceLable(SegchkPreferenceLable segchkPreferenceLable) + { + return segchkPreferenceLableMapper.updateSegchkPreferenceLable(segchkPreferenceLable); + } + + /** + * 批量删除seg优惠管理 + * + * @param preferenceIds 需要删除的seg优惠管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkPreferenceLableByPreferenceIds(Long[] preferenceIds) + { + Map paramsMap = new HashMap(); + paramsMap.put("cardTypeIds", preferenceIds); + paramsMap.put("typeId", 2); + segchkLableMgtService.deleteSegchkLableMgtByCardTypeIds(paramsMap); + + segchkStoreLableMgtService.deleteSegchkStoreLableMgtByCardTypeIds(paramsMap); + return segchkPreferenceLableMapper.deleteSegchkPreferenceLableByPreferenceIds(preferenceIds); + } + + /** + * 删除seg优惠管理信息 + * + * @param providerId seg优惠管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkPreferenceLableByProviderId(Long providerId) + { + return segchkPreferenceLableMapper.deleteSegchkPreferenceLableByProviderId(providerId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderMgtServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderMgtServiceImpl.java new file mode 100644 index 0000000..3b4e26d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkProviderMgtServiceImpl.java @@ -0,0 +1,145 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.HashMap; +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.ArrayList; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.segchk.domain.SegchkLableMgt; +import com.ruoyi.segchk.mapper.SegchkProviderMgtMapper; +import com.ruoyi.segchk.domain.SegchkProviderMgt; +import com.ruoyi.segchk.service.ISegchkProviderMgtService; + +/** + * seg运营商管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkProviderMgtServiceImpl implements ISegchkProviderMgtService +{ + @Autowired + private SegchkProviderMgtMapper segchkProviderMgtMapper; + + /** + * 查询seg运营商管理 + * + * @param providerId seg运营商管理主键 + * @return seg运营商管理 + */ + @Override + public SegchkProviderMgt selectSegchkProviderMgtByProviderId(Long providerId) + { + return segchkProviderMgtMapper.selectSegchkProviderMgtByProviderId(providerId); + } + + /** + * 查询seg运营商管理列表 + * + * @param segchkProviderMgt seg运营商管理 + * @return seg运营商管理 + */ + @Override + public List selectSegchkProviderMgtList(SegchkProviderMgt segchkProviderMgt) + { + return segchkProviderMgtMapper.selectSegchkProviderMgtList(segchkProviderMgt); + } + + /** + * 新增seg运营商管理 + * + * @param segchkProviderMgt seg运营商管理 + * @return 结果 + */ + @Transactional + @Override + public int insertSegchkProviderMgt(SegchkProviderMgt segchkProviderMgt) + { + segchkProviderMgt.setCreateTime(DateUtils.getNowDate()); + int rows = segchkProviderMgtMapper.insertSegchkProviderMgt(segchkProviderMgt); + insertSegchkLableMgt(segchkProviderMgt); + return rows; + } + + /** + * 修改seg运营商管理 + * + * @param segchkProviderMgt seg运营商管理 + * @return 结果 + */ + @Transactional + @Override + public int updateSegchkProviderMgt(SegchkProviderMgt segchkProviderMgt) + { + segchkProviderMgt.setUpdateTime(DateUtils.getNowDate()); +// segchkProviderMgtMapper.deleteSegchkLableMgtByProviderId(segchkProviderMgt.getProviderId()); +// insertSegchkLableMgt(segchkProviderMgt); + return segchkProviderMgtMapper.updateSegchkProviderMgt(segchkProviderMgt); + } + + /** + * 批量删除seg运营商管理 + * + * @param providerIds 需要删除的seg运营商管理主键 + * @return 结果 + */ + @Transactional + @Override + public int deleteSegchkProviderMgtByProviderIds(Long[] providerIds) + { +// segchkProviderMgtMapper.deleteSegchkLableMgtByProviderIds(providerIds); + return segchkProviderMgtMapper.deleteSegchkProviderMgtByProviderIds(providerIds); + } + + /** + * 删除seg运营商管理信息 + * + * @param providerId seg运营商管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkProviderMgtByProviderId(Long providerId) + { + segchkProviderMgtMapper.deleteSegchkLableMgtByProviderId(providerId); + return segchkProviderMgtMapper.deleteSegchkProviderMgtByProviderId(providerId); + } + + @Override + public HashMap getCustomService(Long providerId) { + return segchkProviderMgtMapper.getCustomService(providerId); + } + + @Override + public Long getProviderIdByPhoneNo(String phonenumber) { + + return segchkProviderMgtMapper.getProviderIdByPhoneNo(phonenumber); + } + + /** + * 新增seg首页标签管理信息 + * + * @param segchkProviderMgt seg运营商管理对象 + */ + public void insertSegchkLableMgt(SegchkProviderMgt segchkProviderMgt) + { + List segchkLableMgtList = segchkProviderMgt.getSegchkLableMgtList(); + Long providerId = segchkProviderMgt.getProviderId(); + if (StringUtils.isNotNull(segchkLableMgtList)) + { + List list = new ArrayList(); + for (SegchkLableMgt segchkLableMgt : segchkLableMgtList) + { + segchkLableMgt.setProviderId(providerId); + list.add(segchkLableMgt); + } + if (list.size() > 0) + { + segchkProviderMgtMapper.batchSegchkLableMgt(list); + } + } + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderIndexServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderIndexServiceImpl.java new file mode 100644 index 0000000..cfccc49 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderIndexServiceImpl.java @@ -0,0 +1,99 @@ +package com.ruoyi.segchk.service.impl; + +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.segchk.domain.SegchkRecommenderStore; +import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebReq; +import com.ruoyi.segchk.domain.SegchkRecommenderStoreWebResp; +import com.ruoyi.segchk.mapper.SegchkRecommenderIndexMapper; +import com.ruoyi.segchk.mapper.SegchkRecommenderStoreMapper; +import com.ruoyi.segchk.service.ISegchkRecommenderIndexService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * seg首页推荐商户Service业务层处理 + * + * @author yinzhiying + * @date 2021-07-01 + */ +@Service +public class SegchkRecommenderIndexServiceImpl implements ISegchkRecommenderIndexService +{ + @Autowired + private SegchkRecommenderIndexMapper segchkRecommenderIndexMapper; + + /** + * 查询seg首页推荐商户 + * + * @param recommenderId seg首页推荐商户ID + * @return seg首页推荐商户 + */ + @Override + public SegchkRecommenderStore selectSegchkRecommenderStoreById(Long recommenderId) + { + return segchkRecommenderIndexMapper.selectSegchkRecommenderStoreById(recommenderId); + } + + /** + * 查询seg首页推荐商户列表 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return seg首页推荐商户 + */ + @Override + public List selectSegchkRecommenderStoreList(SegchkRecommenderStore segchkRecommenderStore) + { + return segchkRecommenderIndexMapper.selectSegchkRecommenderStoreList(segchkRecommenderStore); + } + + /** + * 新增seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + @Override + public int insertSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore) + { + return segchkRecommenderIndexMapper.insertSegchkRecommenderStore(segchkRecommenderStore); + } + + /** + * 修改seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + @Override + public int updateSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore) + { + return segchkRecommenderIndexMapper.updateSegchkRecommenderStore(segchkRecommenderStore); + } + + /** + * 删除seg首页推荐商户对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteSegchkRecommenderStoreByIds(String ids) + { + return segchkRecommenderIndexMapper.deleteSegchkRecommenderStoreByIds(Convert.toStrArray(ids)); + } + + /** + * 删除seg首页推荐商户信息 + * + * @param recommenderId seg首页推荐商户ID + * @return 结果 + */ + @Override + public int deleteSegchkRecommenderStoreById(Long recommenderId) + { + return segchkRecommenderIndexMapper.deleteSegchkRecommenderStoreById(recommenderId); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderStoreServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderStoreServiceImpl.java new file mode 100644 index 0000000..dd4a726 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkRecommenderStoreServiceImpl.java @@ -0,0 +1,98 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkRecommenderStoreMapper; +import com.ruoyi.segchk.domain.SegchkRecommenderStore; +import com.ruoyi.segchk.service.ISegchkRecommenderStoreService; + +/** + * seg首页推荐商户Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkRecommenderStoreServiceImpl implements ISegchkRecommenderStoreService +{ + @Autowired + private SegchkRecommenderStoreMapper segchkRecommenderStoreMapper; + + /** + * 查询seg首页推荐商户 + * + * @param recommenderId seg首页推荐商户主键 + * @return seg首页推荐商户 + */ + @Override + public SegchkRecommenderStore selectSegchkRecommenderStoreByRecommenderId(Long recommenderId) + { + return segchkRecommenderStoreMapper.selectSegchkRecommenderStoreByRecommenderId(recommenderId); + } + + /** + * 查询seg首页推荐商户列表 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return seg首页推荐商户 + */ + @Override + public List selectSegchkRecommenderStoreList(SegchkRecommenderStore segchkRecommenderStore) + { + return segchkRecommenderStoreMapper.selectSegchkRecommenderStoreList(segchkRecommenderStore); + } + + /** + * 新增seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + @Override + public int insertSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore) + { + return segchkRecommenderStoreMapper.insertSegchkRecommenderStore(segchkRecommenderStore); + } + + /** + * 修改seg首页推荐商户 + * + * @param segchkRecommenderStore seg首页推荐商户 + * @return 结果 + */ + @Override + public int updateSegchkRecommenderStore(SegchkRecommenderStore segchkRecommenderStore) + { + return segchkRecommenderStoreMapper.updateSegchkRecommenderStore(segchkRecommenderStore); + } + + /** + * 批量删除seg首页推荐商户 + * + * @param recommenderIds 需要删除的seg首页推荐商户主键 + * @return 结果 + */ + @Override + public int deleteSegchkRecommenderStoreByRecommenderIds(Long[] recommenderIds) + { + return segchkRecommenderStoreMapper.deleteSegchkRecommenderStoreByRecommenderIds(recommenderIds); + } + + /** + * 删除seg首页推荐商户信息 + * + * @param recommenderId seg首页推荐商户主键 + * @return 结果 + */ + @Override + public int deleteSegchkRecommenderStoreByRecommenderId(Long recommenderId) + { + return segchkRecommenderStoreMapper.deleteSegchkRecommenderStoreByRecommenderId(recommenderId); + } + + @Override + public int deleteSegchkRecommenderStoreByStoreIds(Long[] storeIds) { + return segchkRecommenderStoreMapper.deleteSegchkRecommenderStoreByStoreIds(storeIds); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSalerInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSalerInfoServiceImpl.java new file mode 100644 index 0000000..34dd094 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSalerInfoServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkSalerInfoMapper; +import com.ruoyi.segchk.domain.SegchkSalerInfo; +import com.ruoyi.segchk.service.ISegchkSalerInfoService; + +/** + * seg销售人员信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkSalerInfoServiceImpl implements ISegchkSalerInfoService +{ + @Autowired + private SegchkSalerInfoMapper segchkSalerInfoMapper; + + /** + * 查询seg销售人员信息 + * + * @param salerId seg销售人员信息主键 + * @return seg销售人员信息 + */ + @Override + public SegchkSalerInfo selectSegchkSalerInfoBySalerId(Integer salerId) + { + return segchkSalerInfoMapper.selectSegchkSalerInfoBySalerId(salerId); + } + + /** + * 查询seg销售人员信息列表 + * + * @param segchkSalerInfo seg销售人员信息 + * @return seg销售人员信息 + */ + @Override + public List selectSegchkSalerInfoList(SegchkSalerInfo segchkSalerInfo) + { + return segchkSalerInfoMapper.selectSegchkSalerInfoList(segchkSalerInfo); + } + + /** + * 新增seg销售人员信息 + * + * @param segchkSalerInfo seg销售人员信息 + * @return 结果 + */ + @Override + public int insertSegchkSalerInfo(SegchkSalerInfo segchkSalerInfo) + { + return segchkSalerInfoMapper.insertSegchkSalerInfo(segchkSalerInfo); + } + + /** + * 修改seg销售人员信息 + * + * @param segchkSalerInfo seg销售人员信息 + * @return 结果 + */ + @Override + public int updateSegchkSalerInfo(SegchkSalerInfo segchkSalerInfo) + { + return segchkSalerInfoMapper.updateSegchkSalerInfo(segchkSalerInfo); + } + + /** + * 批量删除seg销售人员信息 + * + * @param salerIds 需要删除的seg销售人员信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkSalerInfoBySalerIds(Integer[] salerIds) + { + return segchkSalerInfoMapper.deleteSegchkSalerInfoBySalerIds(salerIds); + } + + /** + * 删除seg销售人员信息信息 + * + * @param salerId seg销售人员信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkSalerInfoBySalerId(Integer salerId) + { + return segchkSalerInfoMapper.deleteSegchkSalerInfoBySalerId(salerId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSelfServiceChkServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSelfServiceChkServiceImpl.java new file mode 100644 index 0000000..0d3b87f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSelfServiceChkServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkSelfServiceChkMapper; +import com.ruoyi.segchk.domain.SegchkSelfServiceChk; +import com.ruoyi.segchk.service.ISegchkSelfServiceChkService; + +/** + * seg自定义卡核消记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkSelfServiceChkServiceImpl implements ISegchkSelfServiceChkService +{ + @Autowired + private SegchkSelfServiceChkMapper segchkSelfServiceChkMapper; + + /** + * 查询seg自定义卡核消记录 + * + * @param chkServiceId seg自定义卡核消记录主键 + * @return seg自定义卡核消记录 + */ + @Override + public SegchkSelfServiceChk selectSegchkSelfServiceChkByChkServiceId(Long chkServiceId) + { + return segchkSelfServiceChkMapper.selectSegchkSelfServiceChkByChkServiceId(chkServiceId); + } + + /** + * 查询seg自定义卡核消记录列表 + * + * @param segchkSelfServiceChk seg自定义卡核消记录 + * @return seg自定义卡核消记录 + */ + @Override + public List selectSegchkSelfServiceChkList(SegchkSelfServiceChk segchkSelfServiceChk) + { + return segchkSelfServiceChkMapper.selectSegchkSelfServiceChkList(segchkSelfServiceChk); + } + + /** + * 新增seg自定义卡核消记录 + * + * @param segchkSelfServiceChk seg自定义卡核消记录 + * @return 结果 + */ + @Override + public int insertSegchkSelfServiceChk(SegchkSelfServiceChk segchkSelfServiceChk) + { + return segchkSelfServiceChkMapper.insertSegchkSelfServiceChk(segchkSelfServiceChk); + } + + /** + * 修改seg自定义卡核消记录 + * + * @param segchkSelfServiceChk seg自定义卡核消记录 + * @return 结果 + */ + @Override + public int updateSegchkSelfServiceChk(SegchkSelfServiceChk segchkSelfServiceChk) + { + return segchkSelfServiceChkMapper.updateSegchkSelfServiceChk(segchkSelfServiceChk); + } + + /** + * 批量删除seg自定义卡核消记录 + * + * @param chkServiceIds 需要删除的seg自定义卡核消记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkSelfServiceChkByChkServiceIds(Long[] chkServiceIds) + { + return segchkSelfServiceChkMapper.deleteSegchkSelfServiceChkByChkServiceIds(chkServiceIds); + } + + /** + * 删除seg自定义卡核消记录信息 + * + * @param chkServiceId seg自定义卡核消记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkSelfServiceChkByChkServiceId(Long chkServiceId) + { + return segchkSelfServiceChkMapper.deleteSegchkSelfServiceChkByChkServiceId(chkServiceId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkServiceChkServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkServiceChkServiceImpl.java new file mode 100644 index 0000000..019fb58 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkServiceChkServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkServiceChkMapper; +import com.ruoyi.segchk.domain.SegchkServiceChk; +import com.ruoyi.segchk.service.ISegchkServiceChkService; + +/** + * seg核消记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkServiceChkServiceImpl implements ISegchkServiceChkService +{ + @Autowired + private SegchkServiceChkMapper segchkServiceChkMapper; + + /** + * 查询seg核消记录 + * + * @param chkServiceId seg核消记录主键 + * @return seg核消记录 + */ + @Override + public SegchkServiceChk selectSegchkServiceChkByChkServiceId(Long chkServiceId) + { + return segchkServiceChkMapper.selectSegchkServiceChkByChkServiceId(chkServiceId); + } + + /** + * 查询seg核消记录列表 + * + * @param segchkServiceChk seg核消记录 + * @return seg核消记录 + */ + @Override + public List selectSegchkServiceChkList(SegchkServiceChk segchkServiceChk) + { + return segchkServiceChkMapper.selectSegchkServiceChkList(segchkServiceChk); + } + + /** + * 新增seg核消记录 + * + * @param segchkServiceChk seg核消记录 + * @return 结果 + */ + @Override + public int insertSegchkServiceChk(SegchkServiceChk segchkServiceChk) + { + return segchkServiceChkMapper.insertSegchkServiceChk(segchkServiceChk); + } + + /** + * 修改seg核消记录 + * + * @param segchkServiceChk seg核消记录 + * @return 结果 + */ + @Override + public int updateSegchkServiceChk(SegchkServiceChk segchkServiceChk) + { + return segchkServiceChkMapper.updateSegchkServiceChk(segchkServiceChk); + } + + /** + * 批量删除seg核消记录 + * + * @param chkServiceIds 需要删除的seg核消记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkServiceChkByChkServiceIds(Long[] chkServiceIds) + { + return segchkServiceChkMapper.deleteSegchkServiceChkByChkServiceIds(chkServiceIds); + } + + /** + * 删除seg核消记录信息 + * + * @param chkServiceId seg核消记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkServiceChkByChkServiceId(Long chkServiceId) + { + return segchkServiceChkMapper.deleteSegchkServiceChkByChkServiceId(chkServiceId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkServiceCommentServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkServiceCommentServiceImpl.java new file mode 100644 index 0000000..421f3f1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkServiceCommentServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkServiceCommentMapper; +import com.ruoyi.segchk.domain.SegchkServiceComment; +import com.ruoyi.segchk.service.ISegchkServiceCommentService; + +/** + * seg评价记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkServiceCommentServiceImpl implements ISegchkServiceCommentService +{ + @Autowired + private SegchkServiceCommentMapper segchkServiceCommentMapper; + + /** + * 查询seg评价记录 + * + * @param commentId seg评价记录主键 + * @return seg评价记录 + */ + @Override + public SegchkServiceComment selectSegchkServiceCommentByCommentId(Long commentId) + { + return segchkServiceCommentMapper.selectSegchkServiceCommentByCommentId(commentId); + } + + /** + * 查询seg评价记录列表 + * + * @param segchkServiceComment seg评价记录 + * @return seg评价记录 + */ + @Override + public List selectSegchkServiceCommentList(SegchkServiceComment segchkServiceComment) + { + return segchkServiceCommentMapper.selectSegchkServiceCommentList(segchkServiceComment); + } + + /** + * 新增seg评价记录 + * + * @param segchkServiceComment seg评价记录 + * @return 结果 + */ + @Override + public int insertSegchkServiceComment(SegchkServiceComment segchkServiceComment) + { + return segchkServiceCommentMapper.insertSegchkServiceComment(segchkServiceComment); + } + + /** + * 修改seg评价记录 + * + * @param segchkServiceComment seg评价记录 + * @return 结果 + */ + @Override + public int updateSegchkServiceComment(SegchkServiceComment segchkServiceComment) + { + return segchkServiceCommentMapper.updateSegchkServiceComment(segchkServiceComment); + } + + /** + * 批量删除seg评价记录 + * + * @param commentIds 需要删除的seg评价记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkServiceCommentByCommentIds(Long[] commentIds) + { + return segchkServiceCommentMapper.deleteSegchkServiceCommentByCommentIds(commentIds); + } + + /** + * 删除seg评价记录信息 + * + * @param commentId seg评价记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkServiceCommentByCommentId(Long commentId) + { + return segchkServiceCommentMapper.deleteSegchkServiceCommentByCommentId(commentId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSmsDetailServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSmsDetailServiceImpl.java new file mode 100644 index 0000000..a71d6a2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSmsDetailServiceImpl.java @@ -0,0 +1,95 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkSmsDetailMapper; +import com.ruoyi.segchk.domain.SegchkSmsDetail; +import com.ruoyi.segchk.service.ISegchkSmsDetailService; + +/** + * seg短信记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkSmsDetailServiceImpl implements ISegchkSmsDetailService +{ + @Autowired + private SegchkSmsDetailMapper segchkSmsDetailMapper; + + /** + * 查询seg短信记录 + * + * @param shortMsgId seg短信记录主键 + * @return seg短信记录 + */ + @Override + public SegchkSmsDetail selectSegchkSmsDetailByShortMsgId(Long shortMsgId) + { + return segchkSmsDetailMapper.selectSegchkSmsDetailByShortMsgId(shortMsgId); + } + + /** + * 查询seg短信记录列表 + * + * @param segchkSmsDetail seg短信记录 + * @return seg短信记录 + */ + @Override + public List selectSegchkSmsDetailList(SegchkSmsDetail segchkSmsDetail) + { + return segchkSmsDetailMapper.selectSegchkSmsDetailList(segchkSmsDetail); + } + + /** + * 新增seg短信记录 + * + * @param segchkSmsDetail seg短信记录 + * @return 结果 + */ + @Override + public int insertSegchkSmsDetail(SegchkSmsDetail segchkSmsDetail) + { + segchkSmsDetail.setCreateTime(DateUtils.getNowDate()); + return segchkSmsDetailMapper.insertSegchkSmsDetail(segchkSmsDetail); + } + + /** + * 修改seg短信记录 + * + * @param segchkSmsDetail seg短信记录 + * @return 结果 + */ + @Override + public int updateSegchkSmsDetail(SegchkSmsDetail segchkSmsDetail) + { + return segchkSmsDetailMapper.updateSegchkSmsDetail(segchkSmsDetail); + } + + /** + * 批量删除seg短信记录 + * + * @param shortMsgIds 需要删除的seg短信记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkSmsDetailByShortMsgIds(Long[] shortMsgIds) + { + return segchkSmsDetailMapper.deleteSegchkSmsDetailByShortMsgIds(shortMsgIds); + } + + /** + * 删除seg短信记录信息 + * + * @param shortMsgId seg短信记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkSmsDetailByShortMsgId(Long shortMsgId) + { + return segchkSmsDetailMapper.deleteSegchkSmsDetailByShortMsgId(shortMsgId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreAccountServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreAccountServiceImpl.java new file mode 100644 index 0000000..10641f4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreAccountServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreAccountMapper; +import com.ruoyi.segchk.domain.SegchkStoreAccount; +import com.ruoyi.segchk.service.ISegchkStoreAccountService; + +/** + * seg商户余额信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreAccountServiceImpl implements ISegchkStoreAccountService +{ + @Autowired + private SegchkStoreAccountMapper segchkStoreAccountMapper; + + /** + * 查询seg商户余额信息 + * + * @param accountId seg商户余额信息主键 + * @return seg商户余额信息 + */ + @Override + public SegchkStoreAccount selectSegchkStoreAccountByAccountId(Long accountId) + { + return segchkStoreAccountMapper.selectSegchkStoreAccountByAccountId(accountId); + } + + /** + * 查询seg商户余额信息列表 + * + * @param segchkStoreAccount seg商户余额信息 + * @return seg商户余额信息 + */ + @Override + public List selectSegchkStoreAccountList(SegchkStoreAccount segchkStoreAccount) + { + return segchkStoreAccountMapper.selectSegchkStoreAccountList(segchkStoreAccount); + } + + /** + * 新增seg商户余额信息 + * + * @param segchkStoreAccount seg商户余额信息 + * @return 结果 + */ + @Override + public int insertSegchkStoreAccount(SegchkStoreAccount segchkStoreAccount) + { + return segchkStoreAccountMapper.insertSegchkStoreAccount(segchkStoreAccount); + } + + /** + * 修改seg商户余额信息 + * + * @param segchkStoreAccount seg商户余额信息 + * @return 结果 + */ + @Override + public int updateSegchkStoreAccount(SegchkStoreAccount segchkStoreAccount) + { + return segchkStoreAccountMapper.updateSegchkStoreAccount(segchkStoreAccount); + } + + /** + * 批量删除seg商户余额信息 + * + * @param accountIds 需要删除的seg商户余额信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreAccountByAccountIds(Long[] accountIds) + { + return segchkStoreAccountMapper.deleteSegchkStoreAccountByAccountIds(accountIds); + } + + /** + * 删除seg商户余额信息信息 + * + * @param accountId seg商户余额信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreAccountByAccountId(Long accountId) + { + return segchkStoreAccountMapper.deleteSegchkStoreAccountByAccountId(accountId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreBasicInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreBasicInfoServiceImpl.java new file mode 100644 index 0000000..8183476 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreBasicInfoServiceImpl.java @@ -0,0 +1,259 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; + +import com.ruoyi.segchk.domain.*; +import com.ruoyi.segchk.service.ISegchkCarouseMgtService; +import com.ruoyi.segchk.service.ISegchkRecommenderStoreService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; + +import com.ruoyi.common.utils.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.segchk.mapper.SegchkStoreBasicInfoMapper; +import com.ruoyi.segchk.service.ISegchkStoreBasicInfoService; +import org.springframework.util.ObjectUtils; + +/** + * seg商家基础信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreBasicInfoServiceImpl implements ISegchkStoreBasicInfoService { + @Autowired + private SegchkStoreBasicInfoMapper segchkStoreBasicInfoMapper; + + @Autowired + private ISegchkCarouseMgtService segchkCarouseMgtService; + + @Autowired + private ISegchkRecommenderStoreService segchkRecommenderStoreService; + + private static final Logger logger = LoggerFactory.getLogger(SegchkStoreBasicInfoServiceImpl.class); + /** + * 查询seg商家基础信息 + * + * @param storeId seg商家基础信息主键 + * @return seg商家基础信息 + */ + @Override + public SegchkStoreBasicInfo selectSegchkStoreBasicInfoByStoreId(Long storeId) { + return segchkStoreBasicInfoMapper.selectSegchkStoreBasicInfoByStoreId(storeId); + } + + /** + * 查询seg商家基础信息列表 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return seg商家基础信息 + */ + @Override + public List selectSegchkStoreBasicInfoList(SegchkStoreBasicInfo segchkStoreBasicInfo) { + return segchkStoreBasicInfoMapper.selectSegchkStoreBasicInfoList(segchkStoreBasicInfo); + } + + /** + * 新增seg商家基础信息 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return 结果 + */ + @Transactional + @Override + public int insertSegchkStoreBasicInfo(SegchkStoreBasicInfo segchkStoreBasicInfo) { + Long store_id = segchkStoreBasicInfoMapper.selectStoreIdByPhone(segchkStoreBasicInfo.getStorePhone()); + if(!ObjectUtils.isEmpty(store_id)){ + logger.warn("insertSegchkStoreBasicInfo error insert for store({}) with phone({}) same to store({})", segchkStoreBasicInfo.getStoreName(), segchkStoreBasicInfo.getStorePhone(), store_id); + return -1;//说明该手机号已注册商户 + } + int rows = segchkStoreBasicInfoMapper.insertSegchkStoreBasicInfo(segchkStoreBasicInfo); + insertSegchkStoreImage(segchkStoreBasicInfo); + insertSegchkStoreChkMgt(segchkStoreBasicInfo); + insertSegchkStoreLableMgt(segchkStoreBasicInfo); + insertSegchkStoreSecurity(segchkStoreBasicInfo); + return rows; + } + + /** + * 修改seg商家基础信息 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return 结果 + */ + @Transactional + @Override + public int updateSegchkStoreBasicInfo(SegchkStoreBasicInfo segchkStoreBasicInfo) { + Long store_id = segchkStoreBasicInfoMapper.selectStoreIdByPhone(segchkStoreBasicInfo.getStorePhone()); + if(!ObjectUtils.isEmpty(store_id) && !segchkStoreBasicInfo.getStoreId().equals(store_id)){ + logger.warn("updateSegchkStoreBasicInfo error update for store({}) with phone({}) same to store({})", segchkStoreBasicInfo.getStoreId(), segchkStoreBasicInfo.getStorePhone(), store_id); + return -1;//说明该手机号已注册其他商户 + } + segchkStoreBasicInfoMapper.deleteSegchkStoreImageByStoreId(segchkStoreBasicInfo.getStoreId()); + segchkStoreBasicInfoMapper.deleteSegchkStoreChkMgtByStoreId(segchkStoreBasicInfo.getStoreId()); + segchkStoreBasicInfoMapper.deleteSegchkStoreLableMgtByStoreId(segchkStoreBasicInfo.getStoreId()); + segchkStoreBasicInfoMapper.deleteSegchkStoreSecurityByStoreId(segchkStoreBasicInfo.getStoreId()); + if(!segchkStoreBasicInfo.getServiceState().equals("0")){ +// 商户下线 + Long[] storeIds = new Long[]{segchkStoreBasicInfo.getStoreId()}; + segchkCarouseMgtService.deleteSegchkCarouseMgtByStoreIds(storeIds); + } + insertSegchkStoreImage(segchkStoreBasicInfo); + insertSegchkStoreChkMgt(segchkStoreBasicInfo); + insertSegchkStoreLableMgt(segchkStoreBasicInfo); + insertSegchkStoreSecurity(segchkStoreBasicInfo); + return segchkStoreBasicInfoMapper.updateSegchkStoreBasicInfo(segchkStoreBasicInfo); + } + + /** + * 批量删除seg商家基础信息 + * + * @param storeIds 需要删除的seg商家基础信息主键 + * @return 结果 + */ + @Transactional + @Override + public int deleteSegchkStoreBasicInfoByStoreIds(Long[] storeIds) { + segchkStoreBasicInfoMapper.deleteSegchkStoreImageByStoreIds(storeIds); + segchkStoreBasicInfoMapper.deleteSegchkStoreChkMgtByStoreIds(storeIds); + segchkStoreBasicInfoMapper.deleteSegchkStoreLableMgtByStoreIds(storeIds); + segchkStoreBasicInfoMapper.deleteSegchkStoreSecurityByStoreIds(storeIds); + segchkCarouseMgtService.deleteSegchkCarouseMgtByStoreIds(storeIds); + segchkRecommenderStoreService.deleteSegchkRecommenderStoreByStoreIds(storeIds); + return segchkStoreBasicInfoMapper.deleteSegchkStoreBasicInfoByStoreIds(storeIds); + } + + /** + * 删除seg商家基础信息信息 + * + * @param storeId seg商家基础信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreBasicInfoByStoreId(Long storeId) { + segchkStoreBasicInfoMapper.deleteSegchkStoreImageByStoreId(storeId); + segchkStoreBasicInfoMapper.deleteSegchkStoreChkMgtByStoreId(storeId); + segchkStoreBasicInfoMapper.deleteSegchkStoreLableMgtByStoreId(storeId); + segchkStoreBasicInfoMapper.deleteSegchkStoreSecurityByStoreId(storeId); + Long[] storeIds = new Long[]{storeId}; + segchkCarouseMgtService.deleteSegchkCarouseMgtByStoreIds(storeIds); + segchkRecommenderStoreService.deleteSegchkRecommenderStoreByStoreIds(storeIds); + return segchkStoreBasicInfoMapper.deleteSegchkStoreBasicInfoByStoreId(storeId); + } + + /** + * 修改seg商家服务状态 + * + * @param segchkStoreBasicInfo seg商家基础信息 + * @return 结果 + */ + @Override + public int updateSegchkStoreServiceStatus(SegchkStoreBasicInfo segchkStoreBasicInfo) { + if(!segchkStoreBasicInfo.getServiceState().equals("0")){ +// 商户下线 + Long[] storeIds = new Long[]{segchkStoreBasicInfo.getStoreId()}; + segchkCarouseMgtService.deleteSegchkCarouseMgtByStoreIds(storeIds); + segchkRecommenderStoreService.deleteSegchkRecommenderStoreByStoreIds(storeIds); + } + return segchkStoreBasicInfoMapper.updateSegchkStoreServiceStatus(segchkStoreBasicInfo); + } + + @Override + public int updateSegchkStoreDetail(SegchkStoreBasicInfo segchkStoreBasicInfo) { + return segchkStoreBasicInfoMapper.updateSegchkStoreDetail(segchkStoreBasicInfo); + } + + /** + * 新增seg商家图片信息信息 + * + * @param segchkStoreBasicInfo + */ + public void insertSegchkStoreImage(SegchkStoreBasicInfo segchkStoreBasicInfo) { + List segchkStoreImageList = segchkStoreBasicInfo.getSegchkStoreImageList(); + Long storeId = segchkStoreBasicInfo.getStoreId(); + Long providerId = segchkStoreBasicInfo.getProviderId(); + if (StringUtils.isNotNull(segchkStoreImageList)) { + List list = new ArrayList(); + for (SegchkStoreImage segchkStoreImage : segchkStoreImageList) { + segchkStoreImage.setStoreId(storeId); + segchkStoreImage.setProviderId(providerId); + list.add(segchkStoreImage); + } + if (list.size() > 0) { + segchkStoreBasicInfoMapper.batchSegchkStoreImage(list); + } + } + } + + /** + * 新增seg商家核消管理信息 + * + * @param segchkStoreBasicInfo + */ + public void insertSegchkStoreChkMgt(SegchkStoreBasicInfo segchkStoreBasicInfo) { + + List segchkStoreChkMgtList = segchkStoreBasicInfo.getSegchkStoreChkMgtList(); + Long storeId = segchkStoreBasicInfo.getStoreId(); + Long providerId = segchkStoreBasicInfo.getProviderId(); + if (StringUtils.isNotNull(segchkStoreChkMgtList)) { + List list = new ArrayList(); + for (SegchkStoreChkMgt segchkStoreChkMgt : segchkStoreChkMgtList) { + segchkStoreChkMgt.setStoreId(storeId); + segchkStoreChkMgt.setProviderId(providerId); + list.add(segchkStoreChkMgt); + } + if (list.size() > 0) { + segchkStoreBasicInfoMapper.batchSegchkStoreChkMgt(list); + } + } + } + + /** + * 新增seg商家标签管理信息 + * + * @param segchkStoreBasicInfo + */ + public void insertSegchkStoreLableMgt(SegchkStoreBasicInfo segchkStoreBasicInfo) { + List segchkStoreLableMgtList = segchkStoreBasicInfo.getSegchkStoreLableMgtList(); + Long storeId = segchkStoreBasicInfo.getStoreId(); + Long providerId = segchkStoreBasicInfo.getProviderId(); + if (StringUtils.isNotNull(segchkStoreLableMgtList)) { + List list = new ArrayList(); + for (SegchkStoreLableMgt segchkStoreLableMgt : segchkStoreLableMgtList) { + segchkStoreLableMgt.setStoreId(storeId); + segchkStoreLableMgt.setProviderId(providerId); + list.add(segchkStoreLableMgt); + } + if (list.size() > 0) { + segchkStoreBasicInfoMapper.batchSegchkStoreLableMgt(list); + } + } + } + + /** + * 新增seg商家密码管理信息 + * + * @param segchkStoreBasicInfo + */ + public void insertSegchkStoreSecurity(SegchkStoreBasicInfo segchkStoreBasicInfo) { + List segchkStoreSecurityList = segchkStoreBasicInfo.getSegchkStoreSecurityList(); + Long storeId = segchkStoreBasicInfo.getStoreId(); + Long providerId = segchkStoreBasicInfo.getProviderId(); + if (StringUtils.isNotNull(segchkStoreSecurityList)) { + List list = new ArrayList(); + for (SegchkStoreSecurity segchkStoreSecurity : segchkStoreSecurityList) { + segchkStoreSecurity.setStoreId(storeId); + segchkStoreSecurity.setProviderId(providerId); + list.add(segchkStoreSecurity); + } + if (list.size() > 0) { + segchkStoreBasicInfoMapper.batchSegchkStoreSecurity(list); + } + } + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreCashServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreCashServiceImpl.java new file mode 100644 index 0000000..276f36f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreCashServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreCashMapper; +import com.ruoyi.segchk.domain.SegchkStoreCash; +import com.ruoyi.segchk.service.ISegchkStoreCashService; + +/** + * seg商户户提现记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreCashServiceImpl implements ISegchkStoreCashService +{ + @Autowired + private SegchkStoreCashMapper segchkStoreCashMapper; + + /** + * 查询seg商户户提现记录 + * + * @param cashId seg商户户提现记录主键 + * @return seg商户户提现记录 + */ + @Override + public SegchkStoreCash selectSegchkStoreCashByCashId(Long cashId) + { + return segchkStoreCashMapper.selectSegchkStoreCashByCashId(cashId); + } + + /** + * 查询seg商户户提现记录列表 + * + * @param segchkStoreCash seg商户户提现记录 + * @return seg商户户提现记录 + */ + @Override + public List selectSegchkStoreCashList(SegchkStoreCash segchkStoreCash) + { + return segchkStoreCashMapper.selectSegchkStoreCashList(segchkStoreCash); + } + + /** + * 新增seg商户户提现记录 + * + * @param segchkStoreCash seg商户户提现记录 + * @return 结果 + */ + @Override + public int insertSegchkStoreCash(SegchkStoreCash segchkStoreCash) + { + return segchkStoreCashMapper.insertSegchkStoreCash(segchkStoreCash); + } + + /** + * 修改seg商户户提现记录 + * + * @param segchkStoreCash seg商户户提现记录 + * @return 结果 + */ + @Override + public int updateSegchkStoreCash(SegchkStoreCash segchkStoreCash) + { + return segchkStoreCashMapper.updateSegchkStoreCash(segchkStoreCash); + } + + /** + * 批量删除seg商户户提现记录 + * + * @param cashIds 需要删除的seg商户户提现记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreCashByCashIds(Long[] cashIds) + { + return segchkStoreCashMapper.deleteSegchkStoreCashByCashIds(cashIds); + } + + /** + * 删除seg商户户提现记录信息 + * + * @param cashId seg商户户提现记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreCashByCashId(Long cashId) + { + return segchkStoreCashMapper.deleteSegchkStoreCashByCashId(cashId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreChargeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreChargeServiceImpl.java new file mode 100644 index 0000000..2957e22 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreChargeServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreChargeMapper; +import com.ruoyi.segchk.domain.SegchkStoreCharge; +import com.ruoyi.segchk.service.ISegchkStoreChargeService; + +/** + * seg商户充值记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreChargeServiceImpl implements ISegchkStoreChargeService +{ + @Autowired + private SegchkStoreChargeMapper segchkStoreChargeMapper; + + /** + * 查询seg商户充值记录 + * + * @param chargeId seg商户充值记录主键 + * @return seg商户充值记录 + */ + @Override + public SegchkStoreCharge selectSegchkStoreChargeByChargeId(Long chargeId) + { + return segchkStoreChargeMapper.selectSegchkStoreChargeByChargeId(chargeId); + } + + /** + * 查询seg商户充值记录列表 + * + * @param segchkStoreCharge seg商户充值记录 + * @return seg商户充值记录 + */ + @Override + public List selectSegchkStoreChargeList(SegchkStoreCharge segchkStoreCharge) + { + return segchkStoreChargeMapper.selectSegchkStoreChargeList(segchkStoreCharge); + } + + /** + * 新增seg商户充值记录 + * + * @param segchkStoreCharge seg商户充值记录 + * @return 结果 + */ + @Override + public int insertSegchkStoreCharge(SegchkStoreCharge segchkStoreCharge) + { + return segchkStoreChargeMapper.insertSegchkStoreCharge(segchkStoreCharge); + } + + /** + * 修改seg商户充值记录 + * + * @param segchkStoreCharge seg商户充值记录 + * @return 结果 + */ + @Override + public int updateSegchkStoreCharge(SegchkStoreCharge segchkStoreCharge) + { + return segchkStoreChargeMapper.updateSegchkStoreCharge(segchkStoreCharge); + } + + /** + * 批量删除seg商户充值记录 + * + * @param chargeIds 需要删除的seg商户充值记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreChargeByChargeIds(Long[] chargeIds) + { + return segchkStoreChargeMapper.deleteSegchkStoreChargeByChargeIds(chargeIds); + } + + /** + * 删除seg商户充值记录信息 + * + * @param chargeId seg商户充值记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreChargeByChargeId(Long chargeId) + { + return segchkStoreChargeMapper.deleteSegchkStoreChargeByChargeId(chargeId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreChkMgtServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreChkMgtServiceImpl.java new file mode 100644 index 0000000..534c7b4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreChkMgtServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreChkMgtMapper; +import com.ruoyi.segchk.domain.SegchkStoreChkMgt; +import com.ruoyi.segchk.service.ISegchkStoreChkMgtService; + +/** + * seg商家核消卡管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreChkMgtServiceImpl implements ISegchkStoreChkMgtService +{ + @Autowired + private SegchkStoreChkMgtMapper segchkStoreChkMgtMapper; + + /** + * 查询seg商家核消卡管理 + * + * @param mgtId seg商家核消卡管理主键 + * @return seg商家核消卡管理 + */ + @Override + public SegchkStoreChkMgt selectSegchkStoreChkMgtByMgtId(Integer mgtId) + { + return segchkStoreChkMgtMapper.selectSegchkStoreChkMgtByMgtId(mgtId); + } + + /** + * 查询seg商家核消卡管理列表 + * + * @param segchkStoreChkMgt seg商家核消卡管理 + * @return seg商家核消卡管理 + */ + @Override + public List selectSegchkStoreChkMgtList(SegchkStoreChkMgt segchkStoreChkMgt) + { + return segchkStoreChkMgtMapper.selectSegchkStoreChkMgtList(segchkStoreChkMgt); + } + + /** + * 新增seg商家核消卡管理 + * + * @param segchkStoreChkMgt seg商家核消卡管理 + * @return 结果 + */ + @Override + public int insertSegchkStoreChkMgt(SegchkStoreChkMgt segchkStoreChkMgt) + { + return segchkStoreChkMgtMapper.insertSegchkStoreChkMgt(segchkStoreChkMgt); + } + + /** + * 修改seg商家核消卡管理 + * + * @param segchkStoreChkMgt seg商家核消卡管理 + * @return 结果 + */ + @Override + public int updateSegchkStoreChkMgt(SegchkStoreChkMgt segchkStoreChkMgt) + { + return segchkStoreChkMgtMapper.updateSegchkStoreChkMgt(segchkStoreChkMgt); + } + + /** + * 批量删除seg商家核消卡管理 + * + * @param mgtIds 需要删除的seg商家核消卡管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreChkMgtByMgtIds(Integer[] mgtIds) + { + return segchkStoreChkMgtMapper.deleteSegchkStoreChkMgtByMgtIds(mgtIds); + } + + /** + * 删除seg商家核消卡管理信息 + * + * @param mgtId seg商家核消卡管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreChkMgtByMgtId(Integer mgtId) + { + return segchkStoreChkMgtMapper.deleteSegchkStoreChkMgtByMgtId(mgtId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreImageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreImageServiceImpl.java new file mode 100644 index 0000000..690fa60 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreImageServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreImageMapper; +import com.ruoyi.segchk.domain.SegchkStoreImage; +import com.ruoyi.segchk.service.ISegchkStoreImageService; + +/** + * seg商家图片信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreImageServiceImpl implements ISegchkStoreImageService +{ + @Autowired + private SegchkStoreImageMapper segchkStoreImageMapper; + + /** + * 查询seg商家图片信息 + * + * @param storeId seg商家图片信息主键 + * @return seg商家图片信息 + */ + @Override + public SegchkStoreImage selectSegchkStoreImageByStoreId(Long storeId) + { + return segchkStoreImageMapper.selectSegchkStoreImageByStoreId(storeId); + } + + /** + * 查询seg商家图片信息列表 + * + * @param segchkStoreImage seg商家图片信息 + * @return seg商家图片信息 + */ + @Override + public List selectSegchkStoreImageList(SegchkStoreImage segchkStoreImage) + { + return segchkStoreImageMapper.selectSegchkStoreImageList(segchkStoreImage); + } + + /** + * 新增seg商家图片信息 + * + * @param segchkStoreImage seg商家图片信息 + * @return 结果 + */ + @Override + public int insertSegchkStoreImage(SegchkStoreImage segchkStoreImage) + { + return segchkStoreImageMapper.insertSegchkStoreImage(segchkStoreImage); + } + + /** + * 修改seg商家图片信息 + * + * @param segchkStoreImage seg商家图片信息 + * @return 结果 + */ + @Override + public int updateSegchkStoreImage(SegchkStoreImage segchkStoreImage) + { + return segchkStoreImageMapper.updateSegchkStoreImage(segchkStoreImage); + } + + /** + * 批量删除seg商家图片信息 + * + * @param storeIds 需要删除的seg商家图片信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreImageByStoreIds(Long[] storeIds) + { + return segchkStoreImageMapper.deleteSegchkStoreImageByStoreIds(storeIds); + } + + /** + * 删除seg商家图片信息信息 + * + * @param storeId seg商家图片信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreImageByStoreId(Long storeId) + { + return segchkStoreImageMapper.deleteSegchkStoreImageByStoreId(storeId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreLableMgtServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreLableMgtServiceImpl.java new file mode 100644 index 0000000..c3f0a0b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreLableMgtServiceImpl.java @@ -0,0 +1,105 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreLableMgtMapper; +import com.ruoyi.segchk.domain.SegchkStoreLableMgt; +import com.ruoyi.segchk.service.ISegchkStoreLableMgtService; + +/** + * seg商家标签管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreLableMgtServiceImpl implements ISegchkStoreLableMgtService +{ + @Autowired + private SegchkStoreLableMgtMapper segchkStoreLableMgtMapper; + + private static final Logger logger = LoggerFactory.getLogger(SegchkStoreLableMgtServiceImpl.class); + /** + * 查询seg商家标签管理 + * + * @param mgtId seg商家标签管理主键 + * @return seg商家标签管理 + */ + @Override + public SegchkStoreLableMgt selectSegchkStoreLableMgtByMgtId(Integer mgtId) + { + return segchkStoreLableMgtMapper.selectSegchkStoreLableMgtByMgtId(mgtId); + } + + /** + * 查询seg商家标签管理列表 + * + * @param segchkStoreLableMgt seg商家标签管理 + * @return seg商家标签管理 + */ + @Override + public List selectSegchkStoreLableMgtList(SegchkStoreLableMgt segchkStoreLableMgt) + { + return segchkStoreLableMgtMapper.selectSegchkStoreLableMgtList(segchkStoreLableMgt); + } + + /** + * 新增seg商家标签管理 + * + * @param segchkStoreLableMgt seg商家标签管理 + * @return 结果 + */ + @Override + public int insertSegchkStoreLableMgt(SegchkStoreLableMgt segchkStoreLableMgt) + { + return segchkStoreLableMgtMapper.insertSegchkStoreLableMgt(segchkStoreLableMgt); + } + + /** + * 修改seg商家标签管理 + * + * @param segchkStoreLableMgt seg商家标签管理 + * @return 结果 + */ + @Override + public int updateSegchkStoreLableMgt(SegchkStoreLableMgt segchkStoreLableMgt) + { + return segchkStoreLableMgtMapper.updateSegchkStoreLableMgt(segchkStoreLableMgt); + } + + /** + * 批量删除seg商家标签管理 + * + * @param mgtIds 需要删除的seg商家标签管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreLableMgtByMgtIds(Integer[] mgtIds) + { + return segchkStoreLableMgtMapper.deleteSegchkStoreLableMgtByMgtIds(mgtIds); + } + + /** + * 删除seg商家标签管理信息 + * + * @param mgtId seg商家标签管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreLableMgtByMgtId(Integer mgtId) + { + return segchkStoreLableMgtMapper.deleteSegchkStoreLableMgtByMgtId(mgtId); + } + + @Override + public int deleteSegchkStoreLableMgtByCardTypeIds(Map paramsMap) { + int ret = segchkStoreLableMgtMapper.deleteSegchkStoreLableMgtByCardTypeIds(paramsMap); + logger.debug("deleteSegchkStoreLableMgtByCardTypeIds res: {} \t with: {}", ret, paramsMap.toString()); + return ret; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreRewardServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreRewardServiceImpl.java new file mode 100644 index 0000000..5f5e3a0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreRewardServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreRewardMapper; +import com.ruoyi.segchk.domain.SegchkStoreReward; +import com.ruoyi.segchk.service.ISegchkStoreRewardService; + +/** + * seg商户奖励Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreRewardServiceImpl implements ISegchkStoreRewardService +{ + @Autowired + private SegchkStoreRewardMapper segchkStoreRewardMapper; + + /** + * 查询seg商户奖励 + * + * @param rewardId seg商户奖励主键 + * @return seg商户奖励 + */ + @Override + public SegchkStoreReward selectSegchkStoreRewardByRewardId(Long rewardId) + { + return segchkStoreRewardMapper.selectSegchkStoreRewardByRewardId(rewardId); + } + + /** + * 查询seg商户奖励列表 + * + * @param segchkStoreReward seg商户奖励 + * @return seg商户奖励 + */ + @Override + public List selectSegchkStoreRewardList(SegchkStoreReward segchkStoreReward) + { + return segchkStoreRewardMapper.selectSegchkStoreRewardList(segchkStoreReward); + } + + /** + * 新增seg商户奖励 + * + * @param segchkStoreReward seg商户奖励 + * @return 结果 + */ + @Override + public int insertSegchkStoreReward(SegchkStoreReward segchkStoreReward) + { + return segchkStoreRewardMapper.insertSegchkStoreReward(segchkStoreReward); + } + + /** + * 修改seg商户奖励 + * + * @param segchkStoreReward seg商户奖励 + * @return 结果 + */ + @Override + public int updateSegchkStoreReward(SegchkStoreReward segchkStoreReward) + { + return segchkStoreRewardMapper.updateSegchkStoreReward(segchkStoreReward); + } + + /** + * 批量删除seg商户奖励 + * + * @param rewardIds 需要删除的seg商户奖励主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreRewardByRewardIds(Long[] rewardIds) + { + return segchkStoreRewardMapper.deleteSegchkStoreRewardByRewardIds(rewardIds); + } + + /** + * 删除seg商户奖励信息 + * + * @param rewardId seg商户奖励主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreRewardByRewardId(Long rewardId) + { + return segchkStoreRewardMapper.deleteSegchkStoreRewardByRewardId(rewardId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreSecurityServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreSecurityServiceImpl.java new file mode 100644 index 0000000..84e482e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreSecurityServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreSecurityMapper; +import com.ruoyi.segchk.domain.SegchkStoreSecurity; +import com.ruoyi.segchk.service.ISegchkStoreSecurityService; + +/** + * seg商户密码Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreSecurityServiceImpl implements ISegchkStoreSecurityService +{ + @Autowired + private SegchkStoreSecurityMapper segchkStoreSecurityMapper; + + /** + * 查询seg商户密码 + * + * @param pwdId seg商户密码主键 + * @return seg商户密码 + */ + @Override + public SegchkStoreSecurity selectSegchkStoreSecurityByPwdId(Long pwdId) + { + return segchkStoreSecurityMapper.selectSegchkStoreSecurityByPwdId(pwdId); + } + + /** + * 查询seg商户密码列表 + * + * @param segchkStoreSecurity seg商户密码 + * @return seg商户密码 + */ + @Override + public List selectSegchkStoreSecurityList(SegchkStoreSecurity segchkStoreSecurity) + { + return segchkStoreSecurityMapper.selectSegchkStoreSecurityList(segchkStoreSecurity); + } + + /** + * 新增seg商户密码 + * + * @param segchkStoreSecurity seg商户密码 + * @return 结果 + */ + @Override + public int insertSegchkStoreSecurity(SegchkStoreSecurity segchkStoreSecurity) + { + return segchkStoreSecurityMapper.insertSegchkStoreSecurity(segchkStoreSecurity); + } + + /** + * 修改seg商户密码 + * + * @param segchkStoreSecurity seg商户密码 + * @return 结果 + */ + @Override + public int updateSegchkStoreSecurity(SegchkStoreSecurity segchkStoreSecurity) + { + return segchkStoreSecurityMapper.updateSegchkStoreSecurity(segchkStoreSecurity); + } + + /** + * 批量删除seg商户密码 + * + * @param pwdIds 需要删除的seg商户密码主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreSecurityByPwdIds(Long[] pwdIds) + { + return segchkStoreSecurityMapper.deleteSegchkStoreSecurityByPwdIds(pwdIds); + } + + /** + * 删除seg商户密码信息 + * + * @param pwdId seg商户密码主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreSecurityByPwdId(Long pwdId) + { + return segchkStoreSecurityMapper.deleteSegchkStoreSecurityByPwdId(pwdId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreSelfMgtServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreSelfMgtServiceImpl.java new file mode 100644 index 0000000..72e47eb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkStoreSelfMgtServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkStoreSelfMgtMapper; +import com.ruoyi.segchk.domain.SegchkStoreSelfMgt; +import com.ruoyi.segchk.service.ISegchkStoreSelfMgtService; + +/** + * seg商家自定义卡管理Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkStoreSelfMgtServiceImpl implements ISegchkStoreSelfMgtService +{ + @Autowired + private SegchkStoreSelfMgtMapper segchkStoreSelfMgtMapper; + + /** + * 查询seg商家自定义卡管理 + * + * @param freeCardId seg商家自定义卡管理主键 + * @return seg商家自定义卡管理 + */ + @Override + public SegchkStoreSelfMgt selectSegchkStoreSelfMgtByFreeCardId(Long freeCardId) + { + return segchkStoreSelfMgtMapper.selectSegchkStoreSelfMgtByFreeCardId(freeCardId); + } + + /** + * 查询seg商家自定义卡管理列表 + * + * @param segchkStoreSelfMgt seg商家自定义卡管理 + * @return seg商家自定义卡管理 + */ + @Override + public List selectSegchkStoreSelfMgtList(SegchkStoreSelfMgt segchkStoreSelfMgt) + { + return segchkStoreSelfMgtMapper.selectSegchkStoreSelfMgtList(segchkStoreSelfMgt); + } + + /** + * 新增seg商家自定义卡管理 + * + * @param segchkStoreSelfMgt seg商家自定义卡管理 + * @return 结果 + */ + @Override + public int insertSegchkStoreSelfMgt(SegchkStoreSelfMgt segchkStoreSelfMgt) + { + return segchkStoreSelfMgtMapper.insertSegchkStoreSelfMgt(segchkStoreSelfMgt); + } + + /** + * 修改seg商家自定义卡管理 + * + * @param segchkStoreSelfMgt seg商家自定义卡管理 + * @return 结果 + */ + @Override + public int updateSegchkStoreSelfMgt(SegchkStoreSelfMgt segchkStoreSelfMgt) + { + return segchkStoreSelfMgtMapper.updateSegchkStoreSelfMgt(segchkStoreSelfMgt); + } + + /** + * 批量删除seg商家自定义卡管理 + * + * @param freeCardIds 需要删除的seg商家自定义卡管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreSelfMgtByFreeCardIds(Long[] freeCardIds) + { + return segchkStoreSelfMgtMapper.deleteSegchkStoreSelfMgtByFreeCardIds(freeCardIds); + } + + /** + * 删除seg商家自定义卡管理信息 + * + * @param freeCardId seg商家自定义卡管理主键 + * @return 结果 + */ + @Override + public int deleteSegchkStoreSelfMgtByFreeCardId(Long freeCardId) + { + return segchkStoreSelfMgtMapper.deleteSegchkStoreSelfMgtByFreeCardId(freeCardId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSystemSettingServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSystemSettingServiceImpl.java new file mode 100644 index 0000000..7aa64ad --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkSystemSettingServiceImpl.java @@ -0,0 +1,189 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; + +import com.ruoyi.common.utils.RedisCahceKey; +import com.ruoyi.segchk.domain.BaseInfoSet; +import com.ruoyi.segchk.domain.SegchkBaseInfoSet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkSystemSettingMapper; +import com.ruoyi.segchk.domain.SegchkSystemSetting; +import com.ruoyi.segchk.service.ISegchkSystemSettingService; + +/** + * 系统设置Service业务层处理 + * + * @author yinzhiying + * @date 2021-10-27 + */ +@Service +public class SegchkSystemSettingServiceImpl implements ISegchkSystemSettingService +{ + @Autowired + private SegchkSystemSettingMapper segchkSystemSettingMapper; + + /** + * 调试日志 + */ + private Logger logger = LoggerFactory.getLogger(SegchkSystemSettingServiceImpl.class); + /** + * 查询系统设置 + * + * @param id 系统设置主键 + * @return 系统设置 + */ + @Override + public SegchkSystemSetting selectSegchkSystemSettingById(Long id) + { + return segchkSystemSettingMapper.selectSegchkSystemSettingById(id); + } + + /** + * 查询系统设置列表 + * + * @param segchkSystemSetting 系统设置 + * @return 系统设置 + */ + @Override + public List selectSegchkSystemSettingList(SegchkSystemSetting segchkSystemSetting) + { + return segchkSystemSettingMapper.selectSegchkSystemSettingList(segchkSystemSetting); + } + + /** + * 新增系统设置 + * + * @param segchkSystemSetting 系统设置 + * @return 结果 + */ + @Override + public int insertSegchkSystemSetting(SegchkSystemSetting segchkSystemSetting) + { + return segchkSystemSettingMapper.insertSegchkSystemSetting(segchkSystemSetting); + } + + /** + * 修改系统设置 + * + * @param segchkSystemSetting 系统设置 + * @return 结果 + */ + @Override + public int updateSegchkSystemSetting(SegchkSystemSetting segchkSystemSetting) + { + return segchkSystemSettingMapper.updateSegchkSystemSetting(segchkSystemSetting); + } + + /** + * 批量删除系统设置 + * + * @param ids 需要删除的系统设置主键 + * @return 结果 + */ + @Override + public int deleteSegchkSystemSettingByIds(Long[] ids) + { + return segchkSystemSettingMapper.deleteSegchkSystemSettingByIds(ids); + } + + /** + * 删除系统设置信息 + * + * @param id 系统设置主键 + * @return 结果 + */ + @Override + public int deleteSegchkSystemSettingById(Long id) + { + return segchkSystemSettingMapper.deleteSegchkSystemSettingById(id); + } + + + /** + * 查询基本信息和高级信息设置 + * + * @return 基本信息和高级信息设置实体类 + */ + @Cacheable(value = RedisCahceKey.BASE_INFO_SET, key = "'BaseInfoSet'") + @Override + public BaseInfoSet queryBaseInfoSet() { + logger.debug("queryBaseInfoSet..."); + return segchkSystemSettingMapper.queryBaseInfoSet(); + } + + /** + * 编辑基本信息和高级信息 + * + * @param baseInfoSet 基本信息实体类 + * @param type 1 基本信息 0高级信息 + * @return -1编辑失败 1编辑成功 0编辑失败 + */ + @CacheEvict(value = RedisCahceKey.BASE_INFO_SET, allEntries = true) + @Override + public int editBaseInfoSet(BaseInfoSet baseInfoSet, int type) { + logger.debug("editBaseInfoSet and baseInfoSet:{}\r\n type:{}", baseInfoSet, type); + //非法参数 + if (!checkParam(type)) { + logger.error("editBaseInfoSet error due to type is illegal..."); + return -1; + } + baseInfoSet.dealPicUrl(); + //设置基本信息 + if (type == 1) { + logger.debug("editBaseInfoSet to editBaseInfoSetA and type:{}", type); + return segchkSystemSettingMapper.editBaseInfoSetA(baseInfoSet); + } + //设置高级信息 + if (type == 0) { + logger.debug("editBaseInfoSet to editBaseInfoSetB and type:{}", type); + return segchkSystemSettingMapper.editBaseInfoSetB(baseInfoSet); + } + return 0; + } + + /** + * 设置审核开关 + * + * @param storeSpuAudit 店铺商品审核开关 0 需要审核 1 不需要 默认0 + * @return 成功返回1,失败返回0 + */ + @CacheEvict(value = RedisCahceKey.BASE_INFO_SET, allEntries = true) + @Override + public int setAuditSwitch(String storeSpuAudit) { + logger.debug("setAuditSwitch and storeSpuAudit :{}", storeSpuAudit); + return segchkSystemSettingMapper.setAuditSwitch(storeSpuAudit); + } + + /** + * 设置会员价启用状态 + * + * @param memberPriceStatus 会员等级启用状态 0 启用 1 不启用 默认0 + * @return 成功返回1,失败返回0 + */ + @CacheEvict(value = RedisCahceKey.BASE_INFO_SET, allEntries = true) + @Override + public int setMemberPriceStatus(String memberPriceStatus) { + logger.debug("setMemberPriceStatus and memberPriceStatus :{}", memberPriceStatus); + return segchkSystemSettingMapper.setMemberPriceStatus(memberPriceStatus); + } + + @Override + public boolean isSkuNeedAudit() { + return queryBaseInfoSet().isSpuNeedAudit(); + } + + /** + * 校验参数是否为 0 或 1 + * + * @param type 参数 + * @return 正确true 错误 FALSE + */ + private boolean checkParam(int type) { + return type == 1 || type == 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserAccountServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserAccountServiceImpl.java new file mode 100644 index 0000000..595dbef --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserAccountServiceImpl.java @@ -0,0 +1,99 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserAccountMapper; +import com.ruoyi.segchk.domain.SegchkUserAccount; +import com.ruoyi.segchk.service.ISegchkUserAccountService; + +/** + * seg用户余额信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserAccountServiceImpl implements ISegchkUserAccountService +{ + @Autowired + private SegchkUserAccountMapper segchkUserAccountMapper; + + /** + * 查询seg用户余额信息 + * + * @param accountId seg用户余额信息主键 + * @return seg用户余额信息 + */ + @Override + public SegchkUserAccount selectSegchkUserAccountByAccountId(Long accountId) + { + return segchkUserAccountMapper.selectSegchkUserAccountByAccountId(accountId); + } + + /** + * 查询seg用户余额信息列表 + * + * @param segchkUserAccount seg用户余额信息 + * @return seg用户余额信息 + */ + @Override + public List selectSegchkUserAccountList(SegchkUserAccount segchkUserAccount) + { + return segchkUserAccountMapper.selectSegchkUserAccountList(segchkUserAccount); + } + + /** + * 新增seg用户余额信息 + * + * @param segchkUserAccount seg用户余额信息 + * @return 结果 + */ + @Override + public int insertSegchkUserAccount(SegchkUserAccount segchkUserAccount) + { + return segchkUserAccountMapper.insertSegchkUserAccount(segchkUserAccount); + } + + /** + * 修改seg用户余额信息 + * + * @param segchkUserAccount seg用户余额信息 + * @return 结果 + */ + @Override + public int updateSegchkUserAccount(SegchkUserAccount segchkUserAccount) + { + return segchkUserAccountMapper.updateSegchkUserAccount(segchkUserAccount); + } + + /** + * 批量删除seg用户余额信息 + * + * @param accountIds 需要删除的seg用户余额信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserAccountByAccountIds(Long[] accountIds) + { + return segchkUserAccountMapper.deleteSegchkUserAccountByAccountIds(accountIds); + } + + /** + * 删除seg用户余额信息信息 + * + * @param accountId seg用户余额信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserAccountByAccountId(Long accountId) + { + return segchkUserAccountMapper.deleteSegchkUserAccountByAccountId(accountId); + } + + @Override + public int insertSegchkUserAccountBuyCharge(SegchkUserAccount segchkUserAccount) { + return segchkUserAccountMapper.insertSegchkUserAccountBuyCharge(segchkUserAccount); + + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserBasicInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserBasicInfoServiceImpl.java new file mode 100644 index 0000000..bf52092 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserBasicInfoServiceImpl.java @@ -0,0 +1,130 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.ArrayList; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.segchk.domain.SegchkUserCertificationInfo; +import com.ruoyi.segchk.mapper.SegchkUserBasicInfoMapper; +import com.ruoyi.segchk.domain.SegchkUserBasicInfo; +import com.ruoyi.segchk.service.ISegchkUserBasicInfoService; + +/** + * seg用户基本信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserBasicInfoServiceImpl implements ISegchkUserBasicInfoService +{ + @Autowired + private SegchkUserBasicInfoMapper segchkUserBasicInfoMapper; + + /** + * 查询seg用户基本信息 + * + * @param userId seg用户基本信息主键 + * @return seg用户基本信息 + */ + @Override + public SegchkUserBasicInfo selectSegchkUserBasicInfoByUserId(Long userId) + { + return segchkUserBasicInfoMapper.selectSegchkUserBasicInfoByUserId(userId); + } + + /** + * 查询seg用户基本信息列表 + * + * @param segchkUserBasicInfo seg用户基本信息 + * @return seg用户基本信息 + */ + @Override + public List selectSegchkUserBasicInfoList(SegchkUserBasicInfo segchkUserBasicInfo) + { + return segchkUserBasicInfoMapper.selectSegchkUserBasicInfoList(segchkUserBasicInfo); + } + + /** + * 新增seg用户基本信息 + * + * @param segchkUserBasicInfo seg用户基本信息 + * @return 结果 + */ + @Transactional + @Override + public int insertSegchkUserBasicInfo(SegchkUserBasicInfo segchkUserBasicInfo) + { + int rows = segchkUserBasicInfoMapper.insertSegchkUserBasicInfo(segchkUserBasicInfo); + insertSegchkUserCertificationInfo(segchkUserBasicInfo); + return rows; + } + + /** + * 修改seg用户基本信息 + * + * @param segchkUserBasicInfo seg用户基本信息 + * @return 结果 + */ + @Transactional + @Override + public int updateSegchkUserBasicInfo(SegchkUserBasicInfo segchkUserBasicInfo) + { + segchkUserBasicInfoMapper.deleteSegchkUserCertificationInfoByUserId(segchkUserBasicInfo.getUserId()); + insertSegchkUserCertificationInfo(segchkUserBasicInfo); + return segchkUserBasicInfoMapper.updateSegchkUserBasicInfo(segchkUserBasicInfo); + } + + /** + * 批量删除seg用户基本信息 + * + * @param userIds 需要删除的seg用户基本信息主键 + * @return 结果 + */ + @Transactional + @Override + public int deleteSegchkUserBasicInfoByUserIds(Long[] userIds) + { + segchkUserBasicInfoMapper.deleteSegchkUserCertificationInfoByUserIds(userIds); + return segchkUserBasicInfoMapper.deleteSegchkUserBasicInfoByUserIds(userIds); + } + + /** + * 删除seg用户基本信息信息 + * + * @param userId seg用户基本信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserBasicInfoByUserId(Long userId) + { + segchkUserBasicInfoMapper.deleteSegchkUserCertificationInfoByUserId(userId); + return segchkUserBasicInfoMapper.deleteSegchkUserBasicInfoByUserId(userId); + } + + /** + * 新增seg用户实名认证信息信息 + * + * @param segchkUserBasicInfo seg用户基本信息对象 + */ + public void insertSegchkUserCertificationInfo(SegchkUserBasicInfo segchkUserBasicInfo) + { + List segchkUserCertificationInfoList = segchkUserBasicInfo.getSegchkUserCertificationInfoList(); + Long userId = segchkUserBasicInfo.getUserId(); + if (StringUtils.isNotNull(segchkUserCertificationInfoList)) + { + List list = new ArrayList(); + for (SegchkUserCertificationInfo segchkUserCertificationInfo : segchkUserCertificationInfoList) + { + segchkUserCertificationInfo.setUserId(userId); + list.add(segchkUserCertificationInfo); + } + if (list.size() > 0) + { + segchkUserBasicInfoMapper.batchSegchkUserCertificationInfo(list); + } + } + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCashServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCashServiceImpl.java new file mode 100644 index 0000000..b8abe77 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCashServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserCashMapper; +import com.ruoyi.segchk.domain.SegchkUserCash; +import com.ruoyi.segchk.service.ISegchkUserCashService; + +/** + * seg用户提现记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserCashServiceImpl implements ISegchkUserCashService +{ + @Autowired + private SegchkUserCashMapper segchkUserCashMapper; + + /** + * 查询seg用户提现记录 + * + * @param cashId seg用户提现记录主键 + * @return seg用户提现记录 + */ + @Override + public SegchkUserCash selectSegchkUserCashByCashId(Long cashId) + { + return segchkUserCashMapper.selectSegchkUserCashByCashId(cashId); + } + + /** + * 查询seg用户提现记录列表 + * + * @param segchkUserCash seg用户提现记录 + * @return seg用户提现记录 + */ + @Override + public List selectSegchkUserCashList(SegchkUserCash segchkUserCash) + { + return segchkUserCashMapper.selectSegchkUserCashList(segchkUserCash); + } + + /** + * 新增seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + @Override + public int insertSegchkUserCash(SegchkUserCash segchkUserCash) + { + return segchkUserCashMapper.insertSegchkUserCash(segchkUserCash); + } + + /** + * 修改seg用户提现记录 + * + * @param segchkUserCash seg用户提现记录 + * @return 结果 + */ + @Override + public int updateSegchkUserCash(SegchkUserCash segchkUserCash) + { + return segchkUserCashMapper.updateSegchkUserCash(segchkUserCash); + } + + /** + * 批量删除seg用户提现记录 + * + * @param cashIds 需要删除的seg用户提现记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCashByCashIds(Long[] cashIds) + { + return segchkUserCashMapper.deleteSegchkUserCashByCashIds(cashIds); + } + + /** + * 删除seg用户提现记录信息 + * + * @param cashId seg用户提现记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCashByCashId(Long cashId) + { + return segchkUserCashMapper.deleteSegchkUserCashByCashId(cashId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCertificationInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCertificationInfoServiceImpl.java new file mode 100644 index 0000000..8b17401 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCertificationInfoServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserCertificationInfoMapper; +import com.ruoyi.segchk.domain.SegchkUserCertificationInfo; +import com.ruoyi.segchk.service.ISegchkUserCertificationInfoService; + +/** + * seg用户实名认证信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserCertificationInfoServiceImpl implements ISegchkUserCertificationInfoService +{ + @Autowired + private SegchkUserCertificationInfoMapper segchkUserCertificationInfoMapper; + + /** + * 查询seg用户实名认证信息 + * + * @param usercardId seg用户实名认证信息主键 + * @return seg用户实名认证信息 + */ + @Override + public SegchkUserCertificationInfo selectSegchkUserCertificationInfoByUsercardId(Long usercardId) + { + return segchkUserCertificationInfoMapper.selectSegchkUserCertificationInfoByUsercardId(usercardId); + } + + /** + * 查询seg用户实名认证信息列表 + * + * @param segchkUserCertificationInfo seg用户实名认证信息 + * @return seg用户实名认证信息 + */ + @Override + public List selectSegchkUserCertificationInfoList(SegchkUserCertificationInfo segchkUserCertificationInfo) + { + return segchkUserCertificationInfoMapper.selectSegchkUserCertificationInfoList(segchkUserCertificationInfo); + } + + /** + * 新增seg用户实名认证信息 + * + * @param segchkUserCertificationInfo seg用户实名认证信息 + * @return 结果 + */ + @Override + public int insertSegchkUserCertificationInfo(SegchkUserCertificationInfo segchkUserCertificationInfo) + { + return segchkUserCertificationInfoMapper.insertSegchkUserCertificationInfo(segchkUserCertificationInfo); + } + + /** + * 修改seg用户实名认证信息 + * + * @param segchkUserCertificationInfo seg用户实名认证信息 + * @return 结果 + */ + @Override + public int updateSegchkUserCertificationInfo(SegchkUserCertificationInfo segchkUserCertificationInfo) + { + return segchkUserCertificationInfoMapper.updateSegchkUserCertificationInfo(segchkUserCertificationInfo); + } + + /** + * 批量删除seg用户实名认证信息 + * + * @param usercardIds 需要删除的seg用户实名认证信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCertificationInfoByUsercardIds(Long[] usercardIds) + { + return segchkUserCertificationInfoMapper.deleteSegchkUserCertificationInfoByUsercardIds(usercardIds); + } + + /** + * 删除seg用户实名认证信息信息 + * + * @param usercardId seg用户实名认证信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCertificationInfoByUsercardId(Long usercardId) + { + return segchkUserCertificationInfoMapper.deleteSegchkUserCertificationInfoByUsercardId(usercardId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserChargeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserChargeServiceImpl.java new file mode 100644 index 0000000..7db2727 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserChargeServiceImpl.java @@ -0,0 +1,97 @@ +package com.ruoyi.segchk.service.impl; + +import java.math.BigDecimal; +import java.util.List; + +import com.ruoyi.segchk.domain.SegchkUserAccount; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserChargeMapper; +import com.ruoyi.segchk.domain.SegchkUserCharge; +import com.ruoyi.segchk.service.ISegchkUserChargeService; + +/** + * seg用户充值记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserChargeServiceImpl implements ISegchkUserChargeService +{ + @Autowired + private SegchkUserChargeMapper segchkUserChargeMapper; + + /** + * 查询seg用户充值记录 + * + * @param chargeId seg用户充值记录主键 + * @return seg用户充值记录 + */ + @Override + public SegchkUserCharge selectSegchkUserChargeByChargeId(Long chargeId) + { + return segchkUserChargeMapper.selectSegchkUserChargeByChargeId(chargeId); + } + + /** + * 查询seg用户充值记录列表 + * + * @param segchkUserCharge seg用户充值记录 + * @return seg用户充值记录 + */ + @Override + public List selectSegchkUserChargeList(SegchkUserCharge segchkUserCharge) + { + return segchkUserChargeMapper.selectSegchkUserChargeList(segchkUserCharge); + } + + /** + * 新增seg用户充值记录 + * + * @param segchkUserCharge seg用户充值记录 + * @return 结果 + */ + @Override + public int insertSegchkUserCharge(SegchkUserCharge segchkUserCharge) + { + return segchkUserChargeMapper.insertSegchkUserCharge(segchkUserCharge); + } + + /** + * 修改seg用户充值记录 + * + * @param segchkUserCharge seg用户充值记录 + * @return 结果 + */ + @Override + public int updateSegchkUserCharge(SegchkUserCharge segchkUserCharge) + { + return segchkUserChargeMapper.updateSegchkUserCharge(segchkUserCharge); + } + + /** + * 批量删除seg用户充值记录 + * + * @param chargeIds 需要删除的seg用户充值记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserChargeByChargeIds(Long[] chargeIds) + { + return segchkUserChargeMapper.deleteSegchkUserChargeByChargeIds(chargeIds); + } + + /** + * 删除seg用户充值记录信息 + * + * @param chargeId seg用户充值记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserChargeByChargeId(Long chargeId) + { + return segchkUserChargeMapper.deleteSegchkUserChargeByChargeId(chargeId); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCollectServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCollectServiceImpl.java new file mode 100644 index 0000000..e1b387a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserCollectServiceImpl.java @@ -0,0 +1,108 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.Arrays; +import java.util.List; + +import com.ruoyi.common.core.text.Convert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserCollectMapper; +import com.ruoyi.segchk.domain.SegchkUserCollect; +import com.ruoyi.segchk.service.ISegchkUserCollectService; + +/** + * seg用户收藏记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserCollectServiceImpl implements ISegchkUserCollectService +{ + @Autowired + private SegchkUserCollectMapper segchkUserCollectMapper; + + /** + * 查询seg用户收藏记录 + * + * @param collectId seg用户收藏记录主键 + * @return seg用户收藏记录 + */ + @Override + public SegchkUserCollect selectSegchkUserCollectByCollectId(Long collectId) + { + return segchkUserCollectMapper.selectSegchkUserCollectByCollectId(collectId); + } + + /** + * 查询seg用户收藏记录列表 + * + * @param segchkUserCollect seg用户收藏记录 + * @return seg用户收藏记录 + */ + @Override + public List selectSegchkUserCollectList(SegchkUserCollect segchkUserCollect) + { + return segchkUserCollectMapper.selectSegchkUserCollectList(segchkUserCollect); + } + + /** + * 新增seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + @Override + public int insertSegchkUserCollect(SegchkUserCollect segchkUserCollect) + { + return segchkUserCollectMapper.insertSegchkUserCollect(segchkUserCollect); + } + + /** + * 修改seg用户收藏记录 + * + * @param segchkUserCollect seg用户收藏记录 + * @return 结果 + */ + @Override + public int updateSegchkUserCollect(SegchkUserCollect segchkUserCollect) + { + return segchkUserCollectMapper.updateSegchkUserCollect(segchkUserCollect); + } + + /** + * 批量删除seg用户收藏记录 + * + * @param collectIds 需要删除的seg用户收藏记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCollectByCollectIds(Long[] collectIds) + { + return segchkUserCollectMapper.deleteSegchkUserCollectByCollectIds(collectIds); + } + + /** + * 删除seg用户收藏记录信息 + * + * @param collectId seg用户收藏记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserCollectByCollectId(Long collectId) + { + return segchkUserCollectMapper.deleteSegchkUserCollectByCollectId(collectId); + } + + /** + * 删除seg用户收藏记录对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteSegchkUserCollectByIds(String ids) + { + return segchkUserCollectMapper.deleteSegchkUserCollectByCollectIds(Convert.toLongArray(ids)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserExtInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserExtInfoServiceImpl.java new file mode 100644 index 0000000..1f9a3c8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserExtInfoServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserExtInfoMapper; +import com.ruoyi.segchk.domain.SegchkUserExtInfo; +import com.ruoyi.segchk.service.ISegchkUserExtInfoService; + +/** + * seg用户扩展信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserExtInfoServiceImpl implements ISegchkUserExtInfoService +{ + @Autowired + private SegchkUserExtInfoMapper segchkUserExtInfoMapper; + + /** + * 查询seg用户扩展信息 + * + * @param userId seg用户扩展信息主键 + * @return seg用户扩展信息 + */ + @Override + public SegchkUserExtInfo selectSegchkUserExtInfoByUserId(Long userId) + { + return segchkUserExtInfoMapper.selectSegchkUserExtInfoByUserId(userId); + } + + /** + * 查询seg用户扩展信息列表 + * + * @param segchkUserExtInfo seg用户扩展信息 + * @return seg用户扩展信息 + */ + @Override + public List selectSegchkUserExtInfoList(SegchkUserExtInfo segchkUserExtInfo) + { + return segchkUserExtInfoMapper.selectSegchkUserExtInfoList(segchkUserExtInfo); + } + + /** + * 新增seg用户扩展信息 + * + * @param segchkUserExtInfo seg用户扩展信息 + * @return 结果 + */ + @Override + public int insertSegchkUserExtInfo(SegchkUserExtInfo segchkUserExtInfo) + { + return segchkUserExtInfoMapper.insertSegchkUserExtInfo(segchkUserExtInfo); + } + + /** + * 修改seg用户扩展信息 + * + * @param segchkUserExtInfo seg用户扩展信息 + * @return 结果 + */ + @Override + public int updateSegchkUserExtInfo(SegchkUserExtInfo segchkUserExtInfo) + { + return segchkUserExtInfoMapper.updateSegchkUserExtInfo(segchkUserExtInfo); + } + + /** + * 批量删除seg用户扩展信息 + * + * @param userIds 需要删除的seg用户扩展信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserExtInfoByUserIds(Long[] userIds) + { + return segchkUserExtInfoMapper.deleteSegchkUserExtInfoByUserIds(userIds); + } + + /** + * 删除seg用户扩展信息信息 + * + * @param userId seg用户扩展信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserExtInfoByUserId(Long userId) + { + return segchkUserExtInfoMapper.deleteSegchkUserExtInfoByUserId(userId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserLikegoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserLikegoServiceImpl.java new file mode 100644 index 0000000..334a0b2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserLikegoServiceImpl.java @@ -0,0 +1,95 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserLikegoMapper; +import com.ruoyi.segchk.domain.SegchkUserLikego; +import com.ruoyi.segchk.service.ISegchkUserLikegoService; + +/** + * seg用户想去记录Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserLikegoServiceImpl implements ISegchkUserLikegoService +{ + @Autowired + private SegchkUserLikegoMapper segchkUserLikegoMapper; + + /** + * 查询seg用户想去记录 + * + * @param likegoId seg用户想去记录主键 + * @return seg用户想去记录 + */ + @Override + public SegchkUserLikego selectSegchkUserLikegoByLikegoId(Long likegoId) + { + return segchkUserLikegoMapper.selectSegchkUserLikegoByLikegoId(likegoId); + } + + /** + * 查询seg用户想去记录列表 + * + * @param segchkUserLikego seg用户想去记录 + * @return seg用户想去记录 + */ + @Override + public List selectSegchkUserLikegoList(SegchkUserLikego segchkUserLikego) + { + return segchkUserLikegoMapper.selectSegchkUserLikegoList(segchkUserLikego); + } + + /** + * 新增seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + @Override + public int insertSegchkUserLikego(SegchkUserLikego segchkUserLikego) + { + // 此处根据用户id,卡id,卡类型,卡标签,商户id,及运营商id,生成预约二维码 + segchkUserLikego.setQrCode(String.format("qrcode-%s-%s-%s-%s-%s", segchkUserLikego.getProviderId(), segchkUserLikego.getStoreId(), segchkUserLikego.getUserId(), segchkUserLikego.getCardId(), segchkUserLikego.getCardType())); + return segchkUserLikegoMapper.insertSegchkUserLikego(segchkUserLikego); + } + + /** + * 修改seg用户想去记录 + * + * @param segchkUserLikego seg用户想去记录 + * @return 结果 + */ + @Override + public int updateSegchkUserLikego(SegchkUserLikego segchkUserLikego) + { + return segchkUserLikegoMapper.updateSegchkUserLikego(segchkUserLikego); + } + + /** + * 批量删除seg用户想去记录 + * + * @param likegoIds 需要删除的seg用户想去记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserLikegoByLikegoIds(Long[] likegoIds) + { + return segchkUserLikegoMapper.deleteSegchkUserLikegoByLikegoIds(likegoIds); + } + + /** + * 删除seg用户想去记录信息 + * + * @param likegoId seg用户想去记录主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserLikegoByLikegoId(Long likegoId) + { + return segchkUserLikegoMapper.deleteSegchkUserLikegoByLikegoId(likegoId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserRewardCtlServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserRewardCtlServiceImpl.java new file mode 100644 index 0000000..e3dd126 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserRewardCtlServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserRewardCtlMapper; +import com.ruoyi.segchk.domain.SegchkUserRewardCtl; +import com.ruoyi.segchk.service.ISegchkUserRewardCtlService; + +/** + * seg会员推荐控制Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserRewardCtlServiceImpl implements ISegchkUserRewardCtlService +{ + @Autowired + private SegchkUserRewardCtlMapper segchkUserRewardCtlMapper; + + /** + * 查询seg会员推荐控制 + * + * @param rewardCtlId seg会员推荐控制主键 + * @return seg会员推荐控制 + */ + @Override + public SegchkUserRewardCtl selectSegchkUserRewardCtlByRewardCtlId(Integer rewardCtlId) + { + return segchkUserRewardCtlMapper.selectSegchkUserRewardCtlByRewardCtlId(rewardCtlId); + } + + /** + * 查询seg会员推荐控制列表 + * + * @param segchkUserRewardCtl seg会员推荐控制 + * @return seg会员推荐控制 + */ + @Override + public List selectSegchkUserRewardCtlList(SegchkUserRewardCtl segchkUserRewardCtl) + { + return segchkUserRewardCtlMapper.selectSegchkUserRewardCtlList(segchkUserRewardCtl); + } + + /** + * 新增seg会员推荐控制 + * + * @param segchkUserRewardCtl seg会员推荐控制 + * @return 结果 + */ + @Override + public int insertSegchkUserRewardCtl(SegchkUserRewardCtl segchkUserRewardCtl) + { + return segchkUserRewardCtlMapper.insertSegchkUserRewardCtl(segchkUserRewardCtl); + } + + /** + * 修改seg会员推荐控制 + * + * @param segchkUserRewardCtl seg会员推荐控制 + * @return 结果 + */ + @Override + public int updateSegchkUserRewardCtl(SegchkUserRewardCtl segchkUserRewardCtl) + { + return segchkUserRewardCtlMapper.updateSegchkUserRewardCtl(segchkUserRewardCtl); + } + + /** + * 批量删除seg会员推荐控制 + * + * @param rewardCtlIds 需要删除的seg会员推荐控制主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserRewardCtlByRewardCtlIds(Integer[] rewardCtlIds) + { + return segchkUserRewardCtlMapper.deleteSegchkUserRewardCtlByRewardCtlIds(rewardCtlIds); + } + + /** + * 删除seg会员推荐控制信息 + * + * @param rewardCtlId seg会员推荐控制主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserRewardCtlByRewardCtlId(Integer rewardCtlId) + { + return segchkUserRewardCtlMapper.deleteSegchkUserRewardCtlByRewardCtlId(rewardCtlId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserRewardServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserRewardServiceImpl.java new file mode 100644 index 0000000..5b956cc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserRewardServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserRewardMapper; +import com.ruoyi.segchk.domain.SegchkUserReward; +import com.ruoyi.segchk.service.ISegchkUserRewardService; + +/** + * seg用户奖励Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserRewardServiceImpl implements ISegchkUserRewardService +{ + @Autowired + private SegchkUserRewardMapper segchkUserRewardMapper; + + /** + * 查询seg用户奖励 + * + * @param rewardId seg用户奖励主键 + * @return seg用户奖励 + */ + @Override + public SegchkUserReward selectSegchkUserRewardByRewardId(Long rewardId) + { + return segchkUserRewardMapper.selectSegchkUserRewardByRewardId(rewardId); + } + + /** + * 查询seg用户奖励列表 + * + * @param segchkUserReward seg用户奖励 + * @return seg用户奖励 + */ + @Override + public List selectSegchkUserRewardList(SegchkUserReward segchkUserReward) + { + return segchkUserRewardMapper.selectSegchkUserRewardList(segchkUserReward); + } + + /** + * 新增seg用户奖励 + * + * @param segchkUserReward seg用户奖励 + * @return 结果 + */ + @Override + public int insertSegchkUserReward(SegchkUserReward segchkUserReward) + { + return segchkUserRewardMapper.insertSegchkUserReward(segchkUserReward); + } + + /** + * 修改seg用户奖励 + * + * @param segchkUserReward seg用户奖励 + * @return 结果 + */ + @Override + public int updateSegchkUserReward(SegchkUserReward segchkUserReward) + { + return segchkUserRewardMapper.updateSegchkUserReward(segchkUserReward); + } + + /** + * 批量删除seg用户奖励 + * + * @param rewardIds 需要删除的seg用户奖励主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserRewardByRewardIds(Long[] rewardIds) + { + return segchkUserRewardMapper.deleteSegchkUserRewardByRewardIds(rewardIds); + } + + /** + * 删除seg用户奖励信息 + * + * @param rewardId seg用户奖励主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserRewardByRewardId(Long rewardId) + { + return segchkUserRewardMapper.deleteSegchkUserRewardByRewardId(rewardId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserSecurityServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserSecurityServiceImpl.java new file mode 100644 index 0000000..9465ad4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserSecurityServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserSecurityMapper; +import com.ruoyi.segchk.domain.SegchkUserSecurity; +import com.ruoyi.segchk.service.ISegchkUserSecurityService; + +/** + * seg用户密码Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserSecurityServiceImpl implements ISegchkUserSecurityService +{ + @Autowired + private SegchkUserSecurityMapper segchkUserSecurityMapper; + + /** + * 查询seg用户密码 + * + * @param pwdId seg用户密码主键 + * @return seg用户密码 + */ + @Override + public SegchkUserSecurity selectSegchkUserSecurityByPwdId(Long pwdId) + { + return segchkUserSecurityMapper.selectSegchkUserSecurityByPwdId(pwdId); + } + + /** + * 查询seg用户密码列表 + * + * @param segchkUserSecurity seg用户密码 + * @return seg用户密码 + */ + @Override + public List selectSegchkUserSecurityList(SegchkUserSecurity segchkUserSecurity) + { + return segchkUserSecurityMapper.selectSegchkUserSecurityList(segchkUserSecurity); + } + + /** + * 新增seg用户密码 + * + * @param segchkUserSecurity seg用户密码 + * @return 结果 + */ + @Override + public int insertSegchkUserSecurity(SegchkUserSecurity segchkUserSecurity) + { + return segchkUserSecurityMapper.insertSegchkUserSecurity(segchkUserSecurity); + } + + /** + * 修改seg用户密码 + * + * @param segchkUserSecurity seg用户密码 + * @return 结果 + */ + @Override + public int updateSegchkUserSecurity(SegchkUserSecurity segchkUserSecurity) + { + return segchkUserSecurityMapper.updateSegchkUserSecurity(segchkUserSecurity); + } + + /** + * 批量删除seg用户密码 + * + * @param pwdIds 需要删除的seg用户密码主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserSecurityByPwdIds(Long[] pwdIds) + { + return segchkUserSecurityMapper.deleteSegchkUserSecurityByPwdIds(pwdIds); + } + + /** + * 删除seg用户密码信息 + * + * @param pwdId seg用户密码主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserSecurityByPwdId(Long pwdId) + { + return segchkUserSecurityMapper.deleteSegchkUserSecurityByPwdId(pwdId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserVipServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserVipServiceImpl.java new file mode 100644 index 0000000..f10aed1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserVipServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserVipMapper; +import com.ruoyi.segchk.domain.SegchkUserVip; +import com.ruoyi.segchk.service.ISegchkUserVipService; + +/** + * seg会员卡Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserVipServiceImpl implements ISegchkUserVipService +{ + @Autowired + private SegchkUserVipMapper segchkUserVipMapper; + + /** + * 查询seg会员卡 + * + * @param cardId seg会员卡主键 + * @return seg会员卡 + */ + @Override + public SegchkUserVip selectSegchkUserVipByCardId(Long cardId) + { + return segchkUserVipMapper.selectSegchkUserVipByCardId(cardId); + } + + /** + * 查询seg会员卡列表 + * + * @param segchkUserVip seg会员卡 + * @return seg会员卡 + */ + @Override + public List selectSegchkUserVipList(SegchkUserVip segchkUserVip) + { + return segchkUserVipMapper.selectSegchkUserVipList(segchkUserVip); + } + + /** + * 新增seg会员卡 + * + * @param segchkUserVip seg会员卡 + * @return 结果 + */ + @Override + public int insertSegchkUserVip(SegchkUserVip segchkUserVip) + { + return segchkUserVipMapper.insertSegchkUserVip(segchkUserVip); + } + + /** + * 修改seg会员卡 + * + * @param segchkUserVip seg会员卡 + * @return 结果 + */ + @Override + public int updateSegchkUserVip(SegchkUserVip segchkUserVip) + { + return segchkUserVipMapper.updateSegchkUserVip(segchkUserVip); + } + + /** + * 批量删除seg会员卡 + * + * @param cardIds 需要删除的seg会员卡主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserVipByCardIds(Long[] cardIds) + { + return segchkUserVipMapper.deleteSegchkUserVipByCardIds(cardIds); + } + + /** + * 删除seg会员卡信息 + * + * @param cardId seg会员卡主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserVipByCardId(Long cardId) + { + return segchkUserVipMapper.deleteSegchkUserVipByCardId(cardId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserWechatServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserWechatServiceImpl.java new file mode 100644 index 0000000..1761246 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkUserWechatServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkUserWechatMapper; +import com.ruoyi.segchk.domain.SegchkUserWechat; +import com.ruoyi.segchk.service.ISegchkUserWechatService; + +/** + * seg用户微信信息Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkUserWechatServiceImpl implements ISegchkUserWechatService +{ + @Autowired + private SegchkUserWechatMapper segchkUserWechatMapper; + + /** + * 查询seg用户微信信息 + * + * @param userId seg用户微信信息主键 + * @return seg用户微信信息 + */ + @Override + public SegchkUserWechat selectSegchkUserWechatByUserId(Long userId) + { + return segchkUserWechatMapper.selectSegchkUserWechatByUserId(userId); + } + + /** + * 查询seg用户微信信息列表 + * + * @param segchkUserWechat seg用户微信信息 + * @return seg用户微信信息 + */ + @Override + public List selectSegchkUserWechatList(SegchkUserWechat segchkUserWechat) + { + return segchkUserWechatMapper.selectSegchkUserWechatList(segchkUserWechat); + } + + /** + * 新增seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + @Override + public int insertSegchkUserWechat(SegchkUserWechat segchkUserWechat) + { + return segchkUserWechatMapper.insertSegchkUserWechat(segchkUserWechat); + } + + /** + * 修改seg用户微信信息 + * + * @param segchkUserWechat seg用户微信信息 + * @return 结果 + */ + @Override + public int updateSegchkUserWechat(SegchkUserWechat segchkUserWechat) + { + return segchkUserWechatMapper.updateSegchkUserWechat(segchkUserWechat); + } + + /** + * 批量删除seg用户微信信息 + * + * @param userIds 需要删除的seg用户微信信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserWechatByUserIds(Long[] userIds) + { + return segchkUserWechatMapper.deleteSegchkUserWechatByUserIds(userIds); + } + + /** + * 删除seg用户微信信息信息 + * + * @param userId seg用户微信信息主键 + * @return 结果 + */ + @Override + public int deleteSegchkUserWechatByUserId(Long userId) + { + return segchkUserWechatMapper.deleteSegchkUserWechatByUserId(userId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkVipSetInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkVipSetInfoServiceImpl.java new file mode 100644 index 0000000..20c87c5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/segchk/service/impl/SegchkVipSetInfoServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.segchk.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.segchk.mapper.SegchkVipSetInfoMapper; +import com.ruoyi.segchk.domain.SegchkVipSetInfo; +import com.ruoyi.segchk.service.ISegchkVipSetInfoService; + +/** + * seg会员卡设置Service业务层处理 + * + * @author yinzhiying + * @date 2021-08-23 + */ +@Service +public class SegchkVipSetInfoServiceImpl implements ISegchkVipSetInfoService +{ + @Autowired + private SegchkVipSetInfoMapper segchkVipSetInfoMapper; + + /** + * 查询seg会员卡设置 + * + * @param modeId seg会员卡设置主键 + * @return seg会员卡设置 + */ + @Override + public SegchkVipSetInfo selectSegchkVipSetInfoByModeId(Integer modeId) + { + return segchkVipSetInfoMapper.selectSegchkVipSetInfoByModeId(modeId); + } + + /** + * 查询seg会员卡设置列表 + * + * @param segchkVipSetInfo seg会员卡设置 + * @return seg会员卡设置 + */ + @Override + public List selectSegchkVipSetInfoList(SegchkVipSetInfo segchkVipSetInfo) + { + return segchkVipSetInfoMapper.selectSegchkVipSetInfoList(segchkVipSetInfo); + } + + /** + * 新增seg会员卡设置 + * + * @param segchkVipSetInfo seg会员卡设置 + * @return 结果 + */ + @Override + public int insertSegchkVipSetInfo(SegchkVipSetInfo segchkVipSetInfo) + { + return segchkVipSetInfoMapper.insertSegchkVipSetInfo(segchkVipSetInfo); + } + + /** + * 修改seg会员卡设置 + * + * @param segchkVipSetInfo seg会员卡设置 + * @return 结果 + */ + @Override + public int updateSegchkVipSetInfo(SegchkVipSetInfo segchkVipSetInfo) + { + return segchkVipSetInfoMapper.updateSegchkVipSetInfo(segchkVipSetInfo); + } + + /** + * 批量删除seg会员卡设置 + * + * @param modeIds 需要删除的seg会员卡设置主键 + * @return 结果 + */ + @Override + public int deleteSegchkVipSetInfoByModeIds(Integer[] modeIds) + { + return segchkVipSetInfoMapper.deleteSegchkVipSetInfoByModeIds(modeIds); + } + + /** + * 删除seg会员卡设置信息 + * + * @param modeId seg会员卡设置主键 + * @return 结果 + */ + @Override + public int deleteSegchkVipSetInfoByModeId(Integer modeId) + { + return segchkVipSetInfoMapper.deleteSegchkVipSetInfoByModeId(modeId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java new file mode 100644 index 0000000..c54678c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -0,0 +1,111 @@ +package com.ruoyi.system.domain; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 参数配置表 sys_config + * + * @author ruoyi + */ +public class SysConfig extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 参数主键 */ + @Excel(name = "参数主键", cellType = ColumnType.NUMERIC) + private Long configId; + + /** 参数名称 */ + @Excel(name = "参数名称") + private String configName; + + /** 参数键名 */ + @Excel(name = "参数键名") + private String configKey; + + /** 参数键值 */ + @Excel(name = "参数键值") + private String configValue; + + /** 系统内置(Y是 N否) */ + @Excel(name = "系统内置", readConverterExp = "Y=是,N=否") + private String configType; + + public Long getConfigId() + { + return configId; + } + + public void setConfigId(Long configId) + { + this.configId = configId; + } + + @NotBlank(message = "参数名称不能为空") + @Size(min = 0, max = 100, message = "参数名称不能超过100个字符") + public String getConfigName() + { + return configName; + } + + public void setConfigName(String configName) + { + this.configName = configName; + } + + @NotBlank(message = "参数键名长度不能为空") + @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符") + public String getConfigKey() + { + return configKey; + } + + public void setConfigKey(String configKey) + { + this.configKey = configKey; + } + + @NotBlank(message = "参数键值不能为空") + @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符") + public String getConfigValue() + { + return configValue; + } + + public void setConfigValue(String configValue) + { + this.configValue = configValue; + } + + public String getConfigType() + { + return configType; + } + + public void setConfigType(String configType) + { + this.configType = configType; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("configId", getConfigId()) + .append("configName", getConfigName()) + .append("configKey", getConfigKey()) + .append("configValue", getConfigValue()) + .append("configType", getConfigType()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java new file mode 100644 index 0000000..7fdea30 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java @@ -0,0 +1,144 @@ +package com.ruoyi.system.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 系统访问记录表 sys_logininfor + * + * @author ruoyi + */ +public class SysLogininfor extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + @Excel(name = "序号", cellType = ColumnType.NUMERIC) + private Long infoId; + + /** 用户账号 */ + @Excel(name = "用户账号") + private String userName; + + /** 登录状态 0成功 1失败 */ + @Excel(name = "登录状态", readConverterExp = "0=成功,1=失败") + private String status; + + /** 登录IP地址 */ + @Excel(name = "登录地址") + private String ipaddr; + + /** 登录地点 */ + @Excel(name = "登录地点") + private String loginLocation; + + /** 浏览器类型 */ + @Excel(name = "浏览器") + private String browser; + + /** 操作系统 */ + @Excel(name = "操作系统") + private String os; + + /** 提示消息 */ + @Excel(name = "提示消息") + private String msg; + + /** 访问时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date loginTime; + + public Long getInfoId() + { + return infoId; + } + + public void setInfoId(Long infoId) + { + this.infoId = infoId; + } + + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } + + public Date getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Date loginTime) + { + this.loginTime = loginTime; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java new file mode 100644 index 0000000..b43abea --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -0,0 +1,100 @@ +package com.ruoyi.system.domain; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 通知公告表 sys_notice + * + * @author ruoyi + */ +public class SysNotice extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 公告ID */ + private Long noticeId; + + /** 公告标题 */ + private String noticeTitle; + + /** 公告类型(1通知 2公告) */ + private String noticeType; + + /** 公告内容 */ + private String noticeContent; + + /** 公告状态(0正常 1关闭) */ + private String status; + + public Long getNoticeId() + { + return noticeId; + } + + public void setNoticeId(Long noticeId) + { + this.noticeId = noticeId; + } + + public void setNoticeTitle(String noticeTitle) + { + this.noticeTitle = noticeTitle; + } + + @NotBlank(message = "公告标题不能为空") + @Size(min = 0, max = 50, message = "公告标题不能超过50个字符") + public String getNoticeTitle() + { + return noticeTitle; + } + + public void setNoticeType(String noticeType) + { + this.noticeType = noticeType; + } + + public String getNoticeType() + { + return noticeType; + } + + public void setNoticeContent(String noticeContent) + { + this.noticeContent = noticeContent; + } + + public String getNoticeContent() + { + return noticeContent; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("noticeId", getNoticeId()) + .append("noticeTitle", getNoticeTitle()) + .append("noticeType", getNoticeType()) + .append("noticeContent", getNoticeContent()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java new file mode 100644 index 0000000..175ee03 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java @@ -0,0 +1,255 @@ +package com.ruoyi.system.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 操作日志记录表 oper_log + * + * @author ruoyi + */ +public class SysOperLog extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 日志主键 */ + @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) + private Long operId; + + /** 操作模块 */ + @Excel(name = "操作模块") + private String title; + + /** 业务类型(0其它 1新增 2修改 3删除) */ + @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") + private Integer businessType; + + /** 业务类型数组 */ + private Integer[] businessTypes; + + /** 请求方法 */ + @Excel(name = "请求方法") + private String method; + + /** 请求方式 */ + @Excel(name = "请求方式") + private String requestMethod; + + /** 操作类别(0其它 1后台用户 2手机端用户) */ + @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") + private Integer operatorType; + + /** 操作人员 */ + @Excel(name = "操作人员") + private String operName; + + /** 部门名称 */ + @Excel(name = "部门名称") + private String deptName; + + /** 请求url */ + @Excel(name = "请求地址") + private String operUrl; + + /** 操作地址 */ + @Excel(name = "操作地址") + private String operIp; + + /** 操作地点 */ + @Excel(name = "操作地点") + private String operLocation; + + /** 请求参数 */ + @Excel(name = "请求参数") + private String operParam; + + /** 返回参数 */ + @Excel(name = "返回参数") + private String jsonResult; + + /** 操作状态(0正常 1异常) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=异常") + private Integer status; + + /** 错误消息 */ + @Excel(name = "错误消息") + private String errorMsg; + + /** 操作时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date operTime; + + public Long getOperId() + { + return operId; + } + + public void setOperId(Long operId) + { + this.operId = operId; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public Integer getBusinessType() + { + return businessType; + } + + public void setBusinessType(Integer businessType) + { + this.businessType = businessType; + } + + public Integer[] getBusinessTypes() + { + return businessTypes; + } + + public void setBusinessTypes(Integer[] businessTypes) + { + this.businessTypes = businessTypes; + } + + public String getMethod() + { + return method; + } + + public void setMethod(String method) + { + this.method = method; + } + + public String getRequestMethod() + { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) + { + this.requestMethod = requestMethod; + } + + public Integer getOperatorType() + { + return operatorType; + } + + public void setOperatorType(Integer operatorType) + { + this.operatorType = operatorType; + } + + public String getOperName() + { + return operName; + } + + public void setOperName(String operName) + { + this.operName = operName; + } + + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + public String getOperUrl() + { + return operUrl; + } + + public void setOperUrl(String operUrl) + { + this.operUrl = operUrl; + } + + public String getOperIp() + { + return operIp; + } + + public void setOperIp(String operIp) + { + this.operIp = operIp; + } + + public String getOperLocation() + { + return operLocation; + } + + public void setOperLocation(String operLocation) + { + this.operLocation = operLocation; + } + + public String getOperParam() + { + return operParam; + } + + public void setOperParam(String operParam) + { + this.operParam = operParam; + } + + public String getJsonResult() + { + return jsonResult; + } + + public void setJsonResult(String jsonResult) + { + this.jsonResult = jsonResult; + } + + public Integer getStatus() + { + return status; + } + + public void setStatus(Integer status) + { + this.status = status; + } + + public String getErrorMsg() + { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) + { + this.errorMsg = errorMsg; + } + + public Date getOperTime() + { + return operTime; + } + + public void setOperTime(Date operTime) + { + this.operTime = operTime; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java new file mode 100644 index 0000000..1f1fcf4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java @@ -0,0 +1,123 @@ +package com.ruoyi.system.domain; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 岗位表 sys_post + * + * @author ruoyi + */ +public class SysPost extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 岗位序号 */ + @Excel(name = "岗位序号", cellType = ColumnType.NUMERIC) + private Long postId; + + /** 岗位编码 */ + @Excel(name = "岗位编码") + private String postCode; + + /** 岗位名称 */ + @Excel(name = "岗位名称") + private String postName; + + /** 岗位排序 */ + @Excel(name = "岗位排序") + private String postSort; + + /** 状态(0正常 1停用) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** 用户是否存在此岗位标识 默认不存在 */ + private boolean flag = false; + + public Long getPostId() + { + return postId; + } + + public void setPostId(Long postId) + { + this.postId = postId; + } + + @NotBlank(message = "岗位编码不能为空") + @Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符") + public String getPostCode() + { + return postCode; + } + + public void setPostCode(String postCode) + { + this.postCode = postCode; + } + + @NotBlank(message = "岗位名称不能为空") + @Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符") + public String getPostName() + { + return postName; + } + + public void setPostName(String postName) + { + this.postName = postName; + } + + @NotBlank(message = "显示顺序不能为空") + public String getPostSort() + { + return postSort; + } + + public void setPostSort(String postSort) + { + this.postSort = postSort; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public boolean isFlag() + { + return flag; + } + + public void setFlag(boolean flag) + { + this.flag = flag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("postId", getPostId()) + .append("postCode", getPostCode()) + .append("postName", getPostName()) + .append("postSort", getPostSort()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java new file mode 100644 index 0000000..47b21bf --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 角色和部门关联 sys_role_dept + * + * @author ruoyi + */ +public class SysRoleDept +{ + /** 角色ID */ + private Long roleId; + + /** 部门ID */ + private Long deptId; + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("deptId", getDeptId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java new file mode 100644 index 0000000..de10a74 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 角色和菜单关联 sys_role_menu + * + * @author ruoyi + */ +public class SysRoleMenu +{ + /** 角色ID */ + private Long roleId; + + /** 菜单ID */ + private Long menuId; + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("menuId", getMenuId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java new file mode 100644 index 0000000..2bbd318 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java @@ -0,0 +1,113 @@ +package com.ruoyi.system.domain; + +/** + * 当前在线会话 + * + * @author ruoyi + */ +public class SysUserOnline +{ + /** 会话编号 */ + private String tokenId; + + /** 部门名称 */ + private String deptName; + + /** 用户名称 */ + private String userName; + + /** 登录IP地址 */ + private String ipaddr; + + /** 登录地址 */ + private String loginLocation; + + /** 浏览器类型 */ + private String browser; + + /** 操作系统 */ + private String os; + + /** 登录时间 */ + private Long loginTime; + + public String getTokenId() + { + return tokenId; + } + + public void setTokenId(String tokenId) + { + this.tokenId = tokenId; + } + + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java new file mode 100644 index 0000000..6e8c416 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 用户和岗位关联 sys_user_post + * + * @author ruoyi + */ +public class SysUserPost +{ + /** 用户ID */ + private Long userId; + + /** 岗位ID */ + private Long postId; + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getPostId() + { + return postId; + } + + public void setPostId(Long postId) + { + this.postId = postId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("postId", getPostId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java new file mode 100644 index 0000000..4d15810 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 用户和角色关联 sys_user_role + * + * @author ruoyi + */ +public class SysUserRole +{ + /** 用户ID */ + private Long userId; + + /** 角色ID */ + private Long roleId; + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("roleId", getRoleId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java new file mode 100644 index 0000000..a5d5fdc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.domain.vo; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 路由显示信息 + * + * @author ruoyi + */ +public class MetaVo +{ + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + private String title; + + /** + * 设置该路由的图标,对应路径src/assets/icons/svg + */ + private String icon; + + /** + * 设置为true,则不会被 缓存 + */ + private boolean noCache; + + /** + * 内链地址(http(s)://开头) + */ + private String link; + + public MetaVo() + { + } + + public MetaVo(String title, String icon) + { + this.title = title; + this.icon = icon; + } + + public MetaVo(String title, String icon, boolean noCache) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + } + + public MetaVo(String title, String icon, String link) + { + this.title = title; + this.icon = icon; + this.link = link; + } + + public MetaVo(String title, String icon, boolean noCache, String link) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + if (StringUtils.ishttp(link)) + { + this.link = link; + } + } + + public boolean isNoCache() + { + return noCache; + } + + public void setNoCache(boolean noCache) + { + this.noCache = noCache; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public String getLink() + { + return link; + } + + public void setLink(String link) + { + this.link = link; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java new file mode 100644 index 0000000..b5501b7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java @@ -0,0 +1,133 @@ +package com.ruoyi.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import java.util.List; + +/** + * 路由配置信息 + * + * @author ruoyi + */ +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class RouterVo +{ + /** + * 路由名字 + */ + private String name; + + /** + * 路由地址 + */ + private String path; + + /** + * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 + */ + private boolean hidden; + + /** + * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + */ + private String redirect; + + /** + * 组件地址 + */ + private String component; + + /** + * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + */ + private Boolean alwaysShow; + + /** + * 其他元素 + */ + private MetaVo meta; + + /** + * 子路由 + */ + private List children; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + public boolean getHidden() + { + return hidden; + } + + public void setHidden(boolean hidden) + { + this.hidden = hidden; + } + + public String getRedirect() + { + return redirect; + } + + public void setRedirect(String redirect) + { + this.redirect = redirect; + } + + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public Boolean getAlwaysShow() + { + return alwaysShow; + } + + public void setAlwaysShow(Boolean alwaysShow) + { + this.alwaysShow = alwaysShow; + } + + public MetaVo getMeta() + { + return meta; + } + + public void setMeta(MetaVo meta) + { + this.meta = meta; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java new file mode 100644 index 0000000..0ed0c0a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java @@ -0,0 +1,68 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysConfig; + +/** + * 参数配置 数据层 + * + * @author ruoyi + */ +public interface SysConfigMapper +{ + /** + * 查询参数配置信息 + * + * @param config 参数配置信息 + * @return 参数配置信息 + */ + public SysConfig selectConfig(SysConfig config); + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + public List selectConfigList(SysConfig config); + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数键名 + * @return 参数配置信息 + */ + public SysConfig checkConfigKeyUnique(String configKey); + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int insertConfig(SysConfig config); + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int updateConfig(SysConfig config); + + /** + * 删除参数配置 + * + * @param configId 参数ID + * @return 结果 + */ + public int deleteConfigById(Long configId); + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + * @return 结果 + */ + public int deleteConfigByIds(Long[] configIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java new file mode 100644 index 0000000..415599c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java @@ -0,0 +1,118 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.ruoyi.common.core.domain.entity.SysDept; + +/** + * 部门管理 数据层 + * + * @author ruoyi + */ +public interface SysDeptMapper +{ + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * @return 部门信息集合 + */ + public List selectDeptList(SysDept dept); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @param deptCheckStrictly 部门树选择项是否关联显示 + * @return 选中部门列表 + */ + public List selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * @return 部门信息 + */ + public SysDept selectDeptById(Long deptId); + + /** + * 根据ID查询所有子部门 + * + * @param deptId 部门ID + * @return 部门列表 + */ + public List selectChildrenDeptById(Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * @return 子部门数 + */ + public int selectNormalChildrenDeptById(Long deptId); + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * @return 结果 + */ + public int hasChildByDeptId(Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * @return 结果 + */ + public int checkDeptExistUser(Long deptId); + + /** + * 校验部门名称是否唯一 + * + * @param deptName 部门名称 + * @param parentId 父部门ID + * @return 结果 + */ + public SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId); + + /** + * 新增部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + public int insertDept(SysDept dept); + + /** + * 修改部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + public int updateDept(SysDept dept); + + /** + * 修改所在部门正常状态 + * + * @param deptIds 部门ID组 + */ + public void updateDeptStatusNormal(Long[] deptIds); + + /** + * 修改子元素关系 + * + * @param depts 子元素 + * @return 结果 + */ + public int updateDeptChildren(@Param("depts") List depts); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * @return 结果 + */ + public int deleteDeptById(Long deptId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java new file mode 100644 index 0000000..a341f1e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java @@ -0,0 +1,95 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.ruoyi.common.core.domain.entity.SysDictData; + +/** + * 字典表 数据层 + * + * @author ruoyi + */ +public interface SysDictDataMapper +{ + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * @return 字典数据集合信息 + */ + public List selectDictDataList(SysDictData dictData); + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + public List selectDictDataByType(String dictType); + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * @return 字典标签 + */ + public String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue); + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * @return 字典数据 + */ + public SysDictData selectDictDataById(Long dictCode); + + /** + * 查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据 + */ + public int countDictDataByType(String dictType); + + /** + * 通过字典ID删除字典数据信息 + * + * @param dictCode 字典数据ID + * @return 结果 + */ + public int deleteDictDataById(Long dictCode); + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * @return 结果 + */ + public int deleteDictDataByIds(Long[] dictCodes); + + /** + * 新增字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + public int insertDictData(SysDictData dictData); + + /** + * 修改字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + public int updateDictData(SysDictData dictData); + + /** + * 同步修改字典类型 + * + * @param oldDictType 旧字典类型 + * @param newDictType 新旧字典类型 + * @return 结果 + */ + public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java new file mode 100644 index 0000000..17545cd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java @@ -0,0 +1,85 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import com.ruoyi.common.core.domain.entity.SysDictType; + +/** + * 字典表 数据层 + * + * @author ruoyi + */ +@Mapper +public interface SysDictTypeMapper +{ + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * @return 字典类型集合信息 + */ + public List selectDictTypeList(SysDictType dictType); + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeAll(); + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * @return 字典类型 + */ + public SysDictType selectDictTypeById(Long dictId); + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * @return 字典类型 + */ + public SysDictType selectDictTypeByType(String dictType); + + /** + * 通过字典ID删除字典信息 + * + * @param dictId 字典ID + * @return 结果 + */ + public int deleteDictTypeById(Long dictId); + + /** + * 批量删除字典类型信息 + * + * @param dictIds 需要删除的字典ID + * @return 结果 + */ + public int deleteDictTypeByIds(Long[] dictIds); + + /** + * 新增字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + public int insertDictType(SysDictType dictType); + + /** + * 修改字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + public int updateDictType(SysDictType dictType); + + /** + * 校验字典类型称是否唯一 + * + * @param dictType 字典类型 + * @return 结果 + */ + public SysDictType checkDictTypeUnique(String dictType); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java new file mode 100644 index 0000000..629866f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java @@ -0,0 +1,42 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysLogininfor; + +/** + * 系统访问日志情况信息 数据层 + * + * @author ruoyi + */ +public interface SysLogininforMapper +{ + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + public void insertLogininfor(SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * @return 登录记录集合 + */ + public List selectLogininforList(SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * @return 结果 + */ + public int deleteLogininforByIds(Long[] infoIds); + + /** + * 清空系统登录日志 + * + * @return 结果 + */ + public int cleanLogininfor(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java new file mode 100644 index 0000000..1c2e853 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java @@ -0,0 +1,117 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.ruoyi.common.core.domain.entity.SysMenu; + +/** + * 菜单表 数据层 + * + * @author ruoyi + */ +public interface SysMenuMapper +{ + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + public List selectMenuList(SysMenu menu); + + /** + * 根据用户所有权限 + * + * @return 权限列表 + */ + public List selectMenuPerms(); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + public List selectMenuListByUserId(SysMenu menu); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public List selectMenuPermsByUserId(Long userId); + + /** + * 根据用户ID查询菜单 + * + * @return 菜单列表 + */ + public List selectMenuTreeAll(); + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @param menuCheckStrictly 菜单树选择项是否关联显示 + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int hasChildByMenuId(Long menuId); + + /** + * 新增菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int insertMenu(SysMenu menu); + + /** + * 修改菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int updateMenu(SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int deleteMenuById(Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menuName 菜单名称 + * @param parentId 父菜单ID + * @return 结果 + */ + public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java new file mode 100644 index 0000000..c34f0a2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java @@ -0,0 +1,60 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysNotice; + +/** + * 通知公告表 数据层 + * + * @author ruoyi + */ +public interface SysNoticeMapper +{ + /** + * 查询公告信息 + * + * @param noticeId 公告ID + * @return 公告信息 + */ + public SysNotice selectNoticeById(Long noticeId); + + /** + * 查询公告列表 + * + * @param notice 公告信息 + * @return 公告集合 + */ + public List selectNoticeList(SysNotice notice); + + /** + * 新增公告 + * + * @param notice 公告信息 + * @return 结果 + */ + public int insertNotice(SysNotice notice); + + /** + * 修改公告 + * + * @param notice 公告信息 + * @return 结果 + */ + public int updateNotice(SysNotice notice); + + /** + * 批量删除公告 + * + * @param noticeId 公告ID + * @return 结果 + */ + public int deleteNoticeById(Long noticeId); + + /** + * 批量删除公告信息 + * + * @param noticeIds 需要删除的公告ID + * @return 结果 + */ + public int deleteNoticeByIds(Long[] noticeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java new file mode 100644 index 0000000..2ae6457 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java @@ -0,0 +1,48 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysOperLog; + +/** + * 操作日志 数据层 + * + * @author ruoyi + */ +public interface SysOperLogMapper +{ + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + public void insertOperlog(SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + public List selectOperLogList(SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + public int deleteOperLogByIds(Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * @return 操作日志对象 + */ + public SysOperLog selectOperLogById(Long operId); + + /** + * 清空操作日志 + */ + public void cleanOperLog(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java new file mode 100644 index 0000000..b428747 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java @@ -0,0 +1,99 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysPost; + +/** + * 岗位信息 数据层 + * + * @author ruoyi + */ +public interface SysPostMapper +{ + /** + * 查询岗位数据集合 + * + * @param post 岗位信息 + * @return 岗位数据集合 + */ + public List selectPostList(SysPost post); + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + public List selectPostAll(); + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * @return 角色对象信息 + */ + public SysPost selectPostById(Long postId); + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * @return 选中岗位ID列表 + */ + public List selectPostListByUserId(Long userId); + + /** + * 查询用户所属岗位组 + * + * @param userName 用户名 + * @return 结果 + */ + public List selectPostsByUserName(String userName); + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * @return 结果 + */ + public int deletePostById(Long postId); + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * @return 结果 + */ + public int deletePostByIds(Long[] postIds); + + /** + * 修改岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + public int updatePost(SysPost post); + + /** + * 新增岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + public int insertPost(SysPost post); + + /** + * 校验岗位名称 + * + * @param postName 岗位名称 + * @return 结果 + */ + public SysPost checkPostNameUnique(String postName); + + /** + * 校验岗位编码 + * + * @param postCode 岗位编码 + * @return 结果 + */ + public SysPost checkPostCodeUnique(String postCode); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java new file mode 100644 index 0000000..f9d3a2f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java @@ -0,0 +1,44 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysRoleDept; + +/** + * 角色与部门关联表 数据层 + * + * @author ruoyi + */ +public interface SysRoleDeptMapper +{ + /** + * 通过角色ID删除角色和部门关联 + * + * @param roleId 角色ID + * @return 结果 + */ + public int deleteRoleDeptByRoleId(Long roleId); + + /** + * 批量删除角色部门关联信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteRoleDept(Long[] ids); + + /** + * 查询部门使用数量 + * + * @param deptId 部门ID + * @return 结果 + */ + public int selectCountRoleDeptByDeptId(Long deptId); + + /** + * 批量新增角色部门信息 + * + * @param roleDeptList 角色部门列表 + * @return 结果 + */ + public int batchRoleDept(List roleDeptList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java new file mode 100644 index 0000000..16d5594 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -0,0 +1,107 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.common.core.domain.entity.SysRole; + +/** + * 角色表 数据层 + * + * @author ruoyi + */ +public interface SysRoleMapper +{ + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + public List selectRoleList(SysRole role); + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * @return 角色列表 + */ + public List selectRolePermissionByUserId(Long userId); + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + public List selectRoleAll(); + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * @return 选中角色ID列表 + */ + public List selectRoleListByUserId(Long userId); + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * @return 角色对象信息 + */ + public SysRole selectRoleById(Long roleId); + + /** + * 根据用户ID查询角色 + * + * @param userName 用户名 + * @return 角色列表 + */ + public List selectRolesByUserName(String userName); + + /** + * 校验角色名称是否唯一 + * + * @param roleName 角色名称 + * @return 角色信息 + */ + public SysRole checkRoleNameUnique(String roleName); + + /** + * 校验角色权限是否唯一 + * + * @param roleKey 角色权限 + * @return 角色信息 + */ + public SysRole checkRoleKeyUnique(String roleKey); + + /** + * 修改角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int updateRole(SysRole role); + + /** + * 新增角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int insertRole(SysRole role); + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * @return 结果 + */ + public int deleteRoleById(Long roleId); + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + public int deleteRoleByIds(Long[] roleIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java new file mode 100644 index 0000000..6602bee --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java @@ -0,0 +1,44 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysRoleMenu; + +/** + * 角色与菜单关联表 数据层 + * + * @author ruoyi + */ +public interface SysRoleMenuMapper +{ + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int checkMenuExistRole(Long menuId); + + /** + * 通过角色ID删除角色和菜单关联 + * + * @param roleId 角色ID + * @return 结果 + */ + public int deleteRoleMenuByRoleId(Long roleId); + + /** + * 批量删除角色菜单关联信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteRoleMenu(Long[] ids); + + /** + * 批量新增角色菜单信息 + * + * @param roleMenuList 角色菜单列表 + * @return 结果 + */ + public int batchRoleMenu(List roleMenuList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java new file mode 100644 index 0000000..98363f9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -0,0 +1,127 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.ruoyi.common.core.domain.entity.SysUser; + +/** + * 用户表 数据层 + * + * @author ruoyi + */ +public interface SysUserMapper +{ + /** + * 根据条件分页查询用户列表 + * + * @param sysUser 用户信息 + * @return 用户信息集合信息 + */ + public List selectUserList(SysUser sysUser); + + /** + * 根据条件分页查询未已配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectAllocatedList(SysUser user); + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectUnallocatedList(SysUser user); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + public SysUser selectUserByUserName(String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + public SysUser selectUserById(Long userId); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int insertUser(SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int updateUser(SysUser user); + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * @return 结果 + */ + public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar); + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * @return 结果 + */ + public int resetUserPwd(@Param("userName") String userName, @Param("password") String password); + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * @return 结果 + */ + public int deleteUserById(Long userId); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * @return 结果 + */ + public int deleteUserByIds(Long[] userIds); + + /** + * 校验用户名称是否唯一 + * + * @param userName 用户名称 + * @return 结果 + */ + public int checkUserNameUnique(String userName); + + /** + * 校验手机号码是否唯一 + * + * @param phonenumber 手机号码 + * @return 结果 + */ + public SysUser checkPhoneUnique(String phonenumber); + + /** + * 校验email是否唯一 + * + * @param email 用户邮箱 + * @return 结果 + */ + public SysUser checkEmailUnique(String email); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java new file mode 100644 index 0000000..e08991d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java @@ -0,0 +1,44 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysUserPost; + +/** + * 用户与岗位关联表 数据层 + * + * @author ruoyi + */ +public interface SysUserPostMapper +{ + /** + * 通过用户ID删除用户和岗位关联 + * + * @param userId 用户ID + * @return 结果 + */ + public int deleteUserPostByUserId(Long userId); + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * @return 结果 + */ + public int countUserPostById(Long postId); + + /** + * 批量删除用户和岗位关联 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteUserPost(Long[] ids); + + /** + * 批量新增用户岗位信息 + * + * @param userPostList 用户角色列表 + * @return 结果 + */ + public int batchUserPost(List userPostList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java new file mode 100644 index 0000000..3143ec8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.ruoyi.system.domain.SysUserRole; + +/** + * 用户与角色关联表 数据层 + * + * @author ruoyi + */ +public interface SysUserRoleMapper +{ + /** + * 通过用户ID删除用户和角色关联 + * + * @param userId 用户ID + * @return 结果 + */ + public int deleteUserRoleByUserId(Long userId); + + /** + * 批量删除用户和角色关联 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteUserRole(Long[] ids); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + public int countUserRoleByRoleId(Long roleId); + + /** + * 批量新增用户角色信息 + * + * @param userRoleList 用户角色列表 + * @return 结果 + */ + public int batchUserRole(List userRoleList); + + /** + * 删除用户和角色关联信息 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + public int deleteUserRoleInfo(SysUserRole userRole); + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * @return 结果 + */ + public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java new file mode 100644 index 0000000..f867e63 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java @@ -0,0 +1,90 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.SysConfig; + +/** + * 参数配置 服务层 + * + * @author ruoyi + */ +public interface ISysConfigService +{ + /** + * 查询参数配置信息 + * + * @param configId 参数配置ID + * @return 参数配置信息 + */ + public SysConfig selectConfigById(Long configId); + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数键名 + * @return 参数键值 + */ + public String selectConfigByKey(String configKey); + + /** + * 获取验证码开关 + * + * @return true开启,false关闭 + */ + public boolean selectCaptchaOnOff(); + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + public List selectConfigList(SysConfig config); + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int insertConfig(SysConfig config); + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + public int updateConfig(SysConfig config); + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + * @return 结果 + */ + public void deleteConfigByIds(Long[] configIds); + + /** + * 加载参数缓存数据 + */ + public void loadingConfigCache(); + + /** + * 清空参数缓存数据 + */ + public void clearConfigCache(); + + /** + * 重置参数缓存数据 + */ + public void resetConfigCache(); + + /** + * 校验参数键名是否唯一 + * + * @param config 参数信息 + * @return 结果 + */ + public String checkConfigKeyUnique(SysConfig config); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java new file mode 100644 index 0000000..bf8ab3e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java @@ -0,0 +1,109 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.core.domain.entity.SysDept; + +/** + * 部门管理 服务层 + * + * @author ruoyi + */ +public interface ISysDeptService +{ + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * @return 部门信息集合 + */ + public List selectDeptList(SysDept dept); + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * @return 树结构列表 + */ + public List buildDeptTree(List depts); + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * @return 下拉树结构列表 + */ + public List buildDeptTreeSelect(List depts); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @return 选中部门列表 + */ + public List selectDeptListByRoleId(Long roleId); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * @return 部门信息 + */ + public SysDept selectDeptById(Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * @return 子部门数 + */ + public int selectNormalChildrenDeptById(Long deptId); + + /** + * 是否存在部门子节点 + * + * @param deptId 部门ID + * @return 结果 + */ + public boolean hasChildByDeptId(Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * @return 结果 true 存在 false 不存在 + */ + public boolean checkDeptExistUser(Long deptId); + + /** + * 校验部门名称是否唯一 + * + * @param dept 部门信息 + * @return 结果 + */ + public String checkDeptNameUnique(SysDept dept); + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + public int insertDept(SysDept dept); + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + public int updateDept(SysDept dept); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * @return 结果 + */ + public int deleteDeptById(Long deptId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java new file mode 100644 index 0000000..b4993e1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.common.core.domain.entity.SysDictData; + +/** + * 字典 业务层 + * + * @author ruoyi + */ +public interface ISysDictDataService +{ + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * @return 字典数据集合信息 + */ + public List selectDictDataList(SysDictData dictData); + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * @return 字典标签 + */ + public String selectDictLabel(String dictType, String dictValue); + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * @return 字典数据 + */ + public SysDictData selectDictDataById(Long dictCode); + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * @return 结果 + */ + public void deleteDictDataByIds(Long[] dictCodes); + + /** + * 新增保存字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + public int insertDictData(SysDictData dictData); + + /** + * 修改保存字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + public int updateDictData(SysDictData dictData); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java new file mode 100644 index 0000000..72d9af5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java @@ -0,0 +1,99 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.domain.entity.SysDictType; + +/** + * 字典 业务层 + * + * @author ruoyi + */ +public interface ISysDictTypeService +{ + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * @return 字典类型集合信息 + */ + public List selectDictTypeList(SysDictType dictType); + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeAll(); + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + public List selectDictDataByType(String dictType); + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * @return 字典类型 + */ + public SysDictType selectDictTypeById(Long dictId); + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * @return 字典类型 + */ + public SysDictType selectDictTypeByType(String dictType); + + /** + * 批量删除字典信息 + * + * @param dictIds 需要删除的字典ID + * @return 结果 + */ + public void deleteDictTypeByIds(Long[] dictIds); + + /** + * 加载字典缓存数据 + */ + public void loadingDictCache(); + + /** + * 清空字典缓存数据 + */ + public void clearDictCache(); + + /** + * 重置字典缓存数据 + */ + public void resetDictCache(); + + /** + * 新增保存字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + public int insertDictType(SysDictType dictType); + + /** + * 修改保存字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + public int updateDictType(SysDictType dictType); + + /** + * 校验字典类型称是否唯一 + * + * @param dictType 字典类型 + * @return 结果 + */ + public String checkDictTypeUnique(SysDictType dictType); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java new file mode 100644 index 0000000..96c4d54 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java @@ -0,0 +1,40 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.SysLogininfor; + +/** + * 系统访问日志情况信息 服务层 + * + * @author ruoyi + */ +public interface ISysLogininforService +{ + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + public void insertLogininfor(SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * @return 登录记录集合 + */ + public List selectLogininforList(SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * @return + */ + public int deleteLogininforByIds(Long[] infoIds); + + /** + * 清空系统登录日志 + */ + public void cleanLogininfor(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java new file mode 100644 index 0000000..f64bee1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java @@ -0,0 +1,136 @@ +package com.ruoyi.system.service; + +import java.util.List; +import java.util.Set; +import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.core.domain.entity.SysMenu; +import com.ruoyi.system.domain.vo.RouterVo; + +/** + * 菜单 业务层 + * + * @author ruoyi + */ +public interface ISysMenuService +{ + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuList(Long userId); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuList(SysMenu menu, Long userId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public Set selectMenuPermsByUserId(Long userId); + + /** + * 根据用户ID查询菜单树信息 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId(Long roleId); + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ + public List buildMenus(List menus); + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + public List buildMenuTree(List menus); + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + public List buildMenuTreeSelect(List menus); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ + public boolean hasChildByMenuId(Long menuId); + + /** + * 查询菜单是否存在角色 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ + public boolean checkMenuExistRole(Long menuId); + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int insertMenu(SysMenu menu); + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + public int updateMenu(SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + public int deleteMenuById(Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + public String checkMenuNameUnique(SysMenu menu); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java new file mode 100644 index 0000000..47ce1b7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java @@ -0,0 +1,60 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.SysNotice; + +/** + * 公告 服务层 + * + * @author ruoyi + */ +public interface ISysNoticeService +{ + /** + * 查询公告信息 + * + * @param noticeId 公告ID + * @return 公告信息 + */ + public SysNotice selectNoticeById(Long noticeId); + + /** + * 查询公告列表 + * + * @param notice 公告信息 + * @return 公告集合 + */ + public List selectNoticeList(SysNotice notice); + + /** + * 新增公告 + * + * @param notice 公告信息 + * @return 结果 + */ + public int insertNotice(SysNotice notice); + + /** + * 修改公告 + * + * @param notice 公告信息 + * @return 结果 + */ + public int updateNotice(SysNotice notice); + + /** + * 删除公告信息 + * + * @param noticeId 公告ID + * @return 结果 + */ + public int deleteNoticeById(Long noticeId); + + /** + * 批量删除公告信息 + * + * @param noticeIds 需要删除的公告ID + * @return 结果 + */ + public int deleteNoticeByIds(Long[] noticeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java new file mode 100644 index 0000000..4fd8e5a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java @@ -0,0 +1,48 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.SysOperLog; + +/** + * 操作日志 服务层 + * + * @author ruoyi + */ +public interface ISysOperLogService +{ + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + public void insertOperlog(SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + public List selectOperLogList(SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + public int deleteOperLogByIds(Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * @return 操作日志对象 + */ + public SysOperLog selectOperLogById(Long operId); + + /** + * 清空操作日志 + */ + public void cleanOperLog(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java new file mode 100644 index 0000000..aab216d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java @@ -0,0 +1,100 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.SysPost; + +/** + * 岗位信息 服务层 + * + * @author ruoyi + */ +public interface ISysPostService +{ + /** + * 查询岗位信息集合 + * + * @param post 岗位信息 + * @return 岗位列表 + */ + public List selectPostList(SysPost post); + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + public List selectPostAll(); + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * @return 角色对象信息 + */ + public SysPost selectPostById(Long postId); + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * @return 选中岗位ID列表 + */ + public List selectPostListByUserId(Long userId); + + /** + * 校验岗位名称 + * + * @param post 岗位信息 + * @return 结果 + */ + public String checkPostNameUnique(SysPost post); + + /** + * 校验岗位编码 + * + * @param post 岗位信息 + * @return 结果 + */ + public String checkPostCodeUnique(SysPost post); + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * @return 结果 + */ + public int countUserPostById(Long postId); + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * @return 结果 + */ + public int deletePostById(Long postId); + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * @return 结果 + * @throws Exception 异常 + */ + public int deletePostByIds(Long[] postIds); + + /** + * 新增保存岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + public int insertPost(SysPost post); + + /** + * 修改保存岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + public int updatePost(SysPost post); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java new file mode 100644 index 0000000..b2cc528 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java @@ -0,0 +1,166 @@ +package com.ruoyi.system.service; + +import java.util.List; +import java.util.Set; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.system.domain.SysUserRole; + +/** + * 角色业务层 + * + * @author ruoyi + */ +public interface ISysRoleService +{ + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + public List selectRoleList(SysRole role); + + /** + * 根据用户ID查询角色列表 + * + * @param userId 用户ID + * @return 角色列表 + */ + public List selectRolesByUserId(Long userId); + + /** + * 根据用户ID查询角色权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public Set selectRolePermissionByUserId(Long userId); + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + public List selectRoleAll(); + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * @return 选中角色ID列表 + */ + public List selectRoleListByUserId(Long userId); + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * @return 角色对象信息 + */ + public SysRole selectRoleById(Long roleId); + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + public String checkRoleNameUnique(SysRole role); + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + public String checkRoleKeyUnique(SysRole role); + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + public void checkRoleAllowed(SysRole role); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + public int countUserRoleByRoleId(Long roleId); + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int insertRole(SysRole role); + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int updateRole(SysRole role); + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + public int updateRoleStatus(SysRole role); + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * @return 结果 + */ + public int authDataScope(SysRole role); + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * @return 结果 + */ + public int deleteRoleById(Long roleId); + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + public int deleteRoleByIds(Long[] roleIds); + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + public int deleteAuthUser(SysUserRole userRole); + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * @return 结果 + */ + public int deleteAuthUsers(Long roleId, Long[] userIds); + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * @return 结果 + */ + public int insertAuthUsers(Long roleId, Long[] userIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java new file mode 100644 index 0000000..8eb5448 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java @@ -0,0 +1,48 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.system.domain.SysUserOnline; + +/** + * 在线用户 服务层 + * + * @author ruoyi + */ +public interface ISysUserOnlineService +{ + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user); + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user); + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user); + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * @return 在线用户 + */ + public SysUserOnline loginUserToUserOnline(LoginUser user); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java new file mode 100644 index 0000000..bed8667 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -0,0 +1,199 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.common.core.domain.entity.SysUser; + +/** + * 用户 业务层 + * + * @author ruoyi + */ +public interface ISysUserService +{ + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectUserList(SysUser user); + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectAllocatedList(SysUser user); + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + public List selectUnallocatedList(SysUser user); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + public SysUser selectUserByUserName(String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + public SysUser selectUserById(Long userId); + + /** + * 根据用户ID查询用户所属角色组 + * + * @param userName 用户名 + * @return 结果 + */ + public String selectUserRoleGroup(String userName); + + /** + * 根据用户ID查询用户所属岗位组 + * + * @param userName 用户名 + * @return 结果 + */ + public String selectUserPostGroup(String userName); + + /** + * 校验用户名称是否唯一 + * + * @param userName 用户名称 + * @return 结果 + */ + public String checkUserNameUnique(String userName); + + /** + * 校验手机号码是否唯一 + * + * @param user 用户信息 + * @return 结果 + */ + public String checkPhoneUnique(SysUser user); + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * @return 结果 + */ + public String checkEmailUnique(SysUser user); + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + public void checkUserAllowed(SysUser user); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int insertUser(SysUser user); + + /** + * 注册用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public boolean registerUser(SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int updateUser(SysUser user); + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + public void insertUserAuth(Long userId, Long[] roleIds); + + /** + * 修改用户状态 + * + * @param user 用户信息 + * @return 结果 + */ + public int updateUserStatus(SysUser user); + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * @return 结果 + */ + public int updateUserProfile(SysUser user); + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * @return 结果 + */ + public boolean updateUserAvatar(String userName, String avatar); + + /** + * 重置用户密码 + * + * @param user 用户信息 + * @return 结果 + */ + public int resetPwd(SysUser user); + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * @return 结果 + */ + public int resetUserPwd(String userName, String password); + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * @return 结果 + */ + public int deleteUserById(Long userId); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * @return 结果 + */ + public int deleteUserByIds(Long[] userIds); + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + public String importUser(List userList, Boolean isUpdateSupport, String operName); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java new file mode 100644 index 0000000..6f5e5e4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -0,0 +1,227 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysConfig; +import com.ruoyi.system.mapper.SysConfigMapper; +import com.ruoyi.system.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; +import java.util.Collection; +import java.util.List; + +/** + * 参数配置 服务层实现 + * + * @author ruoyi + */ +@Service +public class SysConfigServiceImpl implements ISysConfigService +{ + @Autowired + private SysConfigMapper configMapper; + + @Autowired + private RedisCache redisCache; + + /** + * 项目启动时,初始化参数到缓存 + */ + @PostConstruct + public void init() + { + loadingConfigCache(); + } + + /** + * 查询参数配置信息 + * + * @param configId 参数配置ID + * @return 参数配置信息 + */ + @Override + @DataSource(DataSourceType.MASTER) + public SysConfig selectConfigById(Long configId) + { + SysConfig config = new SysConfig(); + config.setConfigId(configId); + return configMapper.selectConfig(config); + } + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数key + * @return 参数键值 + */ + @Override + public String selectConfigByKey(String configKey) + { + String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey))); + if (StringUtils.isNotEmpty(configValue)) + { + return configValue; + } + SysConfig config = new SysConfig(); + config.setConfigKey(configKey); + SysConfig retConfig = configMapper.selectConfig(config); + if (StringUtils.isNotNull(retConfig)) + { + redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue()); + return retConfig.getConfigValue(); + } + return StringUtils.EMPTY; + } + + /** + * 获取验证码开关 + * + * @return true开启,false关闭 + */ + @Override + public boolean selectCaptchaOnOff() + { + String captchaOnOff = selectConfigByKey("sys.account.captchaOnOff"); + if (StringUtils.isEmpty(captchaOnOff)) + { + return true; + } + return Convert.toBool(captchaOnOff); + } + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + @Override + public List selectConfigList(SysConfig config) + { + return configMapper.selectConfigList(config); + } + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public int insertConfig(SysConfig config) + { + int row = configMapper.insertConfig(config); + if (row > 0) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public int updateConfig(SysConfig config) + { + int row = configMapper.updateConfig(config); + if (row > 0) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + * @return 结果 + */ + @Override + public void deleteConfigByIds(Long[] configIds) + { + for (Long configId : configIds) + { + SysConfig config = selectConfigById(configId); + if (StringUtils.equals(UserConstants.YES, config.getConfigType())) + { + throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey())); + } + configMapper.deleteConfigById(configId); + redisCache.deleteObject(getCacheKey(config.getConfigKey())); + } + } + + /** + * 加载参数缓存数据 + */ + @Override + public void loadingConfigCache() + { + List configsList = configMapper.selectConfigList(new SysConfig()); + for (SysConfig config : configsList) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + + /** + * 清空参数缓存数据 + */ + @Override + public void clearConfigCache() + { + Collection keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*"); + redisCache.deleteObject(keys); + } + + /** + * 重置参数缓存数据 + */ + @Override + public void resetConfigCache() + { + clearConfigCache(); + loadingConfigCache(); + } + + /** + * 校验参数键名是否唯一 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public String checkConfigKeyUnique(SysConfig config) + { + Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId(); + SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey()); + if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + private String getCacheKey(String configKey) + { + return Constants.SYS_CONFIG_KEY + configKey; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java new file mode 100644 index 0000000..acf44b5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,307 @@ +package com.ruoyi.system.service.impl; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.mapper.SysDeptMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.service.ISysDeptService; + +/** + * 部门管理 服务实现 + * + * @author ruoyi + */ +@Service +public class SysDeptServiceImpl implements ISysDeptService +{ + @Autowired + private SysDeptMapper deptMapper; + + @Autowired + private SysRoleMapper roleMapper; + + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * @return 部门信息集合 + */ + @Override + @DataScope(deptAlias = "d") + public List selectDeptList(SysDept dept) + { + return deptMapper.selectDeptList(dept); + } + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * @return 树结构列表 + */ + @Override + public List buildDeptTree(List depts) + { + List returnList = new ArrayList(); + List tempList = new ArrayList(); + for (SysDept dept : depts) + { + tempList.add(dept.getDeptId()); + } + for (Iterator iterator = depts.iterator(); iterator.hasNext();) + { + SysDept dept = (SysDept) iterator.next(); + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(dept.getParentId())) + { + recursionFn(depts, dept); + returnList.add(dept); + } + } + if (returnList.isEmpty()) + { + returnList = depts; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * @return 下拉树结构列表 + */ + @Override + public List buildDeptTreeSelect(List depts) + { + List deptTrees = buildDeptTree(depts); + return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @return 选中部门列表 + */ + @Override + public List selectDeptListByRoleId(Long roleId) + { + SysRole role = roleMapper.selectRoleById(roleId); + return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); + } + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * @return 部门信息 + */ + @Override + public SysDept selectDeptById(Long deptId) + { + return deptMapper.selectDeptById(deptId); + } + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * @return 子部门数 + */ + @Override + public int selectNormalChildrenDeptById(Long deptId) + { + return deptMapper.selectNormalChildrenDeptById(deptId); + } + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * @return 结果 + */ + @Override + public boolean hasChildByDeptId(Long deptId) + { + int result = deptMapper.hasChildByDeptId(deptId); + return result > 0 ? true : false; + } + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * @return 结果 true 存在 false 不存在 + */ + @Override + public boolean checkDeptExistUser(Long deptId) + { + int result = deptMapper.checkDeptExistUser(deptId); + return result > 0 ? true : false; + } + + /** + * 校验部门名称是否唯一 + * + * @param dept 部门信息 + * @return 结果 + */ + @Override + public String checkDeptNameUnique(SysDept dept) + { + Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); + SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); + if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + @Override + public int insertDept(SysDept dept) + { + SysDept info = deptMapper.selectDeptById(dept.getParentId()); + // 如果父节点不为正常状态,则不允许新增子节点 + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) + { + throw new ServiceException("部门停用,不允许新增"); + } + dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + return deptMapper.insertDept(dept); + } + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + @Override + public int updateDept(SysDept dept) + { + SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId()); + SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId()); + if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) + { + String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); + String oldAncestors = oldDept.getAncestors(); + dept.setAncestors(newAncestors); + updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); + } + int result = deptMapper.updateDept(dept); + if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) + && !StringUtils.equals("0", dept.getAncestors())) + { + // 如果该部门是启用状态,则启用该部门的所有上级部门 + updateParentDeptStatusNormal(dept); + } + return result; + } + + /** + * 修改该部门的父级部门状态 + * + * @param dept 当前部门 + */ + private void updateParentDeptStatusNormal(SysDept dept) + { + String ancestors = dept.getAncestors(); + Long[] deptIds = Convert.toLongArray(ancestors); + deptMapper.updateDeptStatusNormal(deptIds); + } + + /** + * 修改子元素关系 + * + * @param deptId 被修改的部门ID + * @param newAncestors 新的父ID集合 + * @param oldAncestors 旧的父ID集合 + */ + public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) + { + List children = deptMapper.selectChildrenDeptById(deptId); + for (SysDept child : children) + { + child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + } + if (children.size() > 0) + { + deptMapper.updateDeptChildren(children); + } + } + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * @return 结果 + */ + @Override + public int deleteDeptById(Long deptId) + { + return deptMapper.deleteDeptById(deptId); + } + + /** + * 递归列表 + */ + private void recursionFn(List list, SysDept t) + { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysDept tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, SysDept t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + SysDept n = (SysDept) it.next(); + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, SysDept t) + { + return getChildList(list, t).size() > 0 ? true : false; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java new file mode 100644 index 0000000..f6a1938 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java @@ -0,0 +1,112 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.system.mapper.SysDictDataMapper; +import com.ruoyi.system.service.ISysDictDataService; + +/** + * 字典 业务层处理 + * + * @author ruoyi + */ +@Service +public class SysDictDataServiceImpl implements ISysDictDataService +{ + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataList(SysDictData dictData) + { + return dictDataMapper.selectDictDataList(dictData); + } + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * @return 字典标签 + */ + @Override + public String selectDictLabel(String dictType, String dictValue) + { + return dictDataMapper.selectDictLabel(dictType, dictValue); + } + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * @return 字典数据 + */ + @Override + public SysDictData selectDictDataById(Long dictCode) + { + return dictDataMapper.selectDictDataById(dictCode); + } + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * @return 结果 + */ + @Override + public void deleteDictDataByIds(Long[] dictCodes) + { + for (Long dictCode : dictCodes) + { + SysDictData data = selectDictDataById(dictCode); + dictDataMapper.deleteDictDataById(dictCode); + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + } + + /** + * 新增保存字典数据信息 + * + * @param data 字典数据信息 + * @return 结果 + */ + @Override + public int insertDictData(SysDictData data) + { + int row = dictDataMapper.insertDictData(data); + if (row > 0) + { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } + + /** + * 修改保存字典数据信息 + * + * @param data 字典数据信息 + * @return 结果 + */ + @Override + public int updateDictData(SysDictData data) + { + int row = dictDataMapper.updateDictData(data); + if (row > 0) + { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java new file mode 100644 index 0000000..8e75c4f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -0,0 +1,220 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.domain.entity.SysDictType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.mapper.SysDictDataMapper; +import com.ruoyi.system.mapper.SysDictTypeMapper; +import com.ruoyi.system.service.ISysDictTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.PostConstruct; +import java.util.List; + +/** + * 字典 业务层处理 + * + * @author ruoyi + */ +@Service +public class SysDictTypeServiceImpl implements ISysDictTypeService +{ + @Autowired + private SysDictTypeMapper dictTypeMapper; + + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 项目启动时,初始化字典到缓存 + */ + @PostConstruct + public void init() + { + loadingDictCache(); + } + + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeList(SysDictType dictType) + { + return dictTypeMapper.selectDictTypeList(dictType); + } + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeAll() + { + return dictTypeMapper.selectDictTypeAll(); + } + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataByType(String dictType) + { + List dictDatas = DictUtils.getDictCache(dictType); + if (StringUtils.isNotEmpty(dictDatas)) + { + return dictDatas; + } + dictDatas = dictDataMapper.selectDictDataByType(dictType); + if (StringUtils.isNotEmpty(dictDatas)) + { + DictUtils.setDictCache(dictType, dictDatas); + return dictDatas; + } + return null; + } + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * @return 字典类型 + */ + @Override + public SysDictType selectDictTypeById(Long dictId) + { + return dictTypeMapper.selectDictTypeById(dictId); + } + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * @return 字典类型 + */ + @Override + public SysDictType selectDictTypeByType(String dictType) + { + return dictTypeMapper.selectDictTypeByType(dictType); + } + + /** + * 批量删除字典类型信息 + * + * @param dictIds 需要删除的字典ID + * @return 结果 + */ + @Override + public void deleteDictTypeByIds(Long[] dictIds) + { + for (Long dictId : dictIds) + { + SysDictType dictType = selectDictTypeById(dictId); + if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) + { + throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); + } + dictTypeMapper.deleteDictTypeById(dictId); + DictUtils.removeDictCache(dictType.getDictType()); + } + } + + /** + * 加载字典缓存数据 + */ + @Override + public void loadingDictCache() + { + List dictTypeList = dictTypeMapper.selectDictTypeAll(); + for (SysDictType dictType : dictTypeList) + { + List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); + DictUtils.setDictCache(dictType.getDictType(), dictDatas); + } + } + + /** + * 清空字典缓存数据 + */ + @Override + public void clearDictCache() + { + DictUtils.clearDictCache(); + } + + /** + * 重置字典缓存数据 + */ + @Override + public void resetDictCache() + { + clearDictCache(); + loadingDictCache(); + } + + /** + * 新增保存字典类型信息 + * + * @param dict 字典类型信息 + * @return 结果 + */ + @Override + public int insertDictType(SysDictType dict) + { + int row = dictTypeMapper.insertDictType(dict); + if (row > 0) + { + DictUtils.setDictCache(dict.getDictType(), null); + } + return row; + } + + /** + * 修改保存字典类型信息 + * + * @param dict 字典类型信息 + * @return 结果 + */ + @Override + @Transactional + public int updateDictType(SysDictType dict) + { + SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId()); + dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType()); + int row = dictTypeMapper.updateDictType(dict); + if (row > 0) + { + List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); + DictUtils.setDictCache(dict.getDictType(), dictDatas); + } + return row; + } + + /** + * 校验字典类型称是否唯一 + * + * @param dict 字典类型 + * @return 结果 + */ + @Override + public String checkDictTypeUnique(SysDictType dict) + { + Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); + SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType()); + if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java new file mode 100644 index 0000000..a3b5257 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java @@ -0,0 +1,65 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.SysLogininfor; +import com.ruoyi.system.mapper.SysLogininforMapper; +import com.ruoyi.system.service.ISysLogininforService; + +/** + * 系统访问日志情况信息 服务层处理 + * + * @author ruoyi + */ +@Service +public class SysLogininforServiceImpl implements ISysLogininforService +{ + + @Autowired + private SysLogininforMapper logininforMapper; + + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + @Override + public void insertLogininfor(SysLogininfor logininfor) + { + logininforMapper.insertLogininfor(logininfor); + } + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * @return 登录记录集合 + */ + @Override + public List selectLogininforList(SysLogininfor logininfor) + { + return logininforMapper.selectLogininforList(logininfor); + } + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * @return + */ + @Override + public int deleteLogininforByIds(Long[] infoIds) + { + return logininforMapper.deleteLogininforByIds(infoIds); + } + + /** + * 清空系统登录日志 + */ + @Override + public void cleanLogininfor() + { + logininforMapper.cleanLogininfor(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..e8da922 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,501 @@ +package com.ruoyi.system.service.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.core.domain.entity.SysMenu; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.vo.MetaVo; +import com.ruoyi.system.domain.vo.RouterVo; +import com.ruoyi.system.mapper.SysMenuMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.mapper.SysRoleMenuMapper; +import com.ruoyi.system.service.ISysMenuService; + +/** + * 菜单 业务层处理 + * + * @author ruoyi + */ +@Service +public class SysMenuServiceImpl implements ISysMenuService +{ + public static final String PREMISSION_STRING = "perms[\"{0}\"]"; + + @Autowired + private SysMenuMapper menuMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + @Override + public List selectMenuList(Long userId) + { + return selectMenuList(new SysMenu(), userId); + } + + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + @Override + public List selectMenuList(SysMenu menu, Long userId) + { + List menuList = null; + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) + { + menuList = menuMapper.selectMenuList(menu); + } + else + { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectMenuListByUserId(menu); + } + return menuList; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByUserId(Long userId) + { + List perms = menuMapper.selectMenuPermsByUserId(userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) + { + if (StringUtils.isNotEmpty(perm)) + { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户名称 + * @return 菜单列表 + */ + @Override + public List selectMenuTreeByUserId(Long userId) + { + List menus = null; + if (SecurityUtils.isAdmin(userId)) + { + menus = menuMapper.selectMenuTreeAll(); + } + else + { + menus = menuMapper.selectMenuTreeByUserId(userId); + } + return getChildPerms(menus, 0); + } + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ + @Override + public List selectMenuListByRoleId(Long roleId) + { + SysRole role = roleMapper.selectRoleById(roleId); + return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); + } + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ + @Override + public List buildMenus(List menus) + { + List routers = new LinkedList(); + for (SysMenu menu : menus) + { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + List cMenus = menu.getChildren(); + if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) + { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } + else if (isMenuFrame(menu)) + { + router.setMeta(null); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(StringUtils.capitalize(menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) + { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/inner"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = StringUtils.replaceEach(menu.getPath(), new String[] { Constants.HTTP, Constants.HTTPS }, new String[] { "", "" }); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(StringUtils.capitalize(routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + routers.add(router); + } + return routers; + } + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + @Override + public List buildMenuTree(List menus) + { + List returnList = new ArrayList(); + List tempList = new ArrayList(); + for (SysMenu dept : menus) + { + tempList.add(dept.getMenuId()); + } + for (Iterator iterator = menus.iterator(); iterator.hasNext();) + { + SysMenu menu = (SysMenu) iterator.next(); + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(menu.getParentId())) + { + recursionFn(menus, menu); + returnList.add(menu); + } + } + if (returnList.isEmpty()) + { + returnList = menus; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + @Override + public List buildMenuTreeSelect(List menus) + { + List menuTrees = buildMenuTree(menus); + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + @Override + public SysMenu selectMenuById(Long menuId) + { + return menuMapper.selectMenuById(menuId); + } + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public boolean hasChildByMenuId(Long menuId) + { + int result = menuMapper.hasChildByMenuId(menuId); + return result > 0 ? true : false; + } + + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public boolean checkMenuExistRole(Long menuId) + { + int result = roleMenuMapper.checkMenuExistRole(menuId); + return result > 0 ? true : false; + } + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public int insertMenu(SysMenu menu) + { + return menuMapper.insertMenu(menu); + } + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public int updateMenu(SysMenu menu) + { + return menuMapper.updateMenu(menu); + } + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public int deleteMenuById(Long menuId) + { + return menuMapper.deleteMenuById(menuId); + } + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public String checkMenuNameUnique(SysMenu menu) + { + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); + SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 获取路由名称 + * + * @param menu 菜单信息 + * @return 路由名称 + */ + public String getRouteName(SysMenu menu) + { + String routerName = StringUtils.capitalize(menu.getPath()); + // 非外链并且是一级目录(类型为目录) + if (isMenuFrame(menu)) + { + routerName = StringUtils.EMPTY; + } + return routerName; + } + + /** + * 获取路由地址 + * + * @param menu 菜单信息 + * @return 路由地址 + */ + public String getRouterPath(SysMenu menu) + { + String routerPath = menu.getPath(); + // 内链打开外网方式 + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + routerPath = StringUtils.replaceEach(routerPath, new String[] { Constants.HTTP, Constants.HTTPS }, new String[] { "", "" }); + } + // 非外链并且是一级目录(类型为目录) + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + && UserConstants.NO_FRAME.equals(menu.getIsFrame())) + { + routerPath = "/" + menu.getPath(); + } + // 非外链并且是一级目录(类型为菜单) + else if (isMenuFrame(menu)) + { + routerPath = "/"; + } + return routerPath; + } + + /** + * 获取组件信息 + * + * @param menu 菜单信息 + * @return 组件信息 + */ + public String getComponent(SysMenu menu) + { + String component = UserConstants.LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) + { + component = menu.getComponent(); + } + else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + component = UserConstants.INNER_LINK; + } + else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) + { + component = UserConstants.PARENT_VIEW; + } + return component; + } + + /** + * 是否为菜单内部跳转 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isMenuFrame(SysMenu menu) + { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + && menu.getIsFrame().equals(UserConstants.NO_FRAME); + } + + /** + * 是否为内链组件 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isInnerLink(SysMenu menu) + { + return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); + } + + /** + * 是否为parent_view组件 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isParentView(SysMenu menu) + { + return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); + } + + /** + * 根据父节点的ID获取所有子节点 + * + * @param list 分类表 + * @param parentId 传入的父节点ID + * @return String + */ + public List getChildPerms(List list, int parentId) + { + List returnList = new ArrayList(); + for (Iterator iterator = list.iterator(); iterator.hasNext();) + { + SysMenu t = (SysMenu) iterator.next(); + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == parentId) + { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 递归列表 + * + * @param list + * @param t + */ + private void recursionFn(List list, SysMenu t) + { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, SysMenu t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + SysMenu n = (SysMenu) it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, SysMenu t) + { + return getChildList(list, t).size() > 0 ? true : false; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java new file mode 100644 index 0000000..765438b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java @@ -0,0 +1,92 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.SysNotice; +import com.ruoyi.system.mapper.SysNoticeMapper; +import com.ruoyi.system.service.ISysNoticeService; + +/** + * 公告 服务层实现 + * + * @author ruoyi + */ +@Service +public class SysNoticeServiceImpl implements ISysNoticeService +{ + @Autowired + private SysNoticeMapper noticeMapper; + + /** + * 查询公告信息 + * + * @param noticeId 公告ID + * @return 公告信息 + */ + @Override + public SysNotice selectNoticeById(Long noticeId) + { + return noticeMapper.selectNoticeById(noticeId); + } + + /** + * 查询公告列表 + * + * @param notice 公告信息 + * @return 公告集合 + */ + @Override + public List selectNoticeList(SysNotice notice) + { + return noticeMapper.selectNoticeList(notice); + } + + /** + * 新增公告 + * + * @param notice 公告信息 + * @return 结果 + */ + @Override + public int insertNotice(SysNotice notice) + { + return noticeMapper.insertNotice(notice); + } + + /** + * 修改公告 + * + * @param notice 公告信息 + * @return 结果 + */ + @Override + public int updateNotice(SysNotice notice) + { + return noticeMapper.updateNotice(notice); + } + + /** + * 删除公告对象 + * + * @param noticeId 公告ID + * @return 结果 + */ + @Override + public int deleteNoticeById(Long noticeId) + { + return noticeMapper.deleteNoticeById(noticeId); + } + + /** + * 批量删除公告信息 + * + * @param noticeIds 需要删除的公告ID + * @return 结果 + */ + @Override + public int deleteNoticeByIds(Long[] noticeIds) + { + return noticeMapper.deleteNoticeByIds(noticeIds); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java new file mode 100644 index 0000000..5489815 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -0,0 +1,76 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.SysOperLog; +import com.ruoyi.system.mapper.SysOperLogMapper; +import com.ruoyi.system.service.ISysOperLogService; + +/** + * 操作日志 服务层处理 + * + * @author ruoyi + */ +@Service +public class SysOperLogServiceImpl implements ISysOperLogService +{ + @Autowired + private SysOperLogMapper operLogMapper; + + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + @Override + public void insertOperlog(SysOperLog operLog) + { + operLogMapper.insertOperlog(operLog); + } + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + @Override + public List selectOperLogList(SysOperLog operLog) + { + return operLogMapper.selectOperLogList(operLog); + } + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + @Override + public int deleteOperLogByIds(Long[] operIds) + { + return operLogMapper.deleteOperLogByIds(operIds); + } + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * @return 操作日志对象 + */ + @Override + public SysOperLog selectOperLogById(Long operId) + { + return operLogMapper.selectOperLogById(operId); + } + + /** + * 清空操作日志 + */ + @Override + public void cleanOperLog() + { + operLogMapper.cleanOperLog(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java new file mode 100644 index 0000000..46805ef --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java @@ -0,0 +1,179 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.mapper.SysPostMapper; +import com.ruoyi.system.mapper.SysUserPostMapper; +import com.ruoyi.system.service.ISysPostService; + +/** + * 岗位信息 服务层处理 + * + * @author ruoyi + */ +@Service +public class SysPostServiceImpl implements ISysPostService +{ + @Autowired + private SysPostMapper postMapper; + + @Autowired + private SysUserPostMapper userPostMapper; + + /** + * 查询岗位信息集合 + * + * @param post 岗位信息 + * @return 岗位信息集合 + */ + @Override + public List selectPostList(SysPost post) + { + return postMapper.selectPostList(post); + } + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + @Override + public List selectPostAll() + { + return postMapper.selectPostAll(); + } + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * @return 角色对象信息 + */ + @Override + public SysPost selectPostById(Long postId) + { + return postMapper.selectPostById(postId); + } + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * @return 选中岗位ID列表 + */ + @Override + public List selectPostListByUserId(Long userId) + { + return postMapper.selectPostListByUserId(userId); + } + + /** + * 校验岗位名称是否唯一 + * + * @param post 岗位信息 + * @return 结果 + */ + @Override + public String checkPostNameUnique(SysPost post) + { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostNameUnique(post.getPostName()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验岗位编码是否唯一 + * + * @param post 岗位信息 + * @return 结果 + */ + @Override + public String checkPostCodeUnique(SysPost post) + { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostCodeUnique(post.getPostCode()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * @return 结果 + */ + @Override + public int countUserPostById(Long postId) + { + return userPostMapper.countUserPostById(postId); + } + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * @return 结果 + */ + @Override + public int deletePostById(Long postId) + { + return postMapper.deletePostById(postId); + } + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * @return 结果 + * @throws Exception 异常 + */ + @Override + public int deletePostByIds(Long[] postIds) + { + for (Long postId : postIds) + { + SysPost post = selectPostById(postId); + if (countUserPostById(postId) > 0) + { + throw new ServiceException(String.format("%1$s已分配,不能删除", post.getPostName())); + } + } + return postMapper.deletePostByIds(postIds); + } + + /** + * 新增保存岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + @Override + public int insertPost(SysPost post) + { + return postMapper.insertPost(post); + } + + /** + * 修改保存岗位信息 + * + * @param post 岗位信息 + * @return 结果 + */ + @Override + public int updatePost(SysPost post) + { + return postMapper.updatePost(post); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..87f1606 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,401 @@ +package com.ruoyi.system.service.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.system.domain.SysRoleDept; +import com.ruoyi.system.domain.SysRoleMenu; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.mapper.SysRoleDeptMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.mapper.SysRoleMenuMapper; +import com.ruoyi.system.mapper.SysUserRoleMapper; +import com.ruoyi.system.service.ISysRoleService; + +/** + * 角色 业务层处理 + * + * @author ruoyi + */ +@Service +public class SysRoleServiceImpl implements ISysRoleService +{ + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysRoleDeptMapper roleDeptMapper; + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRoleList(SysRole role) + { + return roleMapper.selectRoleList(role); + } + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * @return 角色列表 + */ + @Override + public List selectRolesByUserId(Long userId) + { + List userRoles = roleMapper.selectRolePermissionByUserId(userId); + List roles = selectRoleAll(); + for (SysRole role : roles) + { + for (SysRole userRole : userRoles) + { + if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) + { + role.setFlag(true); + break; + } + } + } + return roles; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set selectRolePermissionByUserId(Long userId) + { + List perms = roleMapper.selectRolePermissionByUserId(userId); + Set permsSet = new HashSet<>(); + for (SysRole perm : perms) + { + if (StringUtils.isNotNull(perm)) + { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + @Override + public List selectRoleAll() + { + return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); + } + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * @return 选中角色ID列表 + */ + @Override + public List selectRoleListByUserId(Long userId) + { + return roleMapper.selectRoleListByUserId(userId); + } + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * @return 角色对象信息 + */ + @Override + public SysRole selectRoleById(Long roleId) + { + return roleMapper.selectRoleById(roleId); + } + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public String checkRoleNameUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public String checkRoleKeyUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + @Override + public void checkRoleAllowed(SysRole role) + { + if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) + { + throw new ServiceException("不允许操作超级管理员角色"); + } + } + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + public int countUserRoleByRoleId(Long roleId) + { + return userRoleMapper.countUserRoleByRoleId(roleId); + } + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional + public int insertRole(SysRole role) + { + // 新增角色信息 + roleMapper.insertRole(role); + return insertRoleMenu(role); + } + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional + public int updateRole(SysRole role) + { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); + return insertRoleMenu(role); + } + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public int updateRoleStatus(SysRole role) + { + return roleMapper.updateRole(role); + } + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional + public int authDataScope(SysRole role) + { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + // 新增角色和部门信息(数据权限) + return insertRoleDept(role); + } + + /** + * 新增角色菜单信息 + * + * @param role 角色对象 + */ + public int insertRoleMenu(SysRole role) + { + int rows = 1; + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long menuId : role.getMenuIds()) + { + SysRoleMenu rm = new SysRoleMenu(); + rm.setRoleId(role.getRoleId()); + rm.setMenuId(menuId); + list.add(rm); + } + if (list.size() > 0) + { + rows = roleMenuMapper.batchRoleMenu(list); + } + return rows; + } + + /** + * 新增角色部门信息(数据权限) + * + * @param role 角色对象 + */ + public int insertRoleDept(SysRole role) + { + int rows = 1; + // 新增角色与部门(数据权限)管理 + List list = new ArrayList(); + for (Long deptId : role.getDeptIds()) + { + SysRoleDept rd = new SysRoleDept(); + rd.setRoleId(role.getRoleId()); + rd.setDeptId(deptId); + list.add(rd); + } + if (list.size() > 0) + { + rows = roleDeptMapper.batchRoleDept(list); + } + return rows; + } + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + @Transactional + public int deleteRoleById(Long roleId) + { + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(roleId); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(roleId); + return roleMapper.deleteRoleById(roleId); + } + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + @Override + @Transactional + public int deleteRoleByIds(Long[] roleIds) + { + for (Long roleId : roleIds) + { + checkRoleAllowed(new SysRole(roleId)); + SysRole role = selectRoleById(roleId); + if (countUserRoleByRoleId(roleId) > 0) + { + throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName())); + } + } + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenu(roleIds); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDept(roleIds); + return roleMapper.deleteRoleByIds(roleIds); + } + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + @Override + public int deleteAuthUser(SysUserRole userRole) + { + return userRoleMapper.deleteUserRoleInfo(userRole); + } + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * @return 结果 + */ + @Override + public int deleteAuthUsers(Long roleId, Long[] userIds) + { + return userRoleMapper.deleteUserRoleInfos(roleId, userIds); + } + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * @return 结果 + */ + @Override + public int insertAuthUsers(Long roleId, Long[] userIds) + { + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long userId : userIds) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + return userRoleMapper.batchUserRole(list); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java new file mode 100644 index 0000000..f80a877 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java @@ -0,0 +1,96 @@ +package com.ruoyi.system.service.impl; + +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysUserOnline; +import com.ruoyi.system.service.ISysUserOnlineService; + +/** + * 在线用户 服务层处理 + * + * @author ruoyi + */ +@Service +public class SysUserOnlineServiceImpl implements ISysUserOnlineService +{ + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user) + { + if (StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * @return 在线用户 + */ + @Override + public SysUserOnline loginUserToUserOnline(LoginUser user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUser())) + { + return null; + } + SysUserOnline sysUserOnline = new SysUserOnline(); + sysUserOnline.setTokenId(user.getToken()); + sysUserOnline.setUserName(user.getUsername()); + sysUserOnline.setIpaddr(user.getIpaddr()); + sysUserOnline.setLoginLocation(user.getLoginLocation()); + sysUserOnline.setBrowser(user.getBrowser()); + sysUserOnline.setOs(user.getOs()); + sysUserOnline.setLoginTime(user.getLoginTime()); + if (StringUtils.isNotNull(user.getUser().getDept())) + { + sysUserOnline.setDeptName(user.getUser().getDept().getDeptName()); + } + return sysUserOnline; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..5fa90e4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,597 @@ +package com.ruoyi.system.service.impl; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import com.ruoyi.segchk.domain.SegchkProviderMgt; +import com.ruoyi.segchk.mapper.SegchkProviderMgtMapper; +import org.apache.commons.lang3.ObjectUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.domain.SysUserPost; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.mapper.SysPostMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.system.mapper.SysUserPostMapper; +import com.ruoyi.system.mapper.SysUserRoleMapper; +import com.ruoyi.system.service.ISysConfigService; +import com.ruoyi.system.service.ISysUserService; + +/** + * 用户 业务层处理 + * + * @author ruoyi + */ +@Service +public class SysUserServiceImpl implements ISysUserService +{ + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + + @Autowired + private SysUserMapper userMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysPostMapper postMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysUserPostMapper userPostMapper; + + @Autowired + private SegchkProviderMgtMapper segchkProviderMgtMapper; + + @Autowired + private ISysConfigService configService; + + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUserList(SysUser user) + { + List sysUsers = userMapper.selectUserList(user); + SegchkProviderMgt segchkProviderMgt = new SegchkProviderMgt(); + List segchkProviderMgtList = segchkProviderMgtMapper.selectSegchkProviderMgtList(segchkProviderMgt); + Map> collect = segchkProviderMgtList.parallelStream().collect(Collectors.groupingBy(SegchkProviderMgt::getPhoneNo)); + List collect1 = sysUsers.parallelStream().map(v -> { + List segchkProviderMgtList1 = collect.get(v.getPhonenumber()); + if (ObjectUtils.isNotEmpty(segchkProviderMgtList1)) { + v.setProviderId(segchkProviderMgtList1.get(0).getProviderId()); + v.setDistictId(segchkProviderMgtList1.get(0).getDistrictId().longValue()); + } + return v; + }).collect(Collectors.toList()); + return collect1; + } + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectAllocatedList(SysUser user) + { + return userMapper.selectAllocatedList(user); + } + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUnallocatedList(SysUser user) + { + return userMapper.selectUnallocatedList(user); + } + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + @Override + public SysUser selectUserByUserName(String userName) + { + + SysUser sysUser = userMapper.selectUserByUserName(userName); + SegchkProviderMgt segchkProviderMgt = new SegchkProviderMgt(); + segchkProviderMgt.setPhoneNo(sysUser.getPhonenumber()); + List segchkProviderMgtList = segchkProviderMgtMapper.selectSegchkProviderMgtList(segchkProviderMgt); + if(ObjectUtils.isNotEmpty(segchkProviderMgtList) && !segchkProviderMgtList.isEmpty() && segchkProviderMgtList.size() > 0){ + sysUser.setProviderId(segchkProviderMgtList.get(0).getProviderId()); + sysUser.setDistictId(segchkProviderMgtList.get(0).getDistrictId().longValue()); + } + return sysUser; + } + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + @Override + public SysUser selectUserById(Long userId) + { + + SysUser sysUser = userMapper.selectUserById(userId); + SegchkProviderMgt segchkProviderMgt = new SegchkProviderMgt(); + segchkProviderMgt.setPhoneNo(sysUser.getPhonenumber()); + List segchkProviderMgtList = segchkProviderMgtMapper.selectSegchkProviderMgtList(segchkProviderMgt); + if(ObjectUtils.isNotEmpty(segchkProviderMgtList) && !segchkProviderMgtList.isEmpty() && segchkProviderMgtList.size() > 0){ + sysUser.setProviderId(segchkProviderMgtList.get(0).getProviderId()); + sysUser.setDistictId(segchkProviderMgtList.get(0).getDistrictId().longValue()); + } + return sysUser; + } + + /** + * 查询用户所属角色组 + * + * @param userName 用户名 + * @return 结果 + */ + @Override + public String selectUserRoleGroup(String userName) + { + List list = roleMapper.selectRolesByUserName(userName); + StringBuffer idsStr = new StringBuffer(); + for (SysRole role : list) + { + idsStr.append(role.getRoleName()).append(","); + } + if (StringUtils.isNotEmpty(idsStr.toString())) + { + return idsStr.substring(0, idsStr.length() - 1); + } + return idsStr.toString(); + } + + /** + * 查询用户所属岗位组 + * + * @param userName 用户名 + * @return 结果 + */ + @Override + public String selectUserPostGroup(String userName) + { + List list = postMapper.selectPostsByUserName(userName); + StringBuffer idsStr = new StringBuffer(); + for (SysPost post : list) + { + idsStr.append(post.getPostName()).append(","); + } + if (StringUtils.isNotEmpty(idsStr.toString())) + { + return idsStr.substring(0, idsStr.length() - 1); + } + return idsStr.toString(); + } + + /** + * 校验用户名称是否唯一 + * + * @param userName 用户名称 + * @return 结果 + */ + @Override + public String checkUserNameUnique(String userName) + { + int count = userMapper.checkUserNameUnique(userName); + if (count > 0) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验用户名称是否唯一 + * + * @param user 用户信息 + * @return + */ + @Override + public String checkPhoneUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); + SegchkProviderMgt segchkProviderMgt = new SegchkProviderMgt(); + segchkProviderMgt.setPhoneNo(user.getPhonenumber()); + List segchkProviderMgtList = segchkProviderMgtMapper.selectSegchkProviderMgtList(segchkProviderMgt); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue() && ObjectUtils.isNotEmpty(segchkProviderMgtList)) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * @return + */ + @Override + public String checkEmailUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkEmailUnique(user.getEmail()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + @Override + public void checkUserAllowed(SysUser user) + { + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) + { + throw new ServiceException("不允许操作超级管理员用户"); + } + } + + /** + * 新增保存用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + @Transactional + public int insertUser(SysUser user) + { + // 新增用户信息 + int rows = userMapper.insertUser(user); + +// 增加用户信息写入运营商管理表 + SegchkProviderMgt segchkProviderMgt = new SegchkProviderMgt(); +// Long[] roleIds = user.getRoleIds(); + if(ObjectUtils.isNotEmpty(user.getDistictId())) { +// 10以上都是运营商 + segchkProviderMgt.setNickName(user.getNickName()); + segchkProviderMgt.setPhoneNo(user.getPhonenumber()); + segchkProviderMgt.setDistrictId(user.getDistictId().intValue()); + segchkProviderMgt.setFlagId(0); + int ret = segchkProviderMgtMapper.insertSegchkProviderMgt(segchkProviderMgt); + } + // 新增用户岗位关联 + insertUserPost(user); + // 新增用户与角色管理 + insertUserRole(user); + return rows; + } + + /** + * 注册用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public boolean registerUser(SysUser user) + { + return userMapper.insertUser(user) > 0; + } + + /** + * 修改保存用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + @Transactional + public int updateUser(SysUser user) + { + Long userId = user.getUserId(); + // 删除用户与角色关联 + userRoleMapper.deleteUserRoleByUserId(userId); + // 新增用户与角色管理 + insertUserRole(user); + // 删除用户与岗位关联 + userPostMapper.deleteUserPostByUserId(userId); + // 新增用户与岗位管理 + insertUserPost(user); + return userMapper.updateUser(user); + } + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + @Override + @Transactional + public void insertUserAuth(Long userId, Long[] roleIds) + { + userRoleMapper.deleteUserRoleByUserId(userId); + insertUserRole(userId, roleIds); + } + + /** + * 修改用户状态 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int updateUserStatus(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int updateUserProfile(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * @return 结果 + */ + @Override + public boolean updateUserAvatar(String userName, String avatar) + { + return userMapper.updateUserAvatar(userName, avatar) > 0; + } + + /** + * 重置用户密码 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int resetPwd(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * @return 结果 + */ + @Override + public int resetUserPwd(String userName, String password) + { + return userMapper.resetUserPwd(userName, password); + } + + /** + * 新增用户角色信息 + * + * @param user 用户对象 + */ + public void insertUserRole(SysUser user) + { + Long[] roles = user.getRoleIds(); + if (StringUtils.isNotNull(roles)) + { + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long roleId : roles) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(user.getUserId()); + ur.setRoleId(roleId); + list.add(ur); + } + if (list.size() > 0) + { + userRoleMapper.batchUserRole(list); + } + } + } + + /** + * 新增用户岗位信息 + * + * @param user 用户对象 + */ + public void insertUserPost(SysUser user) + { + Long[] posts = user.getPostIds(); + if (StringUtils.isNotNull(posts)) + { + // 新增用户与岗位管理 + List list = new ArrayList(); + for (Long postId : posts) + { + SysUserPost up = new SysUserPost(); + up.setUserId(user.getUserId()); + up.setPostId(postId); + list.add(up); + } + if (list.size() > 0) + { + userPostMapper.batchUserPost(list); + } + } + } + + /** + * 新增用户角色信息 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + public void insertUserRole(Long userId, Long[] roleIds) + { + if (StringUtils.isNotNull(roleIds)) + { + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long roleId : roleIds) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + if (list.size() > 0) + { + userRoleMapper.batchUserRole(list); + } + } + } + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * @return 结果 + */ + @Override + @Transactional + public int deleteUserById(Long userId) + { + // 删除用户与角色关联 + userRoleMapper.deleteUserRoleByUserId(userId); + // 删除用户与岗位表 + userPostMapper.deleteUserPostByUserId(userId); + return userMapper.deleteUserById(userId); + } + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * @return 结果 + */ + @Override + @Transactional + public int deleteUserByIds(Long[] userIds) + { + for (Long userId : userIds) + { + checkUserAllowed(new SysUser(userId)); + } + // 删除用户与角色关联 + userRoleMapper.deleteUserRole(userIds); + // 删除用户与岗位关联 + userPostMapper.deleteUserPost(userIds); + return userMapper.deleteUserByIds(userIds); + } + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + public String importUser(List userList, Boolean isUpdateSupport, String operName) + { + if (StringUtils.isNull(userList) || userList.size() == 0) + { + throw new ServiceException("导入用户数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + String password = configService.selectConfigByKey("sys.user.initPassword"); + for (SysUser user : userList) + { + try + { + // 验证是否存在这个用户 + SysUser u = userMapper.selectUserByUserName(user.getUserName()); + if (StringUtils.isNull(u)) + { + user.setPassword(SecurityUtils.encryptPassword(password)); + user.setCreateBy(operName); + this.insertUser(user); + successNum++; + successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 导入成功"); + } + else if (isUpdateSupport) + { + user.setUpdateBy(operName); + this.updateUser(user); + successNum++; + successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 更新成功"); + } + else + { + failureNum++; + failureMsg.append("
" + failureNum + "、账号 " + user.getUserName() + " 已存在"); + } + } + catch (Exception e) + { + failureNum++; + String msg = "
" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) + { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } +} diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkCarouseMgtMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkCarouseMgtMapper.xml new file mode 100644 index 0000000..84ffe63 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkCarouseMgtMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + select carouse_id, provider_id, store_id, store_carousel, mgt_state, sort_id, mod_time from segchk_carouse_mgt + + + + + + + + insert into segchk_carouse_mgt + + provider_id, + store_id, + store_carousel, + mgt_state, + sort_id, + mod_time, + + + #{providerId}, + #{storeId}, + #{storeCarousel}, + #{mgtState}, + #{sortId}, + #{modTime}, + + + + + update segchk_carouse_mgt + + provider_id = #{providerId}, + store_id = #{storeId}, + store_carousel = #{storeCarousel}, + mgt_state = #{mgtState}, + sort_id = #{sortId}, + mod_time = #{modTime}, + + where carouse_id = #{carouseId} + + + + + update segchk_carouse_mgt + + sort_id=#{item.sortId} + + where carouse_id = #{item.carouseId} + + + + + delete from segchk_carouse_mgt where carouse_id = #{carouseId} + + + + delete from segchk_carouse_mgt where carouse_id in + + #{carouseId} + + + + + delete from segchk_carouse_mgt where store_id in + + #{storeId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkChargeCardMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkChargeCardMapper.xml new file mode 100644 index 0000000..5b73a19 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkChargeCardMapper.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + select provider_id, card_type_id, card_type_name, card_type_value, effective_time, buy_count, card_type_chkcount from segchk_charge_card + + + + + + + + insert into segchk_charge_card + + provider_id, + card_type_name, + card_type_value, + effective_time, + buy_count, + card_type_chkcount, + + + #{providerId}, + #{cardTypeName}, + #{cardTypeValue}, + #{effectiveTime}, + #{buyCount}, + #{cardTypeChkcount}, + + + + + update segchk_charge_card + + provider_id = #{providerId}, + card_type_name = #{cardTypeName}, + card_type_value = #{cardTypeValue}, + effective_time = #{effectiveTime}, + buy_count = #{buyCount}, + card_type_chkcount = #{cardTypeChkcount}, + + where + card_type_id = #{cardTypeId} + + + + delete from segchk_charge_card where card_type_id = #{cardTypeId} + + + + delete from segchk_charge_card where card_type_id in + + #{cardTypeId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkCommentAccMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkCommentAccMapper.xml new file mode 100644 index 0000000..54a2c6a --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkCommentAccMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + select update_id, star_count, star_level, store_id, provider_id, mod_time from segchk_comment_acc + + + + + + + + insert into segchk_comment_acc + + star_count, + star_level, + store_id, + provider_id, + mod_time, + + + #{starCount}, + #{starLevel}, + #{storeId}, + #{providerId}, + + #{modTime}, + now(), + + + + + + update segchk_comment_acc + + star_count = #{starCount}, + star_level = #{starLevel}, + store_id = #{storeId}, + provider_id = #{providerId}, + + mod_time = #{modTime}, + mod_time = now(), + + + where update_id = #{updateId} + + + + delete from segchk_comment_acc where update_id = #{updateId} + + + + delete from segchk_comment_acc where update_id in + + #{updateId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkDistrictInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkDistrictInfoMapper.xml new file mode 100644 index 0000000..433f3a7 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkDistrictInfoMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + select district_id, district_name, district_parent, district_level from segchk_district_info + + + + + + + + insert into segchk_district_info + + district_id, + district_name, + district_parent, + district_level, + + + #{districtId}, + #{districtName}, + #{districtParent}, + #{districtLevel}, + + + + + update segchk_district_info + + district_name = #{districtName}, + district_parent = #{districtParent}, + district_level = #{districtLevel}, + + where district_id = #{districtId} + + + + delete from segchk_district_info where district_id = #{districtId} + + + + delete from segchk_district_info where district_id in + + #{districtId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkIndexStoreAccountMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkIndexStoreAccountMapper.xml new file mode 100644 index 0000000..0139375 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkIndexStoreAccountMapper.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + select store_id, account_type, account_id, account, reward_id, charge_id, cash_id, mod_time, provider_id from segchk_store_account + + + + + + + + insert into segchk_store_account + + store_id, + account_type, + account, + reward_id, + charge_id, + cash_id, + mod_time, + provider_id, + + + #{storeId}, + #{accountType}, + #{account}, + #{rewardId}, + #{chargeId}, + #{cashId}, + #{modTime}, + #{providerId}, + + + + + update segchk_store_account + + store_id = #{storeId}, + account_type = #{accountType}, + account = #{account}, + reward_id = #{rewardId}, + charge_id = #{chargeId}, + cash_id = #{cashId}, + mod_time = #{modTime}, + provider_id = #{providerId}, + + where account_id = #{accountId} + + + + delete from segchk_store_account where account_id = #{accountId} + + + + delete from segchk_store_account where account_id in + + #{accountId} + + + + + + insert into segchk_store_account ( + store_id + , account + , account_type + , cash_id + , mod_time + , provider_id + ) select a.store_id + , (a.account - #{cash}) as account + , 0 as account_type + , #{cashId} as cash_id + , now() as mod_time + , a.provider_id + from + (select * from segchk_store_account where provider_id = #{providerId} and store_id = #{storeId} order by account_id desc limit 1) a + + + + delete from segchk_store_account where cash_id = #{cashId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkIndexUserAccountMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkIndexUserAccountMapper.xml new file mode 100644 index 0000000..f2f2c51 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkIndexUserAccountMapper.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + select user_id, account, account_type, provider_id, account_id, reward_id, charge_id, cash_id from segchk_user_account + + + + + + + + insert into segchk_user_account + + user_id, + account, + account_type, + provider_id, + reward_id, + charge_id, + cash_id, + + + #{userId}, + #{account}, + #{accountType}, + #{providerId}, + #{rewardId}, + #{chargeId}, + #{cashId}, + + + + + update segchk_user_account + + user_id = #{userId}, + account = #{account}, + account_type = #{accountType}, + provider_id = #{providerId}, + reward_id = #{rewardId}, + charge_id = #{chargeId}, + cash_id = #{cashId}, + + where account_id = #{accountId} + + + + delete from segchk_user_account where account_id = #{accountId} + + + + delete from segchk_user_account where account_id in + + #{accountId} + + + + + + + + insert into segchk_user_account + (user_id + ,account + ,account_type + ,provider_id + ) + select user_id, account - #{account} as account, 0, provider_id from segchk_user_account where provider_id = #{providerId} and user_id = #{userId} order by account_id desc limit 1 + + + + delete from segchk_user_account where charge_id = #{chargeId}; + + + + + + insert into segchk_user_account ( + user_id + , account + , account_type + , cash_id + , provider_id + ) select a.user_id + , (a.account - #{cash}) as account + , 0 as account_type + , #{cashId} as cash_id + , a.provider_id + from + (select * from segchk_user_account where provider_id = #{providerId} and user_id = #{userId} order by account_id desc limit 1) a + + + + delete from segchk_user_account where cash_id = #{cashId}; + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkIndexUserVipMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkIndexUserVipMapper.xml new file mode 100644 index 0000000..19e599b --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkIndexUserVipMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + select card_id, card_type_id, user_id, provider_id, mod_time, effective_time, use_count, left_count, status from segchk_user_vip + + + + + update segchk_user_vip set mod_time = now(), use_count = use_count + 1, status = if(left_count = 1, 1, 0), left_count = if(left_count = 1, 0, left_count - 1) where card_id = #{cardId} + + + + insert into segchk_user_vip ( + card_type_id + , user_id + , provider_id + , mod_time + , effective_time + , use_count + , left_count + , status) + select * from ( select suc.card_type_id, suc.user_id, suc.provider_id, now() as mod_time, now() + interval scc.effective_time day as effective_time, 0 as use_count, scc.card_type_chkcount as left_count, 0 as status from + (select user_id, card_type_id, provider_id from segchk_user_charge where charge_id = #{chargeId} and ret_flag = 0) suc + left join segchk_charge_card scc on suc.provider_id = scc.provider_id and suc.card_type_id = scc.card_type_id) ret + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkKeywordLableMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkKeywordLableMapper.xml new file mode 100644 index 0000000..ac772e0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkKeywordLableMapper.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + select provider_id, keyword_id, keyword_name, mod_time, keyword_url from segchk_keyword_lable + + + + + + + + insert into segchk_keyword_lable + + provider_id, + keyword_name, + mod_time, + keyword_url, + + + #{providerId}, + #{keywordName}, + now(), + #{keywordUrl}, + + + + + update segchk_keyword_lable + + provider_id = #{providerId}, + keyword_name = #{keywordName}, + mod_time = now(), + keyword_url = #{keywordUrl}, + + where + keyword_id = #{keywordId} + + + + delete from segchk_keyword_lable where provider_id = #{providerId} + + + + delete from segchk_keyword_lable where keyword_id in + + #{keywordId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkLableMgtMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkLableMgtMapper.xml new file mode 100644 index 0000000..fa0d3ce --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkLableMgtMapper.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + select mgt_id, provider_id, card_type_id, card_type_name, mgt_state, mod_time, sort_id, lable_flag, icon_url from segchk_lable_mgt + + + + + + + + insert into segchk_lable_mgt + + provider_id, + card_type_id, + card_type_name, + mgt_state, + mod_time, + sort_id, + lable_flag, + icon_url, + + + #{providerId}, + #{cardTypeId}, + #{cardTypeName}, + #{mgtState}, + #{modTime}, + #{sortId}, + #{lableFlag}, + #{iconUrl}, + + + + + update segchk_lable_mgt + + provider_id = #{providerId}, + card_type_id = #{cardTypeId}, + card_type_name = #{cardTypeName}, + mgt_state = #{mgtState}, + mod_time = #{modTime}, + sort_id = #{sortId}, + lable_flag = #{lableFlag}, + icon_url = #{iconUrl}, + + where mgt_id = #{mgtId} + + + + delete from segchk_lable_mgt where mgt_id = #{mgtId} + + + + delete from segchk_lable_mgt where mgt_id in + + #{mgtId} + + + + + + delete from segchk_lable_mgt where card_type_id in + + #{cardTypeId} + + and lable_flag = #{typeId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkLogionDetailMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkLogionDetailMapper.xml new file mode 100644 index 0000000..2404934 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkLogionDetailMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + select user_id, logion_time, user_level, login_id, provider_id from segchk_logion_detail + + + + + + + + insert into segchk_logion_detail + + user_id, + logion_time, + user_level, + provider_id, + + + #{userId}, + #{logionTime}, + #{userLevel}, + #{providerId}, + + + + + update segchk_logion_detail + + user_id = #{userId}, + logion_time = #{logionTime}, + user_level = #{userLevel}, + provider_id = #{providerId}, + + where login_id = #{loginId} + + + + delete from segchk_logion_detail where login_id = #{loginId} + + + + delete from segchk_logion_detail where login_id in + + #{loginId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkMsgDetailMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkMsgDetailMapper.xml new file mode 100644 index 0000000..abc370a --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkMsgDetailMapper.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + select from_id, to_id, msg_type, msg_content, msg_title, from_time, get_time, msg_id, msg_flag, provider_id, recv_level from segchk_msg_detail + + + + + + + + insert into segchk_msg_detail + + from_id, + to_id, + msg_type, + msg_content, + msg_title, + from_time, + get_time, + msg_flag, + provider_id, + recv_level, + + + #{fromId}, + #{toId}, + #{msgType}, + #{msgContent}, + #{msgTitle}, + #{fromTime}, + #{getTime}, + #{msgFlag}, + #{providerId}, + #{recvLevel}, + + + + + update segchk_msg_detail + + from_id = #{fromId}, + to_id = #{toId}, + msg_type = #{msgType}, + msg_content = #{msgContent}, + msg_title = #{msgTitle}, + from_time = #{fromTime}, + get_time = #{getTime}, + msg_flag = #{msgFlag}, + provider_id = #{providerId}, + recv_level = #{recvLevel}, + + where msg_id = #{msgId} + + + + delete from segchk_msg_detail where msg_id = #{msgId} + + + + delete from segchk_msg_detail where msg_id in + + #{msgId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkPreferenceLableMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkPreferenceLableMapper.xml new file mode 100644 index 0000000..4673503 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkPreferenceLableMapper.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + select provider_id, preference_id, preference_name, mod_time, preference_url from segchk_preference_lable + + + + + + + + insert into segchk_preference_lable + + provider_id, + preference_name, + mod_time, + preference_url, + + + #{providerId}, + #{preferenceName}, + now(), + #{preferenceUrl}, + + + + + update segchk_preference_lable + + provider_id = #{providerId}, + preference_name = #{preferenceName}, + mod_time = #{modTime}, + preference_url = #{preferenceUrl}, + + where + preference_id = #{preferenceId} + + + + delete from segchk_preference_lable where preference_id = #{preferenceId} + + + + delete from segchk_preference_lable where preference_id in + + #{preferenceId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkProviderMgtMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkProviderMgtMapper.xml new file mode 100644 index 0000000..2121e3b --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkProviderMgtMapper.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select openid, union_id, wechat_id, provider_id, nick_name, icon_url, phone_no, flag_id, District_id, create_time, del_time, update_time from segchk_provider_mgt + + + + + + + + + + insert into segchk_provider_mgt + + openid, + union_id, + wechat_id, + nick_name, + icon_url, + phone_no, + flag_id, + District_id, + create_time, + del_time, + update_time, + + + #{openid}, + #{unionId}, + #{wechatId}, + #{nickName}, + #{iconUrl}, + #{phoneNo}, + #{flagId}, + #{districtId}, + #{createTime}, + #{delTime}, + #{updateTime}, + + + + + update segchk_provider_mgt + + openid = #{openid}, + union_id = #{unionId}, + wechat_id = #{wechatId}, + nick_name = #{nickName}, + icon_url = #{iconUrl}, + phone_no = #{phoneNo}, + flag_id = #{flagId}, + District_id = #{districtId}, + create_time = #{createTime}, + del_time = #{delTime}, + update_time = #{updateTime}, + + where provider_id = #{providerId} + + + + delete from segchk_provider_mgt where provider_id = #{providerId} + + + + delete from segchk_provider_mgt where provider_id in + + #{providerId} + + + + + delete from segchk_lable_mgt where provider_id in + + #{providerId} + + + + + delete from segchk_lable_mgt where provider_id = #{providerId} + + + + insert into segchk_lable_mgt( provider_id, card_type_id, card_type_name, mgt_state, mod_time, sort_id, lable_flag, icon_url) values + + ( #{item.providerId}, #{item.cardTypeId}, #{item.cardTypeName}, #{item.mgtState}, #{item.modTime}, #{item.sortId}, #{item.lableFlag}, #{item.iconUrl}) + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkRecommenderIndexMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkRecommenderIndexMapper.xml new file mode 100644 index 0000000..83375de --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkRecommenderIndexMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + select provider_id, store_id, mgt_state, mod_time, sort_id, recommender_id from segchk_recommender_store + + + + + + + + insert into segchk_recommender_store + + provider_id, + store_id, + mgt_state, + mod_time, + sort_id, + + + #{providerId}, + #{storeId}, + #{mgtState}, + #{modTime}, + #{sortId}, + + + + + update segchk_recommender_store + + provider_id = #{providerId}, + store_id = #{storeId}, + mgt_state = #{mgtState}, + mod_time = #{modTime}, + sort_id = #{sortId}, + + where recommender_id = #{recommenderId} + + + + delete from segchk_recommender_store where recommender_id = #{recommenderId} + + + + delete from segchk_recommender_store where recommender_id in + + #{recommenderId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkRecommenderStoreMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkRecommenderStoreMapper.xml new file mode 100644 index 0000000..b382074 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkRecommenderStoreMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + select provider_id, store_id, mgt_state, mod_time, sort_id, recommender_id from segchk_recommender_store + + + + + + + + insert into segchk_recommender_store + + provider_id, + store_id, + mgt_state, + mod_time, + sort_id, + + + #{providerId}, + #{storeId}, + #{mgtState}, + #{modTime}, + #{sortId}, + + + + + update segchk_recommender_store + + provider_id = #{providerId}, + store_id = #{storeId}, + mgt_state = #{mgtState}, + mod_time = #{modTime}, + sort_id = #{sortId}, + + where recommender_id = #{recommenderId} + + + + delete from segchk_recommender_store where recommender_id = #{recommenderId} + + + + delete from segchk_recommender_store where recommender_id in + + #{recommenderId} + + + + delete from segchk_recommender_store where store_id in + + #{storeId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkSalerInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkSalerInfoMapper.xml new file mode 100644 index 0000000..af936fd --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkSalerInfoMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + select provider_id, mod_time, saler_id, saler_name, saler_phone, saler_card, saler_state from segchk_saler_info + + + + + + + + insert into segchk_saler_info + + provider_id, + mod_time, + saler_name, + saler_phone, + saler_card, + saler_state, + + + #{providerId}, + #{modTime}, + #{salerName}, + #{salerPhone}, + #{salerCard}, + #{salerState}, + + + + + update segchk_saler_info + + provider_id = #{providerId}, + mod_time = #{modTime}, + saler_name = #{salerName}, + saler_phone = #{salerPhone}, + saler_card = #{salerCard}, + saler_state = #{salerState}, + + where saler_id = #{salerId} + + + + delete from segchk_saler_info where saler_id = #{salerId} + + + + delete from segchk_saler_info where saler_id in + + #{salerId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkSelfServiceChkMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkSelfServiceChkMapper.xml new file mode 100644 index 0000000..b2a37f0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkSelfServiceChkMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + select provider_id, card_id, store_id, user_id, mod_time, chk_service_id from segchk_self_service_chk + + + + + + + + insert into segchk_self_service_chk + + provider_id, + card_id, + store_id, + user_id, + mod_time, + + + #{providerId}, + #{cardId}, + #{storeId}, + #{userId}, + #{modTime}, + + + + + update segchk_self_service_chk + + provider_id = #{providerId}, + card_id = #{cardId}, + store_id = #{storeId}, + user_id = #{userId}, + mod_time = #{modTime}, + + where chk_service_id = #{chkServiceId} + + + + delete from segchk_self_service_chk where chk_service_id = #{chkServiceId} + + + + delete from segchk_self_service_chk where chk_service_id in + + #{chkServiceId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkServiceChkMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkServiceChkMapper.xml new file mode 100644 index 0000000..2232753 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkServiceChkMapper.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + select provider_id, card_id, store_id, card_type_id, user_id, mod_time, chk_service_id, comment_id from segchk_service_chk + + + + + + + + insert into segchk_service_chk + + provider_id, + card_id, + store_id, + user_id, + mod_time, + comment_id, + card_type_id, + + select base.*, card.card_type_id from + ( + select + + #{providerId} as provider_id, + #{cardId} as card_id, + #{storeId} as store_id, + #{userId} as user_id, + now() as mod_time, + #{commentId} as comment_id, + + ) base + left join + (select card_type_id, provider_id, user_id, card_id from segchk_user_vip where card_id = #{cardId} and user_id = #{userId}) card on base.card_id = card.card_id + + + + + update segchk_service_chk + + provider_id = #{providerId}, + card_id = #{cardId}, + store_id = #{storeId}, + card_type_id = #{cardTypeId}, + user_id = #{userId}, + mod_time = #{modTime}, + comment_id = #{commentId}, + + where chk_service_id = #{chkServiceId} + + + + delete from segchk_service_chk where chk_service_id = #{chkServiceId} + + + + delete from segchk_service_chk where chk_service_id in + + #{chkServiceId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkServiceCommentMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkServiceCommentMapper.xml new file mode 100644 index 0000000..99205a3 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkServiceCommentMapper.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + select comment_id, star_level, content_text, mod_time, provider_id, store_id from segchk_service_comment + + + + + + + + insert into segchk_service_comment + + star_level, + content_text, + mod_time, + provider_id, + store_id, + + + #{starLevel}, + #{contentText}, + #{modTime}, + #{providerId}, + #{storeId}, + + + + + update segchk_service_comment + + star_level = #{starLevel}, + content_text = #{contentText}, + mod_time = #{modTime}, + provider_id = #{providerId}, + store_id = #{storeId}, + + where comment_id = #{commentId} + + + + delete from segchk_service_comment where comment_id = #{commentId} + + + + delete from segchk_service_comment where comment_id in + + #{commentId} + + + + + insert into segchk_service_comment + + star_level, + content_text, + mod_time, + provider_id, + store_id, + + select #{starLevel} as star_level + , #{contentText} as content_text + + , #{modTime} as mod_time + , now() as mod_time + + , provider_id + , store_id + from segchk_service_chk where chk_service_id = #{chkServiceId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkSmsDetailMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkSmsDetailMapper.xml new file mode 100644 index 0000000..e7bdd0a --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkSmsDetailMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + select phone_no, create_time, validate_code, flag, short_msg_id, provider_id from segchk_sms_detail + + + + + + + + insert into segchk_sms_detail + + phone_no, + create_time, + validate_code, + flag, + provider_id, + + + #{phoneNo}, + #{createTime}, + #{validateCode}, + #{flag}, + #{providerId}, + + + + + update segchk_sms_detail + + phone_no = #{phoneNo}, + create_time = #{createTime}, + validate_code = #{validateCode}, + flag = #{flag}, + provider_id = #{providerId}, + + where short_msg_id = #{shortMsgId} + + + + delete from segchk_sms_detail where short_msg_id = #{shortMsgId} + + + + delete from segchk_sms_detail where short_msg_id in + + #{shortMsgId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreAccountMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreAccountMapper.xml new file mode 100644 index 0000000..8726ec8 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreAccountMapper.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + select store_id, account, account_type, account_id, reward_id, charge_id, cash_id, mod_time, provider_id from segchk_store_account + + + + + + + + insert into segchk_store_account + + store_id, + account, + account_type, + reward_id, + charge_id, + cash_id, + mod_time, + provider_id, + + + #{storeId}, + #{account}, + #{accountType}, + #{rewardId}, + #{chargeId}, + #{cashId}, + + #{modTime}, + now(), + + #{providerId}, + + + + + update segchk_store_account + + store_id = #{storeId}, + account = #{account}, + account_type = #{accountType}, + reward_id = #{rewardId}, + charge_id = #{chargeId}, + cash_id = #{cashId}, + + mod_time = #{modTime}, + mod_time = now(), + + provider_id = #{providerId}, + + where account_id = #{accountId} + + + + delete from segchk_store_account where account_id = #{accountId} + + + + delete from segchk_store_account where account_id in + + #{accountId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreBasicInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreBasicInfoMapper.xml new file mode 100644 index 0000000..2f6e27f --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreBasicInfoMapper.xml @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select provider_id, store_id, store_name, store_phone, openid, union_id, nick_name, icon_url, service_state, saler_id, effective_date, store_corporation, store_addr, store_card, with_msg, cash_threshold, cash_day, service_down_threshold, state_flag, store_lon, store_lat, on_service, detail, mod_time from segchk_store_basic_info + + + + + + + + + insert into segchk_store_basic_info + + provider_id, + store_name, + store_phone, + openid, + union_id, + nick_name, + icon_url, + service_state, + saler_id, + effective_date, + store_corporation, + store_addr, + store_card, + with_msg, + cash_threshold, + cash_day, + service_down_threshold, + state_flag, + store_lon, + store_lat, + on_service, + detail, + mod_time, + + + #{providerId}, + #{storeName}, + #{storePhone}, + #{openid}, + #{union_id}, + #{nickName}, + #{iconUrl}, + #{serviceState}, + #{salerId}, + #{effectiveDate}, + #{storeCorporation}, + #{storeAddr}, + #{storeCard}, + #{withMsg}, + #{cashThreshold}, + #{cashDay}, + #{serviceDownThreshold}, + #{stateFlag}, + #{storeLon}, + #{storeLat}, + #{onService}, + #{detail}, + #{modTime}, + + + + + update segchk_store_basic_info + + provider_id = #{providerId}, + store_name = #{storeName}, + store_phone = #{storePhone}, + openid = #{openid}, + union_id = #{unionId}, + nick_name = #{nickName}, + icon_url = #{iconUrl}, + service_state = #{serviceState}, + saler_id = #{salerId}, + effective_date = #{effectiveDate}, + store_corporation = #{storeCorporation}, + store_addr = #{storeAddr}, + store_card = #{storeCard}, + with_msg = #{withMsg}, + cash_threshold = #{cashThreshold}, + cash_day = #{cashDay}, + service_down_threshold = #{serviceDownThreshold}, + state_flag = #{stateFlag}, + store_lon = #{storeLon}, + store_lat = #{storeLat}, + on_service = #{onService}, + detail = #{detail}, + mod_time = #{modTime}, + + where store_id = #{storeId} + + + + delete from segchk_store_basic_info where store_id = #{storeId} + + + + delete from segchk_store_basic_info where store_id in + + #{storeId} + + + + + delete from segchk_store_image where store_id in + + #{storeId} + + + + + delete from segchk_store_chk_mgt where store_id in + + #{storeId} + + + + + delete from segchk_store_lable_mgt where store_id in + + #{storeId} + + + + + delete from segchk_store_security where store_id in + + #{storeId} + + + + + delete from segchk_store_image where store_id = #{storeId} + + + + delete from segchk_store_chk_mgt where store_id = #{storeId} + + + + delete from segchk_store_lable_mgt where store_id = #{storeId} + + + + delete from segchk_store_security where store_id = #{storeId} + + + + insert into segchk_store_image( provider_id, store_id, store_certificate1, store_certificate2, store_icon, store_gificon, store_carousel1, store_carousel2, store_carousel3, store_carousel4, store_carousel5, store_carousel6, store_env1, store_env2, store_env3, store_env4, mod_time) values + + ( #{item.providerId}, #{item.storeId}, #{item.storeCertificate1}, #{item.storeCertificate2}, #{item.storeIcon}, #{item.storeGificon}, #{item.storeCarousel1}, #{item.storeCarousel2}, #{item.storeCarousel3}, #{item.storeCarousel4}, #{item.storeCarousel5}, #{item.storeCarousel6}, #{item.storeEnv1}, #{item.storeEnv2}, #{item.storeEnv3}, #{item.storeEnv4}, now()) + + + + + insert into segchk_store_chk_mgt( + provider_id + , store_id + , card_type_id + , chk_count + , sale_count + , card_commission + , saler_commission ) values + + ( #{item.providerId} + , #{item.storeId} + , #{item.cardTypeId} + , #{item.chkCount} + , #{item.saleCount} + , #{item.cardCommission} + , #{item.salerCommission} + ) + + + + + insert into segchk_store_lable_mgt( + store_id + , provider_id + , lable_id + , sort_id + , type_id + , mgt_state + , mod_time ) values + + ( #{item.storeId} + , #{item.providerId} + , #{item.lableId} + , #{item.sortId} + , #{item.typeId} + , #{item.mgtState} + , now() + ) + + + + + insert into segchk_store_security( + store_id + , passwd + , mod_time + , provider_id ) values + + ( #{item.storeId} + , #{item.passwd} + , now() + , #{item.providerId} + ) + + + + + + update segchk_store_basic_info + + service_state = #{serviceState}, + with_msg = #{withMsg}, + mod_time = now(), + + where store_id = #{storeId} + and provider_id = #{providerId} + + + update segchk_store_basic_info set detail = #{detail} + where store_id = #{storeId} + and provider_id = #{providerId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreCashMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreCashMapper.xml new file mode 100644 index 0000000..f293592 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreCashMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + select store_id, cash, cash_type, cash_id, provider_id, mod_time, ret_flag from segchk_store_cash + + + + + + + + insert into segchk_store_cash + + store_id, + cash, + cash_type, + provider_id, + mod_time, + ret_flag, + + + #{storeId}, + #{cash}, + #{cashType}, + #{providerId}, + #{modTime}, + #{retFlag}, + + + + + update segchk_store_cash + + store_id = #{storeId}, + cash = #{cash}, + cash_type = #{cashType}, + provider_id = #{providerId}, + mod_time = #{modTime}, + ret_flag = #{retFlag}, + + where cash_id = #{cashId} + + + + delete from segchk_store_cash where cash_id = #{cashId} + + + + delete from segchk_store_cash where cash_id in + + #{cashId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreChargeMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreChargeMapper.xml new file mode 100644 index 0000000..5e25b77 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreChargeMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + select store_id, charge, charge_type, charge_id, provider_id, mod_time, ret_flag from segchk_store_charge + + + + + + + + insert into segchk_store_charge + + store_id, + charge, + charge_type, + provider_id, + mod_time, + ret_flag, + + + #{storeId}, + #{charge}, + #{chargeType}, + #{providerId}, + #{modTime}, + #{retFlag}, + + + + + update segchk_store_charge + + store_id = #{storeId}, + charge = #{charge}, + charge_type = #{chargeType}, + provider_id = #{providerId}, + mod_time = #{modTime}, + ret_flag = #{retFlag}, + + where charge_id = #{chargeId} + + + + delete from segchk_store_charge where charge_id = #{chargeId} + + + + delete from segchk_store_charge where charge_id in + + #{chargeId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreChkMgtMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreChkMgtMapper.xml new file mode 100644 index 0000000..e541444 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreChkMgtMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + select provider_id, store_id, card_type_id, chk_count, sale_count, card_commission, saler_commission, mgt_id from segchk_store_chk_mgt + + + + + + + + insert into segchk_store_chk_mgt + + provider_id, + store_id, + card_type_id, + chk_count, + sale_count, + card_commission, + saler_commission, + + + #{providerId}, + #{storeId}, + #{cardTypeId}, + #{chkCount}, + #{saleCount}, + #{cardCommission}, + #{salerCommission}, + + + + + update segchk_store_chk_mgt + + provider_id = #{providerId}, + store_id = #{storeId}, + card_type_id = #{cardTypeId}, + chk_count = #{chkCount}, + sale_count = #{saleCount}, + card_commission = #{cardCommission}, + saler_commission = #{salerCommission}, + + where mgt_id = #{mgtId} + + + + delete from segchk_store_chk_mgt where mgt_id = #{mgtId} + + + + delete from segchk_store_chk_mgt where mgt_id in + + #{mgtId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreImageMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreImageMapper.xml new file mode 100644 index 0000000..7aa86d4 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreImageMapper.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select provider_id, store_id, store_certificate1, store_certificate2, store_icon, store_gificon, store_carousel1, store_carousel2, store_carousel3, store_carousel4, store_carousel5, store_carousel6, store_env1, store_env2, store_env3, store_env4, mod_time from segchk_store_image + + + + + + + + insert into segchk_store_image + + provider_id, + store_id, + store_certificate1, + store_certificate2, + store_icon, + store_gificon, + store_carousel1, + store_carousel2, + store_carousel3, + store_carousel4, + store_carousel5, + store_carousel6, + store_env1, + store_env2, + store_env3, + store_env4, + mod_time, + + + #{providerId}, + #{storeId}, + #{storeCertificate1}, + #{storeCertificate2}, + #{storeIcon}, + #{storeGificon}, + #{storeCarousel1}, + #{storeCarousel2}, + #{storeCarousel3}, + #{storeCarousel4}, + #{storeCarousel5}, + #{storeCarousel6}, + #{storeEnv1}, + #{storeEnv2}, + #{storeEnv3}, + #{storeEnv4}, + + #{modTime}, + now(), + + + + + + update segchk_store_image + + provider_id = #{providerId}, + store_certificate1 = #{storeCertificate1}, + store_certificate2 = #{storeCertificate2}, + store_icon = #{storeIcon}, + store_gificon = #{storeGificon}, + store_carousel1 = #{storeCarousel1}, + store_carousel2 = #{storeCarousel2}, + store_carousel3 = #{storeCarousel3}, + store_carousel4 = #{storeCarousel4}, + store_carousel5 = #{storeCarousel5}, + store_carousel6 = #{storeCarousel6}, + store_env1 = #{storeEnv1}, + store_env2 = #{storeEnv2}, + store_env3 = #{storeEnv3}, + store_env4 = #{storeEnv4}, + + mod_time = #{modTime}, + mod_time = now(), + + + + where store_id = #{storeId} + + + + delete from segchk_store_image where store_id = #{storeId} + + + + delete from segchk_store_image where store_id in + + #{storeId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreLableMgtMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreLableMgtMapper.xml new file mode 100644 index 0000000..d8d719a --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreLableMgtMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + select store_id, provider_id, lable_id, sort_id, type_id, mgt_state, mod_time, mgt_id from segchk_store_lable_mgt + + + + + + + + insert into segchk_store_lable_mgt + + store_id, + provider_id, + lable_id, + sort_id, + type_id, + mgt_state, + mod_time, + + + #{storeId}, + #{providerId}, + #{lableId}, + #{sortId}, + #{typeId}, + #{mgtState}, + + #{modTime}, + now(), + + + + + + update segchk_store_lable_mgt + + store_id = #{storeId}, + provider_id = #{providerId}, + lable_id = #{lableId}, + sort_id = #{sortId}, + type_id = #{typeId}, + mgt_state = #{mgtState}, + + mod_time = #{modTime}, + mod_time = now(), + + + where mgt_id = #{mgtId} + + + + delete from segchk_store_lable_mgt where mgt_id = #{mgtId} + + + + delete from segchk_store_lable_mgt where mgt_id in + + #{mgtId} + + + + delete from segchk_store_lable_mgt where lable_id in + + #{cardTypeId} + + and type_id = #{typeId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreRewardMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreRewardMapper.xml new file mode 100644 index 0000000..e6ccf8f --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreRewardMapper.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + select store_id, reward, reward_type, reward_card_id, reward_card_type_id, mod_time, reward_id, provider_id from segchk_store_reward + + + + + + + + insert into segchk_store_reward + + store_id, + reward, + reward_type, + reward_card_id, + reward_card_type_id, + mod_time, + provider_id, + + + #{storeId}, + #{reward}, + #{rewardType}, + #{rewardCardId}, + #{rewardCardTypeId}, + + #{modTime}, + now(), + + #{providerId}, + + + + + update segchk_store_reward + + store_id = #{storeId}, + reward = #{reward}, + reward_type = #{rewardType}, + reward_card_id = #{rewardCardId}, + reward_card_type_id = #{rewardCardTypeId}, + + mod_time = #{modTime}, + mod_time = now(), + + provider_id = #{providerId}, + + where reward_id = #{rewardId} + + + + delete from segchk_store_reward where reward_id = #{rewardId} + + + + delete from segchk_store_reward where reward_id in + + #{rewardId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSecurityMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSecurityMapper.xml new file mode 100644 index 0000000..8ce094f --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSecurityMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + select store_id, passwd, mod_time, pwd_id, provider_id from segchk_store_security + + + + + + + + insert into segchk_store_security + + store_id, + passwd, + mod_time, + provider_id, + + + #{storeId}, + #{passwd}, + #{modTime}, + #{providerId}, + + + + + update segchk_store_security + + store_id = #{storeId}, + passwd = #{passwd}, + mod_time = #{modTime}, + provider_id = #{providerId}, + + where pwd_id = #{pwdId} + + + + delete from segchk_store_security where pwd_id = #{pwdId} + + + + delete from segchk_store_security where pwd_id in + + #{pwdId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSelfMgtMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSelfMgtMapper.xml new file mode 100644 index 0000000..6bb6e38 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkStoreSelfMgtMapper.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + select free_card_id, mod_time, store_id, provider_id, user_id, card_id, lable_id, type_id, free_count, free_name, free_content, left_count, status from segchk_store_self_mgt + + + + + + + + insert into segchk_store_self_mgt + + mod_time, + store_id, + provider_id, + user_id, + card_id, + lable_id, + type_id, + free_count, + free_name, + free_content, + left_count, + status, + + + + #{modTime}, + if(true, (select effective_time from segchk_user_vip where card_id = #{cardId}), now()), + + + #{storeId}, + #{providerId}, + #{userId}, + #{cardId}, + #{lableId}, + #{typeId}, + #{freeCount}, + #{freeName}, + #{freeContent}, + #{leftCount}, + #{status}, + + + + + update segchk_store_self_mgt + + mod_time = #{modTime}, + store_id = #{storeId}, + provider_id = #{providerId}, + user_id = #{userId}, + card_id = #{cardId}, + lable_id = #{lableId}, + type_id = #{typeId}, + free_count = #{freeCount}, + free_name = #{freeName}, + free_content = #{freeContent}, + left_count = #{leftCount}, + status = #{status}, + + where free_card_id = #{freeCardId} + + + + delete from segchk_store_self_mgt where free_card_id = #{freeCardId} + + + + delete from segchk_store_self_mgt where free_card_id in + + #{freeCardId} + + + + + update segchk_store_self_mgt set status = if(left_count = 1, 1, 0), left_count = if(left_count = 1, 0, left_count - 1) where free_card_id = #{cardId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkSystemSettingMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkSystemSettingMapper.xml new file mode 100644 index 0000000..acdf2b0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkSystemSettingMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, site_url, site_name, logo, label_log, site_login, site_register, store_login, store_register, copyright_info, register_protocol, user_privacy_agreement, vip_service_agreement, store_register_protocol, store_open_protocol, phone, admin_logo, admin_index_logo, captcha_open, store_spu_audit, member_price_status, crowdfunding_protocol, h5_call_back_domain, pc_call_back_domain from segchk_system_setting + + + + + + + + insert into segchk_system_setting + + site_url, + site_name, + logo, + label_log, + site_login, + site_register, + store_login, + store_register, + copyright_info, + register_protocol, + user_privacy_agreement, + vip_service_agreement, + store_register_protocol, + store_open_protocol, + phone, + admin_logo, + admin_index_logo, + captcha_open, + store_spu_audit, + member_price_status, + crowdfunding_protocol, + h5_call_back_domain, + pc_call_back_domain, + + + #{siteUrl}, + #{siteName}, + #{logo}, + #{labelLog}, + #{siteLogin}, + #{siteRegister}, + #{storeLogin}, + #{storeRegister}, + #{copyrightInfo}, + #{registerProtocol}, + #{userPrivacyAgreement}, + #{vipServiceAgreement}, + #{storeRegisterProtocol}, + #{storeOpenProtocol}, + #{phone}, + #{adminLogo}, + #{adminIndexLogo}, + #{captchaOpen}, + #{storeSpuAudit}, + #{memberPriceStatus}, + #{crowdfundingProtocol}, + #{h5CallBackDomain}, + #{pcCallBackDomain}, + + + + + update segchk_system_setting + + site_url = #{siteUrl}, + site_name = #{siteName}, + logo = #{logo}, + label_log = #{labelLog}, + site_login = #{siteLogin}, + site_register = #{siteRegister}, + store_login = #{storeLogin}, + store_register = #{storeRegister}, + copyright_info = #{copyrightInfo}, + register_protocol = #{registerProtocol}, + user_privacy_agreement = #{userPrivacyAgreement}, + vip_service_agreement = #{vipServiceAgreement}, + store_register_protocol = #{storeRegisterProtocol}, + store_open_protocol = #{storeOpenProtocol}, + phone = #{phone}, + admin_logo = #{adminLogo}, + admin_index_logo = #{adminIndexLogo}, + captcha_open = #{captchaOpen}, + store_spu_audit = #{storeSpuAudit}, + member_price_status = #{memberPriceStatus}, + crowdfunding_protocol = #{crowdfundingProtocol}, + h5_call_back_domain = #{h5CallBackDomain}, + pc_call_back_domain = #{pcCallBackDomain}, + + where id = #{id} + + + + delete from segchk_system_setting where id = #{id} + + + + delete from segchk_system_setting where id in + + #{id} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,phone,logo,site_url,site_name,label_log,admin_logo,captcha_open,site_login,store_login,site_register,store_register,copyright_info,admin_index_logo, + store_open_protocol,register_protocol + ,user_privacy_agreement,vip_service_agreement,store_register_protocol,store_spu_audit,member_price_status,crowdfunding_protocol,h5_call_back_domain,pc_call_back_domain + + + + + UPDATE segchk_system_setting SET + phone=#{phone},logo=#{logo},site_url=#{siteUrl},site_name=#{siteName},label_log=#{labelLog},admin_logo=#{adminLogo}, + site_login=#{siteLoginPic},store_login=#{storeLoginPic},site_register=#{siteRegisterPic},store_register=#{storeRegisterPic}, + copyright_info=#{copyrightInfo},admin_index_logo=#{adminIndexLogo},store_open_protocol=#{storeOpenProtocol} + ,register_protocol=#{siteRegisterProtocol} + ,user_privacy_agreement=#{userPrivacyAgreement} + ,vip_service_agreement=#{vipServiceAgreement} + ,store_register_protocol=#{storeRegisterProtocol} + ,crowdfunding_protocol=#{crowdFundingProtocol} + ,h5_call_back_domain=#{h5CallBackDomain},pc_call_back_domain=#{pcCallBackDomain} + + + UPDATE segchk_system_setting SET captcha_open = #{captchaOpen} + + + UPDATE segchk_system_setting SET store_spu_audit = #{storeSpuAudit} + + + UPDATE segchk_system_setting SET member_price_status = #{memberPriceStatus} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserAccountMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserAccountMapper.xml new file mode 100644 index 0000000..10c661b --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserAccountMapper.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + select user_id, account, account_type, provider_id, account_id, reward_id, charge_id, cash_id from segchk_user_account + + + + + + + + insert into segchk_user_account + + user_id, + account, + account_type, + provider_id, + reward_id, + charge_id, + cash_id, + + + #{userId}, + #{account}, + #{accountType}, + #{providerId}, + #{rewardId}, + #{chargeId}, + #{cashId}, + + + + insert into segchk_user_account + + user_id, + account, + account_type, + provider_id, + reward_id, + charge_id, + cash_id, + + select + + uc.user_id, + if(isnull(account), 0.0, (account - uc.account_use)) as account, + , ifnull(sua.account_type, 0) as account_type + , ifnull(sua.provider_id,uc.provider_id) as provider_id + , ifnull(sua.reward_id, 0) + , uc.charge_id + , ifnull(sua.cash_id, 0) + + from + (select #{account} as account_use, #{userId} as user_id, #{chargeId} as charge_id, #{providerId} as provider_id) uc + left join + ( + select user_id, account, account_type, provider_id, account_id, reward_id, charge_id, cash_id from segchk_user_account where user_id = #{userId} order by account_id desc limit 1 + ) sua + on uc.user_id = sua.user_id; + + + + update segchk_user_account + + user_id = #{userId}, + account = #{account}, + account_type = #{accountType}, + provider_id = #{providerId}, + reward_id = #{rewardId}, + charge_id = #{chargeId}, + cash_id = #{cashId}, + + where account_id = #{accountId} + + + + delete from segchk_user_account where account_id = #{accountId} + + + + delete from segchk_user_account where account_id in + + #{accountId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserBasicInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserBasicInfoMapper.xml new file mode 100644 index 0000000..a207701 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserBasicInfoMapper.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select user_id, phone_no, user_icon, has_wechat, card_type_id, provider_id from segchk_user_basic_info + + + + + + + + insert into segchk_user_basic_info + + phone_no, + user_icon, + has_wechat, + card_type_id, + provider_id, + + + #{phoneNo}, + #{userIcon}, + #{hasWechat}, + #{cardTypeId}, + #{providerId}, + + + + + update segchk_user_basic_info + + phone_no = #{phoneNo}, + user_icon = #{userIcon}, + has_wechat = #{hasWechat}, + card_type_id = #{cardTypeId}, + provider_id = #{providerId}, + + where user_id = #{userId} + + + + delete from segchk_user_basic_info where user_id = #{userId} + + + + delete from segchk_user_basic_info where user_id in + + #{userId} + + + + + delete from segchk_user_certification_info where user_id in + + #{userId} + + + + + delete from segchk_user_certification_info where user_id = #{userId} + + + + insert into segchk_user_certification_info( usercard_id, user_name, user_id, provider_id, IDcard, card1, card2, mod_time) values + + ( #{item.usercardId}, #{item.userName}, #{item.userId}, #{item.providerId}, #{item.idcard}, #{item.card1}, #{item.card2}, #{item.modTime}) + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserCashMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserCashMapper.xml new file mode 100644 index 0000000..4f7b3db --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserCashMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + select user_id, cash, cash_type, cash_id, provider_id, mod_time, ret_flag from segchk_user_cash + + + + + + + + insert into segchk_user_cash + + user_id, + cash, + cash_type, + provider_id, + mod_time, + ret_flag, + + + #{userId}, + #{cash}, + #{cashType}, + #{providerId}, + #{modTime}, + #{retFlag}, + + + + + update segchk_user_cash + + user_id = #{userId}, + cash = #{cash}, + cash_type = #{cashType}, + provider_id = #{providerId}, + mod_time = #{modTime}, + ret_flag = #{retFlag}, + + where cash_id = #{cashId} + + + + delete from segchk_user_cash where cash_id = #{cashId} + + + + delete from segchk_user_cash where cash_id in + + #{cashId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserCertificationInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserCertificationInfoMapper.xml new file mode 100644 index 0000000..743329f --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserCertificationInfoMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + select usercard_id, user_name, user_id, provider_id, IDcard, card1, card2, mod_time from segchk_user_certification_info + + + + + + + + insert into segchk_user_certification_info + + user_name, + user_id, + provider_id, + IDcard, + card1, + card2, + mod_time, + + + #{userName}, + #{userId}, + #{providerId}, + #{idcard}, + #{card1}, + #{card2}, + #{modTime}, + + + + + update segchk_user_certification_info + + user_name = #{userName}, + user_id = #{userId}, + provider_id = #{providerId}, + IDcard = #{idcard}, + card1 = #{card1}, + card2 = #{card2}, + mod_time = #{modTime}, + + where usercard_id = #{usercardId} + + + + delete from segchk_user_certification_info where usercard_id = #{usercardId} + + + + delete from segchk_user_certification_info where usercard_id in + + #{usercardId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserChargeMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserChargeMapper.xml new file mode 100644 index 0000000..ae50a2d --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserChargeMapper.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + select user_id, store_id, charge, account_used, card_id, card_type_id, charge_type, charge_id, provider_id, mod_time, ret_flag from segchk_user_charge + + + + + + + + insert into segchk_user_charge + + user_id, + store_id, + charge, + account_used, + card_id, + card_type_id, + charge_type, + provider_id, + mod_time, + ret_flag, + + + #{userId}, + #{storeId}, + #{charge}, + #{accountUsed}, + #{cardId}, + #{cardTypeId}, + #{chargeType}, + #{providerId}, + + #{modTime}, + now(), + + + #{retFlag}, + 0, + + + + + + insert into segchk_user_charge ( + user_id + , store_id + , charge + , account_used + , card_type_id + , provider_id + , mod_time + , ret_flag + ) + + select + uc.user_id + , if(isnull(suei.recommenders_level), null, if(suei.recommenders_level = 1, suei.user_recommenders, null)) as store_id + , uc.charge + , uc.account_used + , uc.card_type_id + , uc.provider_id + , now() as mod_time + , 0 as ret_flag from + ( + (select + #{userId} as user_id + , #{charge} as charge + , #{cardTypeId} as card_type_id + , #{accountUsed} as account_used + , #{providerId} as provider_id + ) uc + left join + (select user_id, user_recommenders, recommenders_level, provider_id from segchk_user_ext_info where user_id = #{userId}) suei + on suei.provider_id = uc.provider_id and suei.user_id = uc.user_id + ) + + + + update segchk_user_charge + + user_id = #{userId}, + store_id = #{storeId}, + charge = #{charge}, + account_used = #{accountUsed}, + card_id = #{cardId}, + card_type_id = #{cardTypeId}, + charge_type = #{chargeType}, + provider_id = #{providerId}, + mod_time = #{modTime}, + ret_flag = #{retFlag}, + + where charge_id = #{chargeId} + + + + delete from segchk_user_charge where charge_id = #{chargeId} + + + + delete from segchk_user_charge where charge_id in + + #{chargeId} + + + + + update segchk_user_charge suc + left join (select provider_id, user_id, effective_time, card_id from segchk_user_vip where card_id = #{cardId}) suv on suv.provider_id = suc.provider_id and suv.user_id = suc.user_id + left join segchk_store_self_mgt sssm on suc.provider_id = sssm.provider_id and suc.user_id = sssm.user_id + set + suc.card_id = #{cardId} + , suc.mod_time = now() + , suc.ret_flag = #{retFlag} + , sssm.status = if(sssm.left_count ]]> 0, 0, sssm.status) + , sssm.card_id = if(sssm.left_count ]]> 0, suv.card_id, sssm.card_id) + , sssm.mod_time = if(sssm.left_count ]]> 0 and sssm.mod_time suv.effective_time, suv.effective_time, sssm.mod_time) + where suc.charge_id = #{chargeId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserCollectMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserCollectMapper.xml new file mode 100644 index 0000000..3c8520f --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserCollectMapper.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + select collect_id, collect_type, provider_id, user_id, store_id, mod_time, mgt_state from segchk_user_collect + + + + + + + + insert into segchk_user_collect + + collect_type, + provider_id, + user_id, + store_id, + mod_time, + mgt_state, + + + #{collectType}, + #{providerId}, + #{userId}, + #{storeId}, + #{modTime}, + #{mgtState}, + + ON DUPLICATE KEY UPDATE + mod_time = now() + , mgt_state = 0 + + + + update segchk_user_collect + + collect_type = #{collectType}, + provider_id = #{providerId}, + user_id = #{userId}, + store_id = #{storeId}, + mod_time = #{modTime}, + mgt_state = #{mgtState}, + + where collect_id = #{collectId} + + + + delete from segchk_user_collect where collect_id = #{collectId} + + + + delete from segchk_user_collect where collect_id in + + #{collectId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserExtInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserExtInfoMapper.xml new file mode 100644 index 0000000..f443890 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserExtInfoMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + select user_id, user_recommenders, recommenders_level, provider_id, mod_time from segchk_user_ext_info + + + + + + + + insert into segchk_user_ext_info + + user_id, + user_recommenders, + recommenders_level, + provider_id, + mod_time, + + + + #{userId}, + #{userRecommenders}, + #{recommendersLevel}, + #{providerId}, + + #{modTime}, + now() + + + + + + + update segchk_user_ext_info + + user_recommenders = #{userRecommenders}, + recommenders_level = #{recommendersLevel}, + provider_id = #{providerId}, + mod_time = #{modTime}, + + where user_id = #{userId} + + + + delete from segchk_user_ext_info where user_id = #{userId} + + + + delete from segchk_user_ext_info where user_id in + + #{userId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserLikegoMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserLikegoMapper.xml new file mode 100644 index 0000000..e9aa402 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserLikegoMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + select likego_id, provider_id, user_id, store_id, card_id, card_type, QR_code, mod_time, mgt_state from segchk_user_likego + + + + + + + + insert into segchk_user_likego + + provider_id, + user_id, + store_id, + card_id, + card_type, + QR_code, + mod_time, + mgt_state, + + + #{providerId}, + #{userId}, + #{storeId}, + #{cardId}, + #{cardType}, + #{qrCode}, + #{modTime}, + #{mgtState}, + + + + + update segchk_user_likego + + provider_id = #{providerId}, + user_id = #{userId}, + store_id = #{storeId}, + card_id = #{cardId}, + card_type = #{cardType}, + QR_code = #{qrCode}, + mod_time = #{modTime}, + mgt_state = #{mgtState}, + + where likego_id = #{likegoId} + + + + delete from segchk_user_likego where likego_id = #{likegoId} + + + + delete from segchk_user_likego where likego_id in + + #{likegoId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserRewardCtlMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserRewardCtlMapper.xml new file mode 100644 index 0000000..a908e99 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserRewardCtlMapper.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + select reward_ctl_id, provider_id, from_id, reward, to_id, mod_time from segchk_user_reward_ctl + + + + + + + + insert into segchk_user_reward_ctl + + provider_id, + from_id, + reward, + to_id, + mod_time, + + + #{providerId}, + #{fromId}, + #{reward}, + #{toId}, + + #{modTime}, + now() + + + + + + + update segchk_user_reward_ctl + + provider_id = #{providerId}, + from_id = #{fromId}, + reward = #{reward}, + to_id = #{toId}, + + mod_time = #{modTime}, + mod_time = now(), + + + where reward_ctl_id = #{rewardCtlId} + + + + delete from segchk_user_reward_ctl where reward_ctl_id = #{rewardCtlId} + + + + delete from segchk_user_reward_ctl where reward_ctl_id in + + #{rewardCtlId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserRewardMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserRewardMapper.xml new file mode 100644 index 0000000..8fba955 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserRewardMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + select user_id, reward, reward_type, reward_card_id, reward_card_type_id, mod_time, reward_id, provider_id from segchk_user_reward + + + + + + + + insert into segchk_user_reward + + user_id, + reward, + reward_type, + reward_card_id, + reward_card_type_id, + mod_time, + provider_id, + + + #{userId}, + #{reward}, + #{rewardType}, + #{rewardCardId}, + #{rewardCardTypeId}, + now(), + #{providerId}, + + + + + update segchk_user_reward + + user_id = #{userId}, + reward = #{reward}, + reward_type = #{rewardType}, + reward_card_id = #{rewardCardId}, + reward_card_type_id = #{rewardCardTypeId}, + mod_time = #{modTime}, + provider_id = #{providerId}, + + where reward_id = #{rewardId} + + + + delete from segchk_user_reward where reward_id = #{rewardId} + + + + delete from segchk_user_reward where reward_id in + + #{rewardId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserSecurityMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserSecurityMapper.xml new file mode 100644 index 0000000..8f45a53 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserSecurityMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + select user_id, passwd, mod_time, pwd_id, provider_id from segchk_user_security + + + + + + + + insert into segchk_user_security + + user_id, + passwd, + mod_time, + provider_id, + + + #{userId}, + #{passwd}, + #{modTime}, + #{providerId}, + + + + + update segchk_user_security + + user_id = #{userId}, + passwd = #{passwd}, + mod_time = #{modTime}, + provider_id = #{providerId}, + + where pwd_id = #{pwdId} + + + + delete from segchk_user_security where pwd_id = #{pwdId} + + + + delete from segchk_user_security where pwd_id in + + #{pwdId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserVipMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserVipMapper.xml new file mode 100644 index 0000000..00284bb --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserVipMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + select card_id, card_type_id, user_id, provider_id, mod_time, effective_time, use_count, left_count, status from segchk_user_vip + + + + + + + + insert into segchk_user_vip + + card_type_id, + user_id, + provider_id, + mod_time, + effective_time, + use_count, + left_count, + status, + + + #{cardTypeId}, + #{userId}, + #{providerId}, + #{modTime}, + #{effectiveTime}, + #{useCount}, + #{leftCount}, + #{status}, + + + + + update segchk_user_vip + + card_type_id = #{cardTypeId}, + user_id = #{userId}, + provider_id = #{providerId}, + mod_time = #{modTime}, + effective_time = #{effectiveTime}, + use_count = #{useCount}, + left_count = #{leftCount}, + status = #{status}, + + where card_id = #{cardId} + + + + delete from segchk_user_vip where card_id = #{cardId} + + + + delete from segchk_user_vip where card_id in + + #{cardId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserWechatMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserWechatMapper.xml new file mode 100644 index 0000000..2248cd4 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkUserWechatMapper.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + select provider_id, user_id, openid, union_id, nick_name, icon_url, mod_time from segchk_user_wechat + + + + + + + + insert into segchk_user_wechat + + provider_id, + user_id, + openid, + union_id, + nick_name, + icon_url, + mod_time, + + + #{providerId}, + #{userId}, + #{openid}, + #{unionId}, + #{nickName}, + #{iconUrl}, + #{modTime}, + + + + + update segchk_user_wechat + + provider_id = #{providerId}, + openid = #{openid}, + union_id = #{unionId}, + nick_name = #{nickName}, + icon_url = #{iconUrl}, + mod_time = #{modTime}, + + where user_id = #{userId} + + + + delete from segchk_user_wechat where user_id = #{userId} + + + + delete from segchk_user_wechat where user_id in + + #{userId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/segchk/SegchkVipSetInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/segchk/SegchkVipSetInfoMapper.xml new file mode 100644 index 0000000..b43462b --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/segchk/SegchkVipSetInfoMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + select provider_id, mod_time, cash_threhold, cash_day, self_charge, effective_remind, mode_id, active_flag from segchk_vip_set_info + + + + + + + + insert into segchk_vip_set_info + + provider_id, + mod_time, + cash_threhold, + cash_day, + self_charge, + effective_remind, + active_flag, + + + #{providerId}, + #{modTime}, + #{cashThrehold}, + #{cashDay}, + #{selfCharge}, + #{effectiveRemind}, + #{activeFlag}, + + + + + update segchk_vip_set_info + + provider_id = #{providerId}, + mod_time = #{modTime}, + cash_threhold = #{cashThrehold}, + cash_day = #{cashDay}, + self_charge = #{selfCharge}, + effective_remind = #{effectiveRemind}, + active_flag = #{activeFlag}, + + where mode_id = #{modeId} + + + + delete from segchk_vip_set_info where mode_id = #{modeId} + + + + delete from segchk_vip_set_info where mode_id in + + #{modeId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml new file mode 100644 index 0000000..8b97906 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark + from sys_config + + + + + + + and config_id = #{configId} + + + and config_key = #{configKey} + + + + + + + + + + + + insert into sys_config ( + config_name, + config_key, + config_value, + config_type, + create_by, + remark, + create_time + )values( + #{configName}, + #{configKey}, + #{configValue}, + #{configType}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_config + + config_name = #{configName}, + config_key = #{configKey}, + config_value = #{configValue}, + config_type = #{configType}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where config_id = #{configId} + + + + delete from sys_config where config_id = #{configId} + + + + delete from sys_config where config_id in + + #{configId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml new file mode 100644 index 0000000..774c969 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time + from sys_dept d + + + + + + + + + + + + + + + + + + + + insert into sys_dept( + dept_id, + parent_id, + dept_name, + ancestors, + order_num, + leader, + phone, + email, + status, + create_by, + create_time + )values( + #{deptId}, + #{parentId}, + #{deptName}, + #{ancestors}, + #{orderNum}, + #{leader}, + #{phone}, + #{email}, + #{status}, + #{createBy}, + sysdate() + ) + + + + update sys_dept + + parent_id = #{parentId}, + dept_name = #{deptName}, + ancestors = #{ancestors}, + order_num = #{orderNum}, + leader = #{leader}, + phone = #{phone}, + email = #{email}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where dept_id = #{deptId} + + + + update sys_dept set ancestors = + + when #{item.deptId} then #{item.ancestors} + + where dept_id in + + #{item.deptId} + + + + + update sys_dept set status = '0' where dept_id in + + #{deptId} + + + + + update sys_dept set del_flag = '2' where dept_id = #{deptId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml new file mode 100644 index 0000000..8da9030 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark + from sys_dict_data + + + + + + + + + + + + + + delete from sys_dict_data where dict_code = #{dictCode} + + + + delete from sys_dict_data where dict_code in + + #{dictCode} + + + + + update sys_dict_data + + dict_sort = #{dictSort}, + dict_label = #{dictLabel}, + dict_value = #{dictValue}, + dict_type = #{dictType}, + css_class = #{cssClass}, + list_class = #{listClass}, + is_default = #{isDefault}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_code = #{dictCode} + + + + update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType} + + + + insert into sys_dict_data( + dict_sort, + dict_label, + dict_value, + dict_type, + css_class, + list_class, + is_default, + status, + remark, + create_by, + create_time + )values( + #{dictSort}, + #{dictLabel}, + #{dictValue}, + #{dictType}, + #{cssClass}, + #{listClass}, + #{isDefault}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml new file mode 100644 index 0000000..55b4075 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + select dict_id, dict_name, dict_type, status, create_by, create_time, remark + from sys_dict_type + + + + + + + + + + + + + + delete from sys_dict_type where dict_id = #{dictId} + + + + delete from sys_dict_type where dict_id in + + #{dictId} + + + + + update sys_dict_type + + dict_name = #{dictName}, + dict_type = #{dictType}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_id = #{dictId} + + + + insert into sys_dict_type( + dict_name, + dict_type, + status, + remark, + create_by, + create_time + )values( + #{dictName}, + #{dictType}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml new file mode 100644 index 0000000..b8178fa --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) + values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate()) + + + + + + delete from sys_logininfor where info_id in + + #{infoId} + + + + + truncate table sys_logininfor + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml new file mode 100644 index 0000000..22a4cd1 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time + from sys_menu + + + + + + + + + + + + + + + + + + + + + + + + update sys_menu + + menu_name = #{menuName}, + parent_id = #{parentId}, + order_num = #{orderNum}, + path = #{path}, + component = #{component}, + is_frame = #{isFrame}, + is_cache = #{isCache}, + menu_type = #{menuType}, + visible = #{visible}, + status = #{status}, + perms = #{perms}, + icon = #{icon}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where menu_id = #{menuId} + + + + insert into sys_menu( + menu_id, + parent_id, + menu_name, + order_num, + path, + component, + is_frame, + is_cache, + menu_type, + visible, + status, + perms, + icon, + remark, + create_by, + create_time + )values( + #{menuId}, + #{parentId}, + #{menuName}, + #{orderNum}, + #{path}, + #{component}, + #{isFrame}, + #{isCache}, + #{menuType}, + #{visible}, + #{status}, + #{perms}, + #{icon}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete from sys_menu where menu_id = #{menuId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml new file mode 100644 index 0000000..65d3079 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + select notice_id, notice_title, notice_type, cast(notice_content as char) as notice_content, status, create_by, create_time, update_by, update_time, remark + from sys_notice + + + + + + + + insert into sys_notice ( + notice_title, + notice_type, + notice_content, + status, + remark, + create_by, + create_time + )values( + #{noticeTitle}, + #{noticeType}, + #{noticeContent}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_notice + + notice_title = #{noticeTitle}, + notice_type = #{noticeType}, + notice_content = #{noticeContent}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where notice_id = #{noticeId} + + + + delete from sys_notice where notice_id = #{noticeId} + + + + delete from sys_notice where notice_id in + + #{noticeId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml new file mode 100644 index 0000000..f017ef8 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time + from sys_oper_log + + + + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, sysdate()) + + + + + + delete from sys_oper_log where oper_id in + + #{operId} + + + + + + + truncate table sys_oper_log + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml new file mode 100644 index 0000000..c82d808 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + select post_id, post_code, post_name, post_sort, status, create_by, create_time, remark + from sys_post + + + + + + + + + + + + + + + + + + update sys_post + + post_code = #{postCode}, + post_name = #{postName}, + post_sort = #{postSort}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where post_id = #{postId} + + + + insert into sys_post( + post_id, + post_code, + post_name, + post_sort, + status, + remark, + create_by, + create_time + )values( + #{postId}, + #{postCode}, + #{postName}, + #{postSort}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete from sys_post where post_id = #{postId} + + + + delete from sys_post where post_id in + + #{postId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml new file mode 100644 index 0000000..7c4139b --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + delete from sys_role_dept where role_id=#{roleId} + + + + + + delete from sys_role_dept where role_id in + + #{roleId} + + + + + insert into sys_role_dept(role_id, dept_id) values + + (#{item.roleId},#{item.deptId}) + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml new file mode 100644 index 0000000..3b85018 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, + r.status, r.del_flag, r.create_time, r.remark + from sys_role r + left join sys_user_role ur on ur.role_id = r.role_id + left join sys_user u on u.user_id = ur.user_id + left join sys_dept d on u.dept_id = d.dept_id + + + + + + + + + + + + + + + + + + + + insert into sys_role( + role_id, + role_name, + role_key, + role_sort, + data_scope, + menu_check_strictly, + dept_check_strictly, + status, + remark, + create_by, + create_time + )values( + #{roleId}, + #{roleName}, + #{roleKey}, + #{roleSort}, + #{dataScope}, + #{menuCheckStrictly}, + #{deptCheckStrictly}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_role + + role_name = #{roleName}, + role_key = #{roleKey}, + role_sort = #{roleSort}, + data_scope = #{dataScope}, + menu_check_strictly = #{menuCheckStrictly}, + dept_check_strictly = #{deptCheckStrictly}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where role_id = #{roleId} + + + + update sys_role set del_flag = '2' where role_id = #{roleId} + + + + update sys_role set del_flag = '2' where role_id in + + #{roleId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml new file mode 100644 index 0000000..cb60a85 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + delete from sys_role_menu where role_id=#{roleId} + + + + delete from sys_role_menu where role_id in + + #{roleId} + + + + + insert into sys_role_menu(role_id, menu_id) values + + (#{item.roleId},#{item.menuId}) + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml new file mode 100644 index 0000000..25cf712 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, + d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status, + r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status + from sys_user u + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id + + + + + + + + + + + + + + + + + + + + insert into sys_user( + user_id, + dept_id, + user_name, + nick_name, + email, + avatar, + phonenumber, + sex, + password, + status, + create_by, + remark, + create_time + )values( + #{userId}, + #{deptId}, + #{userName}, + #{nickName}, + #{email}, + #{avatar}, + #{phonenumber}, + #{sex}, + #{password}, + #{status}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_user + + dept_id = #{deptId}, + user_name = #{userName}, + nick_name = #{nickName}, + email = #{email}, + phonenumber = #{phonenumber}, + sex = #{sex}, + avatar = #{avatar}, + password = #{password}, + status = #{status}, + login_ip = #{loginIp}, + login_date = #{loginDate}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where user_id = #{userId} + + + + update sys_user set status = #{status} where user_id = #{userId} + + + + update sys_user set avatar = #{avatar} where user_name = #{userName} + + + + update sys_user set password = #{password} where user_name = #{userName} + + + + update sys_user set del_flag = '2' where user_id = #{userId} + + + + update sys_user set del_flag = '2' where user_id in + + #{userId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml new file mode 100644 index 0000000..2b90bc4 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + delete from sys_user_post where user_id=#{userId} + + + + + + delete from sys_user_post where user_id in + + #{userId} + + + + + insert into sys_user_post(user_id, post_id) values + + (#{item.userId},#{item.postId}) + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml new file mode 100644 index 0000000..dd72689 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + delete from sys_user_role where user_id=#{userId} + + + + + + delete from sys_user_role where user_id in + + #{userId} + + + + + insert into sys_user_role(user_id, role_id) values + + (#{item.userId},#{item.roleId}) + + + + + delete from sys_user_role where user_id=#{userId} and role_id=#{roleId} + + + + delete from sys_user_role where role_id=#{roleId} and user_id in + + #{userId} + + + \ No newline at end of file diff --git a/ruoyi-ui/.editorconfig b/ruoyi-ui/.editorconfig new file mode 100644 index 0000000..7034f9b --- /dev/null +++ b/ruoyi-ui/.editorconfig @@ -0,0 +1,22 @@ +# 告诉EditorConfig插件,这是根文件,不用继续往上查找 +root = true + +# 匹配全部文件 +[*] +# 设置字符集 +charset = utf-8 +# 缩进风格,可选space、tab +indent_style = space +# 缩进的空格数 +indent_size = 2 +# 结尾换行符,可选lf、cr、crlf +end_of_line = lf +# 在文件结尾插入新行 +insert_final_newline = true +# 删除一行中的前后空格 +trim_trailing_whitespace = true + +# 匹配md结尾的文件 +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development new file mode 100644 index 0000000..3da4b01 --- /dev/null +++ b/ruoyi-ui/.env.development @@ -0,0 +1,14 @@ +# 页面标题 +VUE_APP_TITLE = 赛格核销管理系统 + +# 开发环境配置 +ENV = 'development' + +# 若依管理系统/开发环境 +VUE_APP_BASE_API = '/dev-api' + +# 图片基地址 +VUE_APP_IMG_URL = '' + +# 路由懒加载 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production new file mode 100644 index 0000000..8f8d485 --- /dev/null +++ b/ruoyi-ui/.env.production @@ -0,0 +1,11 @@ +# 页面标题 +VUE_APP_TITLE = 赛格核销管理系统 + +# 生产环境配置 +ENV = 'production' + +# 若依管理系统/生产环境 +VUE_APP_BASE_API = '/prod-api' + +# 图片基地址 +VUE_APP_IMG_URL = 'http://221.195.106.155:8090' diff --git a/ruoyi-ui/.env.staging b/ruoyi-ui/.env.staging new file mode 100644 index 0000000..87b05fa --- /dev/null +++ b/ruoyi-ui/.env.staging @@ -0,0 +1,10 @@ +# 页面标题 +VUE_APP_TITLE = 赛格核销管理系统 + +NODE_ENV = production + +# 测试环境配置 +ENV = 'staging' + +# 若依管理系统/测试环境 +VUE_APP_BASE_API = '/stage-api' diff --git a/ruoyi-ui/.eslintignore b/ruoyi-ui/.eslintignore new file mode 100644 index 0000000..89be6f6 --- /dev/null +++ b/ruoyi-ui/.eslintignore @@ -0,0 +1,10 @@ +# 忽略build目录下类型为js的文件的语法检查 +build/*.js +# 忽略src/assets目录下文件的语法检查 +src/assets +# 忽略public目录下文件的语法检查 +public +# 忽略当前目录下为js的文件的语法检查 +*.js +# 忽略当前目录下为vue的文件的语法检查 +*.vue \ No newline at end of file diff --git a/ruoyi-ui/.eslintrc.js b/ruoyi-ui/.eslintrc.js new file mode 100644 index 0000000..82bbdee --- /dev/null +++ b/ruoyi-ui/.eslintrc.js @@ -0,0 +1,199 @@ +// ESlint 检查配置 +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/ruoyi-ui/.gitignore b/ruoyi-ui/.gitignore new file mode 100644 index 0000000..78a752d --- /dev/null +++ b/ruoyi-ui/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock diff --git a/ruoyi-ui/README.md b/ruoyi-ui/README.md new file mode 100644 index 0000000..a857617 --- /dev/null +++ b/ruoyi-ui/README.md @@ -0,0 +1,30 @@ +## 开发 + +```bash +# 克隆项目 +git clone https://gitee.com/y_project/RuoYi-Vue + +# 进入项目目录 +cd ruoyi-ui + +# 安装依赖 +npm install + +# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 +npm install --registry=https://registry.npm.taobao.org + +# 启动服务 +npm run dev +``` + +浏览器访问 http://localhost:80 + +## 发布 + +```bash +# 构建测试环境 +npm run build:stage + +# 构建生产环境 +npm run build:prod +``` \ No newline at end of file diff --git a/ruoyi-ui/alais-config.js b/ruoyi-ui/alais-config.js new file mode 100644 index 0000000..dd738a8 --- /dev/null +++ b/ruoyi-ui/alais-config.js @@ -0,0 +1,14 @@ +/* 此文件未使用,只是为了让idea可以识别实际位置 */ +const path = require('path') + +function resolve(dir) { + return path.join(__dirname, dir) +} + +module.exports = { + resolve: { + alias: { + '@': resolve('src') + } + } +} diff --git a/ruoyi-ui/babel.config.js b/ruoyi-ui/babel.config.js new file mode 100644 index 0000000..b99f001 --- /dev/null +++ b/ruoyi-ui/babel.config.js @@ -0,0 +1,13 @@ +module.exports = { + presets: [ + // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app + '@vue/cli-plugin-babel/preset' + ], + 'env': { + 'development': { + // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). + // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. + 'plugins': ['dynamic-import-node'] + } + } +} diff --git a/ruoyi-ui/bin/build.bat b/ruoyi-ui/bin/build.bat new file mode 100644 index 0000000..dda590d --- /dev/null +++ b/ruoyi-ui/bin/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅdistļ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run build:prod + +pause \ No newline at end of file diff --git a/ruoyi-ui/bin/package.bat b/ruoyi-ui/bin/package.bat new file mode 100644 index 0000000..8281749 --- /dev/null +++ b/ruoyi-ui/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] װWeḅnode_modulesļ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm install --registry=https://registry.npm.taobao.org + +pause \ No newline at end of file diff --git a/ruoyi-ui/bin/run-web.bat b/ruoyi-ui/bin/run-web.bat new file mode 100644 index 0000000..d30deae --- /dev/null +++ b/ruoyi-ui/bin/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] ʹ Vue CLI Web ̡ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run dev + +pause \ No newline at end of file diff --git a/ruoyi-ui/build/index.js b/ruoyi-ui/build/index.js new file mode 100644 index 0000000..96eec48 --- /dev/null +++ b/ruoyi-ui/build/index.js @@ -0,0 +1,36 @@ +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + console.log("build with " + rawArgv) + run(`vue-cli-service build ${args}`) +} diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json new file mode 100644 index 0000000..581fc94 --- /dev/null +++ b/ruoyi-ui/package.json @@ -0,0 +1,88 @@ +{ + "name": "segchk", + "version": "1.0.0", + "description": "核销管理系统", + "author": "seg", + "license": "MIT", + "scripts": { + "dev": "vue-cli-service serve", + "build:prod": "vue-cli-service build --mode production", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "lint": "eslint --ext .js,.vue src" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "keywords": [ + "vue", + "admin", + "dashboard", + "element-ui", + "boilerplate", + "admin-template", + "management-system" + ], + "repository": { + "type": "git", + "url": "https://gitee.com/y_project/RuoYi-Vue.git" + }, + "dependencies": { + "@riophae/vue-treeselect": "0.4.0", + "axios": "0.21.0", + "clipboard": "2.0.6", + "core-js": "3.8.1", + "echarts": "4.9.0", + "element-ui": "2.15.5", + "file-saver": "2.0.4", + "fuse.js": "6.4.3", + "highlight.js": "9.18.5", + "js-beautify": "1.13.0", + "js-cookie": "2.2.1", + "jsencrypt": "3.0.0-rc.1", + "nprogress": "0.2.0", + "quill": "1.3.7", + "screenfull": "5.0.2", + "sortablejs": "1.10.2", + "vue": "2.6.12", + "vue-count-to": "1.0.13", + "vue-cropper": "0.5.5", + "vue-meta": "^2.4.0", + "vue-router": "3.4.9", + "vuedraggable": "2.24.3", + "vuex": "3.6.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "4.4.6", + "@vue/cli-plugin-eslint": "4.4.6", + "@vue/cli-service": "4.4.6", + "babel-eslint": "10.1.0", + "chalk": "4.1.0", + "connect": "3.6.6", + "eslint": "7.15.0", + "eslint-plugin-vue": "7.2.0", + "lint-staged": "10.5.3", + "runjs": "4.4.2", + "sass": "1.32.0", + "sass-loader": "10.1.0", + "script-ext-html-webpack-plugin": "2.1.5", + "svg-sprite-loader": "5.1.1", + "vue-template-compiler": "2.6.12" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/ruoyi-ui/public/favicon.ico b/ruoyi-ui/public/favicon.ico new file mode 100644 index 0000000..e263760 Binary files /dev/null and b/ruoyi-ui/public/favicon.ico differ diff --git a/ruoyi-ui/public/html/ie.html b/ruoyi-ui/public/html/ie.html new file mode 100644 index 0000000..052ffcd --- /dev/null +++ b/ruoyi-ui/public/html/ie.html @@ -0,0 +1,46 @@ + + + + + + 请升级您的浏览器 + + + + + + +

请升级您的浏览器,以便我们更好的为您提供服务!

+

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

+
+

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

+

自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明

+
+

您可以选择更先进的浏览器

+

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

+ +
+ + \ No newline at end of file diff --git a/ruoyi-ui/public/index.html b/ruoyi-ui/public/index.html new file mode 100644 index 0000000..925455c --- /dev/null +++ b/ruoyi-ui/public/index.html @@ -0,0 +1,208 @@ + + + + + + + + + <%= webpackConfig.name %> + + + + +
+
+
+
+
+
正在加载系统资源,请耐心等待
+
+
+ + diff --git a/ruoyi-ui/public/robots.txt b/ruoyi-ui/public/robots.txt new file mode 100644 index 0000000..77470cb --- /dev/null +++ b/ruoyi-ui/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file diff --git a/ruoyi-ui/src/App.vue b/ruoyi-ui/src/App.vue new file mode 100644 index 0000000..391d951 --- /dev/null +++ b/ruoyi-ui/src/App.vue @@ -0,0 +1,19 @@ + + + diff --git a/ruoyi-ui/src/api/login.js b/ruoyi-ui/src/api/login.js new file mode 100644 index 0000000..0650e04 --- /dev/null +++ b/ruoyi-ui/src/api/login.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 登录方法 +export function login(username, password, code, uuid) { + const data = { + username, + password, + code, + uuid + } + return request({ + url: '/login', + method: 'post', + data: data + }) +} + +// 注册方法 +export function register(data) { + return request({ + url: '/register', + headers: { + isToken: false + }, + method: 'post', + data: data + }) +} + +// 获取用户详细信息 +export function getInfo() { + return request({ + url: '/getInfo', + method: 'get' + }) +} + +// 退出方法 +export function logout() { + return request({ + url: '/logout', + method: 'post' + }) +} + +// 获取验证码 +export function getCodeImg() { + return request({ + url: '/captchaImage', + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/menu.js b/ruoyi-ui/src/api/menu.js new file mode 100644 index 0000000..faef101 --- /dev/null +++ b/ruoyi-ui/src/api/menu.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 获取路由 +export const getRouters = () => { + return request({ + url: '/getRouters', + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/cache.js b/ruoyi-ui/src/api/monitor/cache.js new file mode 100644 index 0000000..59d3505 --- /dev/null +++ b/ruoyi-ui/src/api/monitor/cache.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 查询缓存详细 +export function getCache() { + return request({ + url: '/monitor/cache', + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/monitor/job.js b/ruoyi-ui/src/api/monitor/job.js new file mode 100644 index 0000000..58c4343 --- /dev/null +++ b/ruoyi-ui/src/api/monitor/job.js @@ -0,0 +1,80 @@ +import request from '@/utils/request' + +// 查询定时任务调度列表 +export function listJob(query) { + return request({ + url: '/monitor/job/list', + method: 'get', + params: query + }) +} + +// 查询定时任务调度详细 +export function getJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'get' + }) +} + +// 新增定时任务调度 +export function addJob(data) { + return request({ + url: '/monitor/job', + method: 'post', + data: data + }) +} + +// 修改定时任务调度 +export function updateJob(data) { + return request({ + url: '/monitor/job', + method: 'put', + data: data + }) +} + +// 删除定时任务调度 +export function delJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'delete' + }) +} + +// 导出定时任务调度 +export function exportJob(query) { + return request({ + url: '/monitor/job/export', + method: 'get', + params: query + }) +} + +// 任务状态修改 +export function changeJobStatus(jobId, status) { + const data = { + jobId, + status + } + return request({ + url: '/monitor/job/changeStatus', + method: 'put', + data: data + }) +} + + +// 定时任务立即执行一次 +export function runJob(jobId, jobGroup) { + const data = { + jobId, + jobGroup + } + return request({ + url: '/monitor/job/run', + method: 'put', + data: data + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/jobLog.js b/ruoyi-ui/src/api/monitor/jobLog.js new file mode 100644 index 0000000..be1fffd --- /dev/null +++ b/ruoyi-ui/src/api/monitor/jobLog.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询调度日志列表 +export function listJobLog(query) { + return request({ + url: '/monitor/jobLog/list', + method: 'get', + params: query + }) +} + +// 删除调度日志 +export function delJobLog(jobLogId) { + return request({ + url: '/monitor/jobLog/' + jobLogId, + method: 'delete' + }) +} + +// 清空调度日志 +export function cleanJobLog() { + return request({ + url: '/monitor/jobLog/clean', + method: 'delete' + }) +} + +// 导出调度日志 +export function exportJobLog(query) { + return request({ + url: '/monitor/jobLog/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/logininfor.js b/ruoyi-ui/src/api/monitor/logininfor.js new file mode 100644 index 0000000..383d61f --- /dev/null +++ b/ruoyi-ui/src/api/monitor/logininfor.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询登录日志列表 +export function list(query) { + return request({ + url: '/monitor/logininfor/list', + method: 'get', + params: query + }) +} + +// 删除登录日志 +export function delLogininfor(infoId) { + return request({ + url: '/monitor/logininfor/' + infoId, + method: 'delete' + }) +} + +// 清空登录日志 +export function cleanLogininfor() { + return request({ + url: '/monitor/logininfor/clean', + method: 'delete' + }) +} + +// 导出登录日志 +export function exportLogininfor(query) { + return request({ + url: '/monitor/logininfor/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/online.js b/ruoyi-ui/src/api/monitor/online.js new file mode 100644 index 0000000..bd22137 --- /dev/null +++ b/ruoyi-ui/src/api/monitor/online.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询在线用户列表 +export function list(query) { + return request({ + url: '/monitor/online/list', + method: 'get', + params: query + }) +} + +// 强退用户 +export function forceLogout(tokenId) { + return request({ + url: '/monitor/online/' + tokenId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/monitor/operlog.js b/ruoyi-ui/src/api/monitor/operlog.js new file mode 100644 index 0000000..f09b8ed --- /dev/null +++ b/ruoyi-ui/src/api/monitor/operlog.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询操作日志列表 +export function list(query) { + return request({ + url: '/monitor/operlog/list', + method: 'get', + params: query + }) +} + +// 删除操作日志 +export function delOperlog(operId) { + return request({ + url: '/monitor/operlog/' + operId, + method: 'delete' + }) +} + +// 清空操作日志 +export function cleanOperlog() { + return request({ + url: '/monitor/operlog/clean', + method: 'delete' + }) +} + +// 导出操作日志 +export function exportOperlog(query) { + return request({ + url: '/monitor/operlog/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/server.js b/ruoyi-ui/src/api/monitor/server.js new file mode 100644 index 0000000..feed783 --- /dev/null +++ b/ruoyi-ui/src/api/monitor/server.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 查询服务器详细 +export function getServer() { + return request({ + url: '/monitor/server', + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/basicinfo.js b/ruoyi-ui/src/api/segchk/basicinfo.js new file mode 100644 index 0000000..3428215 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/basicinfo.js @@ -0,0 +1,43 @@ +/** + * 基本信息设置路由 + * + * @author 魔金商城 created on 2019/5/30 + */ + +import request from '@/utils/request'; + + +/** + * 查询基本信息设置 + */ +export function queryBaseInfoSet() { + return request({ + url: '/segchk/segchk_system_setting/query', + // url: '/infoset/baseinfoset', + method: 'get', + }) +} + +/** + * 修改基本信息设置 + * + * @param baseInfoSet 基本信息设置 + */ +export function updateBaseInfoSet(baseInfoSet) { + return request({ + url: '/segchk/segchk_system_setting/update', + // url: '/baseinfoset', + method: 'put', + data: baseInfoSet + }) +} + +/** + * 获得基本信息 + */ +export function getBaseInfoSet() { + return request({ + url: '/baseinfoset', + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_carouse_mgt.js b/ruoyi-ui/src/api/segchk/segchk_carouse_mgt.js new file mode 100644 index 0000000..edbf2d0 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_carouse_mgt.js @@ -0,0 +1,76 @@ +import request from '@/utils/request' + +// 查询seg首页轮播图管理列表 +export function listSegchk_carouse_mgt(query) { + return request({ + url: '/segchk/segchk_carouse_mgt/list', + method: 'get', + params: query + }) +} + + +// 修改seg首页标签管理状态 +export function updateSegchk_carouse_state(carouseId, mgtState) { + const data = { + carouseId, + mgtState + } + return request({ + url: '/segchk/segchk_carouse_mgt/mgt_state', + method: 'put', + data: data + }) +} + +// 查询seg首页轮播图管理详细 +export function getSegchk_carouse_mgt(carouseId) { + return request({ + url: '/segchk/segchk_carouse_mgt/' + carouseId, + method: 'get' + }) +} + +// 新增seg首页轮播图管理 +export function addSegchk_carouse_mgt(data) { + return request({ + url: '/segchk/segchk_carouse_mgt', + method: 'post', + data: data + }) +} + +// 修改seg首页轮播图管理 +export function updateSegchk_carouse_mgt(data) { + return request({ + url: '/segchk/segchk_carouse_mgt/edit_info', + method: 'put', + data: data + }) +} + +// 修改seg首页轮播图管理 +export function updateSegchk_carouse_sort(data) { + return request({ + url: '/segchk/segchk_carouse_mgt/sort_update', + method: 'put', + data: data + }) +} + +// 删除seg首页轮播图管理 +export function delSegchk_carouse_mgt(carouseId) { + return request({ + url: '/segchk/segchk_carouse_mgt/' + carouseId, + method: 'delete' + }) +} + +// 导出seg首页轮播图管理 +export function exportSegchk_carouse_mgt(query) { + return request({ + url: '/segchk/segchk_carouse_mgt/export', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_charge_card.js b/ruoyi-ui/src/api/segchk/segchk_charge_card.js new file mode 100644 index 0000000..87076a0 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_charge_card.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg充值卡管理列表 +export function listSegchk_charge_card(query) { + return request({ + url: '/segchk/segchk_charge_card/list', + method: 'get', + params: query + }) +} + +// 查询seg充值卡管理详细 +export function getSegchk_charge_card(providerId) { + return request({ + url: '/segchk/segchk_charge_card/' + providerId, + method: 'get' + }) +} + +// 新增seg充值卡管理 +export function addSegchk_charge_card(data) { + return request({ + url: '/segchk/segchk_charge_card', + method: 'post', + data: data + }) +} + +// 修改seg充值卡管理 +export function updateSegchk_charge_card(data) { + return request({ + url: '/segchk/segchk_charge_card', + method: 'put', + data: data + }) +} + +// 删除seg充值卡管理 +export function delSegchk_charge_card(providerId) { + return request({ + url: '/segchk/segchk_charge_card/' + providerId, + method: 'delete' + }) +} + +// 导出seg充值卡管理 +export function exportSegchk_charge_card(query) { + return request({ + url: '/segchk/segchk_charge_card/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_comment_acc.js b/ruoyi-ui/src/api/segchk/segchk_comment_acc.js new file mode 100644 index 0000000..41a4c1f --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_comment_acc.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg商家累积评价列表 +export function listSegchk_comment_acc(query) { + return request({ + url: '/segchk/segchk_comment_acc/list', + method: 'get', + params: query + }) +} + +// 查询seg商家累积评价详细 +export function getSegchk_comment_acc(updateId) { + return request({ + url: '/segchk/segchk_comment_acc/' + updateId, + method: 'get' + }) +} + +// 新增seg商家累积评价 +export function addSegchk_comment_acc(data) { + return request({ + url: '/segchk/segchk_comment_acc', + method: 'post', + data: data + }) +} + +// 修改seg商家累积评价 +export function updateSegchk_comment_acc(data) { + return request({ + url: '/segchk/segchk_comment_acc', + method: 'put', + data: data + }) +} + +// 删除seg商家累积评价 +export function delSegchk_comment_acc(updateId) { + return request({ + url: '/segchk/segchk_comment_acc/' + updateId, + method: 'delete' + }) +} + +// 导出seg商家累积评价 +export function exportSegchk_comment_acc(query) { + return request({ + url: '/segchk/segchk_comment_acc/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_district_info.js b/ruoyi-ui/src/api/segchk/segchk_district_info.js new file mode 100644 index 0000000..8e65384 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_district_info.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg行政区域代码列表 +export function listSegchk_district_info(query) { + return request({ + url: '/segchk/segchk_district_info/list', + method: 'get', + params: query + }) +} + +// 查询seg行政区域代码详细 +export function getSegchk_district_info(districtId) { + return request({ + url: '/segchk/segchk_district_info/' + districtId, + method: 'get' + }) +} + +// 新增seg行政区域代码 +export function addSegchk_district_info(data) { + return request({ + url: '/segchk/segchk_district_info', + method: 'post', + data: data + }) +} + +// 修改seg行政区域代码 +export function updateSegchk_district_info(data) { + return request({ + url: '/segchk/segchk_district_info', + method: 'put', + data: data + }) +} + +// 删除seg行政区域代码 +export function delSegchk_district_info(districtId) { + return request({ + url: '/segchk/segchk_district_info/' + districtId, + method: 'delete' + }) +} + +// 导出seg行政区域代码 +export function exportSegchk_district_info(query) { + return request({ + url: '/segchk/segchk_district_info/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_get_simple_list.js b/ruoyi-ui/src/api/segchk/segchk_get_simple_list.js new file mode 100644 index 0000000..e0b6550 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_get_simple_list.js @@ -0,0 +1,66 @@ +import request from '@/utils/request' + +var baseUrl = '/segchk/simple_list/' + +// 查询运营商简单列表 +export function segchk_get_provider_list(query) { + return request({ + url: baseUrl + 'providerList', + method: 'get', + params: query + }) +} +// 查询运营商简单列表 +export function segchk_get_distict_list(query) { + return request({ + url: baseUrl + 'DistictList', + method: 'get', + params: query + }) +} + +// 查询运营商简单列表 +export function segchk_get_saler_list(query) { + return request({ + url: baseUrl + 'salerList', + method: 'get', + params: query + }) +} + +// 查询运营商简单列表 +export function segchk_get_store_list(query) { + return request({ + url: baseUrl + 'storeList', + method: 'get', + params: query + }) +} + +// 查询运营商简单列表 +export function segchk_get_chargecard_list(query) { + return request({ + url: baseUrl + 'ChargeCardList', + method: 'get', + params: query + }) +} + +// 查询运营商简单列表 +export function segchk_get_keyword_list(query) { + return request({ + url: baseUrl + 'KerwordList', + method: 'get', + params: query + }) +} + +// 查询运营商简单列表 +export function segchk_get_preference_lable_list(query) { + return request({ + url: baseUrl + 'PreferenceLableList', + method: 'get', + params: query + }) +} + diff --git a/ruoyi-ui/src/api/segchk/segchk_keyword_lable.js b/ruoyi-ui/src/api/segchk/segchk_keyword_lable.js new file mode 100644 index 0000000..6e0ec40 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_keyword_lable.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg关键字管理列表 +export function listSegchk_keyword_lable(query) { + return request({ + url: '/segchk/segchk_keyword_lable/list', + method: 'get', + params: query + }) +} + +// 查询seg关键字管理详细 +export function getSegchk_keyword_lable(keywordId) { + return request({ + url: '/segchk/segchk_keyword_lable/' + keywordId, + method: 'get' + }) +} + +// 新增seg关键字管理 +export function addSegchk_keyword_lable(data) { + return request({ + url: '/segchk/segchk_keyword_lable', + method: 'post', + data: data + }) +} + +// 修改seg关键字管理 +export function updateSegchk_keyword_lable(data) { + return request({ + url: '/segchk/segchk_keyword_lable', + method: 'put', + data: data + }) +} + +// 删除seg关键字管理 +export function delSegchk_keyword_lable(providerId) { + return request({ + url: '/segchk/segchk_keyword_lable/' + providerId, + method: 'delete' + }) +} + +// 导出seg关键字管理 +export function exportSegchk_keyword_lable(query) { + return request({ + url: '/segchk/segchk_keyword_lable/export', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_lable_mgt.js b/ruoyi-ui/src/api/segchk/segchk_lable_mgt.js new file mode 100644 index 0000000..4a0442b --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_lable_mgt.js @@ -0,0 +1,68 @@ +import request from '@/utils/request' + + + +// 查询seg首页标签管理列表 +export function listSegchk_lable_mgt(query) { + return request({ + url: '/segchk/segchk_lable_mgt/list', + method: 'get', + params: query + }) +} + +// 查询seg首页标签管理详细 +export function getSegchk_lable_mgt(mgtId) { + return request({ + url: '/segchk/segchk_lable_mgt/' + mgtId, + method: 'get' + }) +} + +// 新增seg首页标签管理 +export function addSegchk_lable_mgt(data) { + return request({ + url: '/segchk/segchk_lable_mgt', + method: 'post', + data: data + }) +} + +// 修改seg首页标签管理 +export function updateSegchk_lable_mgt(data) { + return request({ + url: '/segchk/segchk_lable_mgt/edit_info', + method: 'put', + data: data + }) +} + +// 修改seg首页标签管理状态 +export function updateSegchk_lable_mgt_state(mgtId, mgtState) { + const data = { + mgtId, + mgtState + } + return request({ + url: '/segchk/segchk_lable_mgt/mgt_state', + method: 'put', + data: data + }) +} + +// 删除seg首页标签管理 +export function delSegchk_lable_mgt(mgtIds) { + return request({ + url: '/segchk/segchk_lable_mgt/' + mgtIds, + method: 'delete' + }) +} + +// 导出seg首页标签管理 +export function exportSegchk_lable_mgt(query) { + return request({ + url: '/segchk/segchk_lable_mgt/export', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_logion_detail.js b/ruoyi-ui/src/api/segchk/segchk_logion_detail.js new file mode 100644 index 0000000..3090b7d --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_logion_detail.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg登录记录列表 +export function listSegchk_logion_detail(query) { + return request({ + url: '/segchk/segchk_logion_detail/list', + method: 'get', + params: query + }) +} + +// 查询seg登录记录详细 +export function getSegchk_logion_detail(loginId) { + return request({ + url: '/segchk/segchk_logion_detail/' + loginId, + method: 'get' + }) +} + +// 新增seg登录记录 +export function addSegchk_logion_detail(data) { + return request({ + url: '/segchk/segchk_logion_detail', + method: 'post', + data: data + }) +} + +// 修改seg登录记录 +export function updateSegchk_logion_detail(data) { + return request({ + url: '/segchk/segchk_logion_detail', + method: 'put', + data: data + }) +} + +// 删除seg登录记录 +export function delSegchk_logion_detail(loginId) { + return request({ + url: '/segchk/segchk_logion_detail/' + loginId, + method: 'delete' + }) +} + +// 导出seg登录记录 +export function exportSegchk_logion_detail(query) { + return request({ + url: '/segchk/segchk_logion_detail/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_msg_detail.js b/ruoyi-ui/src/api/segchk/segchk_msg_detail.js new file mode 100644 index 0000000..ebc6564 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_msg_detail.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg消息记录列表 +export function listSegchk_msg_detail(query) { + return request({ + url: '/segchk/segchk_msg_detail/list', + method: 'get', + params: query + }) +} + +// 查询seg消息记录详细 +export function getSegchk_msg_detail(msgId) { + return request({ + url: '/segchk/segchk_msg_detail/' + msgId, + method: 'get' + }) +} + +// 新增seg消息记录 +export function addSegchk_msg_detail(data) { + return request({ + url: '/segchk/segchk_msg_detail', + method: 'post', + data: data + }) +} + +// 修改seg消息记录 +export function updateSegchk_msg_detail(data) { + return request({ + url: '/segchk/segchk_msg_detail', + method: 'put', + data: data + }) +} + +// 删除seg消息记录 +export function delSegchk_msg_detail(msgId) { + return request({ + url: '/segchk/segchk_msg_detail/' + msgId, + method: 'delete' + }) +} + +// 导出seg消息记录 +export function exportSegchk_msg_detail(query) { + return request({ + url: '/segchk/segchk_msg_detail/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_preference_lable.js b/ruoyi-ui/src/api/segchk/segchk_preference_lable.js new file mode 100644 index 0000000..5c50b9a --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_preference_lable.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg优惠管理列表 +export function listSegchk_preference_lable(query) { + return request({ + url: '/segchk/segchk_preference_lable/list', + method: 'get', + params: query + }) +} + +// 查询seg优惠管理详细 +export function getSegchk_preference_lable(providerId) { + return request({ + url: '/segchk/segchk_preference_lable/' + providerId, + method: 'get' + }) +} + +// 新增seg优惠管理 +export function addSegchk_preference_lable(data) { + return request({ + url: '/segchk/segchk_preference_lable', + method: 'post', + data: data + }) +} + +// 修改seg优惠管理 +export function updateSegchk_preference_lable(data) { + return request({ + url: '/segchk/segchk_preference_lable', + method: 'put', + data: data + }) +} + +// 删除seg优惠管理 +export function delSegchk_preference_lable(providerId) { + return request({ + url: '/segchk/segchk_preference_lable/' + providerId, + method: 'delete' + }) +} + +// 导出seg优惠管理 +export function exportSegchk_preference_lable(query) { + return request({ + url: '/segchk/segchk_preference_lable/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_provider_mgt.js b/ruoyi-ui/src/api/segchk/segchk_provider_mgt.js new file mode 100644 index 0000000..5fb9d0d --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_provider_mgt.js @@ -0,0 +1,65 @@ +import request from '@/utils/request' + +// 查询seg运营商管理列表 +export function listSegchk_provider_mgt(query) { + return request({ + url: '/segchk/segchk_provider_mgt/list', + method: 'get', + params: query + }) +} + +// 查询seg运营商管理详细 +export function getSegchk_provider_mgt(providerId) { + return request({ + url: '/segchk/segchk_provider_mgt/' + providerId, + method: 'get' + }) +} + +// 新增seg运营商管理 +export function addSegchk_provider_mgt(data) { + return request({ + url: '/segchk/segchk_provider_mgt', + method: 'post', + data: data + }) +} + +// 修改seg运营商管理 +export function updateSegchk_provider_mgt(data) { + return request({ + url: '/segchk/segchk_provider_mgt/edit', + method: 'put', + data: data + }) +} +// 修改seg运营商管理 +export function updateSegchk_provider_service_state(providerId, flagId) { + const data = { + providerId, + flagId + } + return request({ + url: '/segchk/segchk_provider_mgt/status', + method: 'put', + data: data + }) +} + +// 删除seg运营商管理 +export function delSegchk_provider_mgt(providerId) { + return request({ + url: '/segchk/segchk_provider_mgt/' + providerId, + method: 'delete' + }) +} + +// 导出seg运营商管理 +export function exportSegchk_provider_mgt(query) { + return request({ + url: '/segchk/segchk_provider_mgt/export', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_recommender_store.js b/ruoyi-ui/src/api/segchk/segchk_recommender_store.js new file mode 100644 index 0000000..54d4daa --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_recommender_store.js @@ -0,0 +1,67 @@ +import request from '@/utils/request' + +// 查询seg首页推荐商户列表 +export function listSegchk_recommender_store(query) { + return request({ + url: '/segchk/segchk_recommender_store/list', + method: 'get', + params: query + }) +} + +// 查询seg首页推荐商户详细 +export function getSegchk_recommender_store(recommenderId) { + return request({ + url: '/segchk/segchk_recommender_store/' + recommenderId, + method: 'get' + }) +} + +// 新增seg首页推荐商户 +export function addSegchk_recommender_store(data) { + return request({ + url: '/segchk/segchk_recommender_store', + method: 'post', + data: data + }) +} + +// 修改seg首页推荐商户 +export function updateSegchk_recommender_store(data) { + return request({ + url: '/segchk/segchk_recommender_store/edit_info', + method: 'put', + data: data + }) +} + + +// 修改seg首页标签管理状态 +export function updateSegchk_recommender_state(recommenderId, mgtState) { + const data = { + recommenderId, + mgtState + } + return request({ + url: '/segchk/segchk_recommender_store/mgt_state', + method: 'put', + data: data + }) +} + +// 删除seg首页推荐商户 +export function delSegchk_recommender_store(recommenderId) { + return request({ + url: '/segchk/segchk_recommender_store/' + recommenderId, + method: 'delete' + }) +} + +// 导出seg首页推荐商户 +export function exportSegchk_recommender_store(query) { + return request({ + url: '/segchk/segchk_recommender_store/export', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_saler_info.js b/ruoyi-ui/src/api/segchk/segchk_saler_info.js new file mode 100644 index 0000000..4627dc0 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_saler_info.js @@ -0,0 +1,67 @@ +import request from '@/utils/request' + +// 查询seg销售人员信息列表 +export function listSegchk_saler_info(query) { + return request({ + url: '/segchk/segchk_saler_info/list', + method: 'get', + params: query + }) +} + +// 查询seg销售人员信息详细 +export function getSegchk_saler_info(salerId) { + return request({ + url: '/segchk/segchk_saler_info/' + salerId, + method: 'get' + }) +} + +// 新增seg销售人员信息 +export function addSegchk_saler_info(data) { + return request({ + url: '/segchk/segchk_saler_info', + method: 'post', + data: data + }) +} + +// 修改seg销售人员信息 +export function updateSegchk_saler_info(data) { + return request({ + url: '/segchk/segchk_saler_info/edit', + method: 'put', + data: data + }) +} + +// 修改seg销售人员信息 +export function updateSegchk_saler_status(providerId, salerId, salerState) { + const data = { + providerId, + salerId, + salerState + } + return request({ + url: '/segchk/segchk_saler_info/update_status', + method: 'put', + data: data + }) +} + +// 删除seg销售人员信息 +export function delSegchk_saler_info(salerId) { + return request({ + url: '/segchk/segchk_saler_info/' + salerId, + method: 'delete' + }) +} + +// 导出seg销售人员信息 +export function exportSegchk_saler_info(query) { + return request({ + url: '/segchk/segchk_saler_info/export', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_self_service_chk.js b/ruoyi-ui/src/api/segchk/segchk_self_service_chk.js new file mode 100644 index 0000000..b899df8 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_self_service_chk.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg自定义卡核消记录列表 +export function listSegchk_self_service_chk(query) { + return request({ + url: '/segchk/segchk_self_service_chk/list', + method: 'get', + params: query + }) +} + +// 查询seg自定义卡核消记录详细 +export function getSegchk_self_service_chk(chkServiceId) { + return request({ + url: '/segchk/segchk_self_service_chk/' + chkServiceId, + method: 'get' + }) +} + +// 新增seg自定义卡核消记录 +export function addSegchk_self_service_chk(data) { + return request({ + url: '/segchk/segchk_self_service_chk', + method: 'post', + data: data + }) +} + +// 修改seg自定义卡核消记录 +export function updateSegchk_self_service_chk(data) { + return request({ + url: '/segchk/segchk_self_service_chk', + method: 'put', + data: data + }) +} + +// 删除seg自定义卡核消记录 +export function delSegchk_self_service_chk(chkServiceId) { + return request({ + url: '/segchk/segchk_self_service_chk/' + chkServiceId, + method: 'delete' + }) +} + +// 导出seg自定义卡核消记录 +export function exportSegchk_self_service_chk(query) { + return request({ + url: '/segchk/segchk_self_service_chk/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_service_chk.js b/ruoyi-ui/src/api/segchk/segchk_service_chk.js new file mode 100644 index 0000000..743cef9 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_service_chk.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg核消记录列表 +export function listSegchk_service_chk(query) { + return request({ + url: '/segchk/segchk_service_chk/list', + method: 'get', + params: query + }) +} + +// 查询seg核消记录详细 +export function getSegchk_service_chk(chkServiceId) { + return request({ + url: '/segchk/segchk_service_chk/' + chkServiceId, + method: 'get' + }) +} + +// 新增seg核消记录 +export function addSegchk_service_chk(data) { + return request({ + url: '/segchk/segchk_service_chk', + method: 'post', + data: data + }) +} + +// 修改seg核消记录 +export function updateSegchk_service_chk(data) { + return request({ + url: '/segchk/segchk_service_chk', + method: 'put', + data: data + }) +} + +// 删除seg核消记录 +export function delSegchk_service_chk(chkServiceId) { + return request({ + url: '/segchk/segchk_service_chk/' + chkServiceId, + method: 'delete' + }) +} + +// 导出seg核消记录 +export function exportSegchk_service_chk(query) { + return request({ + url: '/segchk/segchk_service_chk/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_service_comment.js b/ruoyi-ui/src/api/segchk/segchk_service_comment.js new file mode 100644 index 0000000..0d5c940 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_service_comment.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg评价记录列表 +export function listSegchk_service_comment(query) { + return request({ + url: '/segchk/segchk_service_comment/list', + method: 'get', + params: query + }) +} + +// 查询seg评价记录详细 +export function getSegchk_service_comment(commentId) { + return request({ + url: '/segchk/segchk_service_comment/' + commentId, + method: 'get' + }) +} + +// 新增seg评价记录 +export function addSegchk_service_comment(data) { + return request({ + url: '/segchk/segchk_service_comment', + method: 'post', + data: data + }) +} + +// 修改seg评价记录 +export function updateSegchk_service_comment(data) { + return request({ + url: '/segchk/segchk_service_comment', + method: 'put', + data: data + }) +} + +// 删除seg评价记录 +export function delSegchk_service_comment(commentId) { + return request({ + url: '/segchk/segchk_service_comment/' + commentId, + method: 'delete' + }) +} + +// 导出seg评价记录 +export function exportSegchk_service_comment(query) { + return request({ + url: '/segchk/segchk_service_comment/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_sms_detail.js b/ruoyi-ui/src/api/segchk/segchk_sms_detail.js new file mode 100644 index 0000000..d0bfeca --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_sms_detail.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg短信记录列表 +export function listSegchk_sms_detail(query) { + return request({ + url: '/segchk/segchk_sms_detail/list', + method: 'get', + params: query + }) +} + +// 查询seg短信记录详细 +export function getSegchk_sms_detail(shortMsgId) { + return request({ + url: '/segchk/segchk_sms_detail/' + shortMsgId, + method: 'get' + }) +} + +// 新增seg短信记录 +export function addSegchk_sms_detail(data) { + return request({ + url: '/segchk/segchk_sms_detail', + method: 'post', + data: data + }) +} + +// 修改seg短信记录 +export function updateSegchk_sms_detail(data) { + return request({ + url: '/segchk/segchk_sms_detail', + method: 'put', + data: data + }) +} + +// 删除seg短信记录 +export function delSegchk_sms_detail(shortMsgId) { + return request({ + url: '/segchk/segchk_sms_detail/' + shortMsgId, + method: 'delete' + }) +} + +// 导出seg短信记录 +export function exportSegchk_sms_detail(query) { + return request({ + url: '/segchk/segchk_sms_detail/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_store_account.js b/ruoyi-ui/src/api/segchk/segchk_store_account.js new file mode 100644 index 0000000..a9c7d99 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_account.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg商户余额信息列表 +export function listSegchk_store_account(query) { + return request({ + url: '/segchk/segchk_store_account/list', + method: 'get', + params: query + }) +} + +// 查询seg商户余额信息详细 +export function getSegchk_store_account(accountId) { + return request({ + url: '/segchk/segchk_store_account/' + accountId, + method: 'get' + }) +} + +// 新增seg商户余额信息 +export function addSegchk_store_account(data) { + return request({ + url: '/segchk/segchk_store_account', + method: 'post', + data: data + }) +} + +// 修改seg商户余额信息 +export function updateSegchk_store_account(data) { + return request({ + url: '/segchk/segchk_store_account', + method: 'put', + data: data + }) +} + +// 删除seg商户余额信息 +export function delSegchk_store_account(accountId) { + return request({ + url: '/segchk/segchk_store_account/' + accountId, + method: 'delete' + }) +} + +// 导出seg商户余额信息 +export function exportSegchk_store_account(query) { + return request({ + url: '/segchk/segchk_store_account/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_store_basic_info.js b/ruoyi-ui/src/api/segchk/segchk_store_basic_info.js new file mode 100644 index 0000000..2f0952f --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_basic_info.js @@ -0,0 +1,77 @@ +import request from '@/utils/request' + +// 查询seg商家基础信息列表 +export function listSegchk_store_basic_info(query) { + return request({ + url: '/segchk/segchk_store_basic_info/list', + method: 'get', + params: query + }) +} + +// 查询seg商家基础信息详细 +export function getSegchk_store_basic_info(storeId) { + return request({ + url: '/segchk/segchk_store_basic_info/' + storeId, + method: 'get' + }) +} + +// 新增seg商家基础信息 +export function addSegchk_store_basic_info(data) { + return request({ + url: '/segchk/segchk_store_basic_info', + method: 'post', + data: data + }) +} + +// 修改seg商家基础信息 +export function updateSegchk_store_basic_info(data) { + return request({ + url: '/segchk/segchk_store_basic_info/edit_info', + method: 'put', + data: data + }) +} + +// 修改seg商家基础信息 +export function update_store_detail(data) { + return request({ + url: '/segchk/segchk_store_basic_info/update_detail', + method: 'put', + data: data + }) +} + +// 修改seg商家基础服务状态 +export function updateSegchk_store_service_state(providerId, storeId, serviceState, withMsg) { + const data = { + providerId, + storeId, + serviceState, + withMsg + } + return request({ + url: '/segchk/segchk_store_basic_info/service_state', + method: 'put', + data: data + }) +} + +// 删除seg商家基础信息 +export function delSegchk_store_basic_info(storeId) { + return request({ + url: '/segchk/segchk_store_basic_info/' + storeId, + method: 'delete' + }) +} + +// 导出seg商家基础信息 +export function exportSegchk_store_basic_info(query) { + return request({ + url: '/segchk/segchk_store_basic_info/export', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_store_cash.js b/ruoyi-ui/src/api/segchk/segchk_store_cash.js new file mode 100644 index 0000000..41fdefd --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_cash.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg商户户提现记录列表 +export function listSegchk_store_cash(query) { + return request({ + url: '/segchk/segchk_store_cash/list', + method: 'get', + params: query + }) +} + +// 查询seg商户户提现记录详细 +export function getSegchk_store_cash(cashId) { + return request({ + url: '/segchk/segchk_store_cash/' + cashId, + method: 'get' + }) +} + +// 新增seg商户户提现记录 +export function addSegchk_store_cash(data) { + return request({ + url: '/segchk/segchk_store_cash', + method: 'post', + data: data + }) +} + +// 修改seg商户户提现记录 +export function updateSegchk_store_cash(data) { + return request({ + url: '/segchk/segchk_store_cash', + method: 'put', + data: data + }) +} + +// 删除seg商户户提现记录 +export function delSegchk_store_cash(cashId) { + return request({ + url: '/segchk/segchk_store_cash/' + cashId, + method: 'delete' + }) +} + +// 导出seg商户户提现记录 +export function exportSegchk_store_cash(query) { + return request({ + url: '/segchk/segchk_store_cash/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_store_charge.js b/ruoyi-ui/src/api/segchk/segchk_store_charge.js new file mode 100644 index 0000000..3eaf113 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_charge.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg商户充值记录列表 +export function listSegchk_store_charge(query) { + return request({ + url: '/segchk/segchk_store_charge/list', + method: 'get', + params: query + }) +} + +// 查询seg商户充值记录详细 +export function getSegchk_store_charge(chargeId) { + return request({ + url: '/segchk/segchk_store_charge/' + chargeId, + method: 'get' + }) +} + +// 新增seg商户充值记录 +export function addSegchk_store_charge(data) { + return request({ + url: '/segchk/segchk_store_charge', + method: 'post', + data: data + }) +} + +// 修改seg商户充值记录 +export function updateSegchk_store_charge(data) { + return request({ + url: '/segchk/segchk_store_charge', + method: 'put', + data: data + }) +} + +// 删除seg商户充值记录 +export function delSegchk_store_charge(chargeId) { + return request({ + url: '/segchk/segchk_store_charge/' + chargeId, + method: 'delete' + }) +} + +// 导出seg商户充值记录 +export function exportSegchk_store_charge(query) { + return request({ + url: '/segchk/segchk_store_charge/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_store_chk_mgt.js b/ruoyi-ui/src/api/segchk/segchk_store_chk_mgt.js new file mode 100644 index 0000000..b13b020 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_chk_mgt.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg商家核消卡管理列表 +export function listSegchk_store_chk_mgt(query) { + return request({ + url: '/segchk/segchk_store_chk_mgt/list', + method: 'get', + params: query + }) +} + +// 查询seg商家核消卡管理详细 +export function getSegchk_store_chk_mgt(mgtId) { + return request({ + url: '/segchk/segchk_store_chk_mgt/' + mgtId, + method: 'get' + }) +} + +// 新增seg商家核消卡管理 +export function addSegchk_store_chk_mgt(data) { + return request({ + url: '/segchk/segchk_store_chk_mgt', + method: 'post', + data: data + }) +} + +// 修改seg商家核消卡管理 +export function updateSegchk_store_chk_mgt(data) { + return request({ + url: '/segchk/segchk_store_chk_mgt', + method: 'put', + data: data + }) +} + +// 删除seg商家核消卡管理 +export function delSegchk_store_chk_mgt(mgtId) { + return request({ + url: '/segchk/segchk_store_chk_mgt/' + mgtId, + method: 'delete' + }) +} + +// 导出seg商家核消卡管理 +export function exportSegchk_store_chk_mgt(query) { + return request({ + url: '/segchk/segchk_store_chk_mgt/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_store_image.js b/ruoyi-ui/src/api/segchk/segchk_store_image.js new file mode 100644 index 0000000..0e35e59 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_image.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg商家图片信息列表 +export function listSegchk_store_image(query) { + return request({ + url: '/segchk/segchk_store_image/list', + method: 'get', + params: query + }) +} + +// 查询seg商家图片信息详细 +export function getSegchk_store_image(storeId) { + return request({ + url: '/segchk/segchk_store_image/' + storeId, + method: 'get' + }) +} + +// 新增seg商家图片信息 +export function addSegchk_store_image(data) { + return request({ + url: '/segchk/segchk_store_image', + method: 'post', + data: data + }) +} + +// 修改seg商家图片信息 +export function updateSegchk_store_image(data) { + return request({ + url: '/segchk/segchk_store_image', + method: 'put', + data: data + }) +} + +// 删除seg商家图片信息 +export function delSegchk_store_image(storeId) { + return request({ + url: '/segchk/segchk_store_image/' + storeId, + method: 'delete' + }) +} + +// 导出seg商家图片信息 +export function exportSegchk_store_image(query) { + return request({ + url: '/segchk/segchk_store_image/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_store_lable_mgt.js b/ruoyi-ui/src/api/segchk/segchk_store_lable_mgt.js new file mode 100644 index 0000000..199bedc --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_lable_mgt.js @@ -0,0 +1,66 @@ +import request from '@/utils/request' + +// 查询seg商家标签管理列表 +export function listSegchk_store_lable_mgt(query) { + return request({ + url: '/segchk/segchk_store_lable_mgt/list', + method: 'get', + params: query + }) +} + +// 查询seg商家标签管理详细 +export function getSegchk_store_lable_mgt(mgtId) { + return request({ + url: '/segchk/segchk_store_lable_mgt/' + mgtId, + method: 'get' + }) +} + +// 新增seg商家标签管理 +export function addSegchk_store_lable_mgt(data) { + return request({ + url: '/segchk/segchk_store_lable_mgt', + method: 'post', + data: data + }) +} + +// 修改seg商家标签管理 +export function updateSegchk_store_lable_mgt(data) { + return request({ + url: '/segchk/segchk_store_lable_mgt/edit', + method: 'put', + data: data + }) +} + +// 修改seg商家标签管理 +export function updateSegchk_store_lable_status(mgtId, mgtState) { + const data = { + mgtId, + mgtState + } + return request({ + url: '/segchk/segchk_store_lable_mgt/update_status', + method: 'put', + data: data + }) +} + +// 删除seg商家标签管理 +export function delSegchk_store_lable_mgt(mgtId) { + return request({ + url: '/segchk/segchk_store_lable_mgt/' + mgtId, + method: 'delete' + }) +} + +// 导出seg商家标签管理 +export function exportSegchk_store_lable_mgt(query) { + return request({ + url: '/segchk/segchk_store_lable_mgt/export', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_store_reward.js b/ruoyi-ui/src/api/segchk/segchk_store_reward.js new file mode 100644 index 0000000..8c15f69 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_reward.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg商户奖励列表 +export function listSegchk_store_reward(query) { + return request({ + url: '/segchk/segchk_store_reward/list', + method: 'get', + params: query + }) +} + +// 查询seg商户奖励详细 +export function getSegchk_store_reward(rewardId) { + return request({ + url: '/segchk/segchk_store_reward/' + rewardId, + method: 'get' + }) +} + +// 新增seg商户奖励 +export function addSegchk_store_reward(data) { + return request({ + url: '/segchk/segchk_store_reward', + method: 'post', + data: data + }) +} + +// 修改seg商户奖励 +export function updateSegchk_store_reward(data) { + return request({ + url: '/segchk/segchk_store_reward', + method: 'put', + data: data + }) +} + +// 删除seg商户奖励 +export function delSegchk_store_reward(rewardId) { + return request({ + url: '/segchk/segchk_store_reward/' + rewardId, + method: 'delete' + }) +} + +// 导出seg商户奖励 +export function exportSegchk_store_reward(query) { + return request({ + url: '/segchk/segchk_store_reward/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_store_security.js b/ruoyi-ui/src/api/segchk/segchk_store_security.js new file mode 100644 index 0000000..7e73d08 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_security.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg商户密码列表 +export function listSegchk_store_security(query) { + return request({ + url: '/segchk/segchk_store_security/list', + method: 'get', + params: query + }) +} + +// 查询seg商户密码详细 +export function getSegchk_store_security(pwdId) { + return request({ + url: '/segchk/segchk_store_security/' + pwdId, + method: 'get' + }) +} + +// 新增seg商户密码 +export function addSegchk_store_security(data) { + return request({ + url: '/segchk/segchk_store_security', + method: 'post', + data: data + }) +} + +// 修改seg商户密码 +export function updateSegchk_store_security(data) { + return request({ + url: '/segchk/segchk_store_security', + method: 'put', + data: data + }) +} + +// 删除seg商户密码 +export function delSegchk_store_security(pwdId) { + return request({ + url: '/segchk/segchk_store_security/' + pwdId, + method: 'delete' + }) +} + +// 导出seg商户密码 +export function exportSegchk_store_security(query) { + return request({ + url: '/segchk/segchk_store_security/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_store_self_mgt.js b/ruoyi-ui/src/api/segchk/segchk_store_self_mgt.js new file mode 100644 index 0000000..bd2dd16 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_store_self_mgt.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg商家自定义卡管理列表 +export function listSegchk_store_self_mgt(query) { + return request({ + url: '/segchk/segchk_store_self_mgt/list', + method: 'get', + params: query + }) +} + +// 查询seg商家自定义卡管理详细 +export function getSegchk_store_self_mgt(freeCardId) { + return request({ + url: '/segchk/segchk_store_self_mgt/' + freeCardId, + method: 'get' + }) +} + +// 新增seg商家自定义卡管理 +export function addSegchk_store_self_mgt(data) { + return request({ + url: '/segchk/segchk_store_self_mgt', + method: 'post', + data: data + }) +} + +// 修改seg商家自定义卡管理 +export function updateSegchk_store_self_mgt(data) { + return request({ + url: '/segchk/segchk_store_self_mgt', + method: 'put', + data: data + }) +} + +// 删除seg商家自定义卡管理 +export function delSegchk_store_self_mgt(freeCardId) { + return request({ + url: '/segchk/segchk_store_self_mgt/' + freeCardId, + method: 'delete' + }) +} + +// 导出seg商家自定义卡管理 +export function exportSegchk_store_self_mgt(query) { + return request({ + url: '/segchk/segchk_store_self_mgt/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_system_setting.js b/ruoyi-ui/src/api/segchk/segchk_system_setting.js new file mode 100644 index 0000000..1eb4776 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_system_setting.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询系统设置列表 +export function listSegchk_system_setting(query) { + return request({ + url: '/segchk/segchk_system_setting/list', + method: 'get', + params: query + }) +} + +// 查询系统设置详细 +export function getSegchk_system_setting(id) { + return request({ + url: '/segchk/segchk_system_setting/' + id, + method: 'get' + }) +} + +// 新增系统设置 +export function addSegchk_system_setting(data) { + return request({ + url: '/segchk/segchk_system_setting', + method: 'post', + data: data + }) +} + +// 修改系统设置 +export function updateSegchk_system_setting(data) { + return request({ + url: '/segchk/segchk_system_setting/edit', + method: 'put', + data: data + }) +} + +// 删除系统设置 +export function delSegchk_system_setting(id) { + return request({ + url: '/segchk/segchk_system_setting/' + id, + method: 'delete' + }) +} + +// 导出系统设置 +export function exportSegchk_system_setting(query) { + return request({ + url: '/segchk/segchk_system_setting/export', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/segchk/segchk_user_account.js b/ruoyi-ui/src/api/segchk/segchk_user_account.js new file mode 100644 index 0000000..a75209c --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_account.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户余额信息列表 +export function listSegchk_user_account(query) { + return request({ + url: '/segchk/segchk_user_account/list', + method: 'get', + params: query + }) +} + +// 查询seg用户余额信息详细 +export function getSegchk_user_account(accountId) { + return request({ + url: '/segchk/segchk_user_account/' + accountId, + method: 'get' + }) +} + +// 新增seg用户余额信息 +export function addSegchk_user_account(data) { + return request({ + url: '/segchk/segchk_user_account', + method: 'post', + data: data + }) +} + +// 修改seg用户余额信息 +export function updateSegchk_user_account(data) { + return request({ + url: '/segchk/segchk_user_account', + method: 'put', + data: data + }) +} + +// 删除seg用户余额信息 +export function delSegchk_user_account(accountId) { + return request({ + url: '/segchk/segchk_user_account/' + accountId, + method: 'delete' + }) +} + +// 导出seg用户余额信息 +export function exportSegchk_user_account(query) { + return request({ + url: '/segchk/segchk_user_account/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_basic_info.js b/ruoyi-ui/src/api/segchk/segchk_user_basic_info.js new file mode 100644 index 0000000..85fe912 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_basic_info.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户基本信息列表 +export function listSegchk_user_basic_info(query) { + return request({ + url: '/segchk/segchk_user_basic_info/list', + method: 'get', + params: query + }) +} + +// 查询seg用户基本信息详细 +export function getSegchk_user_basic_info(userId) { + return request({ + url: '/segchk/segchk_user_basic_info/' + userId, + method: 'get' + }) +} + +// 新增seg用户基本信息 +export function addSegchk_user_basic_info(data) { + return request({ + url: '/segchk/segchk_user_basic_info', + method: 'post', + data: data + }) +} + +// 修改seg用户基本信息 +export function updateSegchk_user_basic_info(data) { + return request({ + url: '/segchk/segchk_user_basic_info', + method: 'put', + data: data + }) +} + +// 删除seg用户基本信息 +export function delSegchk_user_basic_info(userId) { + return request({ + url: '/segchk/segchk_user_basic_info/' + userId, + method: 'delete' + }) +} + +// 导出seg用户基本信息 +export function exportSegchk_user_basic_info(query) { + return request({ + url: '/segchk/segchk_user_basic_info/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_cash.js b/ruoyi-ui/src/api/segchk/segchk_user_cash.js new file mode 100644 index 0000000..9be0bd4 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_cash.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户提现记录列表 +export function listSegchk_user_cash(query) { + return request({ + url: '/segchk/segchk_user_cash/list', + method: 'get', + params: query + }) +} + +// 查询seg用户提现记录详细 +export function getSegchk_user_cash(cashId) { + return request({ + url: '/segchk/segchk_user_cash/' + cashId, + method: 'get' + }) +} + +// 新增seg用户提现记录 +export function addSegchk_user_cash(data) { + return request({ + url: '/segchk/segchk_user_cash', + method: 'post', + data: data + }) +} + +// 修改seg用户提现记录 +export function updateSegchk_user_cash(data) { + return request({ + url: '/segchk/segchk_user_cash', + method: 'put', + data: data + }) +} + +// 删除seg用户提现记录 +export function delSegchk_user_cash(cashId) { + return request({ + url: '/segchk/segchk_user_cash/' + cashId, + method: 'delete' + }) +} + +// 导出seg用户提现记录 +export function exportSegchk_user_cash(query) { + return request({ + url: '/segchk/segchk_user_cash/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_certification_info.js b/ruoyi-ui/src/api/segchk/segchk_user_certification_info.js new file mode 100644 index 0000000..85c2e30 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_certification_info.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户实名认证信息列表 +export function listSegchk_user_certification_info(query) { + return request({ + url: '/segchk/segchk_user_certification_info/list', + method: 'get', + params: query + }) +} + +// 查询seg用户实名认证信息详细 +export function getSegchk_user_certification_info(usercardId) { + return request({ + url: '/segchk/segchk_user_certification_info/' + usercardId, + method: 'get' + }) +} + +// 新增seg用户实名认证信息 +export function addSegchk_user_certification_info(data) { + return request({ + url: '/segchk/segchk_user_certification_info', + method: 'post', + data: data + }) +} + +// 修改seg用户实名认证信息 +export function updateSegchk_user_certification_info(data) { + return request({ + url: '/segchk/segchk_user_certification_info', + method: 'put', + data: data + }) +} + +// 删除seg用户实名认证信息 +export function delSegchk_user_certification_info(usercardId) { + return request({ + url: '/segchk/segchk_user_certification_info/' + usercardId, + method: 'delete' + }) +} + +// 导出seg用户实名认证信息 +export function exportSegchk_user_certification_info(query) { + return request({ + url: '/segchk/segchk_user_certification_info/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_charge.js b/ruoyi-ui/src/api/segchk/segchk_user_charge.js new file mode 100644 index 0000000..0f52aa7 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_charge.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户充值记录列表 +export function listSegchk_user_charge(query) { + return request({ + url: '/segchk/segchk_user_charge/list', + method: 'get', + params: query + }) +} + +// 查询seg用户充值记录详细 +export function getSegchk_user_charge(chargeId) { + return request({ + url: '/segchk/segchk_user_charge/' + chargeId, + method: 'get' + }) +} + +// 新增seg用户充值记录 +export function addSegchk_user_charge(data) { + return request({ + url: '/segchk/segchk_user_charge', + method: 'post', + data: data + }) +} + +// 修改seg用户充值记录 +export function updateSegchk_user_charge(data) { + return request({ + url: '/segchk/segchk_user_charge', + method: 'put', + data: data + }) +} + +// 删除seg用户充值记录 +export function delSegchk_user_charge(chargeId) { + return request({ + url: '/segchk/segchk_user_charge/' + chargeId, + method: 'delete' + }) +} + +// 导出seg用户充值记录 +export function exportSegchk_user_charge(query) { + return request({ + url: '/segchk/segchk_user_charge/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_collect.js b/ruoyi-ui/src/api/segchk/segchk_user_collect.js new file mode 100644 index 0000000..e612f91 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_collect.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户收藏记录列表 +export function listSegchk_user_collect(query) { + return request({ + url: '/segchk/segchk_user_collect/list', + method: 'get', + params: query + }) +} + +// 查询seg用户收藏记录详细 +export function getSegchk_user_collect(collectId) { + return request({ + url: '/segchk/segchk_user_collect/' + collectId, + method: 'get' + }) +} + +// 新增seg用户收藏记录 +export function addSegchk_user_collect(data) { + return request({ + url: '/segchk/segchk_user_collect', + method: 'post', + data: data + }) +} + +// 修改seg用户收藏记录 +export function updateSegchk_user_collect(data) { + return request({ + url: '/segchk/segchk_user_collect', + method: 'put', + data: data + }) +} + +// 删除seg用户收藏记录 +export function delSegchk_user_collect(collectId) { + return request({ + url: '/segchk/segchk_user_collect/' + collectId, + method: 'delete' + }) +} + +// 导出seg用户收藏记录 +export function exportSegchk_user_collect(query) { + return request({ + url: '/segchk/segchk_user_collect/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_ext_info.js b/ruoyi-ui/src/api/segchk/segchk_user_ext_info.js new file mode 100644 index 0000000..52860fe --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_ext_info.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户扩展信息列表 +export function listSegchk_user_ext_info(query) { + return request({ + url: '/segchk/segchk_user_ext_info/list', + method: 'get', + params: query + }) +} + +// 查询seg用户扩展信息详细 +export function getSegchk_user_ext_info(userId) { + return request({ + url: '/segchk/segchk_user_ext_info/' + userId, + method: 'get' + }) +} + +// 新增seg用户扩展信息 +export function addSegchk_user_ext_info(data) { + return request({ + url: '/segchk/segchk_user_ext_info', + method: 'post', + data: data + }) +} + +// 修改seg用户扩展信息 +export function updateSegchk_user_ext_info(data) { + return request({ + url: '/segchk/segchk_user_ext_info', + method: 'put', + data: data + }) +} + +// 删除seg用户扩展信息 +export function delSegchk_user_ext_info(userId) { + return request({ + url: '/segchk/segchk_user_ext_info/' + userId, + method: 'delete' + }) +} + +// 导出seg用户扩展信息 +export function exportSegchk_user_ext_info(query) { + return request({ + url: '/segchk/segchk_user_ext_info/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_likego.js b/ruoyi-ui/src/api/segchk/segchk_user_likego.js new file mode 100644 index 0000000..5e70ae0 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_likego.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户想去记录列表 +export function listSegchk_user_likego(query) { + return request({ + url: '/segchk/segchk_user_likego/list', + method: 'get', + params: query + }) +} + +// 查询seg用户想去记录详细 +export function getSegchk_user_likego(likegoId) { + return request({ + url: '/segchk/segchk_user_likego/' + likegoId, + method: 'get' + }) +} + +// 新增seg用户想去记录 +export function addSegchk_user_likego(data) { + return request({ + url: '/segchk/segchk_user_likego', + method: 'post', + data: data + }) +} + +// 修改seg用户想去记录 +export function updateSegchk_user_likego(data) { + return request({ + url: '/segchk/segchk_user_likego', + method: 'put', + data: data + }) +} + +// 删除seg用户想去记录 +export function delSegchk_user_likego(likegoId) { + return request({ + url: '/segchk/segchk_user_likego/' + likegoId, + method: 'delete' + }) +} + +// 导出seg用户想去记录 +export function exportSegchk_user_likego(query) { + return request({ + url: '/segchk/segchk_user_likego/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_reward.js b/ruoyi-ui/src/api/segchk/segchk_user_reward.js new file mode 100644 index 0000000..9fbae6d --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_reward.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户奖励列表 +export function listSegchk_user_reward(query) { + return request({ + url: '/segchk/segchk_user_reward/list', + method: 'get', + params: query + }) +} + +// 查询seg用户奖励详细 +export function getSegchk_user_reward(rewardId) { + return request({ + url: '/segchk/segchk_user_reward/' + rewardId, + method: 'get' + }) +} + +// 新增seg用户奖励 +export function addSegchk_user_reward(data) { + return request({ + url: '/segchk/segchk_user_reward', + method: 'post', + data: data + }) +} + +// 修改seg用户奖励 +export function updateSegchk_user_reward(data) { + return request({ + url: '/segchk/segchk_user_reward', + method: 'put', + data: data + }) +} + +// 删除seg用户奖励 +export function delSegchk_user_reward(rewardId) { + return request({ + url: '/segchk/segchk_user_reward/' + rewardId, + method: 'delete' + }) +} + +// 导出seg用户奖励 +export function exportSegchk_user_reward(query) { + return request({ + url: '/segchk/segchk_user_reward/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_reward_ctl.js b/ruoyi-ui/src/api/segchk/segchk_user_reward_ctl.js new file mode 100644 index 0000000..a1dae02 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_reward_ctl.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg会员推荐控制列表 +export function listSegchk_user_reward_ctl(query) { + return request({ + url: '/segchk/segchk_user_reward_ctl/list', + method: 'get', + params: query + }) +} + +// 查询seg会员推荐控制详细 +export function getSegchk_user_reward_ctl(rewardCtlId) { + return request({ + url: '/segchk/segchk_user_reward_ctl/' + rewardCtlId, + method: 'get' + }) +} + +// 新增seg会员推荐控制 +export function addSegchk_user_reward_ctl(data) { + return request({ + url: '/segchk/segchk_user_reward_ctl', + method: 'post', + data: data + }) +} + +// 修改seg会员推荐控制 +export function updateSegchk_user_reward_ctl(data) { + return request({ + url: '/segchk/segchk_user_reward_ctl', + method: 'put', + data: data + }) +} + +// 删除seg会员推荐控制 +export function delSegchk_user_reward_ctl(rewardCtlId) { + return request({ + url: '/segchk/segchk_user_reward_ctl/' + rewardCtlId, + method: 'delete' + }) +} + +// 导出seg会员推荐控制 +export function exportSegchk_user_reward_ctl(query) { + return request({ + url: '/segchk/segchk_user_reward_ctl/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_security.js b/ruoyi-ui/src/api/segchk/segchk_user_security.js new file mode 100644 index 0000000..a45ca7d --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_security.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户密码列表 +export function listSegchk_user_security(query) { + return request({ + url: '/segchk/segchk_user_security/list', + method: 'get', + params: query + }) +} + +// 查询seg用户密码详细 +export function getSegchk_user_security(pwdId) { + return request({ + url: '/segchk/segchk_user_security/' + pwdId, + method: 'get' + }) +} + +// 新增seg用户密码 +export function addSegchk_user_security(data) { + return request({ + url: '/segchk/segchk_user_security', + method: 'post', + data: data + }) +} + +// 修改seg用户密码 +export function updateSegchk_user_security(data) { + return request({ + url: '/segchk/segchk_user_security', + method: 'put', + data: data + }) +} + +// 删除seg用户密码 +export function delSegchk_user_security(pwdId) { + return request({ + url: '/segchk/segchk_user_security/' + pwdId, + method: 'delete' + }) +} + +// 导出seg用户密码 +export function exportSegchk_user_security(query) { + return request({ + url: '/segchk/segchk_user_security/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_vip.js b/ruoyi-ui/src/api/segchk/segchk_user_vip.js new file mode 100644 index 0000000..7b7d82f --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_vip.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg会员卡列表 +export function listSegchk_user_vip(query) { + return request({ + url: '/segchk/segchk_user_vip/list', + method: 'get', + params: query + }) +} + +// 查询seg会员卡详细 +export function getSegchk_user_vip(cardId) { + return request({ + url: '/segchk/segchk_user_vip/' + cardId, + method: 'get' + }) +} + +// 新增seg会员卡 +export function addSegchk_user_vip(data) { + return request({ + url: '/segchk/segchk_user_vip', + method: 'post', + data: data + }) +} + +// 修改seg会员卡 +export function updateSegchk_user_vip(data) { + return request({ + url: '/segchk/segchk_user_vip', + method: 'put', + data: data + }) +} + +// 删除seg会员卡 +export function delSegchk_user_vip(cardId) { + return request({ + url: '/segchk/segchk_user_vip/' + cardId, + method: 'delete' + }) +} + +// 导出seg会员卡 +export function exportSegchk_user_vip(query) { + return request({ + url: '/segchk/segchk_user_vip/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_user_wechat.js b/ruoyi-ui/src/api/segchk/segchk_user_wechat.js new file mode 100644 index 0000000..8db59fa --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_user_wechat.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg用户微信信息列表 +export function listSegchk_user_wechat(query) { + return request({ + url: '/segchk/segchk_user_wechat/list', + method: 'get', + params: query + }) +} + +// 查询seg用户微信信息详细 +export function getSegchk_user_wechat(userId) { + return request({ + url: '/segchk/segchk_user_wechat/' + userId, + method: 'get' + }) +} + +// 新增seg用户微信信息 +export function addSegchk_user_wechat(data) { + return request({ + url: '/segchk/segchk_user_wechat', + method: 'post', + data: data + }) +} + +// 修改seg用户微信信息 +export function updateSegchk_user_wechat(data) { + return request({ + url: '/segchk/segchk_user_wechat', + method: 'put', + data: data + }) +} + +// 删除seg用户微信信息 +export function delSegchk_user_wechat(userId) { + return request({ + url: '/segchk/segchk_user_wechat/' + userId, + method: 'delete' + }) +} + +// 导出seg用户微信信息 +export function exportSegchk_user_wechat(query) { + return request({ + url: '/segchk/segchk_user_wechat/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/segchk/segchk_vip_set_info.js b/ruoyi-ui/src/api/segchk/segchk_vip_set_info.js new file mode 100644 index 0000000..fc52343 --- /dev/null +++ b/ruoyi-ui/src/api/segchk/segchk_vip_set_info.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询seg会员卡设置列表 +export function listSegchk_vip_set_info(query) { + return request({ + url: '/segchk/segchk_vip_set_info/list', + method: 'get', + params: query + }) +} + +// 查询seg会员卡设置详细 +export function getSegchk_vip_set_info(modeId) { + return request({ + url: '/segchk/segchk_vip_set_info/' + modeId, + method: 'get' + }) +} + +// 新增seg会员卡设置 +export function addSegchk_vip_set_info(data) { + return request({ + url: '/segchk/segchk_vip_set_info', + method: 'post', + data: data + }) +} + +// 修改seg会员卡设置 +export function updateSegchk_vip_set_info(data) { + return request({ + url: '/segchk/segchk_vip_set_info', + method: 'put', + data: data + }) +} + +// 删除seg会员卡设置 +export function delSegchk_vip_set_info(modeId) { + return request({ + url: '/segchk/segchk_vip_set_info/' + modeId, + method: 'delete' + }) +} + +// 导出seg会员卡设置 +export function exportSegchk_vip_set_info(query) { + return request({ + url: '/segchk/segchk_vip_set_info/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/config.js b/ruoyi-ui/src/api/system/config.js new file mode 100644 index 0000000..95af138 --- /dev/null +++ b/ruoyi-ui/src/api/system/config.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +// 查询参数列表 +export function listConfig(query) { + return request({ + url: '/system/config/list', + method: 'get', + params: query + }) +} + +// 查询参数详细 +export function getConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'get' + }) +} + +// 根据参数键名查询参数值 +export function getConfigKey(configKey) { + return request({ + url: '/system/config/configKey/' + configKey, + method: 'get' + }) +} + +// 新增参数配置 +export function addConfig(data) { + return request({ + url: '/system/config', + method: 'post', + data: data + }) +} + +// 修改参数配置 +export function updateConfig(data) { + return request({ + url: '/system/config', + method: 'put', + data: data + }) +} + +// 删除参数配置 +export function delConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'delete' + }) +} + +// 刷新参数缓存 +export function refreshCache() { + return request({ + url: '/system/config/refreshCache', + method: 'delete' + }) +} + +// 导出参数 +export function exportConfig(query) { + return request({ + url: '/system/config/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/dept.js b/ruoyi-ui/src/api/system/dept.js new file mode 100644 index 0000000..2804676 --- /dev/null +++ b/ruoyi-ui/src/api/system/dept.js @@ -0,0 +1,68 @@ +import request from '@/utils/request' + +// 查询部门列表 +export function listDept(query) { + return request({ + url: '/system/dept/list', + method: 'get', + params: query + }) +} + +// 查询部门列表(排除节点) +export function listDeptExcludeChild(deptId) { + return request({ + url: '/system/dept/list/exclude/' + deptId, + method: 'get' + }) +} + +// 查询部门详细 +export function getDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'get' + }) +} + +// 查询部门下拉树结构 +export function treeselect() { + return request({ + url: '/system/dept/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询部门树结构 +export function roleDeptTreeselect(roleId) { + return request({ + url: '/system/dept/roleDeptTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增部门 +export function addDept(data) { + return request({ + url: '/system/dept', + method: 'post', + data: data + }) +} + +// 修改部门 +export function updateDept(data) { + return request({ + url: '/system/dept', + method: 'put', + data: data + }) +} + +// 删除部门 +export function delDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/dict/data.js b/ruoyi-ui/src/api/system/dict/data.js new file mode 100644 index 0000000..d7aca89 --- /dev/null +++ b/ruoyi-ui/src/api/system/dict/data.js @@ -0,0 +1,61 @@ +import request from '@/utils/request' + +// 查询字典数据列表 +export function listData(query) { + return request({ + url: '/system/dict/data/list', + method: 'get', + params: query + }) +} + +// 查询字典数据详细 +export function getData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'get' + }) +} + +// 根据字典类型查询字典数据信息 +export function getDicts(dictType) { + return request({ + url: '/system/dict/data/type/' + dictType, + method: 'get' + }) +} + +// 新增字典数据 +export function addData(data) { + return request({ + url: '/system/dict/data', + method: 'post', + data: data + }) +} + +// 修改字典数据 +export function updateData(data) { + return request({ + url: '/system/dict/data', + method: 'put', + data: data + }) +} + +// 删除字典数据 +export function delData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'delete' + }) +} + +// 导出字典数据 +export function exportData(query) { + return request({ + url: '/system/dict/data/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/dict/type.js b/ruoyi-ui/src/api/system/dict/type.js new file mode 100644 index 0000000..947be41 --- /dev/null +++ b/ruoyi-ui/src/api/system/dict/type.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +// 查询字典类型列表 +export function listType(query) { + return request({ + url: '/system/dict/type/list', + method: 'get', + params: query + }) +} + +// 查询字典类型详细 +export function getType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'get' + }) +} + +// 新增字典类型 +export function addType(data) { + return request({ + url: '/system/dict/type', + method: 'post', + data: data + }) +} + +// 修改字典类型 +export function updateType(data) { + return request({ + url: '/system/dict/type', + method: 'put', + data: data + }) +} + +// 删除字典类型 +export function delType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'delete' + }) +} + +// 刷新字典缓存 +export function refreshCache() { + return request({ + url: '/system/dict/type/refreshCache', + method: 'delete' + }) +} + +// 导出字典类型 +export function exportType(query) { + return request({ + url: '/system/dict/type/export', + method: 'get', + params: query + }) +} + +// 获取字典选择框列表 +export function optionselect() { + return request({ + url: '/system/dict/type/optionselect', + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/menu.js b/ruoyi-ui/src/api/system/menu.js new file mode 100644 index 0000000..f6415c6 --- /dev/null +++ b/ruoyi-ui/src/api/system/menu.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询菜单列表 +export function listMenu(query) { + return request({ + url: '/system/menu/list', + method: 'get', + params: query + }) +} + +// 查询菜单详细 +export function getMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'get' + }) +} + +// 查询菜单下拉树结构 +export function treeselect() { + return request({ + url: '/system/menu/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询菜单下拉树结构 +export function roleMenuTreeselect(roleId) { + return request({ + url: '/system/menu/roleMenuTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增菜单 +export function addMenu(data) { + return request({ + url: '/system/menu', + method: 'post', + data: data + }) +} + +// 修改菜单 +export function updateMenu(data) { + return request({ + url: '/system/menu', + method: 'put', + data: data + }) +} + +// 删除菜单 +export function delMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/notice.js b/ruoyi-ui/src/api/system/notice.js new file mode 100644 index 0000000..c274ea5 --- /dev/null +++ b/ruoyi-ui/src/api/system/notice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询公告列表 +export function listNotice(query) { + return request({ + url: '/system/notice/list', + method: 'get', + params: query + }) +} + +// 查询公告详细 +export function getNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'get' + }) +} + +// 新增公告 +export function addNotice(data) { + return request({ + url: '/system/notice', + method: 'post', + data: data + }) +} + +// 修改公告 +export function updateNotice(data) { + return request({ + url: '/system/notice', + method: 'put', + data: data + }) +} + +// 删除公告 +export function delNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/post.js b/ruoyi-ui/src/api/system/post.js new file mode 100644 index 0000000..434cd35 --- /dev/null +++ b/ruoyi-ui/src/api/system/post.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询岗位列表 +export function listPost(query) { + return request({ + url: '/system/post/list', + method: 'get', + params: query + }) +} + +// 查询岗位详细 +export function getPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'get' + }) +} + +// 新增岗位 +export function addPost(data) { + return request({ + url: '/system/post', + method: 'post', + data: data + }) +} + +// 修改岗位 +export function updatePost(data) { + return request({ + url: '/system/post', + method: 'put', + data: data + }) +} + +// 删除岗位 +export function delPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'delete' + }) +} + +// 导出岗位 +export function exportPost(query) { + return request({ + url: '/system/post/export', + method: 'get', + params: query + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/role.js b/ruoyi-ui/src/api/system/role.js new file mode 100644 index 0000000..0a4157d --- /dev/null +++ b/ruoyi-ui/src/api/system/role.js @@ -0,0 +1,120 @@ +import request from '@/utils/request' + +// 查询角色列表 +export function listRole(query) { + return request({ + url: '/system/role/list', + method: 'get', + params: query + }) +} + +// 查询角色详细 +export function getRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'get' + }) +} + +// 新增角色 +export function addRole(data) { + return request({ + url: '/system/role', + method: 'post', + data: data + }) +} + +// 修改角色 +export function updateRole(data) { + return request({ + url: '/system/role', + method: 'put', + data: data + }) +} + +// 角色数据权限 +export function dataScope(data) { + return request({ + url: '/system/role/dataScope', + method: 'put', + data: data + }) +} + +// 角色状态修改 +export function changeRoleStatus(roleId, status) { + const data = { + roleId, + status + } + return request({ + url: '/system/role/changeStatus', + method: 'put', + data: data + }) +} + +// 删除角色 +export function delRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'delete' + }) +} + +// 导出角色 +export function exportRole(query) { + return request({ + url: '/system/role/export', + method: 'get', + params: query + }) +} + +// 查询角色已授权用户列表 +export function allocatedUserList(query) { + return request({ + url: '/system/role/authUser/allocatedList', + method: 'get', + params: query + }) +} + +// 查询角色未授权用户列表 +export function unallocatedUserList(query) { + return request({ + url: '/system/role/authUser/unallocatedList', + method: 'get', + params: query + }) +} + +// 取消用户授权角色 +export function authUserCancel(data) { + return request({ + url: '/system/role/authUser/cancel', + method: 'put', + data: data + }) +} + +// 批量取消用户授权角色 +export function authUserCancelAll(data) { + return request({ + url: '/system/role/authUser/cancelAll', + method: 'put', + params: data + }) +} + +// 授权用户选择 +export function authUserSelectAll(data) { + return request({ + url: '/system/role/authUser/selectAll', + method: 'put', + params: data + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/user.js b/ruoyi-ui/src/api/system/user.js new file mode 100644 index 0000000..37f4eb3 --- /dev/null +++ b/ruoyi-ui/src/api/system/user.js @@ -0,0 +1,144 @@ +import request from '@/utils/request' +import { praseStrEmpty } from "@/utils/ruoyi"; + +// 查询用户列表 +export function listUser(query) { + return request({ + url: '/system/user/list', + method: 'get', + params: query + }) +} + +// 查询用户详细 +export function getUser(userId) { + return request({ + url: '/system/user/' + praseStrEmpty(userId), + method: 'get' + }) +} + +// 新增用户 +export function addUser(data) { + return request({ + url: '/system/user', + method: 'post', + data: data + }) +} + +// 修改用户 +export function updateUser(data) { + return request({ + url: '/system/user', + method: 'put', + data: data + }) +} + +// 删除用户 +export function delUser(userId) { + return request({ + url: '/system/user/' + userId, + method: 'delete' + }) +} + +// 导出用户 +export function exportUser(query) { + return request({ + url: '/system/user/export', + method: 'get', + params: query + }) +} + +// 用户密码重置 +export function resetUserPwd(userId, password) { + const data = { + userId, + password + } + return request({ + url: '/system/user/resetPwd', + method: 'put', + data: data + }) +} + +// 用户状态修改 +export function changeUserStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: '/system/user/changeStatus', + method: 'put', + data: data + }) +} + +// 查询用户个人信息 +export function getUserProfile() { + return request({ + url: '/system/user/profile', + method: 'get' + }) +} + +// 修改用户个人信息 +export function updateUserProfile(data) { + return request({ + url: '/system/user/profile', + method: 'put', + data: data + }) +} + +// 用户密码重置 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: '/system/user/profile/updatePwd', + method: 'put', + params: data + }) +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: '/system/user/profile/avatar', + method: 'post', + data: data + }) +} + +// 下载用户导入模板 +export function importTemplate() { + return request({ + url: '/system/user/importTemplate', + method: 'get' + }) +} + +// 查询授权角色 +export function getAuthRole(userId) { + return request({ + url: '/system/user/authRole/' + userId, + method: 'get' + }) +} + +// 保存授权角色 +export function updateAuthRole(data) { + return request({ + url: '/system/user/authRole', + method: 'put', + params: data + }) +} diff --git a/ruoyi-ui/src/api/tool/gen.js b/ruoyi-ui/src/api/tool/gen.js new file mode 100644 index 0000000..4506927 --- /dev/null +++ b/ruoyi-ui/src/api/tool/gen.js @@ -0,0 +1,76 @@ +import request from '@/utils/request' + +// 查询生成表数据 +export function listTable(query) { + return request({ + url: '/tool/gen/list', + method: 'get', + params: query + }) +} +// 查询db数据库列表 +export function listDbTable(query) { + return request({ + url: '/tool/gen/db/list', + method: 'get', + params: query + }) +} + +// 查询表详细信息 +export function getGenTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'get' + }) +} + +// 修改代码生成信息 +export function updateGenTable(data) { + return request({ + url: '/tool/gen', + method: 'put', + data: data + }) +} + +// 导入表 +export function importTable(data) { + return request({ + url: '/tool/gen/importTable', + method: 'post', + params: data + }) +} + +// 预览生成代码 +export function previewTable(tableId) { + return request({ + url: '/tool/gen/preview/' + tableId, + method: 'get' + }) +} + +// 删除表数据 +export function delTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'delete' + }) +} + +// 生成代码(自定义路径) +export function genCode(tableName) { + return request({ + url: '/tool/gen/genCode/' + tableName, + method: 'get' + }) +} + +// 同步数据库 +export function synchDb(tableName) { + return request({ + url: '/tool/gen/synchDb/' + tableName, + method: 'get' + }) +} diff --git a/ruoyi-ui/src/assets/401_images/401.gif b/ruoyi-ui/src/assets/401_images/401.gif new file mode 100644 index 0000000..cd6e0d9 Binary files /dev/null and b/ruoyi-ui/src/assets/401_images/401.gif differ diff --git a/ruoyi-ui/src/assets/404_images/404.png b/ruoyi-ui/src/assets/404_images/404.png new file mode 100644 index 0000000..3d8e230 Binary files /dev/null and b/ruoyi-ui/src/assets/404_images/404.png differ diff --git a/ruoyi-ui/src/assets/404_images/404_cloud.png b/ruoyi-ui/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000..c6281d0 Binary files /dev/null and b/ruoyi-ui/src/assets/404_images/404_cloud.png differ diff --git a/ruoyi-ui/src/assets/icons/index.js b/ruoyi-ui/src/assets/icons/index.js new file mode 100644 index 0000000..2c6b309 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/index.js @@ -0,0 +1,9 @@ +import Vue from 'vue' +import SvgIcon from '@/components/SvgIcon'// svg component + +// register globally +Vue.component('svg-icon', SvgIcon) + +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) diff --git a/ruoyi-ui/src/assets/icons/svg/404.svg b/ruoyi-ui/src/assets/icons/svg/404.svg new file mode 100644 index 0000000..6df5019 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/bug.svg b/ruoyi-ui/src/assets/icons/svg/bug.svg new file mode 100644 index 0000000..05a150d --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/build.svg b/ruoyi-ui/src/assets/icons/svg/build.svg new file mode 100644 index 0000000..97c4688 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/button.svg b/ruoyi-ui/src/assets/icons/svg/button.svg new file mode 100644 index 0000000..904fddc --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/cascader.svg b/ruoyi-ui/src/assets/icons/svg/cascader.svg new file mode 100644 index 0000000..e256024 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/chart.svg b/ruoyi-ui/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/checkbox.svg b/ruoyi-ui/src/assets/icons/svg/checkbox.svg new file mode 100644 index 0000000..013fd3a --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/clipboard.svg b/ruoyi-ui/src/assets/icons/svg/clipboard.svg new file mode 100644 index 0000000..90923ff --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/code.svg b/ruoyi-ui/src/assets/icons/svg/code.svg new file mode 100644 index 0000000..ed4d23c --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/color.svg b/ruoyi-ui/src/assets/icons/svg/color.svg new file mode 100644 index 0000000..44a81aa --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/component.svg b/ruoyi-ui/src/assets/icons/svg/component.svg new file mode 100644 index 0000000..29c3458 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/dashboard.svg b/ruoyi-ui/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/date-range.svg b/ruoyi-ui/src/assets/icons/svg/date-range.svg new file mode 100644 index 0000000..fda571e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/date.svg b/ruoyi-ui/src/assets/icons/svg/date.svg new file mode 100644 index 0000000..52dc73e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/dict.svg b/ruoyi-ui/src/assets/icons/svg/dict.svg new file mode 100644 index 0000000..4849377 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/dict.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/documentation.svg b/ruoyi-ui/src/assets/icons/svg/documentation.svg new file mode 100644 index 0000000..7043122 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/download.svg b/ruoyi-ui/src/assets/icons/svg/download.svg new file mode 100644 index 0000000..c896951 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/drag.svg b/ruoyi-ui/src/assets/icons/svg/drag.svg new file mode 100644 index 0000000..4185d3c --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/druid.svg b/ruoyi-ui/src/assets/icons/svg/druid.svg new file mode 100644 index 0000000..a2b4b4e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/druid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/edit.svg b/ruoyi-ui/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/education.svg b/ruoyi-ui/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/email.svg b/ruoyi-ui/src/assets/icons/svg/email.svg new file mode 100644 index 0000000..74d25e2 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/example.svg b/ruoyi-ui/src/assets/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/excel.svg b/ruoyi-ui/src/assets/icons/svg/excel.svg new file mode 100644 index 0000000..74d97b8 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg b/ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/eye-open.svg b/ruoyi-ui/src/assets/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/eye.svg b/ruoyi-ui/src/assets/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/form.svg b/ruoyi-ui/src/assets/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/fullscreen.svg b/ruoyi-ui/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/github.svg b/ruoyi-ui/src/assets/icons/svg/github.svg new file mode 100644 index 0000000..db0a0d4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/guide.svg b/ruoyi-ui/src/assets/icons/svg/guide.svg new file mode 100644 index 0000000..b271001 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/icon.svg b/ruoyi-ui/src/assets/icons/svg/icon.svg new file mode 100644 index 0000000..82be8ee --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/input.svg b/ruoyi-ui/src/assets/icons/svg/input.svg new file mode 100644 index 0000000..ab91381 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/international.svg b/ruoyi-ui/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..e9b56ee --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/job.svg b/ruoyi-ui/src/assets/icons/svg/job.svg new file mode 100644 index 0000000..2a93a25 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/language.svg b/ruoyi-ui/src/assets/icons/svg/language.svg new file mode 100644 index 0000000..0082b57 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/link.svg b/ruoyi-ui/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/list.svg b/ruoyi-ui/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/lock.svg b/ruoyi-ui/src/assets/icons/svg/lock.svg new file mode 100644 index 0000000..74fee54 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/log.svg b/ruoyi-ui/src/assets/icons/svg/log.svg new file mode 100644 index 0000000..d879d33 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/logininfor.svg b/ruoyi-ui/src/assets/icons/svg/logininfor.svg new file mode 100644 index 0000000..267f844 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/logininfor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/message.svg b/ruoyi-ui/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/money.svg b/ruoyi-ui/src/assets/icons/svg/money.svg new file mode 100644 index 0000000..c1580de --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/monitor.svg b/ruoyi-ui/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000..bc308cb --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/monitor.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/nested.svg b/ruoyi-ui/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/number.svg b/ruoyi-ui/src/assets/icons/svg/number.svg new file mode 100644 index 0000000..ad5ce9a --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/online.svg b/ruoyi-ui/src/assets/icons/svg/online.svg new file mode 100644 index 0000000..330a202 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/online.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/password.svg b/ruoyi-ui/src/assets/icons/svg/password.svg new file mode 100644 index 0000000..6c64def --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/pdf.svg b/ruoyi-ui/src/assets/icons/svg/pdf.svg new file mode 100644 index 0000000..957aa0c --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/people.svg b/ruoyi-ui/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/peoples.svg b/ruoyi-ui/src/assets/icons/svg/peoples.svg new file mode 100644 index 0000000..aab852e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/phone.svg b/ruoyi-ui/src/assets/icons/svg/phone.svg new file mode 100644 index 0000000..ab8e8c4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/post.svg b/ruoyi-ui/src/assets/icons/svg/post.svg new file mode 100644 index 0000000..2922c61 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/post.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/qq.svg b/ruoyi-ui/src/assets/icons/svg/qq.svg new file mode 100644 index 0000000..ee13d4e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/question.svg b/ruoyi-ui/src/assets/icons/svg/question.svg new file mode 100644 index 0000000..cf75bd4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/radio.svg b/ruoyi-ui/src/assets/icons/svg/radio.svg new file mode 100644 index 0000000..0cde345 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/rate.svg b/ruoyi-ui/src/assets/icons/svg/rate.svg new file mode 100644 index 0000000..aa3b14d --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/redis.svg b/ruoyi-ui/src/assets/icons/svg/redis.svg new file mode 100644 index 0000000..2f1d62d --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/row.svg b/ruoyi-ui/src/assets/icons/svg/row.svg new file mode 100644 index 0000000..0780992 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/search.svg b/ruoyi-ui/src/assets/icons/svg/search.svg new file mode 100644 index 0000000..84233dd --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/select.svg b/ruoyi-ui/src/assets/icons/svg/select.svg new file mode 100644 index 0000000..d628382 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/server.svg b/ruoyi-ui/src/assets/icons/svg/server.svg new file mode 100644 index 0000000..ca37b00 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/shopping.svg b/ruoyi-ui/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000..87513e7 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/size.svg b/ruoyi-ui/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..ddb25b8 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/skill.svg b/ruoyi-ui/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/slider.svg b/ruoyi-ui/src/assets/icons/svg/slider.svg new file mode 100644 index 0000000..fbe4f39 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/star.svg b/ruoyi-ui/src/assets/icons/svg/star.svg new file mode 100644 index 0000000..6cf86e6 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/swagger.svg b/ruoyi-ui/src/assets/icons/svg/swagger.svg new file mode 100644 index 0000000..05d4e7b --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/switch.svg b/ruoyi-ui/src/assets/icons/svg/switch.svg new file mode 100644 index 0000000..0ba61e3 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/system.svg b/ruoyi-ui/src/assets/icons/svg/system.svg new file mode 100644 index 0000000..dba28cf --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/system.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tab.svg b/ruoyi-ui/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/table.svg b/ruoyi-ui/src/assets/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/textarea.svg b/ruoyi-ui/src/assets/icons/svg/textarea.svg new file mode 100644 index 0000000..2709f29 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/theme.svg b/ruoyi-ui/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/time-range.svg b/ruoyi-ui/src/assets/icons/svg/time-range.svg new file mode 100644 index 0000000..13c1202 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/time.svg b/ruoyi-ui/src/assets/icons/svg/time.svg new file mode 100644 index 0000000..b376e32 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tool.svg b/ruoyi-ui/src/assets/icons/svg/tool.svg new file mode 100644 index 0000000..c813067 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tree-table.svg b/ruoyi-ui/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tree.svg b/ruoyi-ui/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/upload.svg b/ruoyi-ui/src/assets/icons/svg/upload.svg new file mode 100644 index 0000000..bae49c0 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/user.svg b/ruoyi-ui/src/assets/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/validCode.svg b/ruoyi-ui/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000..cfb1021 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/wechat.svg b/ruoyi-ui/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/zip.svg b/ruoyi-ui/src/assets/icons/svg/zip.svg new file mode 100644 index 0000000..f806fc4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svgo.yml b/ruoyi-ui/src/assets/icons/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/ruoyi-ui/src/assets/images/dark.svg b/ruoyi-ui/src/assets/images/dark.svg new file mode 100644 index 0000000..f646bd7 --- /dev/null +++ b/ruoyi-ui/src/assets/images/dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/images/light.svg b/ruoyi-ui/src/assets/images/light.svg new file mode 100644 index 0000000..ab7cc08 --- /dev/null +++ b/ruoyi-ui/src/assets/images/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/images/login-background.jpg b/ruoyi-ui/src/assets/images/login-background.jpg new file mode 100644 index 0000000..8a89eb8 Binary files /dev/null and b/ruoyi-ui/src/assets/images/login-background.jpg differ diff --git a/ruoyi-ui/src/assets/images/profile.jpg b/ruoyi-ui/src/assets/images/profile.jpg new file mode 100644 index 0000000..b3a940b Binary files /dev/null and b/ruoyi-ui/src/assets/images/profile.jpg differ diff --git a/ruoyi-ui/src/assets/logo/logo.png b/ruoyi-ui/src/assets/logo/logo.png new file mode 100644 index 0000000..e263760 Binary files /dev/null and b/ruoyi-ui/src/assets/logo/logo.png differ diff --git a/ruoyi-ui/src/assets/styles/btn.scss b/ruoyi-ui/src/assets/styles/btn.scss new file mode 100644 index 0000000..e6ba1a8 --- /dev/null +++ b/ruoyi-ui/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@import './variables.scss'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/ruoyi-ui/src/assets/styles/element-ui.scss b/ruoyi-ui/src/assets/styles/element-ui.scss new file mode 100644 index 0000000..363092a --- /dev/null +++ b/ruoyi-ui/src/assets/styles/element-ui.scss @@ -0,0 +1,92 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} + +.el-menu--collapse + > div + > .el-submenu + > .el-submenu__title + .el-submenu__icon-arrow { + display: none; +} \ No newline at end of file diff --git a/ruoyi-ui/src/assets/styles/element-variables.scss b/ruoyi-ui/src/assets/styles/element-variables.scss new file mode 100644 index 0000000..8b7a48e --- /dev/null +++ b/ruoyi-ui/src/assets/styles/element-variables.scss @@ -0,0 +1,31 @@ +/** +* I think element-ui's default theme color is too light for long-term use. +* So I modified the default color and you can modify it to your liking. +**/ + +/* theme color */ +$--color-primary: #1890ff; +$--color-success: #13ce66; +$--color-warning: #ffba00; +$--color-danger: #ff4949; +// $--color-info: #1E1E1E; + +$--button-font-weight: 400; + +// $--color-text-regular: #1f2d3d; + +$--border-color-light: #dfe4ed; +$--border-color-lighter: #e6ebf5; + +$--table-border:1px solid#dfe6ec; + +/* icon font path, required */ +$--font-path: '~element-ui/lib/theme-chalk/fonts'; + +@import "~element-ui/packages/theme-chalk/src/index"; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + theme: $--color-primary; +} diff --git a/ruoyi-ui/src/assets/styles/index.scss b/ruoyi-ui/src/assets/styles/index.scss new file mode 100644 index 0000000..96095ef --- /dev/null +++ b/ruoyi-ui/src/assets/styles/index.scss @@ -0,0 +1,191 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; +@import './btn.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} diff --git a/ruoyi-ui/src/assets/styles/mixin.scss b/ruoyi-ui/src/assets/styles/mixin.scss new file mode 100644 index 0000000..06fa061 --- /dev/null +++ b/ruoyi-ui/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/ruoyi-ui/src/assets/styles/ruoyi.scss b/ruoyi-ui/src/assets/styles/ruoyi.scss new file mode 100644 index 0000000..c4b4365 --- /dev/null +++ b/ruoyi-ui/src/assets/styles/ruoyi.scss @@ -0,0 +1,266 @@ + /** + * 通用css样式布局处理 + * Copyright (c) 2019 ruoyi + */ + + /** 基础通用 **/ +.pt5 { + padding-top: 5px; +} +.pr5 { + padding-right: 5px; +} +.pb5 { + padding-bottom: 5px; +} +.mt5 { + margin-top: 5px; +} +.mr5 { + margin-right: 5px; +} +.mb5 { + margin-bottom: 5px; +} +.mb8 { + margin-bottom: 8px; +} +.ml5 { + margin-left: 5px; +} +.mt10 { + margin-top: 10px; +} +.mr10 { + margin-right: 10px; +} +.mb10 { + margin-bottom: 10px; +} +.ml0 { + margin-left: 10px; +} +.mt20 { + margin-top: 20px; +} +.mr20 { + margin-right: 20px; +} +.mb20 { + margin-bottom: 20px; +} +.m20 { + margin-left: 20px; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.el-dialog:not(.is-fullscreen){ + margin-top: 6vh !important; +} + +.el-table { + .el-table__header-wrapper, .el-table__fixed-header-wrapper { + th { + word-break: break-word; + background-color: #f8f8f9; + color: #515a6e; + height: 40px; + font-size: 13px; + } + } + .el-table__body-wrapper { + .el-button [class*="el-icon-"] + span { + margin-left: 1px; + } + } +} + +/** 表单布局 **/ +.form-header { + font-size:15px; + color:#6379bb; + border-bottom:1px solid #ddd; + margin:8px 10px 25px 10px; + padding-bottom:5px +} + +/** 表格布局 **/ +.pagination-container { + position: relative; + height: 25px; + margin-bottom: 10px; + margin-top: 15px; + padding: 10px 20px !important; +} + +/* tree border */ +.tree-border { + margin-top: 5px; + border: 1px solid #e5e6e7; + background: #FFFFFF none; + border-radius:4px; +} + +.pagination-container .el-pagination { + right: 0; + position: absolute; +} + +@media ( max-width : 768px) { + .pagination-container .el-pagination > .el-pagination__jump { + display: none !important; + } + .pagination-container .el-pagination > .el-pagination__sizes { + display: none !important; + } +} + +.el-table .fixed-width .el-button--mini { + padding-left: 0; + padding-right: 0; + width: inherit; +} + +/** 表格更多操作下拉样式 */ +.el-table .el-dropdown-link { + cursor: pointer; + color: #1890ff; + margin-left: 5px; +} + +.el-table .el-dropdown, .el-icon-arrow-down { + font-size: 12px; +} + +.el-tree-node__content > .el-checkbox { + margin-right: 8px; +} + +.list-group-striped > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} + +.list-group { + padding-left: 0px; + list-style: none; +} + +.list-group-item { + border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + margin-bottom: -1px; + padding: 11px 0px; + font-size: 13px; +} + +.pull-right { + float: right !important; +} + +.el-card__header { + padding: 14px 15px 7px; + min-height: 40px; +} + +.el-card__body { + padding: 15px 20px 20px 20px; +} + +.card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; +} + +/* button color */ +.el-button--cyan.is-active, +.el-button--cyan:active { + background: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +.el-button--cyan:focus, +.el-button--cyan:hover { + background: #48D1CC; + border-color: #48D1CC; + color: #FFFFFF; +} + +.el-button--cyan { + background-color: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +/* text color */ +.text-navy { + color: #1ab394; +} + +.text-primary { + color: inherit; +} + +.text-success { + color: #1c84c6; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ed5565; +} + +.text-muted { + color: #888888; +} + +/* image */ +.img-circle { + border-radius: 50%; +} + +.img-lg { + width: 120px; + height: 120px; +} + +.avatar-upload-preview { + position: absolute; + top: 50%; + transform: translate(50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + box-shadow: 0 0 4px #ccc; + overflow: hidden; +} + +/* 拖拽列样式 */ +.sortable-ghost{ + opacity: .8; + color: #fff!important; + background: #42b983!important; +} + +.top-right-btn { + position: relative; + float: right; +} diff --git a/ruoyi-ui/src/assets/styles/sidebar.scss b/ruoyi-ui/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..2f368c3 --- /dev/null +++ b/ruoyi-ui/src/assets/styles/sidebar.scss @@ -0,0 +1,223 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: $sideBarWidth; + position: relative; + } + + .sidebar-container { + -webkit-transition: width .28s; + transition: width 0.28s; + width: $sideBarWidth !important; + background-color: $menuBg; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); + box-shadow: 2px 0 6px rgba(0,21,41,.35); + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + .el-menu-item, .el-submenu__title { + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .is-active > .el-submenu__title { + color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $sideBarWidth !important; + + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .nest-menu .el-submenu>.el-submenu__title, + & .theme-dark .el-submenu .el-menu-item { + background-color: $subMenuBg !important; + + &:hover { + background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $sideBarWidth !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $sideBarWidth !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$sideBarWidth, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/ruoyi-ui/src/assets/styles/transition.scss b/ruoyi-ui/src/assets/styles/transition.scss new file mode 100644 index 0000000..4cb27cc --- /dev/null +++ b/ruoyi-ui/src/assets/styles/transition.scss @@ -0,0 +1,48 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/ruoyi-ui/src/assets/styles/variables.scss b/ruoyi-ui/src/assets/styles/variables.scss new file mode 100644 index 0000000..452a1ec --- /dev/null +++ b/ruoyi-ui/src/assets/styles/variables.scss @@ -0,0 +1,44 @@ +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// sidebar +$menuText:#bfcbd9; +$menuActiveText:#409EFF; +$subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951 + +$menuBg:#304156; +$menuHover:#263445; +$sidebarTitle: #ffffff; + +$menuLightBg:#ffffff; +$menuLightHover:#f0f1f5; +$sidebarLightTitle: #001529; + +$subMenuBg:#1f2d3d; +$subMenuHover:#001528; + +$sideBarWidth: 200px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuText: $menuText; + menuActiveText: $menuActiveText; + subMenuActiveText: $subMenuActiveText; + menuBg: $menuBg; + menuHover: $menuHover; + menuLightBg: $menuLightBg; + menuLightHover: $menuLightHover; + subMenuBg: $subMenuBg; + subMenuHover: $subMenuHover; + sideBarWidth: $sideBarWidth; + sidebarTitle: $sidebarTitle; + sidebarLightTitle: $sidebarLightTitle +} diff --git a/ruoyi-ui/src/components/Breadcrumb/index.vue b/ruoyi-ui/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..1fbae5f --- /dev/null +++ b/ruoyi-ui/src/components/Breadcrumb/index.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/ruoyi-ui/src/components/DictTag/index.vue b/ruoyi-ui/src/components/DictTag/index.vue new file mode 100644 index 0000000..7431bbb --- /dev/null +++ b/ruoyi-ui/src/components/DictTag/index.vue @@ -0,0 +1,51 @@ + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/components/Editor/index.vue b/ruoyi-ui/src/components/Editor/index.vue new file mode 100644 index 0000000..a7a69a6 --- /dev/null +++ b/ruoyi-ui/src/components/Editor/index.vue @@ -0,0 +1,277 @@ + + + + + diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue new file mode 100644 index 0000000..0d6ebc0 --- /dev/null +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -0,0 +1,198 @@ + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/components/Hamburger/index.vue b/ruoyi-ui/src/components/Hamburger/index.vue new file mode 100644 index 0000000..368b002 --- /dev/null +++ b/ruoyi-ui/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/ruoyi-ui/src/components/HeaderSearch/index.vue b/ruoyi-ui/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000..c44eff5 --- /dev/null +++ b/ruoyi-ui/src/components/HeaderSearch/index.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/ruoyi-ui/src/components/IconSelect/index.vue b/ruoyi-ui/src/components/IconSelect/index.vue new file mode 100644 index 0000000..b0ec9fa --- /dev/null +++ b/ruoyi-ui/src/components/IconSelect/index.vue @@ -0,0 +1,68 @@ + + + + + + diff --git a/ruoyi-ui/src/components/IconSelect/requireIcons.js b/ruoyi-ui/src/components/IconSelect/requireIcons.js new file mode 100644 index 0000000..99e5c54 --- /dev/null +++ b/ruoyi-ui/src/components/IconSelect/requireIcons.js @@ -0,0 +1,11 @@ + +const req = require.context('../../assets/icons/svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys() + +const re = /\.\/(.*)\.svg/ + +const icons = requireAll(req).map(i => { + return i.match(re)[1] +}) + +export default icons diff --git a/ruoyi-ui/src/components/ImageUpload/index.vue b/ruoyi-ui/src/components/ImageUpload/index.vue new file mode 100644 index 0000000..054cde1 --- /dev/null +++ b/ruoyi-ui/src/components/ImageUpload/index.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/ruoyi-ui/src/components/Pagination/index.vue b/ruoyi-ui/src/components/Pagination/index.vue new file mode 100644 index 0000000..5e5d890 --- /dev/null +++ b/ruoyi-ui/src/components/Pagination/index.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/ruoyi-ui/src/components/PanThumb/index.vue b/ruoyi-ui/src/components/PanThumb/index.vue new file mode 100644 index 0000000..1bcf417 --- /dev/null +++ b/ruoyi-ui/src/components/PanThumb/index.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/ruoyi-ui/src/components/ParentView/index.vue b/ruoyi-ui/src/components/ParentView/index.vue new file mode 100644 index 0000000..7bf6148 --- /dev/null +++ b/ruoyi-ui/src/components/ParentView/index.vue @@ -0,0 +1,3 @@ + diff --git a/ruoyi-ui/src/components/RightPanel/index.vue b/ruoyi-ui/src/components/RightPanel/index.vue new file mode 100644 index 0000000..fbf27eb --- /dev/null +++ b/ruoyi-ui/src/components/RightPanel/index.vue @@ -0,0 +1,149 @@ + + + + + + + diff --git a/ruoyi-ui/src/components/RightToolbar/index.vue b/ruoyi-ui/src/components/RightToolbar/index.vue new file mode 100644 index 0000000..e3e1286 --- /dev/null +++ b/ruoyi-ui/src/components/RightToolbar/index.vue @@ -0,0 +1,87 @@ + + + diff --git a/ruoyi-ui/src/components/RuoYi/Doc/index.vue b/ruoyi-ui/src/components/RuoYi/Doc/index.vue new file mode 100644 index 0000000..a6187f3 --- /dev/null +++ b/ruoyi-ui/src/components/RuoYi/Doc/index.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/components/RuoYi/Git/index.vue b/ruoyi-ui/src/components/RuoYi/Git/index.vue new file mode 100644 index 0000000..1d09a77 --- /dev/null +++ b/ruoyi-ui/src/components/RuoYi/Git/index.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/components/Screenfull/index.vue b/ruoyi-ui/src/components/Screenfull/index.vue new file mode 100644 index 0000000..d4e539c --- /dev/null +++ b/ruoyi-ui/src/components/Screenfull/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/ruoyi-ui/src/components/SizeSelect/index.vue b/ruoyi-ui/src/components/SizeSelect/index.vue new file mode 100644 index 0000000..e88065b --- /dev/null +++ b/ruoyi-ui/src/components/SizeSelect/index.vue @@ -0,0 +1,57 @@ + + + diff --git a/ruoyi-ui/src/components/SvgIcon/index.vue b/ruoyi-ui/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..e4bf5ad --- /dev/null +++ b/ruoyi-ui/src/components/SvgIcon/index.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/ruoyi-ui/src/components/ThemePicker/index.vue b/ruoyi-ui/src/components/ThemePicker/index.vue new file mode 100644 index 0000000..b0df471 --- /dev/null +++ b/ruoyi-ui/src/components/ThemePicker/index.vue @@ -0,0 +1,174 @@ + + + + + diff --git a/ruoyi-ui/src/components/Tinymce/components/EditorImage.vue b/ruoyi-ui/src/components/Tinymce/components/EditorImage.vue new file mode 100644 index 0000000..02701b8 --- /dev/null +++ b/ruoyi-ui/src/components/Tinymce/components/EditorImage.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/ruoyi-ui/src/components/Tinymce/dynamicLoadScript.js b/ruoyi-ui/src/components/Tinymce/dynamicLoadScript.js new file mode 100644 index 0000000..837977a --- /dev/null +++ b/ruoyi-ui/src/components/Tinymce/dynamicLoadScript.js @@ -0,0 +1,60 @@ +let callbacks = [] + +function loadedTinymce() { + // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2144 + // check is successfully downloaded script + return window.tinymce +} + +const dynamicLoadScript = (src, callback) => { + const existingScript = document.getElementById(src) + const cb = callback || function () { + } + + if (!existingScript) { + const script = document.createElement('script') + script.src = src // src url for the third-party library being loaded. + script.id = src + document.body.appendChild(script) + callbacks.push(cb) + const onEnd = 'onload' in script ? stdOnEnd : ieOnEnd + onEnd(script) + } + + if (existingScript && cb) { + if (loadedTinymce()) { + cb(null, existingScript) + } else { + callbacks.push(cb) + } + } + + function stdOnEnd(script) { + script.onload = function () { + // this.onload = null here is necessary + // because even IE9 works not like others + this.onerror = this.onload = null + for (const cb of callbacks) { + cb(null, script) + } + callbacks = null + } + script.onerror = function () { + this.onerror = this.onload = null + cb(new Error('Failed to load ' + src), script) + } + } + + function ieOnEnd(script) { + script.onreadystatechange = function () { + if (this.readyState !== 'complete' && this.readyState !== 'loaded') return + this.onreadystatechange = null + for (const cb of callbacks) { + cb(null, script) // there is no way to catch loading errors in IE8 + } + callbacks = null + } + } +} + +export default dynamicLoadScript diff --git a/ruoyi-ui/src/components/Tinymce/index.vue b/ruoyi-ui/src/components/Tinymce/index.vue new file mode 100644 index 0000000..5bdbf5a --- /dev/null +++ b/ruoyi-ui/src/components/Tinymce/index.vue @@ -0,0 +1,204 @@ +