Merge branch 'feature-BOX一期' of http://47.99.132.106:10081/wulin/qiuguo-iot into feature-BOX一期

This commit is contained in:
wulin 2023-10-19 15:54:30 +08:00
commit c3190d1e9d
6 changed files with 631 additions and 260 deletions

View File

@ -1,5 +1,7 @@
package com.qiuguo.iot.base.date;
import com.qiuguo.iot.base.utils.ChineseToAlaboUtils;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
@ -32,6 +34,16 @@ public enum DateEnum implements IDate{
return MONRING.getDateTime(localDateTime);
}
},
/**
* 清晨
*/
QING_CHEN("清晨"){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return MONRING.getDateTime(localDateTime);
}
},
/**
* 拂晓
@ -56,7 +68,7 @@ public enum DateEnum implements IDate{
/**
* 中午
*/
NOON("中午"){
NOON("中午", 1){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.withHour(12);
@ -66,27 +78,27 @@ public enum DateEnum implements IDate{
/**
* 下午
*/
PM("下午"){
PM("下午", 1){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.withMonth(15);
return localDateTime.withHour(15);
}
},
/**
* 傍晚
*/
EVENING("傍晚"){
EVENING("傍晚", 1){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.withMonth(18);
return localDateTime.withHour(18);
}
},
/**
* 晚上
*/
NIGHT("晚上"){
NIGHT("晚上", 2){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.withHour(21);
@ -96,7 +108,7 @@ public enum DateEnum implements IDate{
/**
* 深夜
*/
DEEP_NIGHT("深夜"){
DEEP_NIGHT("深夜", 2){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.withHour(23);
@ -106,7 +118,7 @@ public enum DateEnum implements IDate{
/**
* 凌晨
*/
BEFORE_DAWN("凌晨"){
BEFORE_DAWN("凌晨", 2){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.withHour(1);
@ -124,7 +136,47 @@ public enum DateEnum implements IDate{
},
/**
* 今天
* 今晚
*/
TONIGHT("今晚", 2){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.withHour(18);
}
},
/**
* 明晚
*/
TOMORROW_EVENING("明晚", 2){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.plusDays(1).withHour(18);
}
},
/**
* 昨晚
*/
LAST_NIGHT("昨晚", 2){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.minusDays(1).withHour(18);
}
},
/**
* 前晚
*/
LAST_L_NIGHT("前晚", 2){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime.minusDays(2).withHour(18);
}
},
/**
* 现在
*/
NOW("现在"){
@Override
@ -406,7 +458,7 @@ public enum DateEnum implements IDate{
},
DEFAULT("默认"){
DEFAULT("默认error"){
@Override
public LocalDateTime getDateTime(LocalDateTime localDateTime){
return localDateTime;
@ -414,14 +466,365 @@ public enum DateEnum implements IDate{
},
;
Date date;
String code;
/**
* 0上午1下午2晚上
*/
int ampm = 0;
String time;
DateEnum(String c) {
code = c;
}
DateEnum(String c, int b) {
code = c;
ampm = b;
}
public String getCode() {return code;}
public int getAmPm() {return ampm;}
public static LocalDateTime getDateWithCode(String c){
return getDateWithCodeAndLocalDateTime(c, LocalDateTime.now(), 0);
}
public static LocalDateTime getDateWithCodeAndLocalDateTime(String c, LocalDateTime localDateTime, int ampm){
DateEnum dateEnu = null;
for(DateEnum enum1 : values()){
if(c.startsWith(enum1.getCode())){
dateEnu = enum1;
localDateTime = dateEnu.getDateTime(localDateTime);
c = c.substring(enum1.getCode().length());
localDateTime = getDateWithCodeAndLocalDateTime(c, localDateTime, dateEnu.getAmPm());
break;
}
}
if(dateEnu == null){
Integer i = -1;
if(c.contains("天后")){
c = c.replace("天后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusDays(i);
}else if(c.contains("天前")){
c = c.replace("天前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusDays(i);
}else if(c.contains("")){
c = c.replace("", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusDays(i);
}else if(c.contains("个月后")){
c = c.replace("个月后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusMonths(i);
}else if(c.contains("个月前")){
c = c.replace("个月前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusMonths(i);
}else if(c.contains("月后")){
c = c.replace("月后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusMonths(i);
}else if(c.contains("月前")){
c = c.replace("月前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusMonths(i);
}else if(c.contains("月份")){
c = c.replace("月份", "");
i = ChineseToAlaboUtils.getLong(c).intValue();
if(i > 12){
i = 12;
}else if(i < 1){
i = 1;
}
return localDateTime.withMonth(i);
}else if(c.contains("")){
//c = c.replace("", "");
int index = c.indexOf("");
i = ChineseToAlaboUtils.getLong(c.substring(0, index)).intValue();
if(i > 12){
i = 12;
}else if(i < 1){
i = 1;
}
return getDateWithCodeAndLocalDateTime(
c.substring(index + 1),
localDateTime.withMonth(i),
ampm);
}else if(c.contains("年后")){
c = c.replace("年后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusYears(i);
}else if(c.contains("年前")){
c = c.replace("年前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusYears(i);
}else if(c.contains("")){
c = c.replace("", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusYears(i);
}else if(c.contains("小时后")){
c = c.replace("小时后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusHours(i);
}else if(c.contains("小时前")){
c = c.replace("小时前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusHours(i);
}else if(c.contains("小时")){
c = c.replace("小时", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusHours(i);
}else if(c.contains("点钟后")){
c = c.replace("点钟后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusHours(i);
}else if(c.contains("点钟前")){
c = c.replace("点钟前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusHours(i);
}else if(c.contains("点钟")){
//c = c.replace("点钟", "");
i = ChineseToAlaboUtils.getLong(c).intValue();
if(i > 23){
i = 23;
}
return getDateWithCodeAndLocalDateTime(
c.substring(c.indexOf("点钟") + 1),
localDateTime.withHour(i).withMinute(0).withSecond(0),
ampm);
}else if(c.contains("点前")){
c = c.replace("点前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusHours(i);
}else if(c.contains("点后")){
c = c.replace("点后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusHours(i);
}else if(c.contains("")){
int index = c.indexOf("");
i = ChineseToAlaboUtils.getLong(c.substring(0, index)).intValue();
if(i > 23){
i = 23;
}else if(i < 0){
i = 0;
}
if(ampm == 1){
//下午
if(i < 12){
i += 12;
}
}else if(ampm == 2){
//晚上
if(i < 12 && i > 5){
i += 12;
}else{
localDateTime = localDateTime.plusDays(1);
}
}
return getDateWithCodeAndLocalDateTime(
c.substring(index + 1),
localDateTime.withHour(i).withMinute(0).withSecond(0),
ampm);
}else if(c.contains("")){
c = c.replace("", "");
i = ChineseToAlaboUtils.getLong(c).intValue();
//判断闰月大小月
return localDateTime.withDayOfMonth(i);
}else if(c.contains("时后")){
c = c.replace("时后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusHours(i);
}else if(c.contains("时前")){
c = c.replace("时前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusHours(i);
}else if(c.contains("")){
int index = c.indexOf("");
i = ChineseToAlaboUtils.getLong(c.substring(0, index)).intValue();
if(i > 23){
i = 23;
}else if(i < 0){
i = 0;
}
if(ampm == 1){
//下午
if(i < 12){
i += 12;
}
}else if(ampm == 2){
//晚上
if(i < 12 && i > 5){
i += 12;
}else{
localDateTime = localDateTime.plusDays(1);
}
}
return getDateWithCodeAndLocalDateTime(
c.substring(index + 1),
localDateTime.withHour(i).withMinute(0).withSecond(0),
ampm);
}else if(c.contains("分钟后")){
c = c.replace("分钟后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusMinutes(i);
}else if(c.contains("分钟前")){
c = c.replace("分钟前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusMinutes(i);
}else if(c.contains("分钟")){
int index = c.indexOf("分钟");
i = ChineseToAlaboUtils.getLong(c.substring(0, index)).intValue();
if(i > 59){
i = 59;
}else if(i < 0){
i = 0;
}
return getDateWithCodeAndLocalDateTime(
c.substring(index + 1),
localDateTime.withMinute(i),
ampm);
}else if(c.contains("")){
int index = c.indexOf("");
i = ChineseToAlaboUtils.getLong(c.substring(0, index)).intValue();
if(i > 59){
i = 59;
}else if(i < 0){
i = 0;
}
return getDateWithCodeAndLocalDateTime(
c.substring(index + 1),
localDateTime.withMinute(i),
ampm);
}else if(c.contains("秒后")){
c = c.replace("秒后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusSeconds(i);
}else if(c.contains("秒前")){
c = c.replace("秒前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusSeconds(i);
}else if(c.contains("")){
c = c.replace("", "");
i = ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.withSecond(i);
}else if(c.contains("上周")){//
c = c.replace("上周", "");
i = ChineseToAlaboUtils.getLong(c).intValue();
if(i > 7){
i = 7;
}else if(i < 1){
i = 1;
}
int now = localDateTime.getDayOfWeek().getValue();
now = 7 - now;
i += now;
return localDateTime.minusDays(i);
}else if(c.contains("下周")){//
c = c.replace("下周", "");
i = 1;
i = ChineseToAlaboUtils.getLong(c).intValue();
if(i > 7){
i = 7;
}else if(i < 1){
i = 1;
}
int now = localDateTime.getDayOfWeek().getValue();
i = 7 - i + now;
return localDateTime.plusDays(i);
}else if(c.contains("上星期")){//
c = c.replace("上星期", "");
i = ChineseToAlaboUtils.getLong(c).intValue();
if(i > 7){
i = 7;
}else if(i < 1){
i = 1;
}
int now = localDateTime.getDayOfWeek().getValue();
i = 7 - i + now;
return localDateTime.minusDays(i);
}else if(c.contains("下星期")){//
c = c.replace("下星期", "");
i = 1;
i = ChineseToAlaboUtils.getLong(c).intValue();
if(i > 7){
i = 7;
}else if(i < 1){
i = 1;
}
int now = localDateTime.getDayOfWeek().getValue();
now = 7 - now;
i += now;
return localDateTime.plusDays(i);
}else if(c.contains("周后")){//
c = c.replace("周后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusWeeks(i);
}else if(c.contains("周前")){//
c = c.replace("周前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusWeeks(i);
}else if(c.contains("星期后")){//
c = c.replace("星期后", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusWeeks(i);
}else if(c.contains("星期前")){//
c = c.replace("星期前", "");
i = 1;
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusWeeks(i);
}else if(c.indexOf("") == 0){//周几
c = c.replace("", "");
i = ChineseToAlaboUtils.getLong(c).intValue();
if(i > 7){
i = 7;
}else if(i < 1){
i = 1;
}
int now = localDateTime.getDayOfWeek().getValue();
i = now - i;
return localDateTime.minusDays(i);
}else if(c.indexOf("") > 0){//几周
c = c.replace("", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusWeeks(i);
}else if(c.indexOf("星期") == 0){//星期几
c = c.replace("星期", "");
i = ChineseToAlaboUtils.getLong(c).intValue();
if(i > 7){
i = 7;
}else if(i < 1){
i = 1;
}
int now = localDateTime.getDayOfWeek().getValue();
i = now - i;
return localDateTime.minusDays(i);
}else if(c.indexOf("星期") > 0){//几星期
c = c.replace("星期", "");
i *= ChineseToAlaboUtils.getLong(c).intValue();
return localDateTime.minusWeeks(i);
}else{
//24节气调用网络接口
}
}
return localDateTime;
}
public static DateEnum getWithCode(String c) {
for (DateEnum dateEnum:values()
) {
@ -429,101 +832,6 @@ public enum DateEnum implements IDate{
return dateEnum;
}
}
if(c.contains("天后")){
c = c.replace("天后", "");
}else if(c.contains("天前")){
c = c.replace("天前", "");
}else if(c.contains("")){
c = c.replace("", "");
}else if(c.contains("个月后")){
c = c.replace("个月后", "");
}else if(c.contains("个月前")){
c = c.replace("个月前", "");
}else if(c.contains("个月")){
c = c.replace("个月", "");
}else if(c.contains("月后")){
c = c.replace("月后", "");
}else if(c.contains("月前")){
c = c.replace("月前", "");
}else if(c.contains("月份")){
c = c.replace("月份", "");
}else if(c.contains("")){
c = c.replace("", "");
}else if(c.contains("年后")){
c = c.replace("年后", "");
}else if(c.contains("年前")){
c = c.replace("年前", "");
}else if(c.contains("")){
c = c.replace("", "");
}else if(c.contains("小时后")){
c = c.replace("小时后", "");
}else if(c.contains("小时前")){
c = c.replace("小时前", "");
}else if(c.contains("小时")){
c = c.replace("小时", "");
}else if(c.contains("点钟后")){
c = c.replace("点钟后", "");
}else if(c.contains("点钟前")){
c = c.replace("点钟前", "");
}else if(c.contains("点钟")){
c = c.replace("点钟", "");
}else if(c.contains("点前")){
c = c.replace("点前", "");
}else if(c.contains("点后")){
c = c.replace("点后", "");
}else if(c.contains("")){
c = c.replace("", "");
}else if(c.contains("时后")){
c = c.replace("时后", "");
}else if(c.contains("时前")){
c = c.replace("时前", "");
}else if(c.contains("")){
c = c.replace("", "");
}else if(c.contains("分钟后")){
c = c.replace("分钟后", "");
}else if(c.contains("分钟前")){
c = c.replace("分钟前", "");
}else if(c.contains("分钟")){
c = c.replace("分钟", "");
}else if(c.contains("秒后")){
c = c.replace("秒后", "");
}else if(c.contains("秒前")){
c = c.replace("秒前", "");
}else if(c.contains("")){
c = c.replace("", "");
}else if(c.contains("")){//一周周一
c = c.replace("", "");
}else if(c.contains("星期")){//一星期 星期一
c = c.replace("星期", "");
}else{
//24节气调用网络接口
}
Integer n = 1;
try{
n = Integer.parseInt(c);
}catch(Exception e){
//含有中文
Map<String, Integer> chineseToArib = new HashMap<>();
chineseToArib.put("", 1);
chineseToArib.put("", 10);
chineseToArib.put("", 100);
chineseToArib.put("", 1000);
chineseToArib.put("", 10000);
chineseToArib.put("亿", 100000000);
chineseToArib.put("", 1);
chineseToArib.put("", 2);
chineseToArib.put("", 3);
chineseToArib.put("", 4);
chineseToArib.put("", 5);
chineseToArib.put("", 6);
chineseToArib.put("", 7);
chineseToArib.put("", 8);
chineseToArib.put("", 9);
char[] ch = new char[c.length()];
c.getChars(0, c.length(), ch, 0);
}
//中英文数字
return DEFAULT;
}

View File

@ -0,0 +1,93 @@
package com.qiuguo.iot.base.utils;
import java.util.HashMap;
import java.util.Map;
/**
* 中文字符串转阿拉伯数字
*/
public class ChineseToAlaboUtils {
static Map<String, Long> chineseToArib1 = new HashMap<String, Long>(){{
put("", 1L);
put("", 10L);
put("", 10L);
put("", 100L);
put("", 100L);
put("", 1000L);
put("", 1000L);
put("", 10000L);
put("", 10000L);
put("亿", 100000000L);
}};
static Map<String, Long> chineseToArib = new HashMap<String, Long>(){{
put("", 1L);
put("", 2L);
put("", 3L);
put("", 4L);
put("", 5L);
put("", 6L);
put("", 7L);
put("", 8L);
put("", 9L);
put("", 0L);
put("1", 1L);
put("2", 2L);
put("3", 3L);
put("4", 4L);
put("5", 5L);
put("6", 6L);
put("7", 7L);
put("8", 8L);
put("9", 9L);
put("0", 0L);
put("", 1L);
put("", 2L);
put("", 3L);
put("", 4L);
put("", 5L);
put("", 6L);
put("", 7L);
put("", 8L);
put("", 9L);
put("", 9L);
}};
public static Long getLong(String c){
char[] ch = new char[c.length()];
c.getChars(0, c.length(), ch, 0);
Long p = 1L;
Long n = 0L;
String key;
int i = ch.length - 1;
Long m ;
boolean isHi = false;
Long b = 1L;
while (i >= 0){
char h = ch[i--];
key = String.valueOf(h);
if(chineseToArib1.containsKey(key)){
if(isHi){
p *= chineseToArib1.get(key);
}else{
p = chineseToArib1.get(key);
if(b < p && (p == 10000L || p == 100000000L)){
b = p;
continue;
}
p *= b;
}
isHi = true;
}else if(chineseToArib.containsKey(key)){
m = chineseToArib.get(key) * p;
n += m;
p *= 10;
isHi = false;
}
}
if(isHi){
n += p;
}
System.out.println("传入数字:" + c + ",转换后数字:" + n);
return n;
}
}

View File

@ -1,9 +1,7 @@
package com.qiuguo.iot.third.nlp.action;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.qiuguo.iot.base.date.DateEnum;
import com.qiuguo.iot.base.utils.ChineseToAlaboUtils;
import com.qiuguo.iot.base.utils.StringUtils;
import lombok.Data;
@ -60,98 +58,18 @@ public class ActionTime {
}
public static void main(String[] args) {
JSONObject json = JSON.parseObject("{\"data\":[\"Success\",{\"name\":\"/data/wzg/vits_results/089135a743d4d438ecda93263174ab0cfe5dff0a/audio.wav\",\"data\":null,\"is_file\":true}],\"is_generating\":false,\"duration\":0.3392457962036133,\"average_duration\":0.5043019453684489}");
JSONArray array = json.getJSONArray("data");
json = array.getJSONObject(1);
String m = json.getString("name");
DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss E");
LocalDateTime localDateTime = LocalDateTime.now();
localDateTime = DateEnum.getWithCode("国庆").getDateTime(DateEnum.getWithCode("拂晓").getDateTime(localDateTime));
//localDateTime = DateEnum.getWithCode("国庆").getDateTime(DateEnum.getWithCode("拂晓").getDateTime(localDateTime));
System.out.println(localDateTime.format(df1));
System.out.println(DateEnum.getDateWithCodeAndLocalDateTime("今晚三点50分4秒", localDateTime, 0).format(df1));
//System.out.println(DateEnum.getDateWithCodeAndLocalDateTime("下周一", localDateTime, 0).format(df1));
int n = 1;
Map<String, Integer> chineseToArib1 = new HashMap<>();
chineseToArib1.put("", 1);
chineseToArib1.put("", 10);
chineseToArib1.put("", 100);
chineseToArib1.put("", 1000);
chineseToArib1.put("", 10000);
chineseToArib1.put("亿", 100000000);
Map<String, Integer> chineseToArib = new HashMap<>();
chineseToArib.put("", 1);
chineseToArib.put("", 2);
chineseToArib.put("", 3);
chineseToArib.put("", 4);
chineseToArib.put("", 5);
chineseToArib.put("", 6);
chineseToArib.put("", 7);
chineseToArib.put("", 8);
chineseToArib.put("", 9);
chineseToArib.put("", 0);
chineseToArib.put("1", 1);
chineseToArib.put("2", 2);
chineseToArib.put("3", 3);
chineseToArib.put("4", 4);
chineseToArib.put("5", 5);
chineseToArib.put("6", 6);
chineseToArib.put("7", 7);
chineseToArib.put("8", 8);
chineseToArib.put("9", 9);
chineseToArib.put("0", 0);
String c = "";
char[] ch = new char[c.length()];
c.getChars(0, c.length(), ch, 0);
Integer p = 1;
String v = String.valueOf(n);
String key;
for(char h : ch){
key = String.valueOf(h);
if(chineseToArib1.containsKey(key)){
p = chineseToArib.get(key);
}else if(chineseToArib.containsKey(key)){
n *= p;
}
}
c = "一十二";
ch = new char[c.length()];
c.getChars(0, c.length(), ch, 0);
p = 1;
n = 1;
v = String.valueOf(n);
for(char h : ch){
if(chineseToArib1.containsKey(String.valueOf(h))){
p = chineseToArib.get(String.valueOf(h));
}else if(chineseToArib.containsKey(String.valueOf(h))){
n *= p;
}
}
c = "十一";
ch = new char[c.length()];
c.getChars(0, c.length(), ch, 0);
p = 1;
n = 1;
v = String.valueOf(n);
for(char h : ch){
if(chineseToArib1.containsKey(h)){
p = chineseToArib.get(h);
}else if(chineseToArib.containsKey(h)){
n *= p;
}
}
c = "一百零三";
ch = new char[c.length()];
c.getChars(0, c.length(), ch, 0);
p = 1;
n = 1;
v = String.valueOf(n);
for(char h : ch){
if(chineseToArib1.containsKey(h)){
p = chineseToArib.get(h);
}else if(chineseToArib.containsKey(h)){
n *= p;
}
}
System.out.println(v);
}
}

View File

@ -100,44 +100,7 @@ public class BaseWebSocketProcess {
protected static String apiType = "api-type";
protected static String apiToken = "api-token";
@RabbitListener(queues = YunxiRabbitConst.QUEUE_LISTENER, containerFactory = "simpleRabbitListenerContainerFactory")
private void processRabbitMq(Channel channel, Message message){
try {
String messageContent = new String(message.getBody(), "UTF-8");
log.info("来自RabbitMQ的消息{}", messageContent);
U3dMsg u3dMsg = JSONObject.parseObject(messageContent, U3dMsg.class);
if(U3dMsgTypeEnum.IOT.getCode().equals(u3dMsg.getMsgType())){
//物联网操作
DeviceUserBindRequest deviceBindRequest = new DeviceUserBindRequest();
deviceBindRequest.setU3dId(Long.parseLong(u3dMsg.getMetaId()));
if(StringUtils.isNotEmpty(u3dMsg.getScenceId())){
deviceBindRequest.setScenceId(Long.parseLong(u3dMsg.getScenceId()));
}
deviceUserBindService.selectDeviceUserBindByRequest(deviceBindRequest).map(db ->{
SystemTalkBindDeviceRequest systemTalkBindDeviceRequest = new SystemTalkBindDeviceRequest();
systemTalkBindDeviceRequest.setU3dStatusId(Long.parseLong(u3dMsg.getStatusId()));
systemTalkBindDeviceRequest.setCategoryCode(db.getCategoryCode());
systemTalkBindDeviceService.selectSystemTalkBindDeviceByRequest(systemTalkBindDeviceRequest).map(sd -> {
TuyaQuery query = new TuyaQuery();
query.setDeviceId(db.getOtherDeviceId());
query.setValue(u3dMsg.getExParam());
query.setUserHandlingDeviceId(sd.getUserHandlingId());
tuyaDeviceService.controlDevice(query).map(isOk ->{
log.info("U3D打开设备调用情况{}", isOk);
return isOk;
}).subscribe();
return sd;
}).subscribe();
return db;
}).subscribe();
}
//处理完毕 手动消息确认 配置需开启 acknowledge-mode: manual
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
}catch(Exception e){
log.info("RabbitMQ 消息处理异常{}", e);
}
}
private Mono<Void> toQianWen(Action action, BaseSession baseSession, Integer type){
baseSession.setRequestId(baseSession.getRequestId() + 1);

View File

@ -68,6 +68,7 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
String ip = headers.get(LogWebFilter.HEAD_IP).get(0);
String signature = headers.get("signature").get(0);
Long userId = Long.parseLong(headers.get("userId").get(0));
Integer isBind = Integer.parseInt(headers.get("isBind").get(0));
//
BoxSession boxSession = new BoxSession();
@ -90,7 +91,7 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
//校验
checkToken(boxSession, sn, linkTime, signature, userId).contextWrite(context -> {
checkToken(boxSession, sn, linkTime, signature, userId, isBind).contextWrite(context -> {
Context contextTmp = context.put(LogMdcConfiguration.PRINT_LOG_ID, boxSession.getLogId());
return contextTmp;
@ -171,7 +172,7 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
}
private Mono<Void> checkToken(BoxSession boxSession, String sn, Long linkTime, String signature, Long userId){
private Mono<Void> checkToken(BoxSession boxSession, String sn, Long linkTime, String signature, Long userId, Integer isBind){
return reactiveStringRedisTemplate.opsForValue().get(RedisConstans.DEVICE_INFO + sn).defaultIfEmpty("").flatMap(s -> {
if(com.qiuguo.iot.base.utils.StringUtils.isNotBlank(s)){
try{
@ -220,7 +221,7 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
DeviceInfoEntity dv = (DeviceInfoEntity)d;
boxSession.setDeviceId(dv.getId());
return bindBox(dv, userId).flatMap(db ->{
return bindBox(dv, userId, isBind).flatMap(db ->{
BoxSession oldBoxSession = getBoxSessionWithSn(sn);
boxGroup.put(sn, boxSession);
if(oldBoxSession != null){
@ -232,7 +233,7 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
}
private Mono<DeviceUserBindEntity> bindBox(DeviceInfoEntity dv, Long userId){
private Mono<DeviceUserBindEntity> bindBox(DeviceInfoEntity dv, Long userId, Integer isBind){
log.info("开始绑定设备userId:{} SN{}", userId, dv);
DeviceUserBindRequest request = new DeviceUserBindRequest();
@ -254,19 +255,7 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
return deviceUserBindService.setNoMain(userId, DeviceTypeEnum.GUO_BOX.getCode()).defaultIfEmpty(0).flatMap(m ->{
log.info("解除历史isMain标注个数{}", m);
return deviceUserBindService.insertDeviceUserBind(entity).flatMap(l ->{
log.info("绑定成功SN{} userId:{}", dv, userId);
//下面所有的以前未主设备改成非主设备
//通知用户端设备绑定成功
sendNoticeToUser(userId, "设备绑定成功,设备序列号:" + dv.getSn(), AskTypeEnum.DEVICE_BIND.getCode());
UserDeviceInfoModel userDeviceInfoModel = new UserDeviceInfoModel();
userDeviceInfoModel.setStatus(YesNo.YES.getCode());
userDeviceInfoModel.setUserId(userId);
userDeviceInfoModel.setSn(entity.getOtherDeviceId());
return reactiveStringRedisTemplate.opsForValue().set(RedisConstans.USER_BOX_INFO + userId,
JSONObject.toJSONString(userDeviceInfoModel),
Duration.ofDays(RedisConstans.TEN_YEAR)).flatMap(b -> {
return Mono.just(entity);
});
return deviceBindSucess(userId, dv, entity);
});
});
@ -276,14 +265,28 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
sendNoticeToUser(userId, "设备联网成功,设备序列号:" + dv.getSn(), AskTypeEnum.BOX_ON_LINE.getCode());
}else{
//通知用户端设备绑定成功
BaseSession boxSession = getBoxSessionWithSn(dv.getSn());
if(boxSession != null){
return closeSendMsg(boxSession, "设备已解绑无法继续使用", AskTypeEnum.DEVICE_UNBIND.getCode()).flatMap(
v -> {
return Mono.just(entity);
}
);
if(isBind.equals(YesNo.YES.getCode())){
//重新绑定操作
log.info("重新绑定:{}, userId{}", dv.getSn(), userId);
entity.setIsMain(YesNo.YES.getCode());
entity.setIsBind(YesNo.YES.getCode());
return deviceUserBindService.setNoMain(userId, DeviceTypeEnum.GUO_BOX.getCode()).defaultIfEmpty(0).flatMap(m -> {
log.info("解除历史isMain标注个数{}", m);
return deviceUserBindService.updateDeviceUserBind(entity).flatMap(i -> {
return deviceBindSucess(userId, dv, entity);
});
});
}else{
BaseSession boxSession = getBoxSessionWithSn(dv.getSn());
if(boxSession != null){
return closeSendMsg(boxSession, "设备已解绑无法继续使用", AskTypeEnum.DEVICE_UNBIND.getCode()).flatMap(
v -> {
return Mono.just(entity);
}
);
}
}
}
}
@ -292,4 +295,20 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock
});
}
private Mono<DeviceUserBindEntity> deviceBindSucess(Long userId, DeviceInfoEntity dv, DeviceUserBindEntity entity) {
log.info("重新绑定成功绑定成功SN{} userId:{}", dv, userId);
//下面所有的以前未主设备改成非主设备
//通知用户端设备绑定成功
sendNoticeToUser(userId, "设备绑定成功,设备序列号:" + dv.getSn(), AskTypeEnum.DEVICE_BIND.getCode());
UserDeviceInfoModel userDeviceInfoModel = new UserDeviceInfoModel();
userDeviceInfoModel.setStatus(YesNo.YES.getCode());
userDeviceInfoModel.setUserId(userId);
userDeviceInfoModel.setSn(entity.getOtherDeviceId());
return reactiveStringRedisTemplate.opsForValue().set(RedisConstans.USER_BOX_INFO + userId,
JSONObject.toJSONString(userDeviceInfoModel),
Duration.ofDays(RedisConstans.TEN_YEAR)).flatMap(b -> {
return Mono.just(entity);
});
}
}

View File

@ -0,0 +1,70 @@
package com.qiuguo.iot.box.websocket.api.service;
import com.alibaba.fastjson.JSONObject;
import com.qiuguo.iot.base.enums.U3dMsgTypeEnum;
import com.qiuguo.iot.base.utils.StringUtils;
import com.qiuguo.iot.data.constants.YunxiRabbitConst;
import com.qiuguo.iot.data.request.device.DeviceUserBindRequest;
import com.qiuguo.iot.data.request.system.SystemTalkBindDeviceRequest;
import com.qiuguo.iot.data.resp.u3d.U3dMsg;
import com.qiuguo.iot.data.service.device.DeviceUserBindService;
import com.qiuguo.iot.data.service.system.SystemTalkBindDeviceService;
import com.qiuguo.iot.third.query.TuyaQuery;
import com.qiuguo.iot.third.service.TuyaDeviceService;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Slf4j
@Service
public class U3dToIotService {
@Autowired
protected TuyaDeviceService tuyaDeviceService;
@Resource
protected DeviceUserBindService deviceUserBindService;
@Resource
protected SystemTalkBindDeviceService systemTalkBindDeviceService;
@RabbitListener(queues = YunxiRabbitConst.QUEUE_LISTENER, containerFactory = "simpleRabbitListenerContainerFactory")
private void processRabbitMq(Channel channel, Message message){
try {
String messageContent = new String(message.getBody(), "UTF-8");
log.info("来自RabbitMQ的消息{}", messageContent);
U3dMsg u3dMsg = JSONObject.parseObject(messageContent, U3dMsg.class);
if(U3dMsgTypeEnum.IOT.getCode().equals(u3dMsg.getMsgType())){
//物联网操作
DeviceUserBindRequest deviceBindRequest = new DeviceUserBindRequest();
deviceBindRequest.setU3dId(Long.parseLong(u3dMsg.getMetaId()));
if(StringUtils.isNotEmpty(u3dMsg.getScenceId())){
deviceBindRequest.setScenceId(Long.parseLong(u3dMsg.getScenceId()));
}
deviceUserBindService.selectDeviceUserBindByRequest(deviceBindRequest).map(db ->{
SystemTalkBindDeviceRequest systemTalkBindDeviceRequest = new SystemTalkBindDeviceRequest();
systemTalkBindDeviceRequest.setU3dStatusId(Long.parseLong(u3dMsg.getStatusId()));
systemTalkBindDeviceRequest.setCategoryCode(db.getCategoryCode());
systemTalkBindDeviceService.selectSystemTalkBindDeviceByRequest(systemTalkBindDeviceRequest).map(sd -> {
TuyaQuery query = new TuyaQuery();
query.setDeviceId(db.getOtherDeviceId());
query.setValue(u3dMsg.getExParam());
query.setUserHandlingDeviceId(sd.getUserHandlingId());
tuyaDeviceService.controlDevice(query).map(isOk ->{
log.info("U3D打开设备调用情况{}", isOk);
return isOk;
}).subscribe();
return sd;
}).subscribe();
return db;
}).subscribe();
}
//处理完毕 手动消息确认 配置需开启 acknowledge-mode: manual
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
}catch(Exception e){
log.info("RabbitMQ 消息处理异常{}", e);
}
}
}