Browse Source

Merge branch 'master' of zx/cuspay into master

project 7 năm trước cách đây
mục cha
commit
3f8218838e

+ 115 - 0
src/main/java/com/emato/cuspay/common/contant/Dict.java

@@ -0,0 +1,115 @@
+package com.emato.cuspay.common.contant;
+
+/**
+ * @author zx
+ * @version 1.0
+ * 2018-05-15 13:56
+ */
+public abstract class Dict {
+
+    /**
+     * 微信支付单证状态
+     */
+    public enum PaymentDocStatus {
+        i_00("00","待申报"),
+        i_01("01", "申报中"),
+        i_03("03", "申报失败"),
+        i_10("10", "等待处理"),
+        i_11("11","业务成功"),
+        i_12("12", "业务处理失败"),
+
+        i_20("20", "未申报"),
+        i_21("21","申报已提交"),
+        i_22("22", "申报中"),
+        i_23("23", "申报成功"),
+        i_24("24", "申报失败"),
+        i_25("25", "海关接口异常");
+
+
+        private String item;
+        private String itemName;
+
+        PaymentDocStatus(String item, String itemName){
+            this.item = item;
+            this.itemName = itemName;
+        }
+
+        public String getItem() {
+            return item;
+        }
+
+        public void setItem(String item) {
+            this.item = item;
+        }
+
+        public String getItemName() {
+            return itemName;
+        }
+
+        public void setItemName(String itemName) {
+            this.itemName = itemName;
+        }
+    }
+
+    public enum  ResponseMsgState{
+        UNDECLARED("UNDECLARED", "未申报"),
+        SUBMITTED("SUBMITTED","申报已提交"),
+        PROCESSING("PROCESSING","申报中"),
+        SUCCESS("SUCCESS","申报成功"),
+        FAIL("FAIL","申报失败"),
+        EXCEPT("EXCEPT","海关接口异常");
+
+        private String item;
+        private String itemName;
+
+        ResponseMsgState(String item, String itemName) {
+            this.item = item;
+            this.itemName = itemName;
+        }
+
+        public String getItem() {
+            return item;
+        }
+
+        public void setItem(String item) {
+            this.item = item;
+        }
+
+        public String getItemName() {
+            return itemName;
+        }
+
+        public void setItemName(String itemName) {
+            this.itemName = itemName;
+        }
+    }
+
+    public enum Whether {
+        Yes("Y", "是"),
+        No("N","否");
+
+        private String item;
+        private String itemName;
+
+        Whether(String item, String itemName) {
+            this.item = item;
+            this.itemName = itemName;
+        }
+
+        public String getItem() {
+            return item;
+        }
+
+        public void setItem(String item) {
+            this.item = item;
+        }
+
+        public String getItemName() {
+            return itemName;
+        }
+
+        public void setItemName(String itemName) {
+            this.itemName = itemName;
+        }
+    }
+}

+ 15 - 0
src/main/java/com/emato/cuspay/common/contant/TablePrimaryKeyPrefix.java

@@ -0,0 +1,15 @@
+package com.emato.cuspay.common.contant;
+
+/**
+ * @author zx
+ * @version 1.0
+ * 2018-05-15 14:40
+ */
+public interface TablePrimaryKeyPrefix {
+    //跨境支付凭证
+    public static final String wx_cb_pay_type = "wxcb";
+    //支付单异常记录
+    public static final String wx_pay_error_type = "wxer";
+    //商户支付配置
+    public static final String merch_pay_cfg_type = "mpct";
+}

+ 88 - 0
src/main/java/com/emato/cuspay/common/core/db/IdWorker.java

@@ -0,0 +1,88 @@
+package com.emato.cuspay.common.core.db;
+
+/**
+ * 雪花算法自造全局自增ID
+ * 
+ * @ClassName: IdWorker
+ * @author twitter
+ * @date 2017年2月22日 下午5:48:32
+ * @Description: TODO自造全局自增ID,适合大数据环境的分布式场景 每秒能够产生26万ID左右
+ * 
+ * 
+ * @ClassName: IdWorker
+ * @author yechao
+ * @date 2017年5月6日 下午5:44:19
+ * @Description: TODO
+ */
+public class IdWorker {
+	private long workerId;
+	private long datacenterId;
+	private long sequence = 0L;
+	// 基准时间2010
+	private static long twepoch = 1288834974657L;
+	// 机器标识位数
+	private static long workerIdBits = 5;
+	// 数据中心标识位数
+	private static long datacenterIdBits = 5L;
+	// 机器标识最大值
+	private static long maxWorkerId = -1L ^ (-1L << (int) workerIdBits);
+	// 数据中心标识最大值
+	private static long maxDatacenterId = -1L ^ (-1L << (int) datacenterIdBits);
+	// 毫秒内序列号识位数
+	private static long sequenceBits = 12L;
+
+	private long workerIdShift = sequenceBits;
+	private long datacenterIdShift = sequenceBits + workerIdBits;
+	private long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;
+	private long sequenceMask = -1L ^ (-1L << (int) sequenceBits);
+
+	private long lastTimestamp = -1L;
+
+	public IdWorker(long workerId, long datacenterId) {
+		// sanity check for workerId
+		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;
+	}
+
+	public synchronized long nextId() {
+		long timestamp = timeGen();
+
+		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;
+		}
+
+		lastTimestamp = timestamp;
+
+		return ((timestamp - twepoch) << (int) timestampLeftShift) | (datacenterId << (int) datacenterIdShift) | (workerId << (int) workerIdShift)
+				| sequence;
+	}
+
+	protected long tilNextMillis(long lastTimestamp) {
+		long timestamp = timeGen();
+		while (timestamp <= lastTimestamp) {
+			timestamp = timeGen();
+		}
+		return timestamp;
+	}
+
+	protected long timeGen() {
+
+		return System.currentTimeMillis();
+	}
+}

+ 53 - 0
src/main/java/com/emato/cuspay/common/core/db/IdWorkerAide.java

@@ -0,0 +1,53 @@
+package com.emato.cuspay.common.core.db;
+
+
+import com.emato.cuspay.manager.redis.jedis.cluster.mgt.JedisClusterManager;
+
+public class IdWorkerAide {
+
+	private static IdWorker idWorker;
+
+	public static long nextId() {
+		if (idWorker == null) {
+			initIdWorker();
+		}
+		return idWorker.nextId();
+	}
+
+	/**
+	 * 实例化idWorker
+	 */
+	private static void initIdWorker() {
+		String workerIdKey = "sequence-workerId";
+		// 机器id
+		Integer workerId = (Integer) JedisClusterManager.instance().getObject(workerIdKey);
+		if (workerId == null) {
+			workerId = 0;
+		}
+		String datacenterIdKey = "sequence-datacenterId" + workerId;
+
+		// 数据中心id
+		Integer datacenterId = (Integer) JedisClusterManager.instance().getObject(datacenterIdKey);
+		if (datacenterId == null) {
+			datacenterId = 0;
+		} else {
+			datacenterId++;
+		}
+
+		JedisClusterManager.instance().setObject(workerIdKey, workerId);
+		JedisClusterManager.instance().setObject(datacenterIdKey, datacenterId);
+
+		if (datacenterId > 31) {
+			datacenterId = 0;
+			workerId++;
+
+	 		// 每32 个数据中心id 换一个机器id
+			JedisClusterManager.instance().setObject(workerIdKey, workerId);
+			datacenterIdKey = "sequence-datacenterId" + workerId;
+			JedisClusterManager.instance().setObject(datacenterIdKey, datacenterId);
+		}
+
+		idWorker = new IdWorker(workerId, datacenterId);
+	}
+
+}