From 661f9562fb07d8fd0fc8740238eaed2b5d1faa56 Mon Sep 17 00:00:00 2001
From: liuhaonan <konodioda2333@vip.qq.com>
Date: 星期三, 16 三月 2022 16:20:33 +0800
Subject: [PATCH] 支付相关
---
dao/src/main/java/com/sandu/ximon/dao/enums/C3mRedisConstant.java | 24 +
dao/src/main/java/com/sandu/ximon/dao/domain/WxConfigEntity.java | 55 ++
ximon-admin/src/main/java/com/sandu/ximon/admin/param/AlipayConfigParam.java | 30 +
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mChargingChargeService.java | 109 ++++
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/ConfigCheckUtils.java | 18
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/OrderUtils.java | 15
dao/src/main/java/com/sandu/ximon/dao/enums/OrderStatus.java | 29 +
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/XiXunController.java | 2
ximon-admin/src/main/java/com/sandu/ximon/admin/vo/C3mOrderVO.java | 161 ++++++
dao/src/main/java/com/sandu/ximon/dao/domain/AlipayConfigEntity.java | 55 ++
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/AliPayUtils.java | 124 +++++
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mOrderService.java | 87 +++
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/DateUtils.java | 260 ++++++++++
dao/src/main/java/com/sandu/ximon/dao/mapper/UsrAlipayConfigMapper.java | 17
ximon-admin/src/main/java/com/sandu/ximon/admin/param/WxpayConfigParam.java | 33 +
dao/src/main/resources/mapper/UsrWxConfigMapper.xml | 22
ximon-admin/src/main/java/com/sandu/ximon/admin/config/ServerConfig.java | 53 ++
dao/src/main/resources/mapper/UsrAlipayConfigMapper.xml | 22
dao/src/main/java/com/sandu/ximon/dao/enums/OrderType.java | 34 +
dao/src/main/java/com/sandu/ximon/dao/mapper/UsrWxConfigMapper.java | 17
ximon-admin/src/main/java/com/sandu/ximon/admin/config/AlipayConfig.java | 47 +
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/UsrPayConfigCollector.java | 96 ++++
ximon-admin/src/main/java/com/sandu/ximon/admin/pay/alipay/UsrAlipayConfigService.java | 106 ++++
23 files changed, 1,415 insertions(+), 1 deletions(-)
diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/AlipayConfigEntity.java b/dao/src/main/java/com/sandu/ximon/dao/domain/AlipayConfigEntity.java
new file mode 100644
index 0000000..e70557a
--- /dev/null
+++ b/dao/src/main/java/com/sandu/ximon/dao/domain/AlipayConfigEntity.java
@@ -0,0 +1,55 @@
+package com.sandu.ximon.dao.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ *
+ * @TableName alipay_config
+ */
+@TableName(value ="alipay_config")
+@Data
+public class AlipayConfigEntity implements Serializable {
+ /**
+ * 绱㈠紩id
+ */
+ @TableId(type = IdType.AUTO)
+ private Integer configId;
+
+ /**
+ * 搴旂敤APPID
+ */
+ private String appId;
+
+ /**
+ * 鍟嗘埛绉侀挜/PKCS8鏍煎紡RSA2绉侀挜
+ */
+ private String privateKey;
+
+ /**
+ * 鏀粯瀹濆叕閽�/鏌ョ湅鍦板潃锛歨ttps://openhome.alipay.com/platform/keyManage.htm 瀵瑰簲APPID涓嬬殑鏀粯瀹濆叕閽�
+ */
+ private String publicKey;
+
+ /**
+ * 鍚堜綔浼欎即韬唤锛圥ID锛�
+ */
+ private String pid;
+
+ /**
+ * 瀹㈡埛id
+ */
+ private Long clientId;
+
+ /**
+ * 鍒涘缓閰嶇疆鐨勭敤鎴穒d
+ */
+ private Long createUserId;
+
+ @TableField(exist = false)
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/WxConfigEntity.java b/dao/src/main/java/com/sandu/ximon/dao/domain/WxConfigEntity.java
new file mode 100644
index 0000000..7424a30
--- /dev/null
+++ b/dao/src/main/java/com/sandu/ximon/dao/domain/WxConfigEntity.java
@@ -0,0 +1,55 @@
+package com.sandu.ximon.dao.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ *
+ * @TableName wx_config
+ */
+@TableName(value ="wx_config")
+@Data
+public class WxConfigEntity implements Serializable {
+ /**
+ *
+ */
+ @TableId(type = IdType.AUTO)
+ private Long configId;
+
+ /**
+ * appid
+ */
+ private String appid;
+
+ /**
+ * app绔痑ppid
+ */
+ private String appappid;
+
+ /**
+ *
+ */
+ private String mchId;
+
+ /**
+ *
+ */
+ private String privateKey;
+
+ /**
+ *
+ */
+ private Long clientId;
+
+ /**
+ *
+ */
+ private Long createUserId;
+
+ @TableField(exist = false)
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/dao/src/main/java/com/sandu/ximon/dao/enums/C3mRedisConstant.java b/dao/src/main/java/com/sandu/ximon/dao/enums/C3mRedisConstant.java
new file mode 100644
index 0000000..39e7a19
--- /dev/null
+++ b/dao/src/main/java/com/sandu/ximon/dao/enums/C3mRedisConstant.java
@@ -0,0 +1,24 @@
+package com.sandu.ximon.dao.enums;
+
+public enum C3mRedisConstant {
+
+ // 鍏呯數妗╁績璺冲寘瀛樺偍(mac-list(鍏呯數妗╁彛鐘舵��))
+ C3_STATUS("m_c3_port_status:"),
+ // 鍏呯數妗╄鍗�
+ C3_NO_PAY_ORDER("m_c3_no_pay_order:"),
+ // 鍏呯數妗╄繘琛屼腑璁㈠崟
+ C3_CHARGING_ORDER("m_c3_charging_order:"),
+ // 鍏呯數妗╂晠闅滅爜
+ C3_ERROR("m_c3_error:"),
+ ;
+
+
+ private String code;
+
+ public String getCode() {
+ return code;
+ }
+ C3mRedisConstant(String code) {
+ this.code = code;
+ }
+}
diff --git a/dao/src/main/java/com/sandu/ximon/dao/enums/OrderStatus.java b/dao/src/main/java/com/sandu/ximon/dao/enums/OrderStatus.java
new file mode 100644
index 0000000..72c96dd
--- /dev/null
+++ b/dao/src/main/java/com/sandu/ximon/dao/enums/OrderStatus.java
@@ -0,0 +1,29 @@
+package com.sandu.ximon.dao.enums;
+
+public enum OrderStatus {
+ // 鏈敮浠�
+ NO_PAY(0),
+ // 宸叉敮浠�
+ PAYED(1),
+ // 宸查��娆�
+ REFUND(2),
+ // 閫�娆句腑
+ REFUNDING(3),
+ // 閫�娆惧け璐�
+ REFUND_FAILED(4),
+ // 宸插畬鎴�
+ COMPLETE(5),
+
+ ;
+
+ private Integer status;
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ OrderStatus (Integer status) {
+ this.status = status;
+ }
+
+}
diff --git a/dao/src/main/java/com/sandu/ximon/dao/enums/OrderType.java b/dao/src/main/java/com/sandu/ximon/dao/enums/OrderType.java
new file mode 100644
index 0000000..ad2531b
--- /dev/null
+++ b/dao/src/main/java/com/sandu/ximon/dao/enums/OrderType.java
@@ -0,0 +1,34 @@
+package com.sandu.ximon.dao.enums;
+
+/**
+ * 璁㈠崟绫诲瀷
+ */
+public enum OrderType {
+
+ ALIPAY("alipay"),
+
+ WXPAY("wxpay"),
+
+ ERROR("error");
+
+ private String code;
+
+ public String getCode() {
+ return code;
+ }
+
+ public static OrderType getOrderType(String type){
+ if(type.equals(OrderType.ALIPAY.getCode())) {
+ return OrderType.ALIPAY;
+ }else if(type.equals(OrderType.WXPAY.getCode())) {
+ return OrderType.WXPAY;
+ }else {
+ return OrderType.ERROR;
+ }
+ }
+
+ OrderType(String code) {
+ this.code = code;
+ }
+
+}
\ No newline at end of file
diff --git a/dao/src/main/java/com/sandu/ximon/dao/mapper/UsrAlipayConfigMapper.java b/dao/src/main/java/com/sandu/ximon/dao/mapper/UsrAlipayConfigMapper.java
new file mode 100644
index 0000000..6da7a86
--- /dev/null
+++ b/dao/src/main/java/com/sandu/ximon/dao/mapper/UsrAlipayConfigMapper.java
@@ -0,0 +1,17 @@
+package com.sandu.ximon.dao.mapper;
+
+import com.sandu.ximon.dao.domain.AlipayConfigEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Entity com.sandu.ximon.dao.domain.UsrAlipayConfig
+ */
+@Mapper
+public interface UsrAlipayConfigMapper extends BaseMapper<AlipayConfigEntity> {
+
+}
+
+
+
+
diff --git a/dao/src/main/java/com/sandu/ximon/dao/mapper/UsrWxConfigMapper.java b/dao/src/main/java/com/sandu/ximon/dao/mapper/UsrWxConfigMapper.java
new file mode 100644
index 0000000..6d3383f
--- /dev/null
+++ b/dao/src/main/java/com/sandu/ximon/dao/mapper/UsrWxConfigMapper.java
@@ -0,0 +1,17 @@
+package com.sandu.ximon.dao.mapper;
+
+import com.sandu.ximon.dao.domain.WxConfigEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Entity com.sandu.ximon.dao.domain.WxConfigEntity
+ */
+@Mapper
+public interface UsrWxConfigMapper extends BaseMapper<WxConfigEntity> {
+
+}
+
+
+
+
diff --git a/dao/src/main/resources/mapper/UsrAlipayConfigMapper.xml b/dao/src/main/resources/mapper/UsrAlipayConfigMapper.xml
new file mode 100644
index 0000000..4eaa704
--- /dev/null
+++ b/dao/src/main/resources/mapper/UsrAlipayConfigMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sandu.ximon.dao.mapper.UsrAlipayConfigMapper">
+
+ <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.AlipayConfigEntity">
+ <id property="configId" column="config_id" jdbcType="INTEGER"/>
+ <result property="appId" column="app_id" jdbcType="VARCHAR"/>
+ <result property="privateKey" column="private_key" jdbcType="VARCHAR"/>
+ <result property="publicKey" column="public_key" jdbcType="VARCHAR"/>
+ <result property="pid" column="pid" jdbcType="VARCHAR"/>
+ <result property="clientId" column="client_id" jdbcType="BIGINT"/>
+ <result property="createUserId" column="create_user_id" jdbcType="BIGINT"/>
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ config_id,app_id,private_key,
+ public_key,pid,client_id,
+ create_user_id
+ </sql>
+</mapper>
diff --git a/dao/src/main/resources/mapper/UsrWxConfigMapper.xml b/dao/src/main/resources/mapper/UsrWxConfigMapper.xml
new file mode 100644
index 0000000..762874e
--- /dev/null
+++ b/dao/src/main/resources/mapper/UsrWxConfigMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sandu.ximon.dao.mapper.UsrWxConfigMapper">
+
+ <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.WxConfigEntity">
+ <id property="configId" column="config_id" jdbcType="BIGINT"/>
+ <result property="appid" column="appid" jdbcType="VARCHAR"/>
+ <result property="appappid" column="appappid" jdbcType="VARCHAR"/>
+ <result property="mchId" column="mch_id" jdbcType="VARCHAR"/>
+ <result property="privateKey" column="private_key" jdbcType="VARCHAR"/>
+ <result property="clientId" column="client_id" jdbcType="BIGINT"/>
+ <result property="createUserId" column="create_user_id" jdbcType="BIGINT"/>
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ config_id,appid,appappid,
+ mch_id,private_key,client_id,
+ create_user_id
+ </sql>
+</mapper>
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/config/AlipayConfig.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/config/AlipayConfig.java
new file mode 100644
index 0000000..e86c1dc
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/config/AlipayConfig.java
@@ -0,0 +1,47 @@
+package com.sandu.ximon.admin.config;
+
+/* *
+ *绫诲悕锛欰lipayConfig
+ *鍔熻兘锛氬熀纭�閰嶇疆绫�
+ *璇︾粏锛氳缃笎鎴锋湁鍏充俊鎭強杩斿洖璺緞
+ *淇敼鏃ユ湡锛�2017-04-05
+ *璇存槑锛�
+ *浠ヤ笅浠g爜鍙槸涓轰簡鏂逛究鍟嗘埛娴嬭瘯鑰屾彁渚涚殑鏍蜂緥浠g爜锛屽晢鎴峰彲浠ユ牴鎹嚜宸辩綉绔欑殑闇�瑕侊紝鎸夌収鎶�鏈枃妗g紪鍐�,骞堕潪涓�瀹氳浣跨敤璇ヤ唬鐮併��
+ *璇ヤ唬鐮佷粎渚涘涔犲拰鐮旂┒鏀粯瀹濇帴鍙d娇鐢紝鍙槸鎻愪緵涓�涓弬鑰冦��
+ */
+public class AlipayConfig {
+//鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌璇峰湪杩欓噷閰嶇疆鎮ㄧ殑鍩烘湰淇℃伅鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫�
+
+ // 搴旂敤ID,鎮ㄧ殑APPID锛屾敹娆捐处鍙锋棦鏄偍鐨凙PPID瀵瑰簲鏀粯瀹濊处鍙�
+// public String app_id = "2019070665741774";
+
+ // 鍟嗘埛绉侀挜锛屾偍鐨凱KCS8鏍煎紡RSA2绉侀挜
+// public String merchant_private_key = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCume3EzEBKw8T2Xs0dBEDwTi8g7AR/c7Gy0sE9XciSVPoKpeHaaqShH7L+ws6pYE7SnXYNKM3diZ6S0vKxt5XhuOpg9yfueWw85BCbTYzOYQwrK/qZIgQC5c6S5b9aar9PowaupqYSFWDFvDOr6zaCr1OhjT/lYJV46D2t5e5/yACUQXGo0evvpbSvC6+zp2ZhUoJiXKvqPxC2F/dKGzyY4e9WnBSzaraLT09GLNwzLzSKItjKXHO/ameLhIiqacbOydKOmsEC1XzsNkeHXYLRFF4EAGZt4KDkuwiKjrz1r8Wz1a0Fr4jrE0F7dj9cIq+lhUjqUSydNYETJtKq5XOHAgMBAAECggEBAJ6W9A/H0jHWpeV98GKFxZJAAbCuj9tQM7yQj7L0p0S66K6ZQ47HRKeRCl06hsnzz0Sgf2SuhmbOJHmKH6Tqcrom4sSWWe/S3ExmfusBQn8GSS5BcQp8ihYztDFbezZeNUzZcC1c8wUD4/VW37wtFkMXiyf3C22GD95VXAjDC6GFfv6GIytCbAKw1HbgmU/JMDjnzSi0IKnmoBu5tVNZtwWRu8qkEC2LiejoQpxi12jRZQptkSa8iokk2eFx3i9BBDljx1qfzlFyAOtwICiy6HnxBTMBfzLAy9nI5//wzcY4X4fK0d/XatDNxDN4f/5Wp/VKFyz7BLFQTfkyQv8fofkCgYEA7HmF8Qk/qRumHX3UYuEENPge4EwYOzWcQ12kJBo93xbIcMlZ5Qrzpm6IRj8RMqpwcCEtrvvIsDtMO4o8+nNnOO8SMBk8KJj7nsZtigrAEor8HVj63IDDHX/zLt51cvs0x1jNXUD3/tZvw4PnDcblXpMYM1qR/bBuvHVGx1VTz6sCgYEAvQSO4YxAKXnMh338Nrh0FaRKmirewYn7TbLk6rPFh6goCHPGJC1fAOu+9xVALMn8VJrDpfrzqTTg0eKifh8i+5Rlqra95W+DdYr+WThB1NWs+59O5aKCT8wYI3dlaiI5xa+wCzkdasNO3YzrXr5y9wtJdepb5b/Re9uF1+KHv5UCgYEA2PNM3SydCSriph/xIJ5MW8Rfn2xwtrGioXNhyfWBWhDu5/ryzF3V15WE1N27i34vFdB6txUss/JTKDTVaPlDdEpxp0sflCd2gd6OVJ00Rk7Yqpwd2vsPBxuCIjfaDRlG/LUOBEY8v8JAW2HCMzOM782H4GVxlwutLJ1zyCESeW0CgYAWNrDsBOWNekj1K3M2oxrRaEt0LtGbATJNgVax1orCVJrP03tXyRU/MHVy6EZwfRRwhPe1S/bSzeoWAIKEO/iKhHgmRe+vRRm3+KvHpHroHmyD7ccB6cVSx3OWx3Nds8QCXZFc4Et6vpVIKEWJDuzH58WsW+yM5awi2Du0kWTOuQKBgCt7QqYDD0k8ahkKL/q2atMkNdJAYlLVWukHTRf8EQ8Uq5xEnLONGtrnYC0gjJCIdbIO4jkP10hOqDufyQqk4DUsk7m1waCmMjGPDTrv8gyVK+48gS6+Jmroi51GDOQTb/T35a3HJt2bflFbaEJzYnHHvkensAUX6DeEMIowE4Qg";
+
+ // 鏀粯瀹濆叕閽�,鏌ョ湅鍦板潃锛歨ttps://openhome.alipay.com/platform/keyManage.htm 瀵瑰簲APPID涓嬬殑鏀粯瀹濆叕閽ャ��
+// public String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhnER1VMBe7yuHI5P5NtsM0Nitaq8cHnobB7KwYDw/V9t/DCiBAbJnuBbOHyS4zkffiZ905dsQycIqu9PRk4J9j6nE9YZVLMPIHXIAOn4J6ZAGmznpuQ9es+fblw+nr/v00X9ZQpR0zYpULEEHaU9lXE8JMoKElawNYRpibArwrnWcizOFbFiwmq8Jq3m07Ri/L7/gogOZshE3WE9UuBIR/czputhq0py0F+yddASy08F0jt3/wm4Cgx/qUpMH/4KwIRwxSKp+Kk7rCRrKmnOm3iMt9QmQ1yX2ht9To5ph3gPBtfR5VyhA8Dasnls9XYEUzsrnWOd1v9javYPgE4vdQIDAQAB";
+
+ // 鏈嶅姟鍣ㄥ紓姝ラ�氱煡椤甸潰璺緞 闇�http://鏍煎紡鐨勫畬鏁磋矾寰勶紝涓嶈兘鍔�?id=123杩欑被鑷畾涔夊弬鏁帮紝蹇呴』澶栫綉鍙互姝e父璁块棶
+// public static String notify_url = "http://192.168.0.199:8080/machine-fast/serv/c2charging/alipayNotifyReturn";
+ public static String notify_url = "http://"+ServerConfig.getServerIP()+":8888/machine-fast/serv/c2charging/alipayNotifyReturn";
+
+ // 椤甸潰璺宠浆鍚屾閫氱煡椤甸潰璺緞 闇�http://鏍煎紡鐨勫畬鏁磋矾寰勶紝涓嶈兘鍔�?id=123杩欑被鑷畾涔夊弬鏁帮紝蹇呴』澶栫綉鍙互姝e父璁块棶
+// public static String return_url = "http://192.168.0.199:8080/machine-fast/serv/c2charging/alipayReturn";
+ public static String return_url = "http://"+ServerConfig.getServerIP()+":8888/machine-fast/serv/c2charging/alipayReturn";
+ // 杩斿洖鏍煎紡
+ public static String format = "json";
+ // 绛惧悕鏂瑰紡
+ public static String sign_type = "RSA2";
+
+ // 瀛楃缂栫爜鏍煎紡
+ public static String charset = "utf-8";
+
+// public String pid = "2088531531858351";
+
+ public static String target_id = "";
+
+ // 鏀粯瀹濈綉鍏�
+ public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";
+// public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
+}
+
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/config/ServerConfig.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/config/ServerConfig.java
new file mode 100644
index 0000000..ff05e1c
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/config/ServerConfig.java
@@ -0,0 +1,53 @@
+package com.sandu.ximon.admin.config;
+
+import com.sandu.ximon.admin.utils.LogUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+@Component
+public class ServerConfig {
+
+ @Value("${server-conf.ip}")
+ public String SIP;
+ @Value("${nginx.port}")
+ public String nginxPort;
+ @Value("${nginx.cameraSaveUrl}")
+ public String saveUrl;
+// @Value("${broadcast.file-save-url}")
+// private String fileSaveUrl;
+
+
+ private static String ServerIP;
+ private static String NginxPort;
+ private static String CameraSaveUrl;
+ private static String BroadcastFileSaveUrl;
+ private static boolean O2OServer;
+
+ public static String getNginxCameraSaveUrl() {
+ return CameraSaveUrl;
+ }
+
+ @PostConstruct
+ private void loadIP(){
+ ServerIP = SIP;
+ NginxPort = nginxPort;
+ CameraSaveUrl = saveUrl;
+ // BroadcastFileSaveUrl = fileSaveUrl;
+ LogUtils.print("Server IP 锛�" +SIP);
+ LogUtils.print("NignX Port 锛�" +nginxPort);
+ LogUtils.print("Camera Save Url 锛�" +CameraSaveUrl);
+ LogUtils.print("Broadcast File Save Url 锛�" +BroadcastFileSaveUrl);
+ }
+
+ public static String getServerIP(){
+ return ServerIP;
+ }
+ public static String getNignxPort(){
+ return NginxPort;
+ }
+ public static String getBroadcastFileSaveUrl(){
+ return BroadcastFileSaveUrl;
+ }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/UsrPayConfigCollector.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/UsrPayConfigCollector.java
new file mode 100644
index 0000000..f9c88f1
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/UsrPayConfigCollector.java
@@ -0,0 +1,96 @@
+package com.sandu.ximon.admin.controller;
+
+import com.sandu.common.domain.ResponseVO;
+import com.sandu.common.execption.BusinessException;
+import com.sandu.common.object.BaseConditionVO;
+import com.sandu.common.util.ResponseUtil;
+import com.sandu.ximon.admin.param.AlipayConfigParam;
+import com.sandu.ximon.admin.pay.alipay.UsrAlipayConfigService;
+import com.sandu.ximon.dao.domain.AlipayConfigEntity;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Author liuhaonan
+ * @Date 2022/3/16 10:32
+ * @Version 1.0
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/v1/payconfig")
+public class UsrPayConfigCollector {
+
+ private final UsrAlipayConfigService alipayConfigService;
+
+
+ /**
+ * 鏀粯瀹濋厤缃坊鍔�
+ * @param configParam
+ * @return
+ */
+ @PostMapping("/addAliPayConfig")
+ public ResponseVO<Object> addAliPayConfig(@RequestBody AlipayConfigParam configParam) {
+ return ResponseUtil.success(alipayConfigService.addAliPayConfig(configParam));
+ }
+
+ /**
+ * 鏀粯瀹濋厤缃洿鏀�
+ * @param configId
+ * @param configParam
+ * @return
+ */
+ @PostMapping("/updateAliPayConfig/{configId}")
+ public ResponseVO<Object> updateAliPayConfig(@PathVariable Integer configId, @RequestBody AlipayConfigParam configParam) {
+ return ResponseUtil.success(alipayConfigService.updateAliPayConfig(configId,configParam));
+ }
+
+ /**
+ * 鏀粯瀹濋厤缃垹闄�
+ * @param configId
+ * @return
+ */
+ @PostMapping("/deleteAliPayConfig/{configId}")
+ public ResponseVO<Object> deleteAliPayConfig(@PathVariable Integer configId) {
+ return ResponseUtil.success(alipayConfigService.deleteAliPayConfig(configId));
+ }
+
+ /**
+ *
+ * @param poleId
+ * @return
+ */
+ @GetMapping("/getAliPayConfigByPoleId/{poleId}")
+ public ResponseVO<Object> getAliPayConfigByPoleId(@PathVariable Long poleId) {
+ return ResponseUtil.success(alipayConfigService.getConfigByPoleId(poleId));
+ }
+
+ /**
+ *閰嶇疆璇︽儏
+ * @param configId
+ * @return
+ */
+ @GetMapping("/getAliPayConfigById/{configId}")
+ public ResponseVO<Object> getAliPayConfigById(@PathVariable Integer configId) {
+ if(configId==null){
+ throw new BusinessException("id鑳戒负绌�");
+ }
+ AlipayConfigEntity byId = alipayConfigService.getById(configId);
+ if(byId==null){
+ throw new BusinessException("閰嶇疆id閿欒鎴栭厤缃笉瀛樺湪");
+ }
+ return ResponseUtil.success(byId);
+ }
+
+
+ @GetMapping("/aliConfigList")
+ public ResponseVO<Object> aliConfigList(BaseConditionVO baseConditionVO) {
+ return ResponseUtil.success(alipayConfigService.configList(baseConditionVO));
+ }
+
+
+
+
+
+
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/XiXunController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/XiXunController.java
index 6854663..9f946e2 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/XiXunController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/XiXunController.java
@@ -145,7 +145,7 @@
* @return
*/
@PostMapping("/pushToXixun/{pid}")
- public ResponseVO<Object> getByPid(@PathVariable Long pid, @RequestBody List<Long> lightemitIds) {
+ public ResponseVO<Object> pushByPid(@PathVariable Long pid, @RequestBody List<Long> lightemitIds) {
xiXunPlayerService.videoXixunPlayer(pid, lightemitIds);
return ResponseUtil.success("鎺ㄩ�佹垚鍔�");
}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/param/AlipayConfigParam.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/param/AlipayConfigParam.java
new file mode 100644
index 0000000..3f79407
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/param/AlipayConfigParam.java
@@ -0,0 +1,30 @@
+package com.sandu.ximon.admin.param;
+
+import lombok.Data;
+
+/**
+ * @Author liuhaonan
+ * @Date 2022/3/16 9:46
+ * @Version 1.0
+ */
+@Data
+public class AlipayConfigParam {
+
+ private String appId;
+
+ /**
+ * 鍟嗘埛绉侀挜/PKCS8鏍煎紡RSA2绉侀挜
+ */
+ private String privateKey;
+
+ /**
+ *
+ */
+ private String publicKey;
+
+ /**
+ * 鍚堜綔浼欎即韬唤锛圥ID锛�
+ */
+ private String pid;
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/param/WxpayConfigParam.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/param/WxpayConfigParam.java
new file mode 100644
index 0000000..5633440
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/param/WxpayConfigParam.java
@@ -0,0 +1,33 @@
+package com.sandu.ximon.admin.param;
+
+import lombok.Data;
+
+/**
+ * @Author liuhaonan
+ * @Date 2022/3/16 9:46
+ * @Version 1.0
+ */
+@Data
+public class WxpayConfigParam {
+
+ /**
+ * appid
+ */
+ private String appid;
+
+ /**
+ * app绔痑ppid
+ */
+ private String appappid;
+
+ /**
+ *
+ */
+ private String mchId;
+
+ /**
+ *
+ */
+ private String privateKey;
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/pay/alipay/UsrAlipayConfigService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/pay/alipay/UsrAlipayConfigService.java
new file mode 100644
index 0000000..9158cd1
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/pay/alipay/UsrAlipayConfigService.java
@@ -0,0 +1,106 @@
+package com.sandu.ximon.admin.pay.alipay;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.PageHelper;
+import com.sandu.common.execption.BusinessException;
+import com.sandu.common.object.BaseConditionVO;
+import com.sandu.common.service.impl.BaseServiceImpl;
+import com.sandu.ximon.admin.param.AlipayConfigParam;
+import com.sandu.ximon.admin.security.SecurityUtils;
+import com.sandu.ximon.admin.service.ClientService;
+import com.sandu.ximon.admin.service.PoleService;
+import com.sandu.ximon.admin.utils.SpringContextUtil;
+import com.sandu.ximon.dao.domain.AlipayConfigEntity;
+import com.sandu.ximon.dao.domain.Pole;
+import com.sandu.ximon.dao.mapper.UsrAlipayConfigMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Author liuhaonan
+ * @Date 2022/3/15
+ * @Version 1.0
+ */
+@Service
+@AllArgsConstructor
+public class UsrAlipayConfigService extends BaseServiceImpl<UsrAlipayConfigMapper, AlipayConfigEntity> {
+
+ private final UsrAlipayConfigMapper usrAlipayConfigMapper;
+ private final ClientService clientService;
+ private final PoleService poleService;
+
+ public AlipayConfigEntity getConfigByPoleId(Long poleId) {
+ Pole pole = poleService.getById(poleId);
+ if (pole == null) {
+ throw new BusinessException("鐏潌id閿欒鎴栫伅鏉嗕笉瀛樺湪");
+ }
+ AlipayConfigEntity config;
+ if (pole.getClientId() == null) {
+ config = getById(0);
+ }
+ config = getOne(Wrappers.lambdaQuery(AlipayConfigEntity.class).eq(AlipayConfigEntity::getCreateUserId, SecurityUtils.getUserId()));
+ if(config==null){
+ throw new BusinessException("鐢ㄦ埛鏈厤缃敮浠橀厤缃�,璇烽厤缃悗閲嶈瘯");
+ }
+ return config;
+ }
+
+
+ public static UsrAlipayConfigService getBean(){
+ return (UsrAlipayConfigService) SpringContextUtil.getBean("UsrAlipayConfigService");
+ }
+
+
+ public boolean addAliPayConfig(AlipayConfigParam configParam){
+ AlipayConfigEntity config =new AlipayConfigEntity();
+ BeanUtil.copyProperties(configParam,config);
+ return save(config);
+ }
+
+ public boolean updateAliPayConfig(Integer id,AlipayConfigParam configParam){
+ AlipayConfigEntity byId = getById(id);
+ if(byId==null){
+ throw new BusinessException("閰嶇疆id閿欒鎴栭厤缃笉瀛樺湪");
+ }
+ AlipayConfigEntity config =new AlipayConfigEntity();
+ BeanUtil.copyProperties(configParam,config);
+ config.setConfigId(id);
+ return updateById(config);
+ }
+
+ public boolean deleteAliPayConfig(Integer id){
+ AlipayConfigEntity byId = getById(id);
+ if(byId==null){
+ throw new BusinessException("閰嶇疆id閿欒鎴栭厤缃笉瀛樺湪");
+ }
+ return removeById(id);
+ }
+
+
+
+ public List<AlipayConfigEntity> configList(BaseConditionVO baseConditionVO){
+ LambdaQueryWrapper<AlipayConfigEntity> wrapper =new LambdaQueryWrapper<>();
+ System.out.println("----------------------------"+clientService.findClientId());
+ PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
+ if(SecurityUtils.getClientId()!=null){//瀹㈡埛
+ if(clientService.findClientId()){//浜岀骇瀹㈡埛
+ PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
+ wrapper= Wrappers.lambdaQuery(AlipayConfigEntity.class).eq(AlipayConfigEntity::getCreateUserId,SecurityUtils.getUserId());
+ }else if(!clientService.findClientId()){//涓�绾у鎴�
+ PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
+ wrapper= Wrappers.lambdaQuery(AlipayConfigEntity.class).eq(AlipayConfigEntity::getClientId,SecurityUtils.getUserId());
+ }
+ } else {//绠$悊
+ PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
+ wrapper= Wrappers.lambdaQuery(AlipayConfigEntity.class);
+ }
+ return list(wrapper);
+ }
+
+
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mChargingChargeService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mChargingChargeService.java
new file mode 100644
index 0000000..785a3f7
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mChargingChargeService.java
@@ -0,0 +1,109 @@
+package com.sandu.ximon.admin.service;
+
+import com.sandu.common.service.impl.BaseServiceImpl;
+import com.sandu.ximon.dao.domain.C3mChargingCharge;
+import com.sandu.ximon.dao.mapper.C3mChargingChargeMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author liuhaonan
+ * @Date 2022/3/10 13:58
+ * @Version 1.0
+ * c3鍏呯數妗╄垂鐜囩浉鍏�
+ */
+@Service
+@AllArgsConstructor
+public class C3mChargingChargeService extends BaseServiceImpl<C3mChargingChargeMapper, C3mChargingCharge> {
+ private final C3mChargingChargeMapper c3mChargingChargeMapper;
+
+ /**
+ * 淇敼璐圭巼
+ * @param chargeEntities
+ * @param userId
+ * @param username
+ * @return
+ */
+ public boolean updateCharge(List<C3mChargingCharge> chargeEntities, Long userId, String username) {
+ // 鍒犻櫎鍘熸湰瀛樺湪鐨勮垂鐜�
+ c3mChargingChargeMapper.deleteCharge(chargeEntities.get(0).getC3Id());
+ Long timestamp = new Date().getTime();
+ // 灏嗚垂鐜囨坊鍔犺嚦鏁版嵁搴�
+ for (C3mChargingCharge c3m : chargeEntities) {
+ c3m.setTimestamp(timestamp);
+ save(c3m);
+ }
+// LogService.getBean().log(userId,username,"淇敼C3m璐圭巼",null,
+// "{ "+ JSON.toJSONString(chargeEntities)+" }");
+ return true;
+ }
+
+ public void initCharge(Integer c3Id) {
+ List<C3mChargingCharge> chargeList = getChargeByC3Id(c3Id);
+ if(chargeList.size() == 0) {
+ // 涓嶅瓨鍦ㄨ垂鐜囨椂锛岀敓鎴愬崟涓垂鐜囧苟鎻掑叆鏁版嵁搴�
+ C3mChargingCharge c3mChargeEntity = C3mChargingCharge.getInitInstance(c3Id);
+ c3mChargingChargeMapper.insertCharge(c3mChargeEntity);
+ }
+ }
+
+
+ public List<C3mChargingCharge> getChargeByC3Id(Integer c3Id) {
+ // 鏌ユ壘鏁版嵁搴撴墍鏈夎垂鐜�
+ List<C3mChargingCharge> list = c3mChargingChargeMapper.getChargeByC3Id(c3Id);
+ // 鍒ゆ柇list涓哄崟鏉$洿鎺ヨ繑鍥�
+ if(list.size()<2){
+ return list;
+ }
+ // 灏嗘椂鍒嗚繘琛屾帓搴�
+ Collections.sort(list, new Comparator<C3mChargingCharge>() {
+ @Override
+ public int compare(C3mChargingCharge o1, C3mChargingCharge o2) {
+ int i = o2.getHour().compareTo(o1.getHour());
+ if(i == 0){
+ return o2.getMin().compareTo(o1.getMin());
+ }
+ return i;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return false;
+ }
+ });
+ // list缈昏浆
+ Collections.reverse(list);
+ // 鏃堕棿娈靛瓧绗︽嫾鎺�
+ for(int i=1;i<list.size();i++){
+ C3mChargingCharge pre = list.get(i - 1);
+ C3mChargingCharge now = list.get(i);
+ pre.setStrTime(
+ pre.getHour()+"鐐�"+pre.getMin()+"鍒� 鍒� "+
+ now.getHour()+"鐐�"+now.getMin()+"鍒�"
+ );
+ if(i==list.size()-1){
+ pre = now;
+ now = list.get(0);
+ if(now.getHour() < pre.getHour()){
+ pre.setStrTime(
+ pre.getHour() + "鐐�" + pre.getMin() + "鍒� 鍒� " +
+ "闅旀棩"+now.getHour() + "鐐�" + now.getMin() + "鍒�"
+ );
+ }else {
+ pre.setStrTime(
+ pre.getHour() + "鐐�" + pre.getMin() + "鍒� 鍒� " +
+ now.getHour() + "鐐�" + now.getMin() + "鍒�"
+ );
+ }
+ }
+ }
+ return list;
+
+ }
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mOrderService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mOrderService.java
new file mode 100644
index 0000000..23a1a8f
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mOrderService.java
@@ -0,0 +1,87 @@
+package com.sandu.ximon.admin.service;
+
+import com.sandu.common.service.impl.BaseServiceImpl;
+import com.sandu.common.third.pay.wx.WxFastPayService;
+import com.sandu.ximon.admin.utils.AliPayUtils;
+import com.sandu.ximon.dao.domain.C3mOrder;
+import com.sandu.ximon.dao.enums.OrderStatus;
+import com.sandu.ximon.dao.enums.OrderType;
+import com.sandu.ximon.dao.mapper.C3mOrderMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * @Author liuhaonan
+ * @Date 2022/3/10 14:24
+ * @Version 1.0
+ */
+@Service
+@AllArgsConstructor
+public class C3mOrderService extends BaseServiceImpl<C3mOrderMapper, C3mOrder> {
+
+ private final C3mOrderMapper c3mOrderMapper;
+ private final WxFastPayService fastPayService;
+
+ public boolean orderRefund(String outTradeNo, Double refundAmount, Long userId, String username) {
+ C3mOrder orderByOutTradeNo = c3mOrderMapper.getOrderByOutTradeNo(outTradeNo);
+ if (null == orderByOutTradeNo) {
+ return false;
+ } else {
+ orderByOutTradeNo.setRefundAmount(refundAmount);
+ return c3mOrderRefund(orderByOutTradeNo, "椤甸潰API閫�娆�", userId, username);
+ }
+
+
+ }
+
+
+ private boolean c3mOrderRefund(C3mOrder C3mOrder, String msg, Long userId, String username) {
+ // 杩涜閫�娆撅紝璁剧疆璁㈠崟鐘舵�佷负宸查��娆�
+ boolean b = false;
+ if (C3mOrder.getOrderType().equals(OrderType.ALIPAY.getCode())) {
+ b = AliPayUtils.alipayrefund(
+ C3mOrder.getPoleId(),
+ C3mOrder.getOutTradeNo(),
+ C3mOrder.getRefundAmount());
+ } else if (C3mOrder.getOrderType().equals(OrderType.WXPAY.getCode())) {
+ // 杩涜寰俊閫�娆�
+// b = WxPayUtils.getBean().wxRefund(
+// C3mOrder.getTotalAmount(),
+// C3mOrder.getRefundAmount(),
+// C3mOrder.getOutTradeNo(),
+// C3mOrder.getPoleId()
+// );
+ }
+ C3mOrder.setRefundTimestamp(new Date().getTime());
+ C3mOrder.setRefundMsg(msg);
+ if (b) {
+ C3mOrder.setOrderStatus(OrderStatus.REFUND.getStatus());
+ c3mOrderMapper.updateRefundOrder(C3mOrder);
+ /* logService.log(
+ userId,
+ ServerTask.SERVER_TASK,
+ "C3m璁㈠崟澶勭悊",
+ null,
+ "{ 鎿嶄綔鑰�("+username+")" +
+ "璁㈠崟閫�娆�: "+C3mOrder.getOutTradeNo()
+ +",璁㈠崟鎬婚噾棰�:"+C3mOrder.getTotalAmount()
+ +",閫�娆鹃噾棰�: "+C3mOrder.getTotalAmount()+"}");*/
+ return true;
+ } else {
+ C3mOrder.setOrderStatus(OrderStatus.REFUND_FAILED.getStatus());
+ c3mOrderMapper.updateRefundOrder(C3mOrder);
+ /* logService.log(
+ userId,
+ ServerTask.SERVER_TASK,
+ "C3m璁㈠崟澶勭悊",
+ null,
+ "{ 鎿嶄綔鑰�("+username+")" +
+ "璁㈠崟閫�娆�(澶辫触): "+C3mOrder.getOutTradeNo()
+ +",璁㈠崟鎬婚噾棰�:"+C3mOrder.getTotalAmount()
+ +",閫�娆鹃噾棰�: "+C3mOrder.getTotalAmount()+"}");*/
+ return false;
+ }
+ }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/AliPayUtils.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/AliPayUtils.java
new file mode 100644
index 0000000..6a98c18
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/AliPayUtils.java
@@ -0,0 +1,124 @@
+package com.sandu.ximon.admin.utils;
+
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.AlipayTradeRefundModel;
+import com.alipay.api.request.AlipayTradeQueryRequest;
+import com.alipay.api.request.AlipayTradeRefundRequest;
+import com.alipay.api.response.AlipayTradeRefundResponse;
+import com.google.gson.Gson;
+import com.sandu.ximon.admin.config.AlipayConfig;
+import com.sandu.ximon.admin.pay.alipay.UsrAlipayConfigService;
+import com.sandu.ximon.dao.domain.AlipayConfigEntity;
+import lombok.AllArgsConstructor;
+
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+@AllArgsConstructor
+public class AliPayUtils {
+
+
+ public static boolean alipayQuery(String out_trade_no, Long streetlightId) {
+ AlipayConfigEntity alipayConfigEntity = UsrAlipayConfigService.getBean().getConfigByPoleId(streetlightId);// 鑾峰彇瀹㈡埛鐨勬敮浠樺疂閰嶇疆
+ String checkStr = ConfigCheckUtils.checkAlipayConfig(alipayConfigEntity);
+ if( checkStr != null){
+ LogUtils.error("鏌ヨ澶辫触");
+ return false;
+ }
+ //鑾峰緱鍒濆鍖栫殑AlipayClient
+ AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,
+ alipayConfigEntity.getAppId(), alipayConfigEntity.getPrivateKey(),
+ AlipayConfig.format, AlipayConfig.charset, alipayConfigEntity.
+ getPublicKey(), AlipayConfig.sign_type);
+
+ //璁剧疆璇锋眰鍙傛暟
+ AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
+
+ //鍟嗘埛璁㈠崟鍙凤紝鍟嗘埛缃戠珯璁㈠崟绯荤粺涓敮涓�璁㈠崟鍙�
+ alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"}");
+
+ //璇锋眰
+ String result = null;
+ try {
+ result = alipayClient.execute(alipayRequest).getBody();
+ } catch (AlipayApiException e) {
+ e.printStackTrace();
+ }
+ Map map = (Map) new Gson().fromJson(result,Map.class).get("alipay_trade_query_response");
+ if (map.get("sub_msg") != null) {
+ if ("浜ゆ槗涓嶅瓨鍦�".equals(map.get("sub_msg"))) {
+ return false;
+ }
+ }
+ if(map.get("trade_status")==null){
+ return false;
+ }
+ if("TRADE_SUCCESS".equals(map.get("trade_status"))){
+// String payTime = (String) map.get("send_pay_date");
+ return true;
+ }else if("TRADE_CLOSED".equals(map.get("trade_status"))){
+ LogUtils.error("浜ゆ槗宸插叧闂�(鏀粯瀹�)");
+ return false;
+ }
+ return false;
+ }
+
+
+
+ /**
+ * 鏀粯瀹濋��娆炬帴鍙�
+ * @return
+ */
+ public static boolean alipayrefund(Long streetlightId,
+ String out_trade_no,
+ Double refundAmount) {
+ //LogService.getBean().log((long)0, ServerTask.SERVER_TASK,"閫�娆炬搷浣�",null,"{ 杩涜鏀粯瀹濋��娆�:"+out_trade_no+" }");
+ //閫�娆鹃噾棰濓紝涓嶈兘澶т簬璁㈠崟鎬婚噾棰�
+ String refund_amount = refundAmount+"";
+ //閫�娆剧殑鍘熷洜璇存槑
+ String refund_reason = "鍏呯數妗╅��娆�";
+ //鏍囪瘑涓�娆¢��娆捐姹傦紝鍚屼竴绗斾氦鏄撳娆¢��娆鹃渶瑕佷繚璇佸敮涓�锛屽闇�閮ㄥ垎閫�娆撅紝鍒欐鍙傛暟蹇呬紶銆�
+ String out_request_no = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
+
+ AlipayConfigEntity alipayConfigEntity = UsrAlipayConfigService.getBean().getConfigByPoleId(streetlightId); //鎵惧埌鏄摢涓鎴风殑鍏呯數妗� 灏遍��娆剧粰璋�
+ String checkStr = ConfigCheckUtils.checkAlipayConfig(alipayConfigEntity);
+ if( checkStr != null){
+ return false;
+ }
+
+ // SDK 鍏叡璇锋眰绫伙紝鍖呭惈鍏叡璇锋眰鍙傛暟锛屼互鍙婂皝瑁呬簡绛惧悕涓庨獙绛撅紝寮�鍙戣�呮棤闇�鍏虫敞绛惧悕涓庨獙绛�
+ AlipayClient client = new DefaultAlipayClient(AlipayConfig.gatewayUrl, alipayConfigEntity.getAppId(),
+ alipayConfigEntity.getPrivateKey(), AlipayConfig.format,
+ AlipayConfig.charset, alipayConfigEntity.getPublicKey(), AlipayConfig.sign_type);
+ AlipayTradeRefundRequest alipay_request = new AlipayTradeRefundRequest();
+ AlipayTradeRefundModel model = new AlipayTradeRefundModel();
+ model.setOutTradeNo(out_trade_no);
+// model.setTradeNo(out_trade_no);
+ model.setRefundAmount(refund_amount);
+ model.setRefundReason(refund_reason);
+ model.setOutRequestNo(out_request_no);
+ alipay_request.setBizModel(model);
+
+ AlipayTradeRefundResponse alipay_response = null;
+ try {
+ alipay_response = client.execute(alipay_request);
+ } catch (AlipayApiException e) {
+ e.printStackTrace();
+ }
+// System.out.println(alipay_response.getBody());
+ if("10000".equals(alipay_response.getCode())){
+ // 閫�娆炬垚鍔�
+ // LogService.getBean().log((long)0, ServerTask.SERVER_TASK,"閫�娆炬搷浣�",null,"{ 杩涜鏀粯瀹濋��娆�(鎴愬姛):"+out_trade_no+",閫�娆鹃噾棰�:"+refundAmount+" }");
+ return true;
+ }
+ //淇濆瓨閫�娆鹃噾棰濆拰閫�娆惧崟鍙凤紝灏嗚鍗曠姸鎬佺疆涓哄畬鎴愶紙RFERROR锛夛紝淇濆瓨鍒版暟鎹簱
+ // LogService.getBean().log((long)0, ServerTask.SERVER_TASK,"閫�娆炬搷浣�",null,"{ 杩涜鏀粯瀹濋��娆�(澶辫触):"+out_trade_no+",閫�娆鹃噾棰�:"+refundAmount+",reason: "+ JSON.toJSONString(alipay_response)+" }");
+ return false;
+ }
+
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/ConfigCheckUtils.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/ConfigCheckUtils.java
new file mode 100644
index 0000000..40297c4
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/ConfigCheckUtils.java
@@ -0,0 +1,18 @@
+package com.sandu.ximon.admin.utils;
+
+
+import com.sandu.ximon.dao.domain.AlipayConfigEntity;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ConfigCheckUtils {
+
+ public static String checkAlipayConfig(AlipayConfigEntity alipayConfigEntity) {
+ if(alipayConfigEntity == null) {
+ return "涓嬪崟澶辫触锛佽鑱旂郴绠$悊鍛樺鐞嗭紒閿欒鐮侊細100";
+ } else if (alipayConfigEntity.getAppId() == null || alipayConfigEntity.getPrivateKey() == null || alipayConfigEntity.getPublicKey() == null) {
+ return "涓嬪崟澶辫触锛佽鑱旂郴绠$悊鍛樺鐞嗭紒閿欒鐮侊細101";
+ }
+ return null;
+ }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/DateUtils.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/DateUtils.java
new file mode 100644
index 0000000..c8691eb
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/DateUtils.java
@@ -0,0 +1,260 @@
+package com.sandu.ximon.admin.utils;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import javax.validation.constraints.NotNull;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 鏃ユ湡澶勭悊
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class DateUtils {
+ /**
+ * 鏃堕棿鏍煎紡(yyyy-MM-dd)
+ */
+ public final static String DATE_PATTERN = "yyyy-MM-dd";
+ /**
+ * 鏃堕棿鏍煎紡(yyyy-MM-dd HH:mm:ss)
+ */
+ public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
+
+ public final static String ORDER_DATE = "yyyyMMddHHmmss";
+
+ public final static String DATE_TIME_SEC_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";
+
+
+ public static Date timestamp2DateTimePattern(Long timestamp) {
+ return stringToDate(timestamp + "", DATE_TIME_SEC_PATTERN);
+ }
+
+
+ /**
+ * 鏃ユ湡鏍煎紡鍖� 鏃ユ湡鏍煎紡涓猴細yyyy-MM-dd
+ *
+ * @param date 鏃ユ湡
+ * @return 杩斿洖yyyy-MM-dd鏍煎紡鏃ユ湡
+ */
+ public static String format(Date date) {
+ return format(date, DATE_PATTERN);
+ }
+
+ public static String orderFormat(Date date) {
+ return format(date, ORDER_DATE);
+ }
+
+ public static String dateFormat(Date date) {
+ return format(date, DATE_TIME_PATTERN);
+ }
+
+ public static String dateFormatSec(Date date) {
+ return format(date, DATE_TIME_SEC_PATTERN);
+ }
+
+
+ /**
+ * 鏃ユ湡鏍煎紡鍖� 鏃ユ湡鏍煎紡涓猴細yyyy-MM-dd
+ *
+ * @param date 鏃ユ湡
+ * @param pattern 鏍煎紡锛屽锛欴ateUtils.DATE_TIME_PATTERN
+ * @return 杩斿洖yyyy-MM-dd鏍煎紡鏃ユ湡
+ */
+ public static String format(Date date, String pattern) {
+ if (date != null) {
+ SimpleDateFormat df = new SimpleDateFormat(pattern);
+ return df.format(date);
+ }
+ return null;
+ }
+
+ /**
+ * 瀛楃涓茶浆鎹㈡垚鏃ユ湡
+ *
+ * @param strDate 鏃ユ湡瀛楃涓�
+ * @param pattern 鏃ユ湡鐨勬牸寮忥紝濡傦細DateUtils.DATE_TIME_PATTERN
+ */
+ public static Date stringToDate(String strDate, String pattern) {
+ if (StringUtils.isBlank(strDate)) {
+ return null;
+ }
+
+ DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
+ return fmt.parseLocalDateTime(strDate).toDate();
+ }
+
+ /**
+ * 鏍规嵁鍛ㄦ暟锛岃幏鍙栧紑濮嬫棩鏈熴�佺粨鏉熸棩鏈�
+ *
+ * @param week 鍛ㄦ湡 0鏈懆锛�-1涓婂懆锛�-2涓婁笂鍛紝1涓嬪懆锛�2涓嬩笅鍛�
+ * @return 杩斿洖date[0]寮�濮嬫棩鏈熴�乨ate[1]缁撴潫鏃ユ湡
+ */
+ public static Date[] getWeekStartAndEnd(int week) {
+ DateTime dateTime = new DateTime();
+ LocalDate date = new LocalDate(dateTime.plusWeeks(week));
+
+ date = date.dayOfWeek().withMinimumValue();
+ Date beginDate = date.toDate();
+ Date endDate = date.plusDays(6).toDate();
+ return new Date[]{beginDate, endDate};
+ }
+
+ /**
+ * 瀵规棩鏈熺殑銆愮銆戣繘琛屽姞/鍑�
+ *
+ * @param date 鏃ユ湡
+ * @param seconds 绉掓暟锛岃礋鏁颁负鍑�
+ * @return 鍔�/鍑忓嚑绉掑悗鐨勬棩鏈�
+ */
+ public static Date addDateSeconds(Date date, int seconds) {
+ DateTime dateTime = new DateTime(date);
+ return dateTime.plusSeconds(seconds).toDate();
+ }
+
+ /**
+ * 瀵规棩鏈熺殑銆愬垎閽熴�戣繘琛屽姞/鍑�
+ *
+ * @param date 鏃ユ湡
+ * @param minutes 鍒嗛挓鏁帮紝璐熸暟涓哄噺
+ * @return 鍔�/鍑忓嚑鍒嗛挓鍚庣殑鏃ユ湡
+ */
+ public static Date addDateMinutes(Date date, int minutes) {
+ DateTime dateTime = new DateTime(date);
+ return dateTime.plusMinutes(minutes).toDate();
+ }
+
+ /**
+ * 瀵规棩鏈熺殑銆愬皬鏃躲�戣繘琛屽姞/鍑�
+ *
+ * @param date 鏃ユ湡
+ * @param hours 灏忔椂鏁帮紝璐熸暟涓哄噺
+ * @return 鍔�/鍑忓嚑灏忔椂鍚庣殑鏃ユ湡
+ */
+ public static Date addDateHours(Date date, int hours) {
+ DateTime dateTime = new DateTime(date);
+ return dateTime.plusHours(hours).toDate();
+ }
+
+ /**
+ * 瀵规棩鏈熺殑銆愬ぉ銆戣繘琛屽姞/鍑�
+ *
+ * @param date 鏃ユ湡
+ * @param days 澶╂暟锛岃礋鏁颁负鍑�
+ * @return 鍔�/鍑忓嚑澶╁悗鐨勬棩鏈�
+ */
+ public static Date addDateDays(Date date, int days) {
+ DateTime dateTime = new DateTime(date);
+ return dateTime.plusDays(days).toDate();
+ }
+
+ /**
+ * 瀵规棩鏈熺殑銆愬懆銆戣繘琛屽姞/鍑�
+ *
+ * @param date 鏃ユ湡
+ * @param weeks 鍛ㄦ暟锛岃礋鏁颁负鍑�
+ * @return 鍔�/鍑忓嚑鍛ㄥ悗鐨勬棩鏈�
+ */
+ public static Date addDateWeeks(Date date, int weeks) {
+ DateTime dateTime = new DateTime(date);
+ return dateTime.plusWeeks(weeks).toDate();
+ }
+
+ /**
+ * 瀵规棩鏈熺殑銆愭湀銆戣繘琛屽姞/鍑�
+ *
+ * @param date 鏃ユ湡
+ * @param months 鏈堟暟锛岃礋鏁颁负鍑�
+ * @return 鍔�/鍑忓嚑鏈堝悗鐨勬棩鏈�
+ */
+ public static Date addDateMonths(Date date, int months) {
+ DateTime dateTime = new DateTime(date);
+ return dateTime.plusMonths(months).toDate();
+ }
+
+ /**
+ * 瀵规棩鏈熺殑銆愬勾銆戣繘琛屽姞/鍑�
+ *
+ * @param date 鏃ユ湡
+ * @param years 骞存暟锛岃礋鏁颁负鍑�
+ * @return 鍔�/鍑忓嚑骞村悗鐨勬棩鏈�
+ */
+ public static Date addDateYears(Date date, int years) {
+ DateTime dateTime = new DateTime(date);
+ return dateTime.plusYears(years).toDate();
+ }
+
+ /**
+ * 鑾峰彇涓や釜鏃堕棿澶╂暟宸�
+ *
+ * @param oDate
+ * @param nDate
+ * @return
+ */
+ public static Long betweenDateDay(@NotNull Date oDate, @NotNull Date nDate) {
+ return Long.valueOf((nDate.getTime() - nDate.getTime())) / (1000 * 60 * 60 * 24);
+ }
+
+ /**
+ * 鑾峰彇涓や釜鏃堕棿灏忔椂宸�
+ *
+ * @param oDate
+ * @param nDate
+ * @return
+ */
+ public static Long betweenDateHours(@NotNull Date oDate, @NotNull Date nDate) {
+ return Long.valueOf((nDate.getTime() - oDate.getTime())) / (1000 * 60 * 60);
+ }
+
+ /**
+ * 鑾峰彇鏈湀绗竴澶�
+ *
+ * @return
+ */
+ public static Date getMonthFirstDay() {
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(Calendar.DAY_OF_MONTH,
+ calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
+ return calendar.getTime();
+ }
+
+ /**
+ * 鑾峰彇鏈湀鏈�鍚庝竴澶�
+ *
+ * @return
+ */
+ public static Date getMonthLastDay() {
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(Calendar.DAY_OF_MONTH,
+ calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+ return calendar.getTime();
+ }
+
+ public static String toChineseDateStr(long ms) {
+ StringBuffer sb = new StringBuffer();
+ // 鑾峰彇鎬荤鏁�
+ Long sec = ms / 1000;
+ ms = ms % 1000;
+ String msStr = "";//SuppDataUtils.SuppData(ms+"",3);
+ // 绉掓暟澶т簬60鏃�
+ if (sec > 60) {
+ long min = sec / 60;
+ sec = sec % 60;
+ if (min > 60) {
+ long hour = min / 60;
+ min = min % 60;
+ sb.append(hour + "鏃�" + min + "鍒�" + sec + "." + msStr + "绉�");
+ } else {
+ sb.append(min + "鍒�" + sec + "." + msStr + "绉�");
+ }
+ } else {
+ sb.append(sec + "." + msStr + "绉�");
+ }
+ return sb.toString();
+ }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/OrderUtils.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/OrderUtils.java
new file mode 100644
index 0000000..5a27643
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/OrderUtils.java
@@ -0,0 +1,15 @@
+package com.sandu.ximon.admin.utils;
+
+import java.util.Date;
+import java.util.UUID;
+
+public class OrderUtils {
+
+ public static String generateOutTradeNo () {
+ String outTradeNo = DateUtils.orderFormat(new Date());
+ String uuid = UUID.randomUUID().toString().substring(0, 2);
+ outTradeNo = outTradeNo + uuid;
+ return outTradeNo;
+ }
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/vo/C3mOrderVO.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/vo/C3mOrderVO.java
new file mode 100644
index 0000000..a7428c9
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/vo/C3mOrderVO.java
@@ -0,0 +1,161 @@
+package com.sandu.ximon.admin.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.sandu.ximon.admin.utils.OrderUtils;
+import com.sandu.ximon.dao.domain.C3mOrder;
+import com.sandu.ximon.dao.enums.OrderStatus;
+import com.sandu.ximon.dao.enums.OrderType;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author liuhaonan
+ * @Date 2022/3/10 11:48
+ * @Version 1.0
+ */
+@Data
+public class C3mOrderVO extends C3mOrder{
+
+
+ public static String REQUEST_URL = "http://www.ximonsmart.com/charge/#/charge/";
+ /**
+ * 璁㈠崟ID
+ */
+ @TableId
+ private Long orderId;
+
+ /**
+ * 鐏潌ID
+ */
+ private Long poleId;
+
+ /**
+ * 鍏呯數妗㎝AC
+ */
+ private String c3Mac;
+
+ /**
+ * 瀵瑰簲鐨勭伅鏉嗚澶噈ac
+ */
+ private String poleMac;
+
+ /**
+ * 璁㈠崟鍟嗘埛鍙�
+ */
+ private String outTradeNo;
+
+ /**
+ * 璁㈠崟绫诲瀷(C3mOrderType)
+ */
+ private String orderType;
+
+ /**
+ * 璁㈠崟鎬婚噾棰�
+ */
+ private Double totalAmount;
+
+ /**
+ * 瀹炴敹閲戦
+ */
+ private Double receiptAmount;
+
+ /**
+ * 閫�娆�
+ */
+ private Double refundAmount;
+
+ /**
+ * 涔板甯愬彿(鏀粯瀹�)
+ */
+ private String aliBuyerLogonId;
+
+ /**
+ * 棰勭害鐢甸噺
+ */
+ private Integer subscribeChargingCapacity;
+
+ /**
+ * 瀹炲厖鐢甸噺
+ */
+ private Double actualChargingCapacity;
+
+ /**
+ * 璁㈠崟鍒涘缓鏃堕棿鎴�
+ */
+ private Long createTimestamp;
+
+ /**
+ * 璁㈠崟鏀粯鏃堕棿鎴�
+ */
+ private Long payTimestamp;
+
+ /**
+ * 璁㈠崟閫�娆炬椂闂存埑
+ */
+ private Long refundTimestamp;
+
+ /**
+ * 璁㈠崟閫�娆捐鏄�
+ */
+ private String refundMsg;
+
+ /**
+ * 寮�濮嬪厖鐢垫椂闂存埑
+ */
+ private Long startChargingTimestamp;
+
+ /**
+ * 缁撴潫鍏呯數鏃堕棿鎴�
+ */
+ private Long stopChargingTimestamp;
+
+ /**
+ * 璁㈠崟鐘舵�侊細// 鏈敮浠�(0)锛屽凡鏀粯(1),宸查��娆�(2),閫�娆句腑(3),閫�娆惧け璐�(4),璁㈠崟瀹屾垚(5)
+ */
+ private Integer orderStatus;
+
+ /**
+ * 鍏呯數妗╁悕绉�
+ */
+ private String c3Name;
+
+ /**
+ * 鐏潌鍚嶇О
+ */
+ private String poleName;
+
+ @TableField(exist = false)
+ private static final long serialVersionUID = 1L;
+ /**
+ * 鐢熸垚鏂拌鍗�
+ * @param c3Mac C3鐗╃悊鍦板潃
+ * @param orderType 璁㈠崟绫诲瀷
+ * @param totalAmount 鎬婚噾棰�
+ * @param subscribeChargingCapacity 棰勫厖鐢甸噺
+ */
+ public C3mOrder generateOrder(Long poleId, String poleMac, String c3Mac, OrderType orderType, Double totalAmount,
+ Integer subscribeChargingCapacity) {
+ this.poleId = poleId;
+ this.poleMac = poleMac;
+ this.orderId = -1L;
+ this.c3Mac = c3Mac;
+ this.outTradeNo = OrderUtils.generateOutTradeNo();
+ this.orderType = orderType.getCode();
+ this.totalAmount = totalAmount;
+ this.receiptAmount = 0d;
+ this.refundAmount = 0d;
+ this.aliBuyerLogonId = "";
+ this.subscribeChargingCapacity = subscribeChargingCapacity;
+ this.actualChargingCapacity = 0d;
+ this.createTimestamp = new Date().getTime();
+ this.payTimestamp = 0L;
+ this.startChargingTimestamp = 0L;
+ this.stopChargingTimestamp = 0L;
+ this.refundTimestamp = 0L;
+ this.refundMsg = "";
+ this.orderStatus = OrderStatus.NO_PAY.getStatus();
+ return this;
+ }
+}
--
Gitblit v1.9.3