diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/cwj/dto/CWJStationInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/cwj/dto/CWJStationInfo.java index dd26601e..128d7084 100644 --- a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/cwj/dto/CWJStationInfo.java +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/cwj/dto/CWJStationInfo.java @@ -34,6 +34,7 @@ import java.util.List; "StationLat", "Construction", "BusineHours", + "OvertimeFee", "ElectricityFee", "ServiceFee", "ParkFee", @@ -205,5 +206,7 @@ public class CWJStationInfo extends CommonStationInfo { // @JsonProperty("RoadInfo") // public String[] roadInfo; - + @Transient + @JsonProperty("OvertimeFee") + String OvertimeFee; } diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrderInfoResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrderInfoResponse.java index d5551f9c..f0df0d4d 100644 --- a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrderInfoResponse.java +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/ChargeOrderInfoResponse.java @@ -24,6 +24,10 @@ public class ChargeOrderInfoResponse { @JsonProperty("ConfirmResult") private Integer confirmResult; + @JsonProperty("ConfirmResultMessage") + private String confirmResultMessage; + + @JsonProperty("StartChargeSeq") public String getStartChargeSeq() { @@ -60,6 +64,17 @@ public class ChargeOrderInfoResponse { this.confirmResult = confirmResult; } + + @JsonProperty("ConfirmResultMessage") + public String getConfirmResultMessage() { + return confirmResultMessage; + } + + @JsonProperty("ConfirmResultMessage") + public void setConfirmResultMessage(String confirmResultMessage) { + this.confirmResultMessage = confirmResultMessage; + } + @JsonIgnore private Map additionalProperties = new HashMap(); @@ -75,12 +90,14 @@ public class ChargeOrderInfoResponse { this.additionalProperties.put(name, value); } + @Override public String toString() { return "ChargeOrderInfoResponse{" + "startChargeSeq='" + startChargeSeq + '\'' + ", connectorID='" + connectorID + '\'' + ", confirmResult=" + confirmResult + + ", confirmResultMessage='" + confirmResultMessage + '\'' + ", additionalProperties=" + additionalProperties + '}'; } diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/OccupancyOrderInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/OccupancyOrderInfo.java new file mode 100644 index 00000000..b5434197 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/OccupancyOrderInfo.java @@ -0,0 +1,62 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.Getter; +import lombok.Setter; +import org.apache.poi.hpsf.Decimal; + +import java.math.BigDecimal; + +/** + * 云快充占位费 + * + * @author yuyang + * @Date 2026-06-09 14:45 + */ +@JsonPropertyOrder({ + "OccupancyFeeCode", + "OccupancyStatus", + "StartChargeSeq", + "ConnectorID", + "StartTime", + "OccupancyFeeStartTime", + "EndTime", + "FreeDuration", + "OccupancyDuration", + "TotalOccupancyFee" +}) +@Setter +@Getter +public class OccupancyOrderInfo { + @JsonProperty("OccupancyFeeCode") + private String occupancyFeeCode; + + @JsonProperty("OccupancyStatus") + private Integer occupancyStatus; + + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + + @JsonProperty("ConnectorID") + private String connectorID; + + @JsonProperty("StartTime") + private String startTime; + + @JsonProperty("OccupancyFeeStartTime") + private String occupancyFeeStartTime; + + @JsonProperty("EndTime") + private String endTime; + + @JsonProperty("FreeDuration") + private Integer freeDuration; + + @JsonProperty("OccupancyDuration") + private Integer occupancyDuration; + + @JsonProperty("TotalOccupancyFee") + private BigDecimal totalOccupancyFee; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PlaceholderOrderInfo.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PlaceholderOrderInfo.java index cea88d51..0654e314 100644 --- a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PlaceholderOrderInfo.java +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/PlaceholderOrderInfo.java @@ -39,6 +39,8 @@ public class PlaceholderOrderInfo { private String timeEnd; @JsonProperty("HoldTime") private Integer holdTime; + @JsonProperty("OvertimePrice") + private Double overtimePrice; @JsonProperty("ActuallyPay") private Double actuallyPay; @JsonProperty("BillEquipment") diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenRequest.java index 07b5ae8c..f6e232e4 100644 --- a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenRequest.java +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/TokenRequest.java @@ -15,6 +15,7 @@ public class TokenRequest { @JsonProperty("OperatorID") private String operatorID; + @JsonProperty("OperatorSecret") private String operatorSecret; @JsonIgnore diff --git a/evcs-modules/evcs-core/pom.xml b/evcs-modules/evcs-core/pom.xml index 7daa9045..233da040 100644 --- a/evcs-modules/evcs-core/pom.xml +++ b/evcs-modules/evcs-core/pom.xml @@ -119,6 +119,12 @@ junit junit + + + com.alibaba + fastjson + 1.2.83 + 1.8 diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CheckChargeOrderController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CheckChargeOrderController.java index 7b8978ae..beb88ec5 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CheckChargeOrderController.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/CheckChargeOrderController.java @@ -111,52 +111,92 @@ public class CheckChargeOrderController { // String s = encryptReqOut("8LpncubmWiPCzY3V", "av6A8QdnRaVRMXu6", "Ut5UFdqDthiJyncU", commonRequest); // // -// - CommonRequest pageRequest = new CommonRequest<>(); - PageRequest pageRequest1 = new PageRequest(); - pageRequest1.setPageNo(1); - pageRequest1.setPageSize(20); - pageRequest1.setStationID("17"); -// CommonRequest commonRequest =new CommonRequest<>(); +// PageRequest pageRequest1 = new PageRequest(); +// pageRequest1.setPageNo(1); +// pageRequest1.setPageSize(20); +// String data = JSONUtil.toJSONString(pageRequest1); // -// XDTPlaceholderRules xdtPlaceholderRules = new XDTPlaceholderRules(); +// CommonRequest pageRequest = new CommonRequest<>(); // -// String [] stationIDs=new String[1]; -// stationIDs[0] ="4"; -// xdtPlaceholderRules.setStationIDs(stationIDs); - - String data = JSONUtil.toJSONString(pageRequest1); - pageRequest.setData(data); - pageRequest.setOperatorId("MA25CNM38"); - String dataYu = encryptReqOut("8LpncubmWiPCzY3V", "av6A8QdnRaVRMXu6", "wAeYIVQUwd0iGZsV", pageRequest); -// - System.out.println("=====加密====sss==============="+dataYu); +// pageRequest.setData(data); +// pageRequest.setOperatorId("MA1MY0GF9"); +// String dataYu = encryptReqOut("EOAVn9uGuUuLzfCq", "ruExy9reF1W1YVMj", "ww6FpuxoR1vAiGt8", pageRequest); +//// +// System.out.println("=====加密====sss==============="+dataYu); // CommonRequest commonRequestYu = new CommonRequest<>(); // TokenRequest tokenRequest = new TokenRequest(); -// tokenRequest.setOperatorId("MA7D6FPW6"); -// tokenRequest.setOperatorSecret("3bde18024f79bc00"); +// tokenRequest.setOperatorId("MA1MY0GF9"); +// tokenRequest.setOperatorSecret("2FYSvpUqBz6GydDc"); // String data1 = JSONUtil.toJSONString(tokenRequest); // commonRequestYu.setData(data1); -// commonRequestYu.setOperatorId("MA7D6FPW6"); -// -// String s = encryptReqOut("cf01fd70432aa15a", "4ad3dcd3430aaf86", "Ut5UFdqDthiJyncU", commonRequestYu); -// -// System.out.println("==========sss==============="+s); - - String date= "ywyEEd5aKPJOTraAY/gXBxX6qL9+xRX4dEBcxpmT1ylQ/2kIMRcIYozP9GR/DIYQqRm9a6/s5ZnVkjEHsOEbNdVUF00crSZfRIDHbfiDkQdLjJiBVuCU7b1lu5+QYR2CJzFfLIKZc9QYpt+/1PToDvzcbrvR4eLwSANt3H5sh+CSxnPjPhGaJNwOtQnMLLxOthBctkcW+aSF4O3s2KqnCvAB3O9OiQSLxfW1UZ0I0x0JvAMxY+Z4ncc4k16noCWCojVxFYQGITvXMH8ySQQ25A=="; - String s2 = decryptString(date, "8LpncubmWiPCzY3V", "av6A8QdnRaVRMXu6"); +// commonRequestYu.setOperatorId("MA1MY0GF9"); - System.out.println("===解密=======sss==============="+s2); +// +// CommonRequest chargeRequest = new CommonRequest<>(); +// +// StartChargeRequest cwjStartChargeRequest = new StartChargeRequest(); +// cwjStartChargeRequest.setStartChargeSeq("MA1MY0GF9202508061022122228"); +// cwjStartChargeRequest.setConnectorId("8083600090000201"); +// +// String data1 = JSONUtil.toJSONString(cwjStartChargeRequest); +// chargeRequest.setData(data1); +// chargeRequest.setOperatorId("MA1MY0GF9"); + + + + CommonRequest equipBizRequest = new CommonRequest<>(); + + XDTPlaceholderRules equipBizRequest1 = new XDTPlaceholderRules(); + String[] st =new String[1]; + st[0] = "2"; + equipBizRequest1.setStationIDs(st); + String data2 = JSONUtil.toJSONString(equipBizRequest1); + equipBizRequest.setData(data2); + equipBizRequest.setOperatorId("MA25CNM38"); + + +// CommonRequest chargeRequest1 = new CommonRequest<>(); +// +// StationStatusRequest stationStatusRequest = new StationStatusRequest(); +// String [] st ={"1"}; +// stationStatusRequest.setStationIds(st); +// String data2 = JSONUtil.toJSONString(stationStatusRequest); +// chargeRequest1.setData(data2); +// chargeRequest1.setOperatorId("MA1MY0GF9"); + + + CommonRequest chargeRequest1 = new CommonRequest<>(); + + CWJPageRequest cwjPageRequest = new CWJPageRequest(); + cwjPageRequest.setPageNo(1); + cwjPageRequest.setPageSize(10); + String data3 = JSONUtil.toJSONString(cwjPageRequest); + chargeRequest1.setData(data3); + chargeRequest1.setOperatorId("MA1MY0GF9"); + + + // + String s = encryptReqOut("EOAVn9uGuUuLzfCq", "ruExy9reF1W1YVMj", "ww6FpuxoR1vAiGt8", chargeRequest1); +// + System.out.println("==========sss==============="+s); + +// String date= "ywyEEd5aKPJOTraAY/gXBxX6qL9+xRX4dEBcxpmT1ylQ/2kIMRcIYozP9GR/DIYQqRm9a6/s5ZnVkjEHsOEbNdVUF00crSZfRIDHbfiDkQdLjJiBVuCU7b1lu5+QYR2CJzFfLIKZc9QYpt+/1PToDvzcbrvR4eLwSANt3H5sh+CSxnPjPhGaJNwOtQnMLLxOthBctkcW+aSF4O3s2KqnCvAB3O9OiQSLxfW1UZ0I0x0JvAMxY+Z4ncc4k16noCWCojVxFYQGITvXMH8ySQQ25A=="; +// String s2 = decryptString(date, "8LpncubmWiPCzY3V", "av6A8QdnRaVRMXu6"); // // -// String date3= "NR0oe4La+0SLizVoKCDfRtZ5onrODnoQGeOsnGKyZryrtzG0wbtOf/1ZrQpXh+si8Nxkkpy0WNzp5d51YCwqmtkmq9Cg9Lt5qsmlpQI6hXuiRAHga0ohWyixBhbL9ndDvPgnsfhXCiifhV4im3bTE6e4i0coMsLcJD0bAEO8FkiJz1KVmFSWgD4DeuFJFvCXRdm3tn4zky11X2xzymcn5/jQXukZlyvQaDz6aEF+4r6vQcON4hHX7fj3lGoK/4iedLNS+MK0uV98a2KiG15oCogZgoUkSPc46HdeAQJyRDmgiNo4JBemBv/oM5OCcjBJGC/tYITLwC29bDYvETESJBSRNHLOLn+TPAtQ5VHE5/CvLJOWsETcL6biOFsXbEfUwtQHN0CZZ3O+Zp9hhdG8ofW98hQn/CPBQHH6EvgZ9qoIzd6LzUKml6QFjBiLqdTTBmgFhjidKAe1uXAGc0t2mslKJj9AfbNl3UIkXaOCSReWQ4XRSn8BL/Jj6Y1WM8qNWGGwO47If8laGQdwWaV+mLvY3YllbRN1BrLYLihlt2SC/vKBESDra5Lp5jCK74m2hVm0DTYTBa9eyvGV0swplBeWVaq2yOqtJ27RTh4Fvfb1CZA9SjGjjJwi3NrPvJRwIzmdQK4xQSUkdNsPl50CNr0Tjz6wUvdYogpOjD+LP6XrJQ7Z+ndX/DICcF/updwNcDaqb5y1BNp9TcVdngig24Jn3gUEa61c+rSSHWZ+SbZjCc9mXAdejk49Nr85h5vJPM0c+pruvwfkF+TX0V5NM/OYnFKLdFz+yb2DT/vu+KFIgFs5Wno9jQBhH1HUXjCEiETaLle+3FPn/43PK9F33zWE5leH2xa5Rd+wiP/Dm6T+rqCGaCIpGgBmynfvpF4ooE8tEHAn//izNF1Nj8Pn1wR8F7qWufj+ssYuARqPZiRO/9oODE0DQxYcCIaTqCDfK8M0mObjHgYgaPCoHtDPkmUGRtFC1LLA4yM+DybQRdiBTtOGR2M55BWrkM80KxUkL2AUV8/ZjQmstVMcA8TCB0he/8YhFCxkze+r5DIxCZkB9Dmra1IfsM6NB2kGUmHW0Ws9PLDNehxKh5j/xqgqDbWE/h1yMW8Z/d3LxB0XTWEvr5teJzxzjwQRbSqUp8Cw9wonpaYOBcND31JR1v7nlqnJplfq75zXAlrpMy3hQucp5P/ed5gGCmwlMEHRRnSrkTodkz96s1g8XgNpIA/Q8HqCJ+urmAFEVn/ddZdRZQPMIc64Ci0OWCoCo2PNDW3qBg/5aF5sx+5bkb3Qy4RxgfOpaGgLiB2NeNF5EnvJ5HyXoF06LheC7JzOxOBAuJ9v3R/bs/AT/6zPDCmPyaNDtThGFaH60/FG/tYReDpQBF7NKsdZocTRq7vot5Z0ZIqyHhgLzqShbzRTtf/2Xk2SHrT4ci3trUANdEkyvyBoVhn8HCS88mZNpTmvrHXG1yX6igT2qcR6o2XiX0WmA8NovmJYvOWkPGmUHOTsMH9CMHauyr/i+DACsAaTHG/XvY03wMoUQt6so0aA6vjuRNyKIA1RO+IfnjnAu1OvLE2mPqHRM4Mjy+02E3zrJzb9PkgAGqr4nRR5eaan2nRHWvG7G30jsXDN2vPCMf5u9t0F/yHEVHjehEDKgd90i2xCpMtuFGdrId4dFyUUh75yDEll0NX8cBbW0VxrB5cOnC8bBEKkqUGVWLY8ZYlc0EMpfaJUXDZJyjjIcSYoNE3tZfuNkpfm4h6J0l0YF1UStJuLuUN/BbOkH8oOVcAv/J/k/I21ieYcHjUilyduWpStYzZgsASl8sBYJZiorNzGFNlgv0tAOi8QJFkIQCjopzOPoHa7xWJVyZfJ4T+rHhvgn43V6tj/HGqyMLLmaIYqde0ECzaqU2z2AFzJLchME3PqZcWZWaLd4DgmRTwZinM3PoNX2psUL4xk0M6VIGEsqUVqKZgSepj1w0GICEH8q35MNVYwLuSmd0IlRTeoTIzTCE9HeRBFpaAiOZOpvGYEBman7+GCPS9vQ4Pi23QIqXNrgItK0sOC8TgxCvez7CpjOoGaFjyn3PTmQZj0cv+f5lzZCsKLeVW0zqoA+BdlMqyrMxzCpOyCJ9rISFfzfkD6teU8IQ3rP+mCpcyp8Jjx25WPbwwO4sgr1MYyN41XatSZuPB8X5n65PvbsVrYz9ZMmvPrvQ7qybHtgSbmMFnothZHo72zdbxXlXXszHh8B17/kuAiRqCnshWI9qJFbAexU1G4dVLcrXQeKJw6yDS3J77M2DOanKZShd3io14pYoboxJWVIN17tnz4h4y7HY5FySlWXaYd1r8DYsi9nZA1t+zpRRwa5iy0ww7jOSdgubNaAFtU8qzvHLOqS8AQJYT6dM0xQL5rQUpnkqnydgDTGlmebjcWqwl8GSEhZgRfFuaO3ieQBiWKaBKMf8WZNTkxrZ3gstTY4G3DNQb8kjLyB9FSJsrbsyDsreI8JiuEjcq9tuKxy3WNx+7KkYvrUGm/PAuyJF69OeBnIzUgluX5KGRBTfEoGHz/j9NXQXarHIFiuWc+ZbA4JbSW2lJgxLY7Afyzr5AZ6arMZHXE0evy0pF8gsfHp5siv0nhDvLxX1+w8z3UdTbtCAWAXzRECRFAD35/RIliBS7UGQjAtvIy61spAmmso+1odYiDS99q0VaNhgK3Cr4IuMzpFUqPecVnBQpDg/ZqblN7pqKgpykkXjWthTRRsDjsQilcfgwwCTH4FG1c9o7Mo5uDacRIL/I0PLphtjfY2S43l5a3qXczRy4kI+K1EaFYEpFTYMZRQrQldRpDVzWGDjv+rqEHcRI7qq46M7rErDKz1NjzDMtBU4lZO8bI7B4cLiqxGfP7xunpJoAiRnJQhx/7EkhJ8KJyfsGamfGfvD23W7P4XvwbanFPJ6FntacaUkAY9o5quVJoWEG0kga2CbTD6q6oEfTBxP7cBqT4XDBKlPsNIkH84pLy6MRhT2D1xSd7FXMAL23GO1HyMlCy/KYd5XINVVrpS+U6dwc9lwcvyuse3f+94PfcoS6qICHFg7PpX145P6z+Z/Wq/M/xPIXoAk3f9XTF9fa9jgTV3IgsrXWba+3c7a47md1neG2oA4hi4vD3I7KRNo36Qv28U0jbn/xQ82w0kLugjhitW7obm3yl3Elc07lEw3/KCQJqdBx7IpE3z7Ny6onLgxICCki1EstZqgKj9/cYOjD34pjuLJa7YT1YJdi5N/WnI1NFlODM03mRzFjjf8hrd/tOd22RU46Nbl/KRy0XjdPOlKaYYCHdfGx24YLOfH1U7pLxpnf4ZjfczmcFkjz6OdgketP3gXVT+z8Zxw1WT0FAQC0P3eOb8AoCQw67pFq57GIaaDa1UKKaTVcv1IixywdkUP9Ar4aiaiNEKkPOEYukr35qe1QWe7wk+ueiXo9eabKM+9PgXSvOBEsCUrKn8ywEC/HWa5qI1HjZ6Cj2xgQckOM0hEEM/GPczQZFP/VH+lN4OT8HhkWIcFtpL81kWzoerRJp2vrAqd4Pex19xgKBtg+pfrTXqhI6iCnTeX8wSf6tUMBuQU9YXi1SSE82g5RFIe2OrMdiYQgd2+1LAUT1xfrXrtq99QPlPQwrmDfb1GP/oMk1RGSQTSwBSA7y9DKaOQgM6JF2j2mkMJbWiPB4KKJ01lUW1f0Frzo1CfO5jCxuhvEHVcHVC2x2zPznwzVzax4JX0r4Aw5XtLOsRZy/0id1uFDh3t+G2PmL9wzAnViczwk+lpw0Dy8VmycYvuLChl9E4EyfwdF/PtfodApHWi2SWCPlzneJWAW/ir6PSIdzyP08qFpf7hWUgNXP6NhdLKTw+NssbxULase9RB3IjWoYe6qIfBpy+3LlrwAA12sLo35CmH9XCRVa3rWNChbLn+f2X3ck4oDC/e6P2GwXp5yMTPo1M7Z8OzoKAyt6tXZBpqKdFsCj37a6ItFFNUteknE424AorH8kZnt0u8qCsyvXjlHQNdz7T2MSkNY3VMLNCTBq4vBCW61eCmD0CZHhzB33xXUV6lmBduD8ZHV3LBeRJDMHf4q8RLQLO1gv/zZw3kwu3qoibgBBXBVxaaWFXAOnnCzGY/KuEnBlqiC1YBuCE9+dW+DnqPSMiAHmfPWYtl78K/bHGvxSpBveq8caj+0o0MR54g4tHzCZiEplxH6tQwd5qacFq7A8ZvXs0j1SbBQIdUbG/CQb5feRji/2ngbFBmGpn4bK5QSevlHwaGaGVAgR/aoN4cBIN23m+LUP7mqVLDAdyoosa65iYGWzGf0Wx/xmIsMOrOgDQuJxh2427RBEMgLPjKvNvZAPNS0u3t4tFnG4KOQYUmQ96Cmz6xEizL2sCFdlC1ZXBZRepS30g2NoNKKLZnx6m8XrlQ77POHtYJEVghDc3zsMpmVXDZecERn6oJctkfnvaDFfx+J8t84plG4308+xOXB3spb2uWrJ+2OgYLbjk6Ni7v8CEuuWPfDhBgh+w6fTODiKB6KHRHD2pWSdm+Iirze/Ps5UWccqBGX84HhNL8TgABdET+BMeuxn+FOrpnGr2zPUT8csMYFmNUaqCl1RYub3wMj9lACbpvvF4JNV3EJ37VIXPr92i0r8vKEwP7uQo7eDlXIWAUuDYRiS51Xctlux2Qg7LxGZV6mMN56vO9UIFfs2P+RV6ReR9u1HpCv741VOt9RAwjxsZxe0S4BD6IPKy01naWem24U+3vsv7OD4qVarCtBtT+pos+owmDKch9WDJ8bkWQJ5sR/n5N1q7UwG6To1kAb9ZWTUo/46bUgcVBRJFRiFvOC9EOpbBIUyilMTQDN7GMQggxdVWwsGiHWNITukkzdx56fHmu5Ftul1D4CrxXzbNOIRtLl/1XpOiJtRWSxvh5hRAIQTQ4AbhCZ7FJp5ZTCMwXhIH70/MxTg2vJX7gCCV6xOFMa9DYBLzG+gfrV4qfQ7bU1YFCaKqo7Ef0zKftFTL7QsoJblLBwR3DzHUcn06e5+4IEvviVlmEfvbwKa+BYx3z0735nHlzvk1hUMiVQqVIrM6m32BjkruPIUM2w9oiYviTjHaN2Lr6S48W0osjKKD/mQlUitskZ4QSQI9lueK5FlIzlgKr2yHSiYxFSE8qhzuGGOmZ226d0ISoR+P5I6SY4b9kZnN/fb3Ik/rbsbSkE5WeVe+P3GKNonSRyDQUI1r4bDihIs+98GNZIajikrY5LP8Sjsdy8Ju09fEA0JgFq+H1tjoZSWdNiA27E6/XwskzdsAqbqvIYJv3462vG1vNXCNIT0mC3mckb+/SgOCV/SRsfx14zlWUzac7sQ1RpK3fMol6bNA8He1dAEFgKOxortiDkkDzBDClB2dCPTWzvGk50Wi5jetcBG+FqZHqSBjyWMWp2d5DNTlNjzdcR5Z36ZZQHoiMjJStFLz4z8azz/52qJu5Qw4k3MTBa0CXvXHG+xt/htlQeGjbKtFwbpNmwa9ohu4nFwCsC5Mmz8PQeoz/IYD0CE9ivLucxgkoMZyeiaRnkWuUzCZqhTlw91q7h0Ur3Bl7QdiLyfrhPJBatgLXq5lIvNEuSDUomlQNPkAXsbYLv0vjjpQ7dO5nOixT1KcxsDJtIn1lGVGN56PPSRbaemUCbbAymcEEjbNv4hm9XLeofnTxOjKa4f3Doc19sKbRwB3bGNKCnjeq+MPwdpx2abmPWArvqw+wxoJa5mjUTvJ61TM8uHWKN46U8XexdGEi3rcbYhOB/NWbvf0RCFtEMparCbjY+BgNnaw/vEooBc8xMG0BJTFsxKsC+/Pq3Oqby7rvGEhs67Zhmsi8o5XipKrwYFAyQP2RCvaQlPn0RaGFPdCXbSdBxepbkaak7AtSHTmi6Bod/7yK5jeVp0kJjExquuVMzISo4fNtZ/sCg8aMrmC6lQJduapq/jHGA6u844UEVxtQ8gFq0lkzwUXIw0ty5Mz3Jtw5sX0AG7NRgJiaLwMSjL+TjZAHFiJ6LkZWVZnHFfvI+i3neb7DIZsZl7hoz5txvoO8dU2osxspvFI5ynF0EurWrLKXEeoSYD00fqWGmoLFSUs60aCshq1UITOKC/+YZEsEHSSSxz4fMFYQnKqQs+GeIEnZMHxmdOcSDG0Q5qhPHKEESiKtms8Tm+/1W3zdjL3lnGxICvyR7D4ogbYUDGE5APpCr3OUdidBeB9pxIpPUazpj43AuUCR5fDHL6V4zXvcqzrMY/+xKVy5jGe60TWN8d1KAmS9pCSYMtcPTkgGvJgif0U/8NOdMwhZcx+UIucq3WmtDoo5uwaCMgiRA8tlHYgTRJ8st2uj2MV6fQlLgFnb3Q/hO7IPwjC393oyj8KzFMPSVA9lBV1vqssqwmSDQRE8Rlsto8g9mmg72rruPO0gXmGGaT0UGgoVmq/I9zKxQ6jKEH2VDRVp8qaOj7Hbn5oTX6zxk9TltlFCNjqnsoK2CXu/I/RcF0z+bXiFFqGr/9L7E3deVtwr4uxDXnLBxDr5qOo2CZxaSCJgQTVnBAfxtu0MUbue0GX/5tY/QfD3HCPvMItSjq9WYLcj9WviWcmZrHK0s9jyUu8HsvUazLA+/IqNJGXrPGdrmWh0yDCdGjJl5u8DyO2yGBk7GuL5Anse47Oznk8rQqRhCKRLBEVBSKMP1eVoGAm/kEIOUg9OmomdXnhrFFjbCcRCM/jvWMFsJXu3aEa4bF7TJC3lOH9G3VevPUX4CJG9fmq+b6nMtIvdh4Pa71LTLjqMGLnw+rdYoF7aGcBnwahnYZ/KO/TNZtJjiVfGYX4y/KSqv4YHe0FW8z35YgJ5j80NCOJo5u/dctJwODLFyl9ixx73yCI8qutVELWCED/vU7EML1sCvQPLWB4UXUJ9XPSXj+g8q6efuRAGji2pjmHj79BKJ7T/BebS0ryJysRWiW1Anp0HiSJUULaoaDEsJYRIwJvpGnKbsQRLVTfAHps81GMQj7f7GRce3VFLkY3xOwka8DOSc289YsJsBaG/cRZdBCnlsYjWXpibeNWpO0xJSZy/CUjTQQ/vClFQiNulW715YAtEc30I2INyfQuPEFCsFGua/nmo9SwLNDKeb1+/45gLRSqgP3ziVSLro1JJM0wPT57AqIjyTUkAjQvz2ahi4XB3KyiKSRZEwdd/qM0nJdWWZN7xRbREMSctADpUuUuLNuN3gZ31bufV8BSA87LXdrp4W1kSTpXAUQB4GaoJuAQxc2ebN6hFikVb8qKpjttYgmIE+yDEnt/35DEh0YoH5VwIDDr/s7bHbt1Ti3hiQKYiQBcWxiRXx4oIuI0lLNx7b6FvOKs5zYwTlzLv9TLFxwc2os4kYKr7GcEfUFd0CqRtD9npG9Dm6YoWvMh/q6xtMqor0pvJgkrc13W6tsX2L4Zve1oLWHDDJkpVwPsXb1dxmnWnqtZgp7XSNCuygvQyUL8nIqYc1IpTvOy29ZlNv+hNssaAqW/bTWbxUlJjLO1SF4RxiqYYFgDJH+KhWVtUKETI4Kyq07CEIIaychv5aFBCFfDaufUm5l5H+fJSUA39zaaVSL/VYQ1vOTxFCf2LLJcaBiSQtd2o01fYKQqcQGljkxMCArzEtObWm3xs4BGPwFr1zPSrHYBp/MQHr80kPpWAPl9chredjoOwiBrGCQuFp31BySF+fVlz0jP1iKFUIG3VGgzK4kMdulfp1VpdvJsIc2NA0ebcZ5hKXNa4eUiJt/yJUVQftPVug4zPqmcN/08ORZHjFVPSKrxoqUBK/s6alZDzu2LJUViBeUlNVXm8LA2GU/soS8QsYprPUwWJmNcbawIuY3bQWlMav94Xmgj1Bx0a9CHUwCcnz8aslUluMKWfDyplTuHGs/QA0ydi6c5GrNwrl1RiZA3FgvIn4a1/hqdSSr3X2I4UnrdkvF5unG0ZY/iNligoIVDxDtJ+ECgsh27tCxEviMrHjnKaNg8gaHhk62GOvxPLMmrgT9xLWZJc4kOPJ8y+9usqew6kI7GiQbhsruICFbHIDMJs3vpWgHrl98uDfQLddSwSmQu9JIU0yyNLnoptXM+aTAM1j/yrvFFG/VfpohPE/hmTbpnIGzCWjPrbqhfOdmZbCpSYqA80JWG4wE/oA6oLv01qY6hoVcQHwneq30f9Ja5HCFapN7V2+EjkKH2OjvycOFg4rDFGwSDctuIqWZn3+ThFvN6eMEHlcajXVAfrmnkq1rNHBSFJqLQSDL059JuD1GkRW/pmK3txsBL25Tv6SsLclZ9LVq00uLNJ5F8QRcVMQySIoWXMyXBLqNJKU64bv6wdlN7Cs2W/KPO66fyeGeHfYjy6+9T4XjO+jZ4ohYDxxuU83yJ1NXKSoNuR2XyLA4ml4ngTCO4TGPqDweL0UmeXxzEQjH3p/si5XV07GN5PMPtkKOXk5s2ie9rHWSs9j+mbMfmELx49fMyQ4iCtpWTTGgF5gzECgFN8Qlki5ri26LzR2Lfm8oyDUi4Mj1gYwUYzV/ZWcAlXZ0Rubg43kJTSgnmARLWGCHHC3CIaXCpNX50/BhOG+S4YH5nZK43wxkTUy6nqLTTf9zERiFJ5io5sNEyCK3bBrxJcEOPk0R/1aGRnM9nU0MwcYlV5ivI+P4uY3Lw43nJ4ZWnFdEXZZRqSUrVa2q/dK6ZhgB351q6pDVHmKyEGECzyAvDllSRfKv4GUzLRur+PCO6TXzJxFfbsKNg3CEvs71PtaV4iOYBWQpjNa0XtebQPyVaAhJRCAJDBfC4oz0dZx3QJp33rNwkqqjghZmNNNbVH3Nxszm/LiNWBgZXMKDZgwSlEnns4W0z/piRarcPNaiip/btY0tgTyXXS1a/c+40FWNPfxnD/vI5hcWvahiSkDlt8gSsIAZGQHvdB8j8MwxZHQgN2FY93KE4anj/h457r3BeP7l/lcN3lUrktEOilKMFauSkx8/ae86TU0GcfRTJRzEDNOX6BVJX1Wsy6yy2MOmnTNp4JjHrDfxLq1uwYQyOPnCt5aXnIccMy7Wb67AhDaPa1Mtrcqw2HUPFxv4W4Rg9HSXs/A9r1PVoL5m1nSUoZwVTeQQJNDMzVpFn6kZwPYMA8k5PzK11OQKpCmG6kjuALqR39cR8+CK1W0wQ/RpzE5huHUiivCiUhWd8NW58e5hNskkmEw8OutVP75a9x3brKpjhN8scLC8enlOIoH4LI+7jaCgjttPvduTZrdONNbVaeSkp3QfUjHZ7NsuK80tC7R9OA9MHbPttSZkVXod4VH0pcO1eB4NmKzWfAIKeOtfVR/0FcxMSIeaOuRylsLxjeJB"; -// String s3 = decryptString(date3, "ojs67l46z3f7rhok", "tet9swfkyojkhaos"); -// System.out.println("===解密=======sss3==============="+s3); +// System.out.println("===解密=======sss==============="+s2); +// +// + String date3= "QozR1HIMpMBoT9zTUV9Lyx6ayW7rDdBpEh8KT47490rDo2Zs+2nfup3PTiXO53he6dm8HGrvd3WYuNo2Inibwu1bpU79PMVPKt8mCvpsKH2Q6G8HT6IjC8FJRkdD3tjZv+kihGnpaGpc0jeiAdpm45NQr742K4SnK/EnjVUk427aZjzJTcYSjYunzPQm8/wG502akvZqpNoftTsEFdXsUrpKT+ERJXSTlxR3ua/UlDVzIxkp6FSU9MaQkoKJP+DNs02Rx3MLK9RAewdQ51lPAPlyDWaButvjiRRyRfr3JHXoDOitdglmwmVce2BbaEO5fv7ViWAGQKPOof2iB3VkJJ3guFNr0y/v5Ox+nTe/xWnE7efI5+9AVb9occDzxc/eS5rgqJycwXejLr8qfFs9FHOz5ZMiV0m6WajBRrHyljJ08kHo90O1yWNsHK0GfT+upK1VTgFV03i3lTKyP2WDJhGd4Cwbb+rS9DnwXfLtvpzDPvQtl91dM/vHU27KaNMar2xcXtjsEuHzH9hWKO7eu/i5hOepwHrlWXGcvIsqIN+tMhQAkdKh6qZZxFe2jJvL/GAtiesNx6gADV9cx+j1U1n7cWC1B45lprICC3yWVYbP6kKH1Dm7QjUiI872SWJT7T57jwOe49aNU2/YSWO7KWbMetzXEZapUlrOVQyqi4PkZHe0xY4P92N887g31wNZ/1jsi9thhlAj1Qr3qnyeitFbNevMTI1ns7z7CjRKH62SkujzIeg8/lyeJeWPp01BthYNuLfvVR7vJaBf56tO16TwJ99VeQfboKn5g93c8kcR5ttPEdujm7o5g55utIMspoLCqHjutyQBlpqOwE/rfBfy2xD8xoX1pKbpuduQFuf6rObpOwZ5sVB0Fq7NxIbx4tYvDFTNG+5+uGdJbpc3EGnIyZgCajsCue0J40d9pk0zB2DvjB9DGRbUd2KYxckIRpbHayVlGLgYE9zHXDH7cccOzUVzI8Ig1poYT8dmLqNMi/wVysIpFmcXNT0UUbxHUmHu3XqQE0WibK6I8VIzW1amG29emmAn8WX4OaW6iOdZ5MExYZxlOV67Zc26fkSjx3mxCZ+jmCrX8He8+mev3oF5tau96lH3aMcD/XOuti6IVW6XEiR0BTLp9dgCqvhEv66uJkXy1h/xYC3rV9NfrA3++bNZ6drAlTygp2izj+LwZAPq5AG9y5EqzC6a603mIdhIBgOQoT9EC4tLuqju5YpiTsa8+xzPjJFTZN91bCmk4e53vOKjDkb7Qn5qhh0pR8pbo+EGi0908s7NFQXuUfhQHXu8WHvUukyOfc1ej4Tx4+fMHTzHllC4GB8omZz57FTa6fP5NaCQ5qXhQ1UyI96/D1z3Qa19u2og+DLfIdb+0KKWDIqyI0w5DTzMquiUYnN1Y4Ne5gKzeeIY7gvRFQIRGF0zIRs5Q4IaBGsk4UvFRff7Zwqp+izgmoKLPFulBbC2QfETG5HBxgekPJwvVkUpiSMHrjQjvKoMUiXIBXoiNyrEgpmm8OIsdDO6+wiriSvqN1F9ie1Qnf5iGj9n50eti/9zo8K5E9YNykVGCSsXju4Hz3xq+i0a7FEkKTUHQXuG1E3aTv6Z039tz69MbDSCEyyy4f9GzuyH1WSaedICClUxjp6tEvChtVEHnqTwvT+aE/dIhch/ZFYHyLvwdUF1dII6r6TwWw54dWs49Fcq1S1mp9mZwu4QN1U0mju0"; + String s2 = decryptString(date3, "EOAVn9uGuUuLzfCq", "ruExy9reF1W1YVMj"); + + System.out.println("===解密=======sss3==============="+s2); + }catch (Exception e){ diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipBusinessPolicyController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipBusinessPolicyController.java index 1d715495..a552d7dd 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipBusinessPolicyController.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipBusinessPolicyController.java @@ -95,24 +95,13 @@ public class QueryEquipBusinessPolicyController extends BaseController { ArrayList timeList = new ArrayList<>(); //放入必有初始时间 timeList.add(initTime); - //根据出现的时段个数确定他们的时间区间,然后存放至List集合中 + int cumulativeHalfHours = 0; for (int i = 0; i < modelCount.size() - 1; i++) { - if (temp != -1) { - Integer integer = modelCount.get(i); - int hours = integer / 2; - temp = temp + hours; - String hoursStr = String.format("%02d", temp); - String finalTime = hoursStr + "0000"; - timeList.add(finalTime); - } else { - Integer integer = modelCount.get(i); - int hours = integer / 2; - //记录中间时间 - temp = hours; - String hoursStr = String.format("%02d", temp); - String finalTime = hoursStr + "0000"; - timeList.add(finalTime); - } + cumulativeHalfHours += modelCount.get(i); + int hour = cumulativeHalfHours / 2; + int minute = (cumulativeHalfHours % 2) * 30; + String startTime = String.format("%02d%02d%02d", hour, minute, 0); + timeList.add(startTime); } policyInfosArr = new PolicyInfos[timeList.size()]; for (int i = 0; i <= timeList.size() - 1; i++) { diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryPlaceholderRulesController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryPlaceholderRulesController.java index de86eff0..e0e18bcb 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryPlaceholderRulesController.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryPlaceholderRulesController.java @@ -76,7 +76,7 @@ public class QueryPlaceholderRulesController { String endTime = DateUtil.format(xhpcPlacreholder.getEndTime(), "yyyy.MM.dd HH:mm:ss"); placeholderRulesXinDianTu.setEffectStartTime(startTime); placeholderRulesXinDianTu.setEffectEndTime(endTime); - placeholderRulesXinDianTu.setStatus(xhpcPlacreholder.getStatus()); + placeholderRulesXinDianTu.setStatus(xhpcPlacreholder.getType()); placeholderRulesXinDianTu.setFreeTime(xhpcPlacreholder.getFreeTime()); placeholderRulesXinDianTu.setMaxFee(xhpcPlacreholder.getMaxFee().doubleValue()); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationsInfoController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationsInfoController.java index 176630c6..7a6bc67b 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationsInfoController.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationsInfoController.java @@ -382,7 +382,7 @@ public class QueryStationsInfoController { } Long chargingStationId =Long.valueOf(stationInfo.getStationId()); //获取占位信息 - XhpcPlacreholder xhpcPlacreholder = placeholderIRepository.findByStatusAndChargingStationIdAndDelFlag(1,chargingStationId, 0); + XhpcPlacreholder xhpcPlacreholder = placeholderIRepository.findByTypeAndChargingStationIdAndDelFlag(1,chargingStationId, 0); if(xhpcPlacreholder !=null){ stationInfo.setIncrementExplain(xhpcPlacreholder.getContent()); } diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java index 6761675d..9979b24a 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java @@ -298,4 +298,73 @@ public class QueryTokenController { System.out.println("========/v40/query_token==============="+resp.toString()); return resp; } + + + /** + * 用于平台之间认证Token的申请 + * @param encout + * @param tokenRequest + * @return + * @throws IOException + */ + @PostMapping("/v50/query_token") + public CommonResponse queryTokenV50(@RequestHeader(value = "enc.out", defaultValue = "true") String encout, + @RequestBody TokenRequest tokenRequest) throws IOException { + + log.debug("< realtimeOrder = REDIS.keys("cdjgpc:realTime:*"); for (String okey : realtimeOrder) { @@ -55,17 +57,31 @@ public class CDConnectorChargeStatusInfoTask extends CoreDispatcher { } } } - + /** + * 清除7天前数据 + * 实时数据没40秒 + */ + //@Scheduled(fixedDelay = 1000 * 60) + public void runS() throws Exception{ + Collection realtimeOrder = REDIS.keys("RealtimeOrder:*"); + for (String okey : realtimeOrder) { + String orderNo = REDIS.getCacheObject(okey); + String format = DateUtil.format(DateUtil.offsetDay(new Date(),-7), "yyMMdd"); + if(Integer.parseInt(format)>Integer.parseInt(orderNo.substring(16,22))){ + REDIS.deleteObject(okey); + } + } + } //9099开放定时任务 9009不开放 /** * 清除5天前数据 * 实时数据没40秒 */ - @Scheduled(fixedDelay = 1000 * 120) + //@Scheduled(fixedDelay = 1000 * 120) public void runYu() throws Exception{ Collection realtimeOrder = REDIS.keys("orderOutpu:*"); for (String okey : realtimeOrder) { - String format = DateUtil.format(DateUtil.offsetDay(new Date(),-7), "yyMMdd"); + String format = DateUtil.format(DateUtil.offsetDay(new Date(),-30), "yyMMdd"); if(Integer.parseInt(format)>Integer.parseInt(okey.substring(28,33))){ REDIS.deleteObject(okey); } @@ -73,12 +89,46 @@ public class CDConnectorChargeStatusInfoTask extends CoreDispatcher { } + //9099开放定时任务 9009不开放 + //@Scheduled(fixedDelay = 1000 * 120) + public void runYu1() throws Exception{ + Collection realtimeOrder = REDIS.keys("Yu80836000*"); + for (String okey : realtimeOrder) { + String format = DateUtil.format(DateUtil.offsetDay(new Date(),-30), "yyMMdd"); + if(Integer.parseInt(format)>Integer.parseInt(okey.substring(18,24))){ + REDIS.deleteObject(okey); + } + } + } + + //9099开放定时任务 9009不开放 + //@Scheduled(fixedDelay = 1000 * 120) + public void orderKeys() throws Exception{ + Collection orderKeys = REDIS.keys("order:*"); + Instant now = Instant.now(); + for (String okey : orderKeys) { + String orderNo = okey.substring(6); + if(orderNo.length() < 32){ + logger.error("orderNo[{}] is error", orderNo); + continue; + } + Date otime = com.xhpc.evcs.utils.DateUtil.orderNo2Date(orderNo); + if (Duration.between(otime.toInstant(), now).toHours() > 24 * 30) { + REDIS.deleteObject(okey); + REDIS.deleteObject(okey.replace("order", "pushOrder")); + logger.info("clear cache..{}", okey); + } + } + } + + + //9099开放定时任务 9009不开放 /** * 设备充电中状态变化推送(我们平台推送成都市平台) --已推送 * 实时数据没40秒 */ - @Scheduled(fixedDelay = 1000 * 40) + //@Scheduled(fixedDelay = 1000 * 120) public void run() throws Exception{ List longList =new ArrayList<>(); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationChargeOrderInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationChargeOrderInfoTask.java index 1f8106f0..956d0bc6 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationChargeOrderInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationChargeOrderInfoTask.java @@ -18,6 +18,7 @@ import com.xhpc.evcs.utils.JSONUtil; import com.xhpc.order.domain.XhpcHistoryOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -31,7 +32,7 @@ import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; /** - * 推送充电订单信息 + * 成都城投能源投资管理集团有限公司推送充电订单信息 * @author yuyang * @date 2023-09-24 19:27 */ @@ -47,25 +48,9 @@ public class CDNotificationChargeOrderInfoTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(NotificationChargeOrderInfoTask.class); //9099开放定时任务 9009不开放 - @Scheduled(fixedRate = 1000 * 15) + //@Scheduled(fixedRate = 1000 * 60) public void run() throws JsonProcessingException { - Collection orderKeys = REDIS.keys("order:*"); - Instant now = Instant.now(); - for (String okey : orderKeys) { - String orderNo = okey.substring(6); - if(orderNo.length() < 32){ - logger.error("orderNo[{}] is error", orderNo); - continue; - } - - Date otime = DateUtil.orderNo2Date(orderNo); - if (Duration.between(otime.toInstant(), now).toHours() > 24 * 14) { - REDIS.deleteObject(okey); - REDIS.deleteObject(okey.replace("order", "pushOrder")); - logger.info("clear cache..{}", okey); - } - } List authSecretTokenList = authSecretTokenRepository.findBySecretTokenType(SECRET_TOKEN_TYPE_OUT); List xhpcHistoryOrderList = xhpcHistoryOrderRepository.findByConfirmResultNotAndSource(0, 1); @@ -87,7 +72,9 @@ public class CDNotificationChargeOrderInfoTask extends CoreDispatcher { chargeOrderInfo.setChargeModel(null); if(new BigDecimal(0).compareTo(horder.getTotalPrice())<0){ - chargeOrderInfo = calculateEmYu(horder,chargeOrderInfo); + XhpcHistoryOrder horder1 =new XhpcHistoryOrder(); + BeanUtils.copyProperties(horder,horder1); + chargeOrderInfo = calculateEmYu(horder1,chargeOrderInfo); } logger.info("==========开始推送====推送返回值============calculateEmYu====="); final ChargeOrderInfoResponse pushResp = notify(chargeOrderInfo, authSecretToken); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationEquipmentV2GPowerInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationEquipmentV2GPowerInfoTask.java index d8099f69..6f7be013 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationEquipmentV2GPowerInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationEquipmentV2GPowerInfoTask.java @@ -45,7 +45,7 @@ public class CDNotificationEquipmentV2GPowerInfoTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(CDNotificationEquipmentV2GPowerInfoTask.class); - //9099开放定时任务 9009不开放 + //不推送 //@Scheduled(cron = "0 0/1 * * * ? ") public void run() throws IOException { //不参与合作的电站 diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationOrderInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationOrderInfoTask.java index 015309f6..bf8c2f33 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationOrderInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationOrderInfoTask.java @@ -36,7 +36,7 @@ import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; /** - * 订单信息推送 + * 成都城投能源投资管理集团有限公司 订单信息推送 * @author yuyang * @date 2023-09-20 9:34 */ @@ -67,7 +67,7 @@ public class CDNotificationOrderInfoTask extends CoreDispatcher { */ //9099开放定时任务 9009不开放 @GetMapping("/infoTask") - @Scheduled(fixedRate = 1000 * 30) + //@Scheduled(fixedRate = 1000 * 30) public void run() throws IOException { AuthSecretToken authSecretTokenOut = authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType( diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationFeeTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationFeeTask.java index 3ccbb47f..91c7d0a8 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationFeeTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationFeeTask.java @@ -22,6 +22,9 @@ import java.util.Map; import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; +/** + * 成都城投能源投资管理集团有限公司 推送费率 + */ @Component @Slf4j public class CDNotificationStationFeeTask extends CoreDispatcher { @@ -31,7 +34,7 @@ public class CDNotificationStationFeeTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(CDNotificationStationFeeTask.class); //9099开放定时任务 9009不开放 - @Scheduled(fixedDelay = 1000 * 60) + //@Scheduled(fixedDelay = 1000 * 60) public void run() throws IOException { AuthSecretToken authSecretTokenOut = diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationInfoTask.java index e275c5f8..e49b7955 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationInfoTask.java @@ -22,6 +22,9 @@ import java.util.*; import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; +/** + * 成都城投能源投资管理集团有限公司 推送场站信息 + */ public class CDNotificationStationInfoTask extends CoreDispatcher { @@ -32,7 +35,7 @@ public class CDNotificationStationInfoTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(CDNotificationStationInfoTask.class); //9099开放定时任务 9009不开放 - @Scheduled(cron = "0 20 0 1/1 * ? ") + //@Scheduled(cron = "0 20 0 1/1 * ? ") public void run() throws IOException { try{ List xhpcStationInternetBlacklist = diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationPowerInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationPowerInfoTask.java index a26ffa04..0b1f0bc8 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationPowerInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationPowerInfoTask.java @@ -45,7 +45,7 @@ public class CDNotificationStationPowerInfoTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(CDNotificationStationPowerInfoTask.class); - //9099开放定时任务 9009不开放 + //不推送 //@Scheduled(cron = "0 0/1 * * * ? ") public void run() throws IOException { //不参与合作的电站 diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationStatusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationStatusTask.java index 4ec6f251..f911cedf 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationStatusTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDNotificationStationStatusTask.java @@ -34,7 +34,7 @@ import static com.xhpc.evcs.dto.ConnectorStatusInfo.*; import static com.xhpc.evcs.dto.ConnectorStatusInfo.CHARGING; /** - * 设备状态变化推送 --已推送 + * 成都城投能源投资管理集团有限公司 设备状态变化推送 --已推送 * @author yuyang * @date 2023-10-07 10:32 */ @@ -49,8 +49,9 @@ public class CDNotificationStationStatusTask extends CoreDispatcher { private XhpcStationInternetBlacklistRepository xhpcStationInternetBlacklistRepo; @Resource private XhpcTerminalRepository terminalRepository; - //都开放 - @Scheduled(fixedRate = 1000 * 180) + + //9099开放定时任务 9009不开放 + //@Scheduled(fixedRate = 1000 * 180) protected void run() throws IOException { Collection stationTerminalKeys = REDIS.keys("stationTerminalStatus:*"); @@ -109,6 +110,8 @@ public class CDNotificationStationStatusTask extends CoreDispatcher { return FREE; case "离线": return OFF_LINE; + case "插枪": + return CONNECTED; case "故障": return ERROR; default: diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDSuperviseNotificationOperationStatusInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDSuperviseNotificationOperationStatusInfoTask.java index 97f9fc30..60bdd713 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDSuperviseNotificationOperationStatusInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDSuperviseNotificationOperationStatusInfoTask.java @@ -42,7 +42,7 @@ public class CDSuperviseNotificationOperationStatusInfoTask extends CoreDispatch private final Logger logger = LoggerFactory.getLogger(CDSuperviseNotificationOperationStatusInfoTask.class); - //9099开放定时任务 9009不开放 + //不推送 //@Scheduled(cron = "0 0 0 * * ? ") //@Scheduled(fixedRate = 1000 * 45) protected void run() throws IOException { diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDSuperviseNotificationRealtimePowerInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDSuperviseNotificationRealtimePowerInfoTask.java index 715a1dc2..067a0283 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDSuperviseNotificationRealtimePowerInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cdjgpc/notification/CDSuperviseNotificationRealtimePowerInfoTask.java @@ -41,7 +41,7 @@ public class CDSuperviseNotificationRealtimePowerInfoTask extends CoreDispatcher PowerPileService powerPileService; private final Logger logger = LoggerFactory.getLogger(CDSuperviseNotificationOperationStatusInfoTask.class); - //9099开放定时任务 9009不开放 + //不推送 //@Scheduled(cron = "0 0/15 * * * ? ") protected void run() throws IOException { String replace = UUID.randomUUID().toString().replace("-", ""); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java index 7c8507ec..a94ce91e 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java @@ -46,8 +46,8 @@ import java.util.*; @Slf4j //@Component //spring boot way, see https://www.surasint.com/spring-boot-webfilter-instead-of-component/ //@Order(1) not supported, see https://github.com/spring-projects/spring-boot/issues/8276 -//成都市监管平台(蓉成充)v10 v20 川逸充 v30 v40车为家 -@WebFilter(urlPatterns = {"/v1/*", "/v2/*", "/v10/*", "/v20/*", "/v30/*", "/v40/*"}, filterName = "v1n10filter") //multiple filters execute by filterName order +//成都市监管平台(蓉成充)v10 v20 川逸充 v30 v40车为家 v50云快充 +@WebFilter(urlPatterns = {"/v1/*", "/v2/*", "/v10/*", "/v20/*", "/v30/*", "/v40/*", "/v50/*"}, filterName = "v1n10filter") //multiple filters execute by filterName order public class EvcsFilter extends OncePerRequestFilter { @Resource @@ -117,6 +117,9 @@ public class EvcsFilter extends OncePerRequestFilter { }else if (servletPath.endsWith("/v40/query_token")) { authSecretTokenIn = authSecretTokenRepository.findByStatusAndOperatorId3irdptyAndSecretTokenType(4,operatorId,AuthSecretToken.SECRET_TOKEN_TYPE_IN).orElse(null); handleQueryToken(request, response, chain, requestWrapper, bodyString, commonRequest,responseWrapper, authSecretTokenIn); + }else if (servletPath.endsWith("/v50/query_token")) { + authSecretTokenIn = authSecretTokenRepository.findByStatusAndOperatorId3irdptyAndSecretTokenType(5,operatorId,AuthSecretToken.SECRET_TOKEN_TYPE_IN).orElse(null); + handleQueryToken(request, response, chain, requestWrapper, bodyString, commonRequest,responseWrapper, authSecretTokenIn); } else { if (authorization != null && authorization.startsWith("Bearer ")) { String token = authorization.replace("Bearer ", ""); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/api/CWJQueryEquipBusinessPolicyController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/api/CWJQueryEquipBusinessPolicyController.java index 93466927..6001aaaa 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/api/CWJQueryEquipBusinessPolicyController.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/api/CWJQueryEquipBusinessPolicyController.java @@ -97,24 +97,14 @@ public class CWJQueryEquipBusinessPolicyController { ArrayList timeList = new ArrayList<>(); //放入必有初始时间 timeList.add(initTime); + int cumulativeHalfHours = 0; //根据出现的时段个数确定他们的时间区间,然后存放至List集合中 for (int i = 0; i < modelCount.size() - 1; i++) { - if (temp != -1) { - Integer integer = modelCount.get(i); - int hours = integer / 2; - temp = temp + hours; - String hoursStr = String.format("%02d", temp); - String finalTime = hoursStr + "0000"; - timeList.add(finalTime); - } else { - Integer integer = modelCount.get(i); - int hours = integer / 2; - //记录中间时间 - temp = hours; - String hoursStr = String.format("%02d", temp); - String finalTime = hoursStr + "0000"; - timeList.add(finalTime); - } + cumulativeHalfHours += modelCount.get(i); + int hour = cumulativeHalfHours / 2; + int minute = (cumulativeHalfHours % 2) * 30; + String startTime = String.format("%02d%02d%02d", hour, minute, 0); + timeList.add(startTime); } policyInfosArr = new PolicyInfos[timeList.size()]; for (int i = 0; i <= timeList.size() - 1; i++) { diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/notification/CWJNotificationEquipChargeStatusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/notification/CWJNotificationEquipChargeStatusTask.java index 31fdd898..45ece341 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/notification/CWJNotificationEquipChargeStatusTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/notification/CWJNotificationEquipChargeStatusTask.java @@ -54,14 +54,12 @@ public class CWJNotificationEquipChargeStatusTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(NotificationEquipChargeStatusTask.class); /** - * 推送充电状态(evcs 放开) + * 推送充电状态 * @throws IOException */ //都开放 - //9009开放定时任务 9099不开放 - @Scheduled(fixedRate = 1000 * 30) + @Scheduled(fixedRate = 1000 * 40) public void run() throws IOException { - AuthSecretToken authSecretToken =authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType("MA7D6FPW6", "MA6DFCTD5", SECRET_TOKEN_TYPE_OUT).orElse(null); final Collection gunkeys = REDIS.keys("gun:*"); for (String gunkey : gunkeys) { diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/notification/CWJNotificationStationStatusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/notification/CWJNotificationStationStatusTask.java index bdc9afc7..25426ae4 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/notification/CWJNotificationStationStatusTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/cwj/notification/CWJNotificationStationStatusTask.java @@ -51,8 +51,8 @@ public class CWJNotificationStationStatusTask extends CoreDispatcher { private XhpcStationInternetBlacklistRepository xhpcStationInternetBlacklistRepo; @Resource private XhpcTerminalRepository terminalRepository; - //9009开放定时任务 9099不开放 - @Scheduled(fixedRate = 1000 * 60) + //9099开放定时任务 9009不开放 + //@Scheduled(fixedRate = 1000 * 60) protected void run() throws IOException { Collection stationTerminalKeys = REDIS.keys("stationTerminalStatus:*"); @@ -113,6 +113,8 @@ public class CWJNotificationStationStatusTask extends CoreDispatcher { return FREE; case "离线": return OFF_LINE; + case "插枪": + return CONNECTED; case "故障": return ERROR; default: diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/PlaceholderIOrderRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/PlaceholderIOrderRepository.java index e4370d90..d64263cb 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/PlaceholderIOrderRepository.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/PlaceholderIOrderRepository.java @@ -36,5 +36,7 @@ public interface PlaceholderIOrderRepository extends JpaRepository, QueryByExampleExecutor, JpaSpecificationExecutor, PagingAndSortingRepository { + XhpcHistoryOrder findBySerialNumber(String serialNumber); + List findTop100ByHistoryOrderIdGreaterThanAndStateGreaterThanOrderByHistoryOrderIdAsc(Long hisOrderId, int i); List findTop100ByHistoryOrderIdGreaterThanEqualAndConfirmResultAndUserIdOrderByHistoryOrderIdAsc(Long hisOrderId,int confirmResult, Long userId); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationCancelOrderTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationCancelOrderTask.java index 31121c5c..db485042 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationCancelOrderTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationCancelOrderTask.java @@ -20,6 +20,7 @@ import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; /** + * 推送订单取消,都开放 * @Author HongYun on 2021/11/8 */ @Component @@ -30,7 +31,6 @@ public class NotificationCancelOrderTask extends CoreDispatcher { //private Logger logger = LoggerFactory.getLogger(NotificationChargeOrderInfoTask.class); - //都开放 @Scheduled(fixedRate = 1000 * 30) public void run() throws JsonProcessingException { diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationChargeOrderInfo4BonusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationChargeOrderInfo4BonusTask.java index cd1bd60a..96d2ffb6 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationChargeOrderInfo4BonusTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationChargeOrderInfo4BonusTask.java @@ -46,7 +46,7 @@ public class NotificationChargeOrderInfo4BonusTask extends CoreDispatcher { * 推送充电订单信息(运营奖补)(老平台已停止推送) * @throws IOException */ - //9099开放定时任务 9009不开放 + //不开放,已停止推送 //@Scheduled(fixedRate = 1000 * 180) public void run() throws IOException { diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationChargeOrderInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationChargeOrderInfoTask.java index f05e7584..fb1cf909 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationChargeOrderInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationChargeOrderInfoTask.java @@ -3,11 +3,13 @@ package com.xhpc.evcs.notification; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.core.JsonProcessingException; import com.xhpc.common.api.ChargingStationService; import com.xhpc.common.core.domain.R; import com.xhpc.common.data.redis.CacheOrderData; import com.xhpc.common.dto.XhpcRateTimeDto; +import com.xhpc.common.redis.service.RedisService; import com.xhpc.evcs.domain.AuthSecretToken; import com.xhpc.evcs.dto.*; import com.xhpc.evcs.jpa.AuthSecretTokenRepository; @@ -16,6 +18,7 @@ import com.xhpc.evcs.utils.JSONUtil; import com.xhpc.order.domain.XhpcHistoryOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -30,6 +33,7 @@ import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; /** + * 推送订单信息 * @Author HongYun on 2021/11/1 */ @Component @@ -43,12 +47,15 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { private AuthSecretTokenRepository authSecretTokenRepository; @Autowired private ChargingStationService chargingStationService; + @Autowired + private RedisService redisService; private final Logger logger = LoggerFactory.getLogger(NotificationChargeOrderInfoTask.class); - //推送不开放(第三方推送) - //9099开放定时任务 9009不开放 + + //都开放 @GetMapping("/infoTask") - @Scheduled(cron = "0/15 * * * * ? ") + //@Scheduled(cron = "0/30 * * * * ? ") + @Scheduled(fixedRate = 1000 * 30) public void run() throws JsonProcessingException { List authSecretTokenList = authSecretTokenRepository.findBySecretTokenType(SECRET_TOKEN_TYPE_OUT); @@ -56,7 +63,8 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { List xhpcHistoryOrderList =xhpcHistoryOrderRepository.findByCreateTimeGreaterThanAndConfirmResultAndSource(DateUtil.parse(formatYu),-1, 1); for (XhpcHistoryOrder horder : xhpcHistoryOrderList) { - if("765367656".equals(horder.getInternetSerialNumber().substring(0, 9))){ + if("765367656".equals(horder.getInternetSerialNumber().substring(0, 9)) || "MA6CC2LK7".equals(horder.getInternetSerialNumber().substring(0, 9))){ + //老监管平台不推送,新监管平台单独推送 continue; } for (AuthSecretToken authSecretToken : authSecretTokenList) { @@ -69,16 +77,31 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { } } if (authSecretToken.getOperatorId3irdpty().equals(operatorId3rdptyEvcs)) { + //下面方法跨天会改变开始时间,先提出 ChargeOrderInfo chargeOrderInfo = new ChargeOrderInfo(horder); - if(new BigDecimal(0).compareTo(horder.getTotalPrice())<0){ - chargeOrderInfo = calculateEmYu(horder,chargeOrderInfo); + XhpcHistoryOrder horder1 =new XhpcHistoryOrder(); + BeanUtils.copyProperties(horder,horder1); + chargeOrderInfo = calculateEmYu(horder1,chargeOrderInfo); + + if(chargeOrderInfo==null){ + continue; + } + } final ChargeOrderInfoResponse pushResp = notify(chargeOrderInfo, authSecretToken); if (pushResp != null) { horder.setConfirmResult(pushResp.getConfirmResult()); logger.debug("3rd part order {} push result: {}", horder.getSerialNumber(),pushResp.getConfirmResult()); + + if(pushResp.getConfirmResult()!=0){ + //解析原因 + horder.setRemark(pushResp.getConfirmResultMessage()); + if(pushResp.getConfirmResult()==1 && "充电账单争议:运营商已推送过账单再次收到的账单无效".equals(pushResp.getConfirmResultMessage())){ + horder.setConfirmResult(0); + } + } logger.info("==============推送返回值================="+pushResp.getConfirmResult()+"=========="+horder.getSerialNumber()); xhpcHistoryOrderRepository.save(horder); REDIS.setCacheMapValue("pushOrder:".concat(horder.getSerialNumber()), "horderpushed", true); @@ -93,47 +116,146 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { public ChargeOrderInfo calculateEmYu(XhpcHistoryOrder horder,ChargeOrderInfo chargeOrderInfo) { - String startTime = chargeOrderInfo.getStartTime(); - String endTime = chargeOrderInfo.getEndTime(); + try { + String startTime = chargeOrderInfo.getStartTime(); - DateTime parse = cn.hutool.core.date.DateUtil.parse(startTime, "yyyy-MM-dd"); - DateTime parse1 = cn.hutool.core.date.DateUtil.parse(endTime, "yyyy-MM-dd"); - long betweenDay = cn.hutool.core.date.DateUtil.between(parse,parse1, DateUnit.DAY); + String endTime = chargeOrderInfo.getEndTime(); - if(betweenDay==0){ - //没有跨天 - Stack stack = extracted(horder, chargeOrderInfo); + DateTime parse = cn.hutool.core.date.DateUtil.parse(startTime, "yyyy-MM-dd"); + DateTime parse1 = cn.hutool.core.date.DateUtil.parse(endTime, "yyyy-MM-dd"); + long betweenDay = cn.hutool.core.date.DateUtil.between(parse, parse1, DateUnit.DAY); + System.out.println("======1111====SerialNumber========222======" + horder.getSerialNumber()); + Map cacheMap = REDIS.getCacheMap("order:" + horder.getSerialNumber()); + CacheOrderData cacheOrderData = (CacheOrderData) cacheMap.get("orderData"); + boolean t1NonZero = new BigDecimal(cacheOrderData.getT1PowerQuantity()).compareTo(BigDecimal.ZERO) != 0; + boolean t2NonZero = new BigDecimal(cacheOrderData.getT2PowerQuantity()).compareTo(BigDecimal.ZERO) != 0; + boolean t3NonZero = new BigDecimal(cacheOrderData.getT3PowerQuantity()).compareTo(BigDecimal.ZERO) != 0; + boolean t4NonZero = new BigDecimal(cacheOrderData.getT4PowerQuantity()).compareTo(BigDecimal.ZERO) != 0; + // 跨天还是在同一个时间段内 + BigDecimal decimalYu = new BigDecimal((horder.getEndTime().getTime() - horder.getStartTime().getTime())).divide(new BigDecimal(60000), 4, BigDecimal.ROUND_HALF_UP); + BigDecimal divideYu = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(new BigDecimal(10000), 4, BigDecimal.ROUND_HALF_UP); + //每分钟多少度电 + BigDecimal quantity = new BigDecimal(0); + if (decimalYu.compareTo(new BigDecimal(0)) != 0) { + quantity = divideYu.divide(decimalYu, 4, BigDecimal.ROUND_HALF_UP); + } + if ((t1NonZero ? 1 : 0) + (t2NonZero ? 1 : 0) + (t3NonZero ? 1 : 0) + (t4NonZero ? 1 : 0) == 1) { + if (betweenDay > 0) { + R r = chargingStationService.getXhpcRateTimeOrder(horder.getRateModelId(), cn.hutool.core.date.DateUtil.formatTime(horder.getStartTime()), cn.hutool.core.date.DateUtil.formatTime(horder.getEndTime()), horder.getSerialNumber()); + if (r.getCode() == 200) { + Stack stack = new Stack<>(); + Map cacheMapYu = REDIS.getCacheMap("Yu" + horder.getSerialNumber()); + List xhpcRateTimes = (List) cacheMapYu.get(horder.getSerialNumber()); - ChargeDetails[] cda = new ChargeDetails[stack.size()]; - chargeOrderInfo.setChargeDetails(stack.toArray(cda)); - }else{ - Date endTime1 = horder.getEndTime(); - horder.setEndTime(cn.hutool.core.date.DateUtil.parse(startTime.substring(0,10)+" 23:59:59")); - Stack stack =extracted(horder, chargeOrderInfo); + BigDecimal powerFee = new BigDecimal(0); + BigDecimal serviceFee = new BigDecimal(0); + for (XhpcRateTimeDto xpcRateTime : xhpcRateTimes) { + powerFee = xpcRateTime.getPowerFee(); + serviceFee = xpcRateTime.getServiceFee(); + } + Date endTime1 = horder.getEndTime(); + horder.setEndTime(cn.hutool.core.date.DateUtil.parse(startTime.substring(0, 10) + " 23:59:59")); + long betweenDay4 = getDiffMinutes(horder.getStartTime(), horder.getEndTime()); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + ChargeDetails chargeDetails = new ChargeDetails(); - horder.setStartTime(cn.hutool.core.date.DateUtil.parse(endTime.substring(0,10)+" 00:00:00")); - horder.setEndTime(endTime1); - Stack stack1 =extracted(horder, chargeOrderInfo); + chargeDetails.setDetailStartTime(cn.hutool.core.date.DateUtil.format(horder.getStartTime(), "yyyy-MM-dd HH:mm:ss")); + chargeDetails.setDetailEndTime(cn.hutool.core.date.DateUtil.format(horder.getEndTime(), "yyyy-MM-dd HH:mm:ss")); + chargeDetails.setElecPrice(powerFee.doubleValue()); + chargeDetails.setSevicePrice(serviceFee.doubleValue()); + BigDecimal multiply1 = multiply.multiply(powerFee).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + stack.push(chargeDetails); + Stack stack1 = new Stack<>(); + //剩余电量 + BigDecimal bigDecimal1 = divideYu.subtract(multiply); + horder.setStartTime(cn.hutool.core.date.DateUtil.parse(endTime.substring(0, 10) + " 00:00:00")); + ChargeDetails chargeDetails1 = new ChargeDetails(); + chargeDetails1.setDetailStartTime(cn.hutool.core.date.DateUtil.format(horder.getStartTime(), "yyyy-MM-dd HH:mm:ss")); + chargeDetails1.setDetailEndTime(cn.hutool.core.date.DateUtil.format(endTime1, "yyyy-MM-dd HH:mm:ss")); + chargeDetails1.setElecPrice(powerFee.doubleValue()); + chargeDetails1.setSevicePrice(serviceFee.doubleValue()); + BigDecimal multiply3 = bigDecimal1.multiply(powerFee).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply4 = bigDecimal1.multiply(serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP); + chargeDetails1.setDetailElecMoney(multiply3.doubleValue()); + chargeDetails1.setDetailSeviceMoney(multiply4.doubleValue()); + chargeDetails1.setDetailPower(bigDecimal1.doubleValue()); + stack1.push(chargeDetails1); - Stack mergedStack = new Stack<>(); + Stack mergedStack = new Stack<>(); + // 先添加stack2的所有元素(保持原顺序) + for (ChargeDetails detail : stack) { + mergedStack.push(detail); + } - // 先添加stack2的所有元素(保持原顺序) - for (ChargeDetails detail : stack) { - mergedStack.push(detail); - } + // 再添加stack1的所有元素(保持原顺序) + for (ChargeDetails detail : stack1) { + mergedStack.push(detail); + } + ChargeDetails[] cda = new ChargeDetails[mergedStack.size()]; + chargeOrderInfo.setChargeDetails(mergedStack.toArray(cda)); + } + } else { + Stack stack = extracted(horder, chargeOrderInfo); + ChargeDetails[] cda = new ChargeDetails[stack.size()]; + chargeOrderInfo.setChargeDetails(stack.toArray(cda)); + } + } else if (betweenDay == 0) { + //没有跨天 + Stack stack = extracted(horder, chargeOrderInfo); - // 再添加stack1的所有元素(保持原顺序) - for (ChargeDetails detail : stack1) { - mergedStack.push(detail); - } + ChargeDetails[] cda = new ChargeDetails[stack.size()]; + chargeOrderInfo.setChargeDetails(stack.toArray(cda)); + } else { - ChargeDetails[] cda = new ChargeDetails[mergedStack.size()]; - chargeOrderInfo.setChargeDetails(mergedStack.toArray(cda)); - } +// Date endTime1 = horder.getEndTime(); +// horder.setEndTime(cn.hutool.core.date.DateUtil.parse(startTime.substring(0, 10) + " 23:59:59")); +// +// long betweenDay4 = getDiffMinutes(horder.getStartTime(), horder.getEndTime()); +// BigDecimal power = new BigDecimal(betweenDay4).multiply(quantity); +// horder.setTotalPower(power.doubleValue()); +// +// Stack stack = extracted(horder, chargeOrderInfo); +// horder.setStartTime(cn.hutool.core.date.DateUtil.parse(endTime.substring(0, 10) + " 00:00:00")); +// horder.setEndTime(endTime1); +// +// horder.setTotalPower(divideYu.subtract(power).doubleValue()); +// Stack stack1 = extracted(horder, chargeOrderInfo); +// +// Stack mergedStack = new Stack<>(); +// +// // 先添加stack2的所有元素(保持原顺序) +// for (ChargeDetails detail : stack) { +// mergedStack.push(detail); +// } +// +// // 再添加stack1的所有元素(保持原顺序) +// for (ChargeDetails detail : stack1) { +// mergedStack.push(detail); +// } +// +// ChargeDetails[] cda = new ChargeDetails[mergedStack.size()]; +// chargeOrderInfo.setChargeDetails(mergedStack.toArray(cda)); - return chargeOrderInfo; + chargeOrderInfo = extractedCrossDay(horder, chargeOrderInfo); + } + + return chargeOrderInfo; + }catch (Exception e){ + return null; + } } + /** + * + * @param horder + * @param chargeOrderInfo + * @return + */ private Stack extracted(XhpcHistoryOrder horder, ChargeOrderInfo chargeOrderInfo) { Stack chargeDetailsStack =new Stack<>(); R r = chargingStationService.getXhpcRateTimeOrder(horder.getRateModelId(), cn.hutool.core.date.DateUtil.formatTime(horder.getStartTime()), cn.hutool.core.date.DateUtil.formatTime(horder.getEndTime()),horder.getSerialNumber()); @@ -161,6 +283,1790 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { int t42 =2; BigDecimal bigDecimal4 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); + for (XhpcRateTimeDto xpcRateTime:xhpcRateTimes) { + String rateValue = xpcRateTime.getRateValue(); + if("00".equals(rateValue)){ + t1=t1+1; + } else if ("01".equals(rateValue)) { + t2=t2+1; + }else if ("02".equals(rateValue)) { + t3=t3+1; + }else if ("03".equals(rateValue)) { + t4=t4+1; + } + } + BigDecimal decimalYu = new BigDecimal((horder.getEndTime().getTime() - horder.getStartTime().getTime())).divide(new BigDecimal(60000),4,BigDecimal.ROUND_HALF_UP); + BigDecimal divideYu = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(new BigDecimal(10000),4,BigDecimal.ROUND_HALF_UP); + logger.info("=====66666=====开始推送====推送返回值============decimalYu====="+decimalYu+"=========divideYu========="+divideYu); + //每分钟多少度电 + BigDecimal quantity =new BigDecimal(0); + if(decimalYu.compareTo(new BigDecimal(0))!=0){ + quantity = divideYu.divide(decimalYu,4,BigDecimal.ROUND_HALF_UP); + } + for (XhpcRateTimeDto xpcRateTime:xhpcRateTimes) { + ChargeDetails chargeDetails = new ChargeDetails(); + String rateValue = xpcRateTime.getRateValue(); + + String rateStartTime = cn.hutool.core.date.DateUtil.format(xpcRateTime.getStartTime(), "HH:mm:ss"); + + String orderStartTime = cn.hutool.core.date.DateUtil.format(horder.getStartTime(), "yyyy-MM-dd HH:mm:ss"); + + rateStartTime = orderStartTime.substring(0,10)+" "+rateStartTime; + + String rateEndTime = cn.hutool.core.date.DateUtil.format(xpcRateTime.getEndTime(), "HH:mm:ss"); + + String orderEndTime = cn.hutool.core.date.DateUtil.format(horder.getEndTime(), "yyyy-MM-dd HH:mm:ss"); + + rateEndTime = orderStartTime.substring(0,10)+" "+rateEndTime; + + DateTime startTime1 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + + DateTime endTime1 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + + if("00".equals(rateValue)){ + boolean judgeStart =false; + boolean judgeEnd =false; + + if(horder.getStartTime().getTime()-startTime1.getTime()>0){ + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart =true; + }else{ + chargeDetails.setDetailStartTime(rateStartTime); + } + if(horder.getEndTime().getTime()-endTime1.getTime()>0){ + chargeDetails.setDetailEndTime(rateEndTime); + }else{ + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd =true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if(t1==1){ + BigDecimal divide = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if(t1==2){ + + if(t12==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + }else{ + BigDecimal multiply1 = bigDecimal1.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal1.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal1.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t12 = t12-1; + }else if(t1==3){ + if(t13==3){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if(t13==2){ + + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + }else{ + BigDecimal multiply1 = bigDecimal1.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal1.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal1.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t13 = t13-1; + } + + } else if ("01".equals(rateValue)) { + boolean judgeStart =false; + boolean judgeEnd =false; + + if(horder.getStartTime().getTime()-startTime1.getTime()>0){ + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart =true; + }else{ + chargeDetails.setDetailStartTime(rateStartTime); + } + if(horder.getEndTime().getTime()-endTime1.getTime()>0){ + chargeDetails.setDetailEndTime(rateEndTime); + }else{ + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd =true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if(t2==1){ + BigDecimal divide = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if(t2==2){ + + if(t22==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + + }else{ + BigDecimal multiply1 = bigDecimal2.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal2.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal2.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t22 = t22-1; + }else if(t2==3){ + if(t23==3){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + }else if(t23==2){ + + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + }else{ + BigDecimal multiply1 = bigDecimal2.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal2.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal2.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t23 = t23-1; + } + + }else if ("02".equals(rateValue)) { + boolean judgeStart =false; + boolean judgeEnd =false; + + if(horder.getStartTime().getTime()-startTime1.getTime()>0){ + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart =true; + }else{ + chargeDetails.setDetailStartTime(rateStartTime); + } + if(horder.getEndTime().getTime()-endTime1.getTime()>0){ + chargeDetails.setDetailEndTime(rateEndTime); + }else{ + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd =true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if(t3==1){ + BigDecimal divide = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if(t3==2){ + + if(t32==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + + }else{ + BigDecimal multiply1 = bigDecimal3.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal3.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal3.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t32 = t32-1; + }else if(t3==3){ + if(t33==3){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + }else if(t33==2){ + + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + }else{ + BigDecimal multiply1 = bigDecimal3.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal3.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal3.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t33 = t33-1; + } + + }else if ("03".equals(rateValue)) { + boolean judgeStart =false; + boolean judgeEnd =false; + + if(horder.getStartTime().getTime()-startTime1.getTime()>0){ + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart =true; + }else{ + chargeDetails.setDetailStartTime(rateStartTime); + } + if(horder.getEndTime().getTime()-endTime1.getTime()>0){ + chargeDetails.setDetailEndTime(rateEndTime); + }else{ + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd =true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if(t4==1){ + BigDecimal divide = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); + + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if(t4==2){ + + if(t42==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + + }else{ + BigDecimal multiply1 = bigDecimal4.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal4.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal4.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t42 = t42-1; + }else if(t4==3){ + if(t43==3){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + }else if(t43==2){ + + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + }else{ + BigDecimal multiply1 = bigDecimal4.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal4.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal4.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t43 = t43-1; + } + } + } + } + //REDIS.deleteObject("Yu"+horder.getSerialNumber()); + return chargeDetailsStack; + } + + + /** + * 跨天 + */ + private ChargeOrderInfo extractedCrossDay(XhpcHistoryOrder horder, ChargeOrderInfo chargeOrderInfo){ + Date endTimeYu = horder.getEndTime(); + String startTime = chargeOrderInfo.getStartTime(); + String endTime = chargeOrderInfo.getEndTime(); + R r = chargingStationService.getCrossDayXhpcRateTimeOrder(horder.getRateModelId(), cn.hutool.core.date.DateUtil.format(horder.getStartTime(),"yyyy-MM-dd HH:mm:ss"), cn.hutool.core.date.DateUtil.format(horder.getEndTime(),"yyyy-MM-dd HH:mm:ss"), horder.getSerialNumber()); + if (r.getCode() == 200) { + Map cacheMapYu1 = REDIS.getCacheMap("Yu" + horder.getSerialNumber()); + List xhpcRateTimes1 = (List) cacheMapYu1.get(horder.getSerialNumber()); + int one=0; + int two =0; + int three =0; + int four =0; + for (XhpcRateTimeDto xpcRateTime:xhpcRateTimes1) { + String rateValue = xpcRateTime.getRateValue(); + if("00".equals(rateValue)){ + one=one+1; + } else if ("01".equals(rateValue)) { + two=two+1; + }else if ("02".equals(rateValue)) { + three=three+1; + }else if ("03".equals(rateValue)) { + four=four+1; + } + } + Map cacheMap = REDIS.getCacheMap("order:" + horder.getSerialNumber()); + CacheOrderData cacheOrderData1 = (CacheOrderData) cacheMap.get("orderData"); + CacheOrderData cacheOrderData =new CacheOrderData(); + CacheOrderData cacheOrderDataTotal =new CacheOrderData(); + BeanUtils.copyProperties(cacheOrderData1, cacheOrderData); + BeanUtils.copyProperties(cacheOrderData1, cacheOrderDataTotal); + BigDecimal decimalYu = new BigDecimal((horder.getEndTime().getTime() - horder.getStartTime().getTime())).divide(new BigDecimal(60000),4,BigDecimal.ROUND_HALF_UP); + BigDecimal divideYu = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(new BigDecimal(10000),4,BigDecimal.ROUND_HALF_UP); + //每分钟多少度电 + BigDecimal quantity =new BigDecimal(0); + if(decimalYu.compareTo(new BigDecimal(0))!=0){ + quantity = divideYu.divide(decimalYu,4,BigDecimal.ROUND_HALF_UP); + } + + horder.setEndTime(cn.hutool.core.date.DateUtil.parse(startTime.substring(0, 10) + " 23:59:59")); + //前一天 + R r1 = chargingStationService.getXhpcRateTimeOrder(horder.getRateModelId(), cn.hutool.core.date.DateUtil.formatTime(horder.getStartTime()), cn.hutool.core.date.DateUtil.formatTime(horder.getEndTime()),horder.getSerialNumber()); + Stack chargeDetailsStack =new Stack<>(); + if(r1.getCode()==200){ + Map cacheMapYu = REDIS.getCacheMap("Yu"+horder.getSerialNumber()); + List xhpcRateTimes = (List)cacheMapYu.get(horder.getSerialNumber()); + BigDecimal bigDecimal = new BigDecimal(10000); + int t1=0; + int t12 =2; + int t13 =3; + BigDecimal bigDecimal1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); + int t2 =0; + int t22 =2; + int t23 =3; + BigDecimal bigDecimal2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); + int t3 =0; + int t32 =2; + int t33 =3; + BigDecimal bigDecimal3 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); + int t4 =0; + int t43 =3; + int t42 =2; + BigDecimal bigDecimal4 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); + + for (XhpcRateTimeDto xpcRateTime:xhpcRateTimes) { + String rateValue = xpcRateTime.getRateValue(); + if("00".equals(rateValue)){ + t1=t1+1; + } else if ("01".equals(rateValue)) { + t2=t2+1; + }else if ("02".equals(rateValue)) { + t3=t3+1; + }else if ("03".equals(rateValue)) { + t4=t4+1; + } + } + + BigDecimal t1Cost =new BigDecimal(0); + BigDecimal t2Cost =new BigDecimal(0); + BigDecimal t3Cost =new BigDecimal(0); + BigDecimal t4Cost =new BigDecimal(0); + + for (XhpcRateTimeDto xpcRateTime:xhpcRateTimes) { + ChargeDetails chargeDetails = new ChargeDetails(); + String rateValue = xpcRateTime.getRateValue(); + + String rateStartTime = cn.hutool.core.date.DateUtil.format(xpcRateTime.getStartTime(), "HH:mm:ss"); + + String orderStartTime = cn.hutool.core.date.DateUtil.format(horder.getStartTime(), "yyyy-MM-dd HH:mm:ss"); + + rateStartTime = orderStartTime.substring(0,10)+" "+rateStartTime; + + String rateEndTime = cn.hutool.core.date.DateUtil.format(xpcRateTime.getEndTime(), "HH:mm:ss"); + + String orderEndTime = cn.hutool.core.date.DateUtil.format(horder.getEndTime(), "yyyy-MM-dd HH:mm:ss"); + + if("00:00:00".equals(rateEndTime)){ + rateEndTime ="23:59:59"; + } + rateEndTime = orderStartTime.substring(0,10)+" "+rateEndTime; + + DateTime startTime1 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + + DateTime endTime1 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + + if("00".equals(rateValue)){ + boolean judgeStart =false; + boolean judgeEnd =false; + + if(horder.getStartTime().getTime()-startTime1.getTime()>0){ + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart =true; + }else{ + chargeDetails.setDetailStartTime(rateStartTime); + } + if(horder.getEndTime().getTime()-endTime1.getTime()>0){ + chargeDetails.setDetailEndTime(rateEndTime); + }else{ + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd =true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if(one==1){ + BigDecimal divide = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if (one==2){ + if(t1==1){ + //还有一个时间是跨天 + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + BigDecimal divide = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); + if(multiply.compareTo(divide)==-1){ + cacheOrderDataTotal.setT1PowerQuantity(bigDecimal1.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT1Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT1Cost(t1CostYu.subtract(multiply1.add(multiply2)).multiply(bigDecimal).intValue()); + } + }else{ + if(t12==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + }else{ + BigDecimal multiply1 = bigDecimal1.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal1.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal1.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t12 = t12-1; + } + }else if (one==3){ + + if(t1==1){ + //还有2个时间是跨天 + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + BigDecimal divide = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); + if(multiply.compareTo(divide)==-1){ + cacheOrderDataTotal.setT1PowerQuantity(bigDecimal1.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT1Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT1Cost(t1CostYu.subtract(multiply1.add(multiply2)).multiply(bigDecimal).intValue()); + } + }else if (t1==2){ + + if(t12==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + t1Cost = t1Cost.add(multiply1.add(multiply2)); + t12 =t12-1; + }else{ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + t1Cost = t1Cost.add(multiply1.add(multiply2)); + + cacheOrderDataTotal.setT1PowerQuantity(bigDecimal1.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT1Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT1Cost(t1CostYu.subtract(t1Cost).multiply(bigDecimal).intValue()); + } + }else if (t1==3){ + if(t13==3){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if(t13==2){ + + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + }else{ + BigDecimal multiply1 = bigDecimal1.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal1.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal1.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t13 = t13-1; + } + } + }else if("01".equals(rateValue)){ + boolean judgeStart =false; + boolean judgeEnd =false; + + if(horder.getStartTime().getTime()-startTime1.getTime()>0){ + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart =true; + }else{ + chargeDetails.setDetailStartTime(rateStartTime); + } + if(horder.getEndTime().getTime()-endTime1.getTime()>0){ + chargeDetails.setDetailEndTime(rateEndTime); + }else{ + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd =true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if(two==1){ + BigDecimal divide = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if(two==2){ + if(t2==1){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + + BigDecimal divide = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); + if(multiply.compareTo(divide)==-1){ + cacheOrderDataTotal.setT2PowerQuantity(bigDecimal2.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT2Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT2Cost(t1CostYu.subtract(multiply1.add(multiply2)).multiply(bigDecimal).intValue()); + } + + }else{ + if(t22==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + }else{ + BigDecimal multiply1 = bigDecimal2.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal2.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal2.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t22 = t22-1; + } + }else if(two==3){ + if(t2==1){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + + BigDecimal divide = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); + if(multiply.compareTo(divide)==-1){ + cacheOrderDataTotal.setT2PowerQuantity(bigDecimal2.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT2Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT2Cost(t1CostYu.subtract(multiply1.add(multiply2)).multiply(bigDecimal).intValue()); + } + }else if(t2==2){ + + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + t2Cost = t2Cost.add(multiply1.add(multiply2)); + if(t22==1){ + cacheOrderDataTotal.setT2PowerQuantity(bigDecimal2.multiply(bigDecimal).intValue()); + BigDecimal t2CostYu = new BigDecimal(cacheOrderData.getT2Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT2Cost(t2CostYu.subtract(t2Cost).multiply(bigDecimal).intValue()); + } + t22 = t22-1; + }else if(t2==3){ + if(t23==3){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + }else if(t23==2){ + + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + }else{ + BigDecimal multiply1 = bigDecimal2.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal2.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal2.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t23 = t23-1; + } + } + }else if("02".equals(rateValue)){ + boolean judgeStart =false; + boolean judgeEnd =false; + + if(horder.getStartTime().getTime()-startTime1.getTime()>0){ + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart =true; + }else{ + chargeDetails.setDetailStartTime(rateStartTime); + } + if(horder.getEndTime().getTime()-endTime1.getTime()>0){ + chargeDetails.setDetailEndTime(rateEndTime); + }else{ + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd =true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if(three==1){ + BigDecimal divide = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if(three==2){ + if(t3==1){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + + BigDecimal divide = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); + if(multiply.compareTo(divide)==-1){ + cacheOrderDataTotal.setT3PowerQuantity(bigDecimal3.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT3Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT3Cost(t1CostYu.subtract(multiply1.add(multiply2)).multiply(bigDecimal).intValue()); + } + }else if(t3==2){ + if(three==1){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + + BigDecimal divide = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); + if(multiply.compareTo(divide)==-1){ + cacheOrderDataTotal.setT3PowerQuantity(bigDecimal3.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT3Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT3Cost(t1CostYu.subtract(multiply1.add(multiply2)).multiply(bigDecimal).intValue()); + } + }else{ + if(t32==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + + }else{ + BigDecimal multiply1 = bigDecimal3.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal3.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal3.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t32 = t32-1; + } + } + }else if(three==3){ + if(t3==1){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + + BigDecimal divide = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); + if(multiply.compareTo(divide)==-1){ + cacheOrderDataTotal.setT3PowerQuantity(bigDecimal3.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT3Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT3Cost(t1CostYu.subtract(multiply1.add(multiply2)).multiply(bigDecimal).intValue()); + } + }else if (t3==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + t3Cost = t3Cost.add(multiply1.add(multiply2)); + if(t23==1){ + cacheOrderDataTotal.setT3PowerQuantity(bigDecimal3.multiply(bigDecimal).intValue()); + BigDecimal t3CostYu = new BigDecimal(cacheOrderData.getT3Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT3Cost(t3CostYu.subtract(t3Cost).multiply(bigDecimal).intValue()); + } + t23 = t23-1; + }else if(t3==3){ + if(t33==3){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + }else if(t33==2){ + + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + }else{ + BigDecimal multiply1 = bigDecimal3.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal3.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal3.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t33 = t33-1; + } + } + }else if("03".equals(rateValue)){ + boolean judgeStart =false; + boolean judgeEnd =false; + + if(horder.getStartTime().getTime()-startTime1.getTime()>0){ + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart =true; + }else{ + chargeDetails.setDetailStartTime(rateStartTime); + } + if(horder.getEndTime().getTime()-endTime1.getTime()>0){ + chargeDetails.setDetailEndTime(rateEndTime); + }else{ + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd =true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if(four==1){ + BigDecimal divide = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + }else if(four==2){ + if(t4==1){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + + BigDecimal divide = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); + if(multiply.compareTo(divide)==-1){ + cacheOrderDataTotal.setT4PowerQuantity(bigDecimal4.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT4Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT4Cost(t1CostYu.subtract(multiply1.add(multiply2)).multiply(bigDecimal).intValue()); + } + }else{ + if(t42==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + + }else{ + BigDecimal multiply1 = bigDecimal4.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal4.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal4.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t42 = t42-1; + } + }else if(four==3){ + if(t4==1){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + + BigDecimal divide = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); + if(multiply.compareTo(divide)==-1){ + cacheOrderDataTotal.setT4PowerQuantity(bigDecimal4.multiply(bigDecimal).intValue()); + BigDecimal t1CostYu = new BigDecimal(cacheOrderData.getT4Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT4Cost(t1CostYu.subtract(multiply1.add(multiply2)).multiply(bigDecimal).intValue()); + } + }else if (t4==2){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + t4Cost = t4Cost.add(multiply1.add(multiply2)); + if(t23==1){ + cacheOrderDataTotal.setT4PowerQuantity(bigDecimal2.multiply(bigDecimal).intValue()); + BigDecimal t4CostYu = new BigDecimal(cacheOrderData.getT4Cost()).divide(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + cacheOrderDataTotal.setT4Cost(t4CostYu.subtract(t4Cost).multiply(bigDecimal).intValue()); + } + t23 = t23-1; + }else if(t4==3){ + if(t43==3){ + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + }else if(t43==2){ + + if(judgeStart){ + rateStartTime = orderStartTime; + } + if(judgeEnd){ + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + }else{ + BigDecimal multiply1 = bigDecimal4.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal4.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal4.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t43 = t43-1; + } + } + } + } + } + //后一天 + + horder.setStartTime(cn.hutool.core.date.DateUtil.parse(endTime.substring(0, 10) + " 00:00:00")); + horder.setEndTime(endTimeYu); + Stack stack1 = extractedCrossDayYu(horder, cacheOrderDataTotal); + + Stack mergedStack = new Stack<>(); + + // 先添加stack2的所有元素(保持原顺序) + for (ChargeDetails detail : chargeDetailsStack) { + mergedStack.push(detail); + } + + // 再添加stack1的所有元素(保持原顺序) + for (ChargeDetails detail : stack1) { + mergedStack.push(detail); + } + + ChargeDetails[] cda = new ChargeDetails[mergedStack.size()]; + chargeOrderInfo.setChargeDetails(mergedStack.toArray(cda)); + + } + + return chargeOrderInfo; + } + + + private Stack extractedCrossDayYu(XhpcHistoryOrder horder, CacheOrderData cacheOrderData) { + Stack chargeDetailsStack =new Stack<>(); + R r = chargingStationService.getXhpcRateTimeOrder(horder.getRateModelId(), cn.hutool.core.date.DateUtil.formatTime(horder.getStartTime()), cn.hutool.core.date.DateUtil.formatTime(horder.getEndTime()),horder.getSerialNumber()); + if(r.getCode()==200){ + Map cacheMapYu = REDIS.getCacheMap("Yu"+horder.getSerialNumber()); + List xhpcRateTimes = (List)cacheMapYu.get(horder.getSerialNumber()); + + Map cacheMap = REDIS.getCacheMap("order:"+ horder.getSerialNumber()); + + BigDecimal bigDecimal = new BigDecimal(10000); + int t1=0; + int t12 =2; + int t13 =3; + BigDecimal bigDecimal1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); + int t2 =0; + int t22 =2; + int t23 =3; + BigDecimal bigDecimal2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); + int t3 =0; + int t32 =2; + int t33 =3; + BigDecimal bigDecimal3 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); + int t4 =0; + int t43 =3; + int t42 =2; + BigDecimal bigDecimal4 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); for (XhpcRateTimeDto xpcRateTime:xhpcRateTimes) { String rateValue = xpcRateTime.getRateValue(); @@ -175,13 +2081,11 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { } } BigDecimal decimalYu = new BigDecimal((horder.getEndTime().getTime() - horder.getStartTime().getTime())).divide(new BigDecimal(60000),4,BigDecimal.ROUND_HALF_UP); - BigDecimal divideYu = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(new BigDecimal(10000),4,BigDecimal.ROUND_HALF_UP); - logger.info("=====66666=====开始推送====推送返回值============decimalYu====="+decimalYu+"=========divideYu========="+divideYu); //每分钟多少度电 BigDecimal quantity =new BigDecimal(0); if(decimalYu.compareTo(new BigDecimal(0))!=0){ - quantity = decimalYu.divide(divideYu,4,BigDecimal.ROUND_HALF_UP); + quantity = divideYu.divide(decimalYu,4,BigDecimal.ROUND_HALF_UP); } for (XhpcRateTimeDto xpcRateTime:xhpcRateTimes) { ChargeDetails chargeDetails = new ChargeDetails(); @@ -224,10 +2128,8 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { if(t1==1){ BigDecimal divide = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); - BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); chargeDetails.setDetailPower(divide.doubleValue()); @@ -360,10 +2262,8 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { if(t2==1){ BigDecimal divide = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); - BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); chargeDetails.setDetailPower(divide.doubleValue()); @@ -385,7 +2285,6 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { //获得电量 BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); @@ -499,10 +2398,8 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { if(t3==1){ BigDecimal divide = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); - BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); chargeDetails.setDetailPower(divide.doubleValue()); @@ -761,6 +2658,42 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { //REDIS.deleteObject("Yu"+horder.getSerialNumber()); return chargeDetailsStack; } + + @Scheduled(fixedRate = 1000 * 30) + public void runYu() throws JsonProcessingException { + + Collection realtimeOrder = REDIS.keys("notification:*"); + for (String okey : realtimeOrder) { + + // 获取 JSON 字符串 + String chargeOrderInfoJson = redisService.getCacheObject(okey); + + ChargeOrderInfo chargeOrderInfo = com.alibaba.fastjson.JSON.parseObject(chargeOrderInfoJson, ChargeOrderInfo.class); + String substring = chargeOrderInfo.getStartChargeSeq().substring(0, 9); + AuthSecretToken authSecretToken = authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(substring, SECRET_TOKEN_TYPE_OUT).orElse(null); + if (null != authSecretToken) { + XhpcHistoryOrder horder = xhpcHistoryOrderRepository.findBySerialNumber(okey.substring(13)); + final ChargeOrderInfoResponse pushResp = notify(chargeOrderInfo, authSecretToken); + if (pushResp != null) { + horder.setConfirmResult(pushResp.getConfirmResult()); + logger.debug("3rd part order {} push result: {}", horder.getSerialNumber(),pushResp.getConfirmResult()); + if(pushResp.getConfirmResult()!=0){ + //解析原因 + horder.setRemark(pushResp.getConfirmResultMessage()); + if(pushResp.getConfirmResult()==1 && "充电账单争议:运营商已推送过账单再次收到的账单无效".equals(pushResp.getConfirmResultMessage())){ + horder.setConfirmResult(0); + } + } + logger.info("==============推送返回值================="+pushResp.getConfirmResult()+"=========="+horder.getSerialNumber()); + xhpcHistoryOrderRepository.save(horder); + REDIS.setCacheMapValue("pushOrder:".concat(horder.getSerialNumber()), "horderpushed", true); + + redisService.deleteObject(okey); + } + } + } + } + public ChargeOrderInfoResponse notify(ChargeOrderInfo chargeOrderInfo, AuthSecretToken authSecretTokenOut) throws JsonProcessingException { String data = JSONUtil.toJSONString(chargeOrderInfo); @@ -772,8 +2705,17 @@ public class NotificationChargeOrderInfoTask extends CoreDispatcher { logger.info("==============推送返回值==========responseBody============="+responseBody); return DTOJsonHelper.parseResponseData(responseBody, ChargeOrderInfoResponse.class, authSecretTokenOut); + + } + public long getDiffMinutes(Date startTime, Date endTime) { + if (startTime == null || endTime == null) { + return 0; // 或抛异常,根据业务决定 + } + long diffMillis = endTime.getTime() - startTime.getTime(); + return diffMillis / (1000 * 60); + } public static void main(String[] args) { diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationEquipChargeStatusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationEquipChargeStatusTask.java index a3f1cbb7..ad507c5b 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationEquipChargeStatusTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationEquipChargeStatusTask.java @@ -45,14 +45,14 @@ public class NotificationEquipChargeStatusTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(NotificationEquipChargeStatusTask.class); /** - * 推送充电状态(evcs 放开) + * 推送充电状态 * @throws IOException */ //都开放 @Scheduled(fixedRate = 1000 * 30) public void run() throws IOException { - List authSecretTokenOutList = authSecretTokenRepository.findBySecretTokenTypeAndOperatorId3irdptyNot(SECRET_TOKEN_TYPE_OUT,"MA7D6FPW6"); + List authSecretTokenOutList = authSecretTokenRepository.findBySecretTokenType(SECRET_TOKEN_TYPE_OUT); final Collection gunkeys = REDIS.keys("gun:*"); for (AuthSecretToken authSecretToken : authSecretTokenOutList) { for (String gunkey : gunkeys) { @@ -73,7 +73,7 @@ public class NotificationEquipChargeStatusTask extends CoreDispatcher { EquipChargeStatus equipChargeStatus = new EquipChargeStatus(); final String internetSerialNumber = REDIS.getCacheMapValue(orderkey.replace("order:", "pushOrder:"), "internetSerialNumber"); - if (internetSerialNumber == null || !internetSerialNumber.startsWith(authSecretToken.getOperatorId3irdpty())) { + if (internetSerialNumber == null || !internetSerialNumber.startsWith(authSecretToken.getOperatorId3irdpty()) || "MA7D6FPW6".equals(authSecretToken.getOperatorId3irdpty())) { continue; } equipChargeStatus.setStartChargeSeq(internetSerialNumber); @@ -222,14 +222,12 @@ public class NotificationEquipChargeStatusTask extends CoreDispatcher { equipChargeStatus.setChargeModel(null); } String data = JSONUtil.toJSONString(equipChargeStatus); + System.out.println("===============充电状态推送===========data============="+data+"=========startChargeSeq============"+equipChargeStatus.getStartChargeSeq()); CommonRequest commonRequest = new CommonRequest<>(); - //System.out.println("===============充电结束状态推送========================"); - //System.out.println("===============充电结束状态推送============data============"+data); - //System.out.println("===============充电结束状态推送========================"); commonRequest.setData(data); String responseBody = ok(commonRequest, "/notification_equip_charge_status", authSecretTokenOut); - //System.out.println("===============充电结束状态推送===========responseBody============="+responseBody); + System.out.println("===============充电状态推送===========responseBody============="+responseBody+"=========startChargeSeq============"+equipChargeStatus.getStartChargeSeq()); //System.out.println("===============充电结束状态推送========================"); EquipChargeStatusRes equipChargeStatusRes = DTOJsonHelper.parseResponseData(responseBody, EquipChargeStatusRes.class, authSecretTokenOut); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStationStatusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStationStatusTask.java index 86e0f45b..ce71c9e4 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStationStatusTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStationStatusTask.java @@ -31,10 +31,7 @@ import java.util.stream.Collectors; import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; -import static com.xhpc.evcs.dto.ConnectorStatusInfo.CHARGING; -import static com.xhpc.evcs.dto.ConnectorStatusInfo.ERROR; -import static com.xhpc.evcs.dto.ConnectorStatusInfo.FREE; -import static com.xhpc.evcs.dto.ConnectorStatusInfo.OFF_LINE; +import static com.xhpc.evcs.dto.ConnectorStatusInfo.*; @Component @Slf4j @@ -49,8 +46,8 @@ public class NotificationStationStatusTask extends CoreDispatcher { @Resource private XhpcTerminalRepository terminalRepository; - //都开放 9009 40 9099 60 - @Scheduled(cron = "0 0/1 * * * ? ") + //都开放 + @Scheduled(cron = "0/30 * * * * ? ") protected void run() throws IOException { Collection stationTerminalKeys = REDIS.keys("stationTerminalStatus:*"); @@ -70,7 +67,8 @@ public class NotificationStationStatusTask extends CoreDispatcher { Set changeStatus = ChangePoleStatus.getChangeStatus(connectorStatusInfos); if (!changeStatus.isEmpty()) { for (XhpcInternetUser xhpcInternetUser : xhpcInternetUserList) { - if("5".equals(xhpcInternetUser.getInternetUserId().toString()) || "6".equals(xhpcInternetUser.getInternetUserId().toString())){ + //车为家单独推送 + if("5".equals(xhpcInternetUser.getInternetUserId().toString()) || "6".equals(xhpcInternetUser.getInternetUserId().toString())|| "7".equals(xhpcInternetUser.getInternetUserId().toString())){ continue; } XhpcStationInternetBlacklist xhpcStationInternetBlacklist = @@ -80,10 +78,12 @@ public class NotificationStationStatusTask extends CoreDispatcher { AuthSecretToken authSecretTokenOut = authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(xhpcInternetUser.getOperatorIdEvcs(), SECRET_TOKEN_TYPE_OUT).orElse(null); - log.debug("nss pushing to: {}", authSecretTokenOut.getOperatorId3irdpty()); - if (authSecretTokenOut != null) { - for (ConnectorStatusInfo statusInfo : changeStatus) { - notify(statusInfo, authSecretTokenOut); + if(authSecretTokenOut !=null){ + log.debug("nss pushing to: {}", authSecretTokenOut.getOperatorId3irdpty()); + if (authSecretTokenOut != null) { + for (ConnectorStatusInfo statusInfo : changeStatus) { + notify(statusInfo, authSecretTokenOut); + } } } } @@ -117,6 +117,8 @@ public class NotificationStationStatusTask extends CoreDispatcher { return FREE; case "离线": return OFF_LINE; + case "插枪": + return CONNECTED; case "故障": return ERROR; default: @@ -131,10 +133,7 @@ public class NotificationStationStatusTask extends CoreDispatcher { String data = JSONUtil.toJSONString(connectorStatusInfoReq); CommonRequest commonRequest = new CommonRequest<>(); commonRequest.setData(data); - - //System.out.println("=====================所有设备状态============================"); String ok = ok(commonRequest, "/notification_stationStatus", authSecretTokenOut); - // System.out.println("=====================所有设备状态===========ok================="+ok); }catch (Exception e){ } diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStopChargeResultTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStopChargeResultTask.java index d06d777f..b175616d 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStopChargeResultTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStopChargeResultTask.java @@ -28,7 +28,7 @@ public class NotificationStopChargeResultTask extends CoreDispatcher { //(evcs 放开) //都开放 - @Scheduled(cron = "0/3 * * * * ? ") + @Scheduled(cron = "0/30 * * * * ? ") public void run() throws Exception { notifyService(); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/henda/NotificationChargeOrderInfoHenDaTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/henda/NotificationChargeOrderInfoHenDaTask.java index a4ee4330..ec75cff6 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/henda/NotificationChargeOrderInfoHenDaTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/henda/NotificationChargeOrderInfoHenDaTask.java @@ -37,12 +37,9 @@ public class NotificationChargeOrderInfoHenDaTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(NotificationChargeOrderInfoHenDaTask.class); /** - * 推送充电恒大订单信息 + * 推送充电恒大订单信息(不推送,有整体推送) * * @throws IOException */ - //9099开放定时任务 9009不开放 - //@Scheduled(fixedDelay = 1000 * 15) - //@Scheduled(cron = "0/30 * * * * ? ") public void run() throws IOException { AuthSecretToken authSecretTokenOut = diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/kuaidian/NotificationOvertimeOrderInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/kuaidian/NotificationOvertimeOrderInfoTask.java index 1779e79f..a05725aa 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/kuaidian/NotificationOvertimeOrderInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/kuaidian/NotificationOvertimeOrderInfoTask.java @@ -93,7 +93,7 @@ public class NotificationOvertimeOrderInfoTask extends CoreDispatcher { //logger.info("==============推送返回值================="+pushResp.toString()); placeholderIOrderRepository.save(placeholderOrder); } else { - logger.error("新电途3dp[{}] order[{}/{}] push fail", "MA25CNM38",placeholderOrder.getSerialNumber(), placeholderOrder.getInternetSerialNumber()); + logger.error("快电3dp[{}] order[{}/{}] push fail", "MA005DBW1",placeholderOrder.getSerialNumber(), placeholderOrder.getInternetSerialNumber()); } } } diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/kuaidian/NotificationStationInfoKuaiDianTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/kuaidian/NotificationStationInfoKuaiDianTask.java index 8436fda7..0438c611 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/kuaidian/NotificationStationInfoKuaiDianTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/kuaidian/NotificationStationInfoKuaiDianTask.java @@ -25,6 +25,7 @@ import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; /** + * 推送场站信息 * @author yuyang * @Date 2025-07-25 10:06 */ @@ -40,7 +41,7 @@ public class NotificationStationInfoKuaiDianTask extends CoreDispatcher { //9009开放定时任务 9099不开放 - //@Scheduled(cron = "0 0 0 1/1 * ? ") + @Scheduled(cron = "0 0 0 1/1 * ? ") public void run() throws IOException { try{ List xhpcStationInternetBlacklist = xhpcStationInternetBlacklistRepo.findByInternetUserId(1L); @@ -133,10 +134,10 @@ public class NotificationStationInfoKuaiDianTask extends CoreDispatcher { Map mapStationInfo =new HashMap<>(); mapStationInfo.put("StationInfo",cdStationInfo); String data = JSONUtil.toJSONString(mapStationInfo); - System.out.println("===新电途====data========"+data); + System.out.println("==快电====data========"+data); commonRequest.setData(data); String result =ok(commonRequest,"/notification_stationInfo",authSecretTokenOut); - System.out.println("===新电途==推送充电站信息==result========"+result); + System.out.println("===快电==推送充电站信息==result========"+result); } } }catch (Exception e){ diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationPlaceholderOrderInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationPlaceholderOrderInfoTask.java index 86a9229d..761cea0e 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationPlaceholderOrderInfoTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationPlaceholderOrderInfoTask.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; +import java.math.BigDecimal; import java.util.List; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; @@ -42,8 +43,9 @@ public class NotificationPlaceholderOrderInfoTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(NotificationPlaceholderOrderInfoTask.class); + //(占位费还没有合作) //9009开放定时任务 9099不开放 - //@Scheduled(fixedRate = 1000 * 30) + @Scheduled(fixedRate = 1000 * 30) public void run() throws IOException { AuthSecretToken authSecretTokenOut = @@ -91,6 +93,7 @@ public class NotificationPlaceholderOrderInfoTask extends CoreDispatcher { placeholderOrderInfo.setTimeStart(DateUtil.format(placeholderOrder.getStartTime(),"yyyy-MM-dd HH:mm:ss")); placeholderOrderInfo.setTimeEnd(DateUtil.format(placeholderOrder.getEndTime(),"yyyy-MM-dd HH:mm:ss")); placeholderOrderInfo.setHoldTime(placeholderOrder.getTotalTimeSpan()); + placeholderOrderInfo.setOvertimePrice(new BigDecimal(0.2).doubleValue()); placeholderOrderInfo.setActuallyPay(placeholderOrder.getTotalMoney().doubleValue()); placeholderOrderInfo.setBillEquipment(1); placeholderOrderInfo.setStatus(9); @@ -175,6 +178,7 @@ public class NotificationPlaceholderOrderInfoTask extends CoreDispatcher { String data = JSONUtil.toJSONString(placeholderOrderInfo); CommonRequest commonRequest = new CommonRequest<>(); commonRequest.setData(data); + System.out.println("========新电途推送记录=============="+data); String responseBody = ok(commonRequest, "/notification_placeholder_order_info", authSecretTokenOut); return DTOJsonHelper.parseResponseData(responseBody, ChargeOrderInfoResponse.class, authSecretTokenOut); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationPlaceholderRulesTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationPlaceholderRulesTask.java index c5be13d3..939b2879 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationPlaceholderRulesTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationPlaceholderRulesTask.java @@ -30,6 +30,7 @@ import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; /** + * 占位费规则 * @author yuyang * @Date 2025-08-06 15:30 */ @@ -49,13 +50,13 @@ public class NotificationPlaceholderRulesTask extends CoreDispatcher { private final Logger logger = LoggerFactory.getLogger(NotificationPlaceholderRulesTask.class); //9009开放定时任务 9099不开放 - @Scheduled(cron = "0 0 3 1/1 * ? ") - @PostMapping("/v1/run") + @Scheduled(cron = "0 0 0/6 * * ? ") + // @Scheduled(cron = "0 0/1 * * * ? ") public void run() throws IOException { AuthSecretToken authSecretTokenOut = authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType("MA25CNM38", "MA6DFCTD5", SECRET_TOKEN_TYPE_OUT).orElse(null); //todo - List xhpcStationInternetBlacklist = xhpcStationInternetBlacklistRepo.findByInternetUserId(1L); + List xhpcStationInternetBlacklist = xhpcStationInternetBlacklistRepo.findByInternetUserId(3L); List stationKeys = new ArrayList<>(REDIS.keys("station:*")); List validStationKeys = new ArrayList<>(); @@ -87,7 +88,7 @@ public class NotificationPlaceholderRulesTask extends CoreDispatcher { String endTime = DateUtil.format(xhpcPlacreholder.getEndTime(), "yyyy.MM.dd HH:mm:ss"); placeholderRulesXinDianTu.setEffectStartTime(startTime); placeholderRulesXinDianTu.setEffectEndTime(endTime); - placeholderRulesXinDianTu.setStatus(xhpcPlacreholder.getStatus()); + placeholderRulesXinDianTu.setStatus(xhpcPlacreholder.getType()); placeholderRulesXinDianTu.setFreeTime(xhpcPlacreholder.getFreeTime()); placeholderRulesXinDianTu.setMaxFee(xhpcPlacreholder.getMaxFee().doubleValue()); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationStationInfoXinDianTuTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationStationInfoXinDianTuTask.java index 1df99337..811670b2 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationStationInfoXinDianTuTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/xindiantu/NotificationStationInfoXinDianTuTask.java @@ -40,7 +40,7 @@ public class NotificationStationInfoXinDianTuTask extends CoreDispatcher { //9009开放定时任务 9099不开放 - //@Scheduled(cron = "0 1 0 1/1 * ? ") + @Scheduled(cron = "0 1 0 1/1 * ? ") public void run() throws IOException { try{ List xhpcStationInternetBlacklist = xhpcStationInternetBlacklistRepo.findByInternetUserId(3L); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/ChangePoleStatus.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/ChangePoleStatus.java index f43b5b3d..eef90a2e 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/ChangePoleStatus.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/utils/ChangePoleStatus.java @@ -22,7 +22,7 @@ public class ChangePoleStatus { } else { Set changeStatus = new HashSet<>(); for (ConnectorStatusInfo newInfo : freshInfoList) { - if (temp.get(newInfo.getConnectorID()) == null || !temp.get(newInfo.getConnectorID()).equals(newInfo.getStatus())) { + if (temp.get(newInfo.getConnectorID()) == null || !temp.get(newInfo.getConnectorID()).equals(newInfo.getStatus())) { ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); connectorStatusInfo.setConnectorID(newInfo.getConnectorID()); connectorStatusInfo.setStatus(newInfo.getStatus()); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryEquipAuthController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryEquipAuthController.java new file mode 100644 index 00000000..03c5eec6 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryEquipAuthController.java @@ -0,0 +1,108 @@ +package com.xhpc.evcs.ykc.api; + +import com.xhpc.evcs.cdjgpc.dto.CDEquipAuthRequest; +import com.xhpc.evcs.domain.XhpcInternetUser; +import com.xhpc.evcs.domain.XhpcStationInternetBlacklist; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.dto.EquipAuthResponse; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.jpa.XhpcInternetUserRepository; +import com.xhpc.evcs.jpa.XhpcStationInternetBlacklistRepository; +import com.xhpc.evcs.utils.JSONUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.time.Instant; +import java.util.Map; + +import static cn.hutool.core.util.NumberUtil.isInteger; +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; + +/** + * 云快充 + * + * @author yuyang + * @Date 2026-03-17 13:34 + */ +@RestController +public class YKCQueryEquipAuthController { + + + @Autowired + private XhpcStationInternetBlacklistRepository xhpcStationInternetBlacklistRepo; + @Autowired + private XhpcInternetUserRepository xhpcInternetUserRepository; + + /** + * 请求设备认证 + * @param commonRequest + * @return + * @throws Exception + */ + @PostMapping(value = "/v50/query_equip_auth") + public CommonResponse queryEquipAuth(@RequestBody CommonRequest commonRequest) throws Exception { + + CommonResponse resp = new CommonResponse(); + resp.setRet(EvcsConst.RET_SUCC); + CDEquipAuthRequest equipAuthRequest = JSONUtil.readParams(commonRequest.getData(), CDEquipAuthRequest.class); + if (equipAuthRequest == null) { + resp.setRet(EvcsConst.RET_FAIL); + resp.setMsg("Request or token params validation failed"); + } else { + EquipAuthResponse equipAuthResponse = new EquipAuthResponse(); + String equipAuthSeq = equipAuthRequest.getEquipAuthSeq(); + String connectorId = equipAuthRequest.getConnectorId(); + equipAuthResponse.setEquipAuthSeq(equipAuthSeq); + equipAuthResponse.setConnectorId(connectorId); + String pileId = connectorId.substring(0, connectorId.length() - 2); + Map pileDataModel = REDIS.getCacheMap("pile:" + pileId); + Long stationId = Long.parseLong(pileDataModel.get("stationId").toString()); + Instant now = Instant.now(); + XhpcInternetUser xhpcInternetUser = xhpcInternetUserRepository + .findByOperatorIdEvcsLikeAndCooperationStartTimeBeforeAndCooperationEndTimeAfter(commonRequest.getOperatorId(), now, now); + if (xhpcInternetUser == null) { + equipAuthResponse.setSuccStat(1); + equipAuthResponse.setFailReason(2); + equipAuthResponse.setFailReasonMsg("身份验证失败"); + resp.setMsg("auth denied"); + } else { + Long internetUserId = xhpcInternetUser.getInternetUserId(); + XhpcStationInternetBlacklist xhpcStationInternetBlacklist = + xhpcStationInternetBlacklistRepo.findByChargingStationIdAndInternetUserId(stationId, internetUserId).orElse(null); + if (null != xhpcStationInternetBlacklist) { + equipAuthResponse.setSuccStat(1); + equipAuthResponse.setFailReason(2); + equipAuthResponse.setFailReasonMsg("身份验证失败"); + resp.setMsg("auth denied"); + } else { + Map cacheGun = REDIS.getCacheMap("gun:".concat(connectorId)); + String terminalStatus = (String) cacheGun.get("vehicleGunStatus"); + String status = (String) cacheGun.get("status"); + if (!"空闲".equals(status)) { + resp.setMsg("终端不在空闲状态:[".concat(status == null ? "未注册" : isInteger(status) ? "充电中" : status).concat( + "]")); + equipAuthResponse.setSuccStat(1); + equipAuthResponse.setFailReason(1); + } else if ("否".equals(terminalStatus)) { + resp.setMsg("未插枪"); + equipAuthResponse.setSuccStat(1); + equipAuthResponse.setFailReason(1); + } else { + resp.setRet("0"); + resp.setMsg("success"); + equipAuthResponse.setSuccStat(0); + equipAuthResponse.setFailReason(0); + } + + } + } + resp.setData(JSONUtil.toJSONString(equipAuthResponse)); + } + return resp; + } + + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryEquipBusinessPolicyController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryEquipBusinessPolicyController.java new file mode 100644 index 00000000..7551cbf4 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryEquipBusinessPolicyController.java @@ -0,0 +1,162 @@ +package com.xhpc.evcs.ykc.api; + +import com.xhpc.common.data.redis.CacheRateModel; +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.jpa.XhpcTerminalRepository; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; + +/** + * 云快充 + * + * @author yuyang + * @Date 2026-03-17 13:35 + */ +@Slf4j +@RestController +public class YKCQueryEquipBusinessPolicyController { + @Autowired + private XhpcTerminalRepository xhpcTerminalRepository; + + /** + * 查询业务策略信息结果 + * @param commonRequest + * @return + * @throws IOException + */ + @PostMapping("/v50/query_equip_business_policy") + public CommonResponse queryEquipBusinessPolicy(@RequestBody CommonRequest commonRequest) throws IOException { + //获取充电设备接口编码(枪编码) + EquipBizRequest equipBizRequest = JSONUtil.readParams(commonRequest.getData(), EquipBizRequest.class); + CommonResponse commonResponse = new CommonResponse(); + if (equipBizRequest == null) { + commonResponse.setRet("500"); + commonResponse.setMsg("Request or token params validation failed"); + } else { + String connectorId = equipBizRequest.getConnectorId(); + //获取枪所对应的桩编码 + String pileSerialNumber = xhpcTerminalRepository.selectBySql(connectorId); + Map cachePile = REDIS.getCacheMap("pile:" + pileSerialNumber); + if (pileSerialNumber == null || cachePile == null) { + commonResponse.setMsg("ConnectorID not found"); + commonResponse.setRet("500"); + return commonResponse; + } + ArrayList modelTypes = new ArrayList<>(); + //存储时段个数 + ArrayList modelCount = new ArrayList<>(); + Long rateModelId = (Long) cachePile.get("rateModelId"); + CacheRateModel rateModel = REDIS.getCacheObject("rateModel:" + rateModelId); + PolicyInfos[] policyInfosArr = new PolicyInfos[0]; + if (rateModel != null) { + String[] tfPricesSeq = rateModel.getTfPricesSeq(); + //存储时段 + //建立对应时段的映射Map集合,存放其对应的价格和服务费 + Map timeMap = new HashMap<>(); + //个数计数器 + int count = 0; + //最后一个时段的前一个时段的下标索引 + int index = 0; + //遍历获取每一个时段 + for (int i = 0; i < tfPricesSeq.length - 1; i++) { + count++; + //如果当前时段与后面的时段不相同,则表示当前时段已经结束,添加当前时段到list中,并将其坐标存放到另一个集合中。 + if (!tfPricesSeq[i].equals(tfPricesSeq[i + 1])) { + //将每段时间的索引,赋值 + index = i; + modelTypes.add(tfPricesSeq[i]); + modelCount.add(count); + //如果这段时段结束,则重置计数器 + count = 0; + } + } + //获取最后一个时段的费率值 + String lastModelType = tfPricesSeq[tfPricesSeq.length - 1]; + //放入到类型list中 + modelTypes.add(lastModelType); + //获取最后一个时段的费率的个数 + int lastCount = (tfPricesSeq.length - 1) - index; + //放入到个数List中 + modelCount.add(lastCount); + + //获取各个类型的时段的时间区间,并将其存放至timeList集合中。 + //定义一个初始时间段 + String initTime = "000000"; + //添加临时存储变量 + int temp = -1; + ArrayList timeList = new ArrayList<>(); + //放入必有初始时间 + timeList.add(initTime); + //根据出现的时段个数确定他们的时间区间,然后存放至List集合中 + int cumulativeHalfHours = 0; + for (int i = 0; i < modelCount.size() - 1; i++) { + cumulativeHalfHours += modelCount.get(i); + int hour = cumulativeHalfHours / 2; + int minute = (cumulativeHalfHours % 2) * 30; + String startTime = String.format("%02d%02d%02d", hour, minute, 0); + timeList.add(startTime); + } + policyInfosArr = new PolicyInfos[timeList.size()]; + for (int i = 0; i <= timeList.size() - 1; i++) { + PolicyInfos policyInfos = new PolicyInfos(); + policyInfos.setStartTime(timeList.get(i)); + String modelType = modelTypes.get(i); + switch (modelType) { + case "00": + policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT1SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue()); + policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT1Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue()); + break; + case "01": + policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT2SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue()); + policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT2Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue()); + break; + case "02": + policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT3SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue()); + policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT3Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue()); + break; + case "03": + policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT4SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue()); + policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT4Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue()); + break; + default: + break; + } + policyInfosArr[i] = policyInfos; + } + } + + //封装数据 + EquipBizResponse equipBizResponse = new EquipBizResponse(); + //业务查询流水号 + equipBizResponse.setEquipBizSeq(equipBizRequest.getEquipBizSeq()); + //充电设备接口编码 + equipBizResponse.setConnectorId(connectorId); + //操作结果 + equipBizResponse.setSuccStat(0); + //失败原因 + equipBizResponse.setFailReason(0); + //总时段数 + equipBizResponse.setSumPeriod(modelTypes.size()); + //计费信息 + equipBizResponse.setPolicyInfos(policyInfosArr); + + //塞入包装类 + commonResponse.setMsg("Query equipment business policy success"); + commonResponse.setRet("0"); + commonResponse.setData(JSONUtil.toJSONString(equipBizResponse)); + } + return commonResponse; + } +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryEquipChargeStatusController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryEquipChargeStatusController.java new file mode 100644 index 00000000..c42cced3 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryEquipChargeStatusController.java @@ -0,0 +1,288 @@ +package com.xhpc.evcs.ykc.api; + +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import com.xhpc.common.data.redis.CacheBmsReqChargerOutputData; +import com.xhpc.common.data.redis.CacheRateModel; +import com.xhpc.common.data.redis.CacheRealtimeData; +import com.xhpc.evcs.cwj.dto.CEJEquipChargeStatus; +import com.xhpc.evcs.domain.EtOrderMapping; +import com.xhpc.evcs.dto.ChargeDetails; +import com.xhpc.evcs.dto.ChargeInfoRequest; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.jpa.OrderMappingRepository; +import com.xhpc.evcs.jpa.XhpcHistoryOrderRepository; +import com.xhpc.evcs.utils.DateUtil; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.Duration; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.Date; +import java.util.Map; +import java.util.Stack; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; +import static com.xhpc.evcs.utils.DateUtil.orderNo2DateStr; + +/** + * 云快充 + * + * @author yuyang + * @Date 2026-03-17 13:36 + */ +@Slf4j +@RestController() +public class YKCQueryEquipChargeStatusController { + @Autowired + XhpcHistoryOrderRepository xhpcHistoryOrderRepository; + @Autowired + OrderMappingRepository orderMappingRepository; + + /** + * 查询充电状态 + * @param commonRequest + * @return + * @throws IOException + */ + @PostMapping("/v50/query_equip_charge_status") + public CommonResponse queryEquipChargeStatus(@RequestBody CommonRequest commonRequest) throws IOException { + //创建数据实体类 + CEJEquipChargeStatus equipChargeStatus = new CEJEquipChargeStatus(); + //充电订单号 三方传进来都是27位 + String data = commonRequest.getData(); + ChargeInfoRequest chargeInfoRequest = JSONUtil.readParams(data, ChargeInfoRequest.class); + CommonResponse response = new CommonResponse(); + if (chargeInfoRequest == null) { + response.setRet(EvcsConst.RET_FAIL); + response.setMsg("Request or token params validation failed"); + } else { + String startChargeSeq = chargeInfoRequest.getStartChargeSeq(); + equipChargeStatus.setStartChargeSeq(startChargeSeq); + //充电订单状态 + EtOrderMapping etOrderMapping = orderMappingRepository.findByEvcsOrderNo(startChargeSeq).orElse(null); + if (etOrderMapping == null) { + response.setRet(EvcsConst.RET_FAIL); + response.setMsg("Order not found/started"); + log.error("3rdpty order[{}] not found", startChargeSeq); + return response; + } + String internalOrderNum = etOrderMapping.getXhOrderNo(); + Map cacheOrder = REDIS.getCacheMap("order:" + internalOrderNum); + if (cacheOrder == null) { + response.setRet(EvcsConst.RET_FAIL); + response.setMsg("Order cache data not found"); + } else { + String orderStatus = (String) cacheOrder.get("status"); + int startChargeSeqStat; + if (orderStatus == null) { + startChargeSeqStat = 5; + } else switch (orderStatus) { + case "启动中": + startChargeSeqStat = 1; + break; + case "充电中": + startChargeSeqStat = 2; + break; + case "停止中": + startChargeSeqStat = 3; + break; + case "已结束": + startChargeSeqStat = 4; + break; + default: + startChargeSeqStat = 5; + break; + } + equipChargeStatus.setStartChargeSeqStat(startChargeSeqStat); + //充电设备接口编码 + String connectorId = internalOrderNum.substring(0, 16); + equipChargeStatus.setConnectorID(connectorId); + //充电设备接口状态 + Map cacheGunData = REDIS.getCacheMap("gun:" + connectorId); + String gunStatus = (String) cacheGunData.get("status"); + int connectorStatus = 0; + switch (gunStatus) { + case "空闲": + connectorStatus = 1; + break; + case "插枪": + connectorStatus = 2; + break; + case "离线": + connectorStatus = 0; + break; + case "故障": + connectorStatus = 255; + break; + default: + connectorStatus = 3; + break; + } + equipChargeStatus.setConnectorStatus(connectorStatus); + //A相电流 + Double current = (Double) cacheGunData.get("current"); + equipChargeStatus.setCurrentA(current); + //A相电压 + Double voltage = (Double) cacheGunData.get("voltage"); + equipChargeStatus.setVoltageA(voltage); + //电池剩余电量 + Integer endSoc = (Integer) cacheOrder.get("endSoc"); + Double soc = Double.valueOf(endSoc == null ? 0 : endSoc); + equipChargeStatus.setSoc(soc); + //开始充电时间 + String startTime = (String) cacheOrder.get("startTime"); + if (startTime == null) startTime = orderNo2DateStr(internalOrderNum); + equipChargeStatus.setStartTime(startTime); + //本次采样时间 直接new一个当前时间的Date就可以了 + CacheRealtimeData lord = REDIS.getCacheObject("order:" + internalOrderNum + ".lord"); + if (lord != null) { + equipChargeStatus.setEndTime(lord.getCreateTime()); + equipChargeStatus.setTotalMoney(lord.getAmountCharged() / 10000.0); + equipChargeStatus.setTotalPower(lord.getChargingDegree() / 10000.0); + } else { + equipChargeStatus.setEndTime(equipChargeStatus.getStartTime()); + equipChargeStatus.setTotalMoney(0.0); + equipChargeStatus.setTotalPower(0.0); + } + final Long rateModelId = REDIS.getCacheMapValue("pile:".concat(connectorId.substring(0, 14)), "rateModelId"); + final CacheRateModel cacheRateModel = REDIS.getCacheObject("rateModel:" + rateModelId); + calculateEmYu(equipChargeStatus, cacheRateModel); + + CacheBmsReqChargerOutputData bms = REDIS.getCacheObject("order:"+internalOrderNum+".bms"); + if(bms==null || bms.getBmsEstRemainingTime()==null){ + equipChargeStatus.setLeftTime(60); + }else{ + equipChargeStatus.setLeftTime(bms.getBmsEstRemainingTime()); + } + + response.setRet(EvcsConst.RET_SUCC); + response.setData(JSONUtil.toJSONString(equipChargeStatus)); + response.setMsg("success"); + } + } + return response; + } + + + + public static void calculateEmYu(CEJEquipChargeStatus equipChargeStatus, CacheRateModel cacheRateModel) { + + if (cacheRateModel == null) { + equipChargeStatus.setChargeDetails(new ChargeDetails[0]); + return; + } + final Date endTime = DateUtil.yyyyMMDDhhmmss2Date(equipChargeStatus.getEndTime()); + final Date startTime = DateUtil.yyyyMMDDhhmmss2Date(equipChargeStatus.getStartTime()); + long totalMilSec = endTime.getTime() - startTime.getTime(); + BigDecimal hours = new BigDecimal(totalMilSec).divide(new BigDecimal(3600000), 2, RoundingMode.FLOOR); + int sumPeriod = hours.setScale(0, RoundingMode.CEILING).intValue() + 1; + equipChargeStatus.setSumPeriod(sumPeriod); + DateTime firstNDT = DateTime.of(startTime); + Stack chargeDetailsStack = new Stack<>(); + ChargeDetails chargeDetails = null; + Double firstNElecMoney = 0.0; + Double firstNSeviceMony = 0.0; + Double firstNPower = 0.0; + String rtfTemp = null; + Instant startIst = startTime.toInstant(); + final Instant endInst = endTime.toInstant(); + Instant endPeriod; + final Double totalPower = equipChargeStatus.getTotalPower(); + for (int i = 0; i < sumPeriod; i++) { + if (!startIst.isBefore(endInst)) break; + endPeriod = startIst.truncatedTo(ChronoUnit.HOURS).plusSeconds(3599L); + if (!endPeriod.isBefore(endInst)) { + endPeriod = endInst; + } + boolean newCd = false; + int firstSTHourOfDay = firstNDT.getField(DateField.HOUR_OF_DAY); + int tf = firstSTHourOfDay * 2; + final String rtf = cacheRateModel.getTfPricesSeq()[tf]; + if (chargeDetails == null || !rtf.equals(rtfTemp)) { + newCd = true; + chargeDetails = new ChargeDetails(); + } + rtfTemp = rtf; + Duration durm = Duration.between(startIst, endPeriod); + BigDecimal timePeriodRatio = BigDecimal.valueOf(durm.toMillis()).divide(BigDecimal.valueOf(totalMilSec), 2, + RoundingMode.HALF_UP); + calculateCD(cacheRateModel, rtf, timePeriodRatio, BigDecimal.valueOf(totalPower), chargeDetails); + if (i == 0) { + chargeDetails.setDetailStartTime(equipChargeStatus.getStartTime()); + } else if (newCd) { + chargeDetails.setDetailStartTime(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()).format(startIst)); + } + startIst = startIst.truncatedTo(ChronoUnit.HOURS).plusSeconds(3600L); + chargeDetails.setDetailEndTime(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()).format(endPeriod)); + if (newCd) { + chargeDetailsStack.push(chargeDetails); + } + } + ChargeDetails[] cda = new ChargeDetails[chargeDetailsStack.size()]; + equipChargeStatus.setChargeDetails(chargeDetailsStack.toArray(cda)); + equipChargeStatus.setSumPeriod(chargeDetailsStack.size()); + equipChargeStatus.setElecMoney(firstNElecMoney); + final Double totalMoney = equipChargeStatus.getTotalMoney(); + for (ChargeDetails cd : chargeDetailsStack) { + firstNElecMoney += cd.getDetailElecMoney(); + firstNSeviceMony += cd.getDetailSeviceMoney(); + firstNPower += cd.getDetailPower(); + } + equipChargeStatus.setElecMoney(BigDecimal.valueOf(totalMoney).subtract(BigDecimal.valueOf(firstNSeviceMony)).setScale(2, RoundingMode.HALF_UP).doubleValue()); + equipChargeStatus.setSeviceMoney(BigDecimal.valueOf(firstNSeviceMony).setScale(2, RoundingMode.HALF_UP).doubleValue()); + final BigDecimal oddm = + BigDecimal.valueOf(totalMoney).subtract(BigDecimal.valueOf(firstNElecMoney)).subtract(BigDecimal.valueOf(firstNSeviceMony)); + final BigDecimal oddp = BigDecimal.valueOf(totalPower).subtract(BigDecimal.valueOf(firstNPower)); + if (!chargeDetailsStack.isEmpty()) { + ChargeDetails peek = chargeDetailsStack.peek(); + peek.setDetailElecMoney(BigDecimal.valueOf(peek.getDetailElecMoney()).add(oddm).setScale(2, RoundingMode.HALF_UP).doubleValue()); + peek.setDetailPower(BigDecimal.valueOf(peek.getDetailPower()).add(oddp).setScale(4, RoundingMode.HALF_UP).doubleValue()); + } + } + + + private static void calculateCD(CacheRateModel cacheRateModel, String rtf, + BigDecimal timePeriodRatio, BigDecimal tpPower, ChargeDetails cd) { + + cd.setDetailPower(BigDecimal.valueOf(cd.getDetailPower() + tpPower.multiply(timePeriodRatio).doubleValue()).setScale(4, RoundingMode.HALF_UP).doubleValue()); + + Integer powerPrice; + Integer svcPrice; + if ("00".equals(rtf)) { + powerPrice = cacheRateModel.getT1Price(); + svcPrice = cacheRateModel.getT1SvcPrice(); + } else if ("01".equals(rtf)) { + powerPrice = cacheRateModel.getT2Price(); + svcPrice = cacheRateModel.getT2SvcPrice(); + } else if ("02".equals(rtf)) { + powerPrice = cacheRateModel.getT3Price(); + svcPrice = cacheRateModel.getT3SvcPrice(); + } else{ + powerPrice = cacheRateModel.getT4Price(); + svcPrice = cacheRateModel.getT4SvcPrice(); + } + cd.setElecPrice( new BigDecimal(powerPrice).divide(new BigDecimal(100000)).setScale(4,RoundingMode.HALF_UP).doubleValue()); + cd.setSevicePrice(new BigDecimal(svcPrice).divide(new BigDecimal(100000)).setScale(4,RoundingMode.HALF_UP).doubleValue()); + final double detailElecMoney = BigDecimal.valueOf(cd.getElecPrice()) + .multiply(BigDecimal.valueOf(cd.getDetailPower())) + .setScale(2, RoundingMode.HALF_UP).doubleValue(); + cd.setDetailElecMoney(BigDecimal.valueOf(detailElecMoney).setScale(2, RoundingMode.HALF_UP).doubleValue()); + final double detailSeviceMoney = BigDecimal.valueOf(cd.getSevicePrice()) + .multiply(BigDecimal.valueOf(cd.getDetailPower())) + .setScale(2, RoundingMode.HALF_UP).doubleValue(); + cd.setDetailSeviceMoney(BigDecimal.valueOf(detailSeviceMoney).setScale(2, RoundingMode.HALF_UP).doubleValue()); + } +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryStartChargeController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryStartChargeController.java new file mode 100644 index 00000000..d02e30cd --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryStartChargeController.java @@ -0,0 +1,237 @@ +package com.xhpc.evcs.ykc.api; + +import com.xhpc.common.api.PileOrderService; +import com.xhpc.common.core.domain.R; +import com.xhpc.common.core.utils.DateUtils; +import com.xhpc.evcs.api.QueryStartChargeController; +import com.xhpc.evcs.cwj.dto.CWJStartChargeRequest; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.domain.EtOrderMapping; +import com.xhpc.evcs.domain.XhpcChargingStation; +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.jpa.*; +import com.xhpc.evcs.utils.JSONUtil; +import com.xhpc.order.domain.XhpcHistoryOrder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import com.xhpc.evcs.notification.CoreDispatcher; +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; +import static com.xhpc.common.data.redis.StaticBeanUtil.genOrder; +import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; + +/** + * 云快充 + * + * @author yuyang + * @Date 2026-03-17 13:37 + */ +@RestController +public class YKCQueryStartChargeController extends CoreDispatcher { + + @Autowired + AuthSecretTokenRepository authSecretTokenRepository; + @Autowired + private OrderMappingRepository etOrderMappingRepo; + @Autowired + private XhpcHistoryOrderRepository xhpcHistoryOrderRepository; + @Autowired + private XhpcTerminalRepository xhpcTerminalRepository; + @Autowired + private PileOrderService pileOrderService; + @Autowired + private XhpcInternetUserRepository xhpcInternetUserRepository; + @Autowired + private XhpcChargingStationRepository xhpcChargingStationRepository; + + private final Logger logger = LoggerFactory.getLogger(QueryStartChargeController.class); + private final ExecutorService asyncExecutor = Executors.newFixedThreadPool(40); + /** + * 请求启动充电 + * @param commonRequest + * @return + * @throws Exception + */ + @PostMapping(value = "/v50/query_start_charge") + public CommonResponse queryStartCharge(@RequestBody CommonRequest commonRequest) throws Exception { + + CommonResponse resp = new CommonResponse(); + resp.setRet(EvcsConst.RET_FAIL); + Map pushOrder = new HashMap<>(); + String orderNo =""; + StartChargeRequest startChargeRequest = JSONUtil.readParams(commonRequest.getData(), StartChargeRequest.class); + if (startChargeRequest == null) { + resp.setMsg("Request or token params validation failed"); + } else { + String startChargeSeq = startChargeRequest.getStartChargeSeq(); + EtOrderMapping orderMapping = etOrderMappingRepo.findByEvcsOrderNo(startChargeSeq).orElse(null); + if (orderMapping != null) { + resp.setMsg("Duplicated StartChargeSeq"); + } else { + StartChargeResponse startChargeResponse = new StartChargeResponse(); + startChargeResponse.setFailReason(0); + startChargeResponse.setSuccStat(1); + startChargeResponse.setStartChargeSeqStat(4); + String connectorId = startChargeRequest.getConnectorId(); + Map cacheGun = REDIS.getCacheMap("gun:".concat(connectorId)); + String terminalStatus = (String) cacheGun.get("vehicleGunStatus"); + String status = (String) cacheGun.get("status"); + EtOrderMapping etOrderMapping = new EtOrderMapping(); + Date now = DateUtils.getNowDate(); + etOrderMapping.setCreateTime(now); + etOrderMapping.setEvcsOrderNo(startChargeSeq); + if (!"空闲".equals(status)) { + resp.setMsg("终端状态异常:[".concat(status == null ? "未注册" : status).concat("]")); + emptyHorder(startChargeSeq, connectorId, etOrderMapping); + } else if ("否".equals(terminalStatus)) { + resp.setMsg("未插枪"); + emptyHorder(startChargeSeq, connectorId, etOrderMapping); + } else { + String plateNum = startChargeRequest.getPlateNum(); + plateNum = plateNum == null ? startChargeRequest.getPlateNum2() : plateNum; + R res = pileOrderService.pileStartUpBy3rd(startChargeSeq, startChargeRequest.getDriverId(), + startChargeRequest.getChargingAmt(), plateNum, -1, connectorId); + startChargeResponse.setStartChargeSeq(startChargeSeq); + startChargeResponse.setConnectorID(connectorId); + resp.setMsg(res.getMsg()); + if (res.getCode() != 200) { + if (res.getCode() != 500) { + startChargeResponse.setFailReason(res.getCode()); + } else { + startChargeResponse.setFailReason(3); + } + startChargeResponse.setSuccStat(1); + startChargeResponse.setStartChargeSeqStat(4); + emptyHorder(startChargeSeq, connectorId, etOrderMapping); + } else { + Map etOrderData = (Map) res.getData(); + if (etOrderData != null) { + resp.setRet(EvcsConst.RET_SUCC); + startChargeResponse.setStartChargeSeqStat(1); + startChargeResponse.setSuccStat(0); + startChargeResponse.setFailReason(0); + + pushOrder.put("startChargeSeqStat", 1); + pushOrder.put("internetSerialNumber", startChargeRequest.getStartChargeSeq()); + pushOrder.put("connectorID", connectorId); + pushOrder.put("startChargeNotificationStat", 0); + pushOrder.put("chargeOrderInfoNotificationStat", 0); + pushOrder.put("operatorId3rdpty", startChargeSeq.substring(0, 9)); + pushOrder.put("startTime", etOrderData.get("startTime")); + orderNo = (String) etOrderData.get("orderNo"); + etOrderMapping.setXhOrderNo(orderNo); + REDIS.setCacheMap("pushOrder:".concat(orderNo), pushOrder); + } else { + emptyHorder(startChargeSeq, connectorId, etOrderMapping); + } + } + } + etOrderMappingRepo.save(etOrderMapping); + resp.setData(JSONUtil.toJSONString(startChargeResponse)); + } + } + +// if("0".equals(resp.getRet())){ +// String finalOrderNo = orderNo; +// CompletableFuture.runAsync(()->{ +// System.out.println(">>> 异步回复 <<<"); +// processRequest(pushOrder,startChargeRequest.getStartChargeSeq(), finalOrderNo); +// },asyncExecutor); +// } +// System.out.println(">>> 回复启动结果 <<<"); + return resp; + } + + private void emptyHorder(String startChargeSeq, String connectorId, EtOrderMapping etOrderMapping) { + + final Long stationId = REDIS.getCacheMapValue("pile:".concat(connectorId.substring(0, 14)), "stationId"); + XhpcChargingStation xhpcChargingStation = xhpcChargingStationRepository.findById(stationId).orElse(null); + if (xhpcChargingStation != null) { + XhpcHistoryOrder emptyHorder = new XhpcHistoryOrder(); + emptyHorder.setTenantId(xhpcChargingStation.getTenantId()); + Date now = DateUtils.getNowDate(); + emptyHorder.setStartTime(now); + emptyHorder.setEndTime(now); + emptyHorder.setCreateTime(now); + emptyHorder.setUpdateTime(now); + emptyHorder.setStopReasonEvcs("平台停止"); + String sn = genOrder(connectorId); + etOrderMapping.setXhOrderNo(sn); + emptyHorder.setSerialNumber(sn); + emptyHorder.setInternetSerialNumber(startChargeSeq); + String operatorId3rdpty = startChargeSeq.substring(0, 9); + emptyHorder.setOperatorId3rdptyEvcs(operatorId3rdpty); + emptyHorder.setUserId(xhpcInternetUserRepository.queryDbId(operatorId3rdpty)); + emptyHorder.setType(1); + emptyHorder.setSource(1); + emptyHorder.setState(-1); + emptyHorder.setChargingStationId(stationId); + emptyHorder.setTerminalId(xhpcTerminalRepository.queryDbId(connectorId)); + emptyHorder.setConfirmResult(-1); + xhpcHistoryOrderRepository.save(emptyHorder); + } + } + + + public void notify(NotificationStartChargeResultRequestData notificationStartChargeResultRequestData, + AuthSecretToken authSecretTokenOut, String orderNo, String startChargeSeq) throws IOException { + + String data = JSONUtil.toJSONString(notificationStartChargeResultRequestData); + + CommonRequest commonRequest = new CommonRequest<>(); + commonRequest.setData(data); + String responseBody = ok(commonRequest, "/notification_start_charge_result", authSecretTokenOut); + logger.info("==========第三方调用启动充电接口=====启动推送结果=====responseBody======================="+responseBody+"=================orderNo================="+orderNo); + NotificationStartStopChargeResultResponse notificationStartStopChargeResultResponse =DTOJsonHelper.parseResponseData(responseBody,NotificationStartStopChargeResultResponse.class, authSecretTokenOut); + + if (null != notificationStartStopChargeResultResponse) { + //Ensuring that only when startChargeNotificationStat equals 1 won't be notified. + if (notificationStartStopChargeResultResponse.getSuccStat() == 0) { + REDIS.setCacheMapValue("pushOrder:".concat(orderNo), "startChargeNotificationStat", 1); + } else { + Integer startChargeNotificationStat = REDIS.getCacheMapValue("pushOrder:".concat(orderNo), + "startChargeNotificationStat"); + if (startChargeNotificationStat == 0) { + startChargeNotificationStat = 2; + } else { + ++startChargeNotificationStat; + } + REDIS.setCacheMapValue("pushOrder:".concat(orderNo), "startChargeNotificationStat",startChargeNotificationStat); + throw new RuntimeException(String.format("push CD start charge order status [%s] failed: %s",notificationStartChargeResultRequestData.getStartChargeSeq(), responseBody)); + } + } + } + @Async + public void processRequest(Map pushOrder,String startChargeSeq,String orderNo){ + System.out.println(">>> 开始执行后续操作 <<<"); + try{ + //推送启动成功数据 + String operatorId = startChargeSeq.substring(0, 9); + Optional authSecretToken =authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(operatorId,SECRET_TOKEN_TYPE_OUT); + if (authSecretToken.isPresent()) { + NotificationStartChargeResultRequestData notificationStartChargeResultRequestData = new NotificationStartChargeResultRequestData(); + notificationStartChargeResultRequestData.setStartTime((String) pushOrder.get("startTime")); + notificationStartChargeResultRequestData.setStartChargeSeq(startChargeSeq); + notificationStartChargeResultRequestData.setConnectorId((String) pushOrder.get("connectorID")); + notificationStartChargeResultRequestData.setStartChargeSeqStat((Integer) pushOrder.get("startChargeSeqStat")); + notify(notificationStartChargeResultRequestData, authSecretToken.get(), orderNo,startChargeSeq); + } + }catch (Exception e){ + logger.info("==========第三方调用启动充电接口=====启动推送失败=====responseBody======================="); + } + } +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryStationsInfoController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryStationsInfoController.java new file mode 100644 index 00000000..85829f06 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryStationsInfoController.java @@ -0,0 +1,367 @@ +package com.xhpc.evcs.ykc.api; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import com.xhpc.common.api.PowerPileService; +import com.xhpc.common.api.dto.ChargingStationDto; +import com.xhpc.common.core.utils.bean.BeanUtils; +import com.xhpc.common.domain.XhpcTerminal; +import com.xhpc.evcs.cdjgpc.dto.CDConnectorInfo; +import com.xhpc.evcs.cdjgpc.dto.CDEquipmentInfo; +import com.xhpc.evcs.cdjgpc.dto.CDStationFee; +import com.xhpc.evcs.cdjgpc.dto.CDStationInfo; +import com.xhpc.evcs.cwj.dto.*; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.domain.XhpcInternetUser; +import com.xhpc.evcs.domain.XhpcStationInternetBlacklist; +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.jpa.*; +import com.xhpc.evcs.notification.CoreDispatcher; +import com.xhpc.evcs.utils.JSONUtil; +import com.xhpc.order.domain.XhpcPlaceholderOrder; +import com.xhpc.order.domain.XhpcPlacreholder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.Instant; +import java.util.*; +import java.util.stream.Collectors; + +import static cn.hutool.core.util.NumberUtil.isInteger; +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; +import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; + +/** + * 云快充 + * + * @author yuyang + * @Date 2026-03-17 13:41 + */ +@Slf4j +@RestController +public class YKCQueryStationsInfoController extends CoreDispatcher { + @Resource + XhpcInternetUserRepository xhpcInternetUserRepository; + @Resource + XhpcStationInternetBlacklistRepository xhpcStationInternetBlacklistRepo; + @Resource + PowerPileService powerPileService; + @Resource + AuthSecretTokenRepository authSecretTokenRepository; + @Resource + XhpcTerminalRepository terminalRepository; + @Resource + private PlaceholderIRepository placeholderIRepository; + @Autowired + private PlaceholderIOrderRepository placeholderIOrderRepository; + /** + * 云快充查询充电站信息 + * @param commonRequest + * @return + * @throws Exception + */ + @PostMapping("/v50/query_stations_info") + public CommonResponse queryStationsInfo(@RequestBody(required = false) CommonRequest commonRequest) { + + // System.out.println("================车为家查询充电站信息======================="); + CommonResponse resp = new CommonResponse(); + try{ + //当前页数 + CWJPageRequest pageRequest = commonRequest.transformDataType(CWJPageRequest.class); + Integer pageNo = pageRequest.getPageNo(); + CWJPageStationsInfoResponse response = new CWJPageStationsInfoResponse(); + response.setPageNo(pageNo); + //页码总数 + String operatorId = commonRequest.getOperatorId(); + Instant now = Instant.now(); + XhpcInternetUser xhpcInternetUser =xhpcInternetUserRepository.findByOperatorIdEvcsLikeAndCooperationStartTimeBeforeAndCooperationEndTimeAfter(operatorId, now, now); + Long internetUserId = xhpcInternetUser.getInternetUserId(); + List xhpcStationInternetBlacklist =xhpcStationInternetBlacklistRepo.findByInternetUserId(internetUserId); + List stationKeys = new ArrayList<>(REDIS.keys("station:*")); + List validStationKeys = new ArrayList<>(); + for (String stationKey : stationKeys) { + boolean isValid = true; + //查询不合作的电桩 + for (XhpcStationInternetBlacklist xhpcStationInternetBlack : xhpcStationInternetBlacklist) { + if (stationKey.substring(8).equals(xhpcStationInternetBlack.getChargingStationId().toString())) { + isValid = false; + } + } + ChargingStationDto chargingStationDto = REDIS.getCacheObject(stationKey); + if (chargingStationDto.getPiles() != null) { + if (isValid) { + validStationKeys.add(stationKey); + } + } + } + if (validStationKeys.size() > 0) { + Integer pageSize = pageRequest.getPageSize(); + int totalPage = validStationKeys.size() % pageSize == 0 ? validStationKeys.size() / pageSize : + (validStationKeys.size() / pageSize) + 1; + response.setPageCount(totalPage); + } + //总记录条数 + response.setItemSize(validStationKeys.size()); + + //充电站信息列表 + List stationInfos = new ArrayList<>(); + //计算每页开始索引 + int startIndex = -1; + int endIndex = -1; + if (pageNo == 1 && validStationKeys.size() <= 10) { + startIndex = 0; + endIndex = validStationKeys.size() - 1; + } else { + Integer pageSize = pageRequest.getPageSize(); + startIndex = (pageNo - 1) * pageSize; + endIndex = startIndex + (pageSize - 1); + } + for (int i = startIndex; i <= endIndex; i++) { + String stationKey = null; + try { + stationKey = validStationKeys.get(i); + } catch (Exception e) { + continue; + } + String stationId = stationKey.replace("station:", ""); + stationInfos.add(getNotificationStationInfo(stationId)); + } + response.setStationInfos(stationInfos); + resp.setRet("0"); + resp.setMsg("Query station info success"); + + System.out.println("========/v50/query_stations_info=============="+ JSONUtil.toJSONString(response)); + resp.setData(JSONUtil.toJSONString(response)); + + }catch (Exception e){ + e.printStackTrace(); + } + + return resp; + } + + //组合场站数据 + public CWJStationInfo getNotificationStationInfo(String stationId){ + CWJStationInfo cwjStationInfo = new CWJStationInfo(); + + String key = "cdjgpc:station:".concat(stationId)+".notification"; + CDStationInfo cdStationInfo = REDIS.getCacheObject(key); + + BeanUtils.copyBeanProp(cwjStationInfo,cdStationInfo); + cwjStationInfo.setBusineHours("00:00-24:00"); + cwjStationInfo.setParkingDiscountType(2); + + //获取占位费信息 + XhpcPlacreholder xhpcPlacreholder = placeholderIRepository.findByYkcStatusAndChargingStationIdAndDelFlag(1,Long.valueOf(stationId), 0); + if(xhpcPlacreholder !=null){ + cwjStationInfo.setOvertimeFee(xhpcPlacreholder.getContent()); + } + //cwjStationInfo.setAreaCode(cdStationInfo.getAreaCodeCountryside()); + cwjStationInfo.setEquipmentInfos(new ArrayList<>()); + //查询场站是桩是否对应上 + ChargingStationDto stationDto = REDIS.getCacheObject("station:"+stationId); + + List cwjEquipmentInfos = new ArrayList<>(); + + Set pks = stationDto.getPiles(); + if (pks != null) { + for (String pileNo : pks) { + String pk = "pile:".concat(pileNo); + String skey = "cdjgpc:".concat(pk) + ".notification"; + CDEquipmentInfo cdEquipmentInfo = REDIS.getCacheObject(skey); + CWJEquipmentInfo cwjEquipmentInfo = new CWJEquipmentInfo(); + BeanUtils.copyBeanProp(cwjEquipmentInfo,cdEquipmentInfo); + + List connectorInfos =new ArrayList<>(); + List connectorInfos1 = cdEquipmentInfo.getConnectorInfos(); + + for (int i = 0; i commonRequest) throws Exception { + + CommonResponse resp = new CommonResponse(); + resp.setRet(EvcsConst.RET_FAIL); + StationStatusRequest stationStatusRequest = JSONUtil.readParams(commonRequest.getData(), StationStatusRequest.class); + if (stationStatusRequest == null) { + resp.setMsg("Request or token params validation failed"); + } else { + String[] stationIDs = stationStatusRequest.getStationIds(); + List cdStationStatusInfos = new ArrayList<>(); + //Loading data through redis at first. + Collection guns = REDIS.keys("gun:*"); + List gunsNewList = new ArrayList<>(); + for (String value : guns) { + gunsNewList.add(value.substring(4)); + } + List gunsIds = new ArrayList<>(); + for (String value : gunsNewList) { + if (value.length() == 16) { + gunsIds.add(value); + } + } + Map statusMap = new HashMap<>(); + String[] keys = {"离线", "空闲", "故障", "插枪"}; + Integer[] values = {0, 1, 255,2}; + for (int i = 0; i < keys.length; i++) { + statusMap.put(keys[i], values[i]); + } + + List terminalList = terminalRepository.selectStatusBySql(); + Map terminalDBMap = terminalList.stream().collect(Collectors.toMap(XhpcTerminal::getSerialNumber,XhpcTerminal::getStatus)); + + for (String stationID : stationIDs) { + ChargingStationDto chargingStationDto = REDIS.getCacheObject("station:" + stationID); + Set pileIds = new HashSet<>(); + if (null != chargingStationDto) { + pileIds = chargingStationDto.getPiles(); + } + boolean existsGun = false; + List connectorStatusInfos = new ArrayList<>(); + for (String pileId : pileIds) { + for (String value : gunsIds) { + if (pileId.equals(value.substring(0, 14))) { + existsGun = true; + CWJConnectorStatusInfo cdConnectorStatusInfo = new CWJConnectorStatusInfo(); + Integer gunStatus = terminalDBMap.get(value); + if (gunStatus == null){ + existsGun = false; + } else { + if (gunStatus == 0){ + Object status = REDIS.getCacheMapValue("gun:" + value, "status"); + if (isInteger(status.toString())) { + cdConnectorStatusInfo.setStatus(3); + } else { + cdConnectorStatusInfo.setStatus(statusMap.get(status)); + } + } else { + cdConnectorStatusInfo.setStatus(0); + } + cdConnectorStatusInfo.setConnectorID(value); + connectorStatusInfos.add(cdConnectorStatusInfo); + } + } + } + } + if (existsGun) { + CWJStationStatusInfo cdStationStatusInfo = new CWJStationStatusInfo(); + cdStationStatusInfo.setStationID(stationID); + cdStationStatusInfo.setConnectorStatusInfos(connectorStatusInfos); + cdStationStatusInfos.add(cdStationStatusInfo); + } + } + CWJStationStatusInfoWrapper stationStatusInfoWrappers = new CWJStationStatusInfoWrapper(); + stationStatusInfoWrappers.setTotal(cdStationStatusInfos.size()); + if (cdStationStatusInfos.size() != 0) { + stationStatusInfoWrappers.setStationStatusInfos(cdStationStatusInfos); + } + resp.setRet("0"); + resp.setMsg("Query station status success"); + resp.setData(JSONUtil.toJSONString(stationStatusInfoWrappers)); + } + return resp; + } + + + /** + * 推送站点下线 + * @return + * @throws Exception + */ + @PostMapping("/v50/getNotificationStationFee") + public void getNotificationStationFee(String stationID) throws Exception { + AuthSecretToken authSecretTokenOut = authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType( + "MA6CC2LK7", "MA6DFCTD5", SECRET_TOKEN_TYPE_OUT).orElse(null); + // maybe对接第三方 + if (authSecretTokenOut != null) { + Map map =new HashMap<>(); + map.put("StationID",stationID); + String data = JSONUtil.toJSONString(map); + CommonRequest commonRequest = new CommonRequest<>(); + commonRequest.setData(data); + ok(commonRequest, "/notification_stationOfflineStatus", authSecretTokenOut); + } + } + + @PostMapping("/v50/query_occupancy_order_info") + public CommonResponse queryOccupancyOrderInfo(@RequestBody(required = false) CommonRequest commonRequest) { + CommonResponse resp = new CommonResponse(); + resp.setRet(EvcsConst.RET_FAIL); + try{ + CancelOrderRequest cancelOrderRequest = JSONUtil.readParams(commonRequest.getData(), CancelOrderRequest.class); + XhpcPlaceholderOrder placeholderOrder = placeholderIOrderRepository.findByInternetSerialNumber(cancelOrderRequest.getStartChargeSeq()); + OccupancyOrderInfo occupancyOrderInfo = new OccupancyOrderInfo(); + occupancyOrderInfo.setOccupancyFeeCode(placeholderOrder.getPlaceholderOrderNumber()); + occupancyOrderInfo.setOccupancyStatus(placeholderOrder.getStatus()); + occupancyOrderInfo.setStartChargeSeq(placeholderOrder.getInternetSerialNumber()); + occupancyOrderInfo.setConnectorID(placeholderOrder.getTerminalNumber()); + occupancyOrderInfo.setStartTime(DateUtil.format(placeholderOrder.getStartTime(), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setEndTime(DateUtil.format(placeholderOrder.getEndTime(), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setFreeDuration(placeholderOrder.getFreeTime()); + + if(placeholderOrder.getTotalTimeSpan() !=null || placeholderOrder.getConfirmResult()==0){ + if(placeholderOrder.getTotalTimeSpan()>30){ + occupancyOrderInfo.setOccupancyFeeStartTime(DateUtil.format(DateUtil.offsetMinute(placeholderOrder.getStartTime(),30), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setOccupancyDuration(placeholderOrder.getTotalTimeSpan()-30); + occupancyOrderInfo.setTotalOccupancyFee(new BigDecimal(0.2).multiply(new BigDecimal(placeholderOrder.getTotalTimeSpan()-30)).setScale(2,BigDecimal.ROUND_CEILING)); + }else{ + occupancyOrderInfo.setOccupancyDuration(0); + occupancyOrderInfo.setTotalOccupancyFee(new BigDecimal(0)); + } + }else{ + DateTime parse = cn.hutool.core.date.DateUtil.parse(DateUtil.format(placeholderOrder.getStartTime(), "yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss"); + DateTime parse1 = new DateTime(); + long betweenDay = cn.hutool.core.date.DateUtil.between(parse,parse1, DateUnit.MINUTE); + if(betweenDay>30){ + int num = (int) (betweenDay - 30); + occupancyOrderInfo.setOccupancyFeeStartTime(DateUtil.format(DateUtil.offsetMinute(placeholderOrder.getStartTime(),30), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setOccupancyDuration(num); + occupancyOrderInfo.setTotalOccupancyFee(new BigDecimal(0.2).multiply(new BigDecimal(num)).setScale(2,BigDecimal.ROUND_HALF_UP)); + }else{ + occupancyOrderInfo.setOccupancyDuration(0); + occupancyOrderInfo.setTotalOccupancyFee(new BigDecimal(0)); + } + } + + resp.setRet(EvcsConst.RET_SUCC); + resp.setMsg("获取占位费信息成功"); + resp.setData(JSONUtil.toJSONString(occupancyOrderInfo)); + return resp; + }catch (Exception e){ + e.printStackTrace(); + } + resp.setMsg("获取占位费信息失败"); + + return resp; + } + + + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryStopChargeController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryStopChargeController.java new file mode 100644 index 00000000..0cd9a732 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/api/YKCQueryStopChargeController.java @@ -0,0 +1,211 @@ +package com.xhpc.evcs.ykc.api; + +/** + * 云快充 + * + * @author yuyang + * @Date 2026-03-17 13:42 + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.xhpc.common.api.PowerPileService; +import com.xhpc.common.core.domain.R; +import com.xhpc.common.data.redis.CacheOrderData; +import com.xhpc.evcs.api.QueryStopChargeController; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.domain.EtOrderMapping; +import com.xhpc.evcs.domain.XhpcChargingPile; +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.jpa.OrderMappingRepository; +import com.xhpc.evcs.jpa.XhpcChargingPileRepository; +import com.xhpc.evcs.notification.CoreDispatcher; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; +import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; + +@Slf4j +@RestController +public class YKCQueryStopChargeController extends CoreDispatcher { + @Autowired + PowerPileService powerPileService; + //三方订单与redis内部订单映射表 + @Autowired + private OrderMappingRepository etOrderMappingRepo; + @Autowired + private com.xhpc.evcs.jpa.XhpcChargingPileRepository XhpcChargingPileRepository; + @Autowired + AuthSecretTokenRepository authSecretTokenRepository; + + private final Logger logger = LoggerFactory.getLogger(QueryStopChargeController.class); + private final ExecutorService asyncExecutor = Executors.newFixedThreadPool(40); + /** + * 请求停止充电 + * @param commonRequest + * @return + * @throws IOException + */ + @PostMapping("/v50/query_stop_charge") + public CommonResponse queryStopCharge(@RequestBody CommonRequest commonRequest) throws IOException { + + CommonResponse commonResponse = new CommonResponse(); + commonResponse.setRet(EvcsConst.RET_FAIL); + QueryStopChargeRequest queryStopChargeRequest = JSONUtil.readParams(commonRequest.getData(), + QueryStopChargeRequest.class); + String orderNo=""; + if (queryStopChargeRequest == null) { + + commonResponse.setMsg("Request or token params validation failed"); + } else { + // evcs电订单号(27位) + String startChargeSeq = queryStopChargeRequest.getStartChargeSeq(); + QueryStopChargeResponse queryStopChargeResponse = new QueryStopChargeResponse(); + queryStopChargeResponse.setStartChargeSeq(startChargeSeq); + //判断三方的订单号是否存在 + EtOrderMapping etOrderMapping = etOrderMappingRepo.findByEvcsOrderNo(startChargeSeq).orElse(null); + if (etOrderMapping == null) { + return failCommonResponse(queryStopChargeResponse, "错误的充电订单号"); + } + String xhOrderNo = etOrderMapping.getXhOrderNo(); + orderNo = xhOrderNo; + String pushOrderkey = "pushOrder:".concat(xhOrderNo); + Map pushOrder = REDIS.getCacheMap(pushOrderkey); + if (pushOrder == null || (pushOrder.get("isStopNotified") != null && (Boolean) pushOrder.get("isStopNotified"))) { + return failCommonResponse(queryStopChargeResponse, "已下发停止充电指令"); + } + //充电设备接口编码(枪编码) + String connectorId = queryStopChargeRequest.getConnectorId(); + String pileNum = connectorId.substring(0, connectorId.length() - 2); + //从数据库中查询对应的桩的版本信息 + XhpcChargingPile pileInfo = XhpcChargingPileRepository.findBySerialNumber(pileNum).orElse(null); + String versionNum = pileInfo.getCommunicationProtocolVersion() != null ? + pileInfo.getCommunicationProtocolVersion() : + "0C"; + //给对应的枪发送停止充电指令 + + R r = powerPileService.stopCharging(xhOrderNo, pileNum, connectorId, versionNum); + // 判断停止指令发送是否成功 + if (r.getCode() != 200) { + //向redis中放入停止充电指令没有下发成功的标识 + REDIS.setCacheMap(pushOrderkey, pushOrder); + //充电订单状态 + queryStopChargeResponse.setStartChargeSeqStat(5); + //操作结果 + queryStopChargeResponse.setSuccStat(1); + //失败原因 + String errorMsg = r.getMsg(); + if (errorMsg.contains("未注册")) { + queryStopChargeResponse.setFailReason(1); + } + if (errorMsg.contains("离线")) { + queryStopChargeResponse.setFailReason(2); + } + if (errorMsg.contains("订单号")) { + //4 means error orderNumber + queryStopChargeResponse.setFailReason(4); + } + if (errorMsg.contains("端口")) { + //5 means port is not charging + queryStopChargeResponse.setFailReason(5); + } + queryStopChargeResponse.setStartChargeSeqStat(4); + queryStopChargeResponse.setSuccStat(1); + String data = JSONUtil.toJSONString(queryStopChargeResponse); + commonResponse.setMsg("请求停止充电失败"); + commonResponse.setData(data); + return commonResponse; + } + //设置该订单已经被停止的标识 + Map order = REDIS.getCacheMap("order:" + xhOrderNo); + order.replace("status", "已结束"); + REDIS.setCacheMap("order:".concat(xhOrderNo), order); + REDIS.setCacheMap(pushOrderkey, pushOrder); + queryStopChargeResponse.setStartChargeSeqStat(4); + queryStopChargeResponse.setSuccStat(0); + queryStopChargeResponse.setFailReason(0); + String data = JSONUtil.toJSONString(queryStopChargeResponse); + System.out.println("=====请求停止充电==query_stop_charge========="+data); + commonResponse.setRet("0"); + commonResponse.setMsg("请求停止充电成功"); + commonResponse.setData(data); + } + +// if("0".equals(commonResponse.getRet())){ +// String finalOrderNo = orderNo; +// CompletableFuture.runAsync(()->{ +// processRequest(finalOrderNo); +// },asyncExecutor); +// } +// System.out.println(">>> 回复停止结果 <<<"); + + return commonResponse; + } + + private CommonResponse failCommonResponse(QueryStopChargeResponse queryStopChargeResponse, String msg) throws JsonProcessingException { + + queryStopChargeResponse.setStartChargeSeqStat(5); + queryStopChargeResponse.setSuccStat(1); + queryStopChargeResponse.setFailReason(0); + String data = JSONUtil.toJSONString(queryStopChargeResponse); + CommonResponse commonResponse = new CommonResponse(); + commonResponse.setRet("500"); + commonResponse.setMsg(msg); + commonResponse.setData(data); + return commonResponse; + } + + + @Async + public void processRequest(String orderNo){ + System.out.println(">>> 开始执行后续操作 <<<"); + try{ + //推送停止成功数据 + String pushOrderKey ="pushOrder:"+orderNo; + String orderkey = "order:".concat(orderNo); + CacheOrderData orderData = REDIS.getCacheMapValue(orderkey, "orderData"); + Map pushOrder = REDIS.getCacheMap(pushOrderKey); + if (orderData != null || (pushOrder != null && pushOrder.get("startChargeSeqStat") != null && (Integer) pushOrder.get("startChargeSeqStat") > 3)) { + Boolean isStopNotified = (Boolean) pushOrder.get("isStopNotified"); + if (isStopNotified == null || !isStopNotified) { + String internetSerialNumber = (String) pushOrder.get("internetSerialNumber"); + if (internetSerialNumber != null) { + String operatorId3rdpty = internetSerialNumber.substring(0, 9); + AuthSecretToken authSecretTokenOut =authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(operatorId3rdpty,SECRET_TOKEN_TYPE_OUT).orElse(null); + CommonRequest commonRequest = new CommonRequest<>(); + ChargeResultRequest chargeResultRequest = new ChargeResultRequest(); + chargeResultRequest.setStartChargeSeq(internetSerialNumber); + //使用指定包装类封装数据 + chargeResultRequest.setConnectorID(orderkey.substring(0, 16)); + chargeResultRequest.setStartChargeSeqStat(4); + chargeResultRequest.setSuccStat(0); + chargeResultRequest.setFailReason(0); + //将其转换为json + String jsonData = JSONUtil.toJSONString(chargeResultRequest); + commonRequest.setData(jsonData); + String result = ok(commonRequest, "/notification_stop_charge_result", authSecretTokenOut); + System.out.println("===充电结束=停止推送结果=======notification_stop_charge_result========="+result+"============orderNo========"+orderNo); + pushOrder.put("isStopNotified", true); + REDIS.setCacheMap(pushOrderKey, pushOrder); + } + } + } + }catch (Exception e){ + logger.info("==========第三方调用停止充电接口=====停止推送失败=====responseBody======================="); + } + } +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/notification/YCKNotificationPlaceholderOrderInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/notification/YCKNotificationPlaceholderOrderInfoTask.java new file mode 100644 index 00000000..7fcd95a0 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/notification/YCKNotificationPlaceholderOrderInfoTask.java @@ -0,0 +1,201 @@ +package com.xhpc.evcs.ykc.notification; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.dto.*; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.jpa.PlaceholderIOrderRepository; +import com.xhpc.evcs.notification.CoreDispatcher; +import com.xhpc.evcs.notification.xindiantu.NotificationPlaceholderOrderInfoTask; +import com.xhpc.evcs.utils.JSONUtil; +import com.xhpc.order.domain.XhpcPlaceholderOrder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; + +/** + * 云快充订单推送 + * + * @author yuyang + * @Date 2026-06-09 13:59 + */ +@Component +@RestController +@RequestMapping("/yckPlaceholderOrderInfoTask") +public class YCKNotificationPlaceholderOrderInfoTask extends CoreDispatcher { + + + @Autowired + private AuthSecretTokenRepository authSecretTokenRepository; + @Autowired + private PlaceholderIOrderRepository placeholderIOrderRepository; + private final Logger logger = LoggerFactory.getLogger(YCKNotificationPlaceholderOrderInfoTask.class); + + //9009开放定时任务 9099不开放 + @Scheduled(fixedRate = 1000 * 30) + public void run() throws IOException { + + AuthSecretToken authSecretTokenOut = + authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType( + "MA1MY0GF9", "MA6DFCTD5", SECRET_TOKEN_TYPE_OUT).orElse(null); //todo + if (authSecretTokenOut != null) { + + //初始化 + final List notYetPushOrder =placeholderIOrderRepository.findTop100ByOperatorIdEvcsAndConfirmResultOrderByPlaceholderOrderIdAsc("MA1MY0GF9",-2); + for (XhpcPlaceholderOrder placeholderOrder : notYetPushOrder) { + if (placeholderOrder.getConfirmResult() == -2) { + OccupancyOrderInfo occupancyOrderInfo = new OccupancyOrderInfo(); + occupancyOrderInfo.setOccupancyFeeCode(placeholderOrder.getPlaceholderOrderNumber()); + occupancyOrderInfo.setOccupancyStatus(0); + occupancyOrderInfo.setStartChargeSeq(placeholderOrder.getInternetSerialNumber()); + occupancyOrderInfo.setConnectorID(placeholderOrder.getTerminalNumber()); + occupancyOrderInfo.setStartTime(DateUtil.format(placeholderOrder.getStartTime(), "yyyy-MM-dd HH:mm:ss")); + + occupancyOrderInfo.setFreeDuration(placeholderOrder.getFreeTime()); + occupancyOrderInfo.setOccupancyDuration(0); + occupancyOrderInfo.setTotalOccupancyFee(new BigDecimal(0)); + + final ChargeOrderInfoResponse pushResp = notify(occupancyOrderInfo, authSecretTokenOut); + if (pushResp != null) { + + Map additionalProperties = pushResp.getAdditionalProperties(); + + if (Integer.valueOf(additionalProperties.get("SuccStat").toString()) == 0) { + placeholderOrder.setConfirmResult(-1); + } else { + placeholderOrder.setConfirmResult(pushResp.getConfirmResult()); + } + logger.debug("云快充3rd part order {} push result: {}", placeholderOrder.getSerialNumber(), pushResp.getConfirmResult()); + //logger.info("==============推送返回值================="+pushResp.toString()); + placeholderOrder.setStatus(0); + placeholderIOrderRepository.save(placeholderOrder); + } else { + logger.error("云快充3dp[{}] order[{}/{}] push fail", "MA1MY0GF9", placeholderOrder.getSerialNumber(), placeholderOrder.getInternetSerialNumber()); + } + } + } + //占位结束 + final List notYetPushOrderYus =placeholderIOrderRepository.findTop100ByOperatorIdEvcsAndTypeAndConfirmResultOrderByPlaceholderOrderIdAsc("MA1MY0GF9",1,-1); + for (XhpcPlaceholderOrder placeholderOrder : notYetPushOrderYus) { + OccupancyOrderInfo occupancyOrderInfo = new OccupancyOrderInfo(); + occupancyOrderInfo.setOccupancyFeeCode(placeholderOrder.getPlaceholderOrderNumber()); + occupancyOrderInfo.setOccupancyStatus(3); + occupancyOrderInfo.setStartChargeSeq(placeholderOrder.getInternetSerialNumber()); + occupancyOrderInfo.setConnectorID(placeholderOrder.getTerminalNumber()); + occupancyOrderInfo.setStartTime(DateUtil.format(placeholderOrder.getStartTime(), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setEndTime(DateUtil.format(placeholderOrder.getEndTime(), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setFreeDuration(placeholderOrder.getFreeTime()); + if(placeholderOrder.getTotalTimeSpan()>30){ + occupancyOrderInfo.setOccupancyFeeStartTime(DateUtil.format(DateUtil.offsetMinute(placeholderOrder.getStartTime(),30), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setOccupancyDuration(placeholderOrder.getTotalTimeSpan()-30); + }else{ + occupancyOrderInfo.setOccupancyDuration(0); + } + occupancyOrderInfo.setTotalOccupancyFee(placeholderOrder.getTotalMoney()); + final ChargeOrderInfoResponse pushResp = notify(occupancyOrderInfo, authSecretTokenOut); + if (pushResp != null) { + + Map additionalProperties = pushResp.getAdditionalProperties(); + if (Integer.valueOf(additionalProperties.get("SuccStat").toString()) != 0) { + placeholderOrder.setConfirmResult(pushResp.getConfirmResult()); + } else { + placeholderOrder.setConfirmResult(0); + } + placeholderOrder.setStatus(3); + logger.debug("云快充3rd part order {} push result: {}", placeholderOrder.getSerialNumber(), pushResp.getConfirmResult()); + placeholderIOrderRepository.save(placeholderOrder); + } else { + logger.error("云快充3dp[{}] order[{}/{}] push fail", "MA1MY0GF9", placeholderOrder.getSerialNumber(), placeholderOrder.getInternetSerialNumber()); + } + } + } + } + + + @Scheduled(cron = "0 0/15 * * * ? ") + public void runYu() throws IOException { + + AuthSecretToken authSecretTokenOut = + authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType( + "MA1MY0GF9", "MA6DFCTD5", SECRET_TOKEN_TYPE_OUT).orElse(null); //todo + if (authSecretTokenOut != null) { + final List notYetPushOrder =placeholderIOrderRepository.findTop100ByOperatorIdEvcsAndTypeAndConfirmResultOrderByPlaceholderOrderIdAsc("MA1MY0GF9",0,-1); + for (XhpcPlaceholderOrder placeholderOrder : notYetPushOrder) { + if (placeholderOrder.getConfirmResult() == -1) { + OccupancyOrderInfo occupancyOrderInfo = new OccupancyOrderInfo(); + occupancyOrderInfo.setOccupancyFeeCode(placeholderOrder.getPlaceholderOrderNumber()); + occupancyOrderInfo.setOccupancyStatus(2); + occupancyOrderInfo.setStartChargeSeq(placeholderOrder.getInternetSerialNumber()); + occupancyOrderInfo.setConnectorID(placeholderOrder.getTerminalNumber()); + occupancyOrderInfo.setStartTime(DateUtil.format(placeholderOrder.getStartTime(), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setFreeDuration(placeholderOrder.getFreeTime()); + if(placeholderOrder.getTotalTimeSpan() !=null || placeholderOrder.getConfirmResult()==0){ + if(placeholderOrder.getTotalTimeSpan()>30){ + occupancyOrderInfo.setOccupancyFeeStartTime(DateUtil.format(DateUtil.offsetMinute(placeholderOrder.getStartTime(),30), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setOccupancyDuration(placeholderOrder.getTotalTimeSpan()-30); + occupancyOrderInfo.setTotalOccupancyFee(new BigDecimal(0.2).multiply(new BigDecimal(placeholderOrder.getTotalTimeSpan()-30)).setScale(2,BigDecimal.ROUND_CEILING)); + }else{ + occupancyOrderInfo.setOccupancyDuration(0); + occupancyOrderInfo.setTotalOccupancyFee(new BigDecimal(0)); + } + }else{ + DateTime parse = cn.hutool.core.date.DateUtil.parse(DateUtil.format(placeholderOrder.getStartTime(), "yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss"); + DateTime parse1 = new DateTime(); + long betweenDay = cn.hutool.core.date.DateUtil.between(parse,parse1, DateUnit.MINUTE); + if(betweenDay>30){ + int num = (int) (betweenDay - 30); + occupancyOrderInfo.setOccupancyFeeStartTime(DateUtil.format(DateUtil.offsetMinute(placeholderOrder.getStartTime(),30), "yyyy-MM-dd HH:mm:ss")); + occupancyOrderInfo.setOccupancyDuration(num); + occupancyOrderInfo.setTotalOccupancyFee(new BigDecimal(0.2).multiply(new BigDecimal(num)).setScale(2,BigDecimal.ROUND_HALF_UP)); + }else{ + occupancyOrderInfo.setOccupancyDuration(0); + occupancyOrderInfo.setTotalOccupancyFee(new BigDecimal(0)); + } + } + + final ChargeOrderInfoResponse pushResp = notify(occupancyOrderInfo, authSecretTokenOut); + if (pushResp != null) { + Map additionalProperties = pushResp.getAdditionalProperties(); + + if (Integer.valueOf(additionalProperties.get("SuccStat").toString()) == 0) { + placeholderOrder.setConfirmResult(-1); + } else { + placeholderOrder.setConfirmResult(Integer.valueOf(additionalProperties.get("SuccStat").toString())); + } + logger.debug("云快充3rd part order {} push result: {}", placeholderOrder.getSerialNumber(), pushResp.getConfirmResult()); + placeholderOrder.setStatus(2); + placeholderIOrderRepository.save(placeholderOrder); + } else { + logger.error("云快充3dp[{}] order[{}/{}] push fail", "MA1MY0GF9", placeholderOrder.getSerialNumber(), placeholderOrder.getInternetSerialNumber()); + } + } + } + } + } + + public ChargeOrderInfoResponse notify(OccupancyOrderInfo occupancyOrderInfo, AuthSecretToken authSecretTokenOut) throws JsonProcessingException { + + String data = JSONUtil.toJSONString(occupancyOrderInfo); + CommonRequest commonRequest = new CommonRequest<>(); + commonRequest.setData(data); + System.out.println("========云快充推送记录=============="+data); + String responseBody = ok(commonRequest, "/notification_occupancy_order_info", authSecretTokenOut); + return DTOJsonHelper.parseResponseData(responseBody, + ChargeOrderInfoResponse.class, authSecretTokenOut); + } + +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/notification/YKCNotificationStationFeeTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/notification/YKCNotificationStationFeeTask.java new file mode 100644 index 00000000..8a699d13 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/notification/YKCNotificationStationFeeTask.java @@ -0,0 +1,60 @@ +package com.xhpc.evcs.ykc.notification; + +import com.xhpc.evcs.cdjgpc.dto.CDStationFee; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.notification.CoreDispatcher; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; +import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; + +/** + * @author yuyang + * @Date 2026-03-18 16:38 + */ +@Component +@Slf4j +public class YKCNotificationStationFeeTask extends CoreDispatcher { + + @Resource + AuthSecretTokenRepository authSecretTokenRepository; + private final Logger logger = LoggerFactory.getLogger(YKCNotificationStationFeeTask.class); + + //不开放 + //@Scheduled(fixedDelay = 1000 * 60) + public void run() throws IOException { + + AuthSecretToken authSecretTokenOut = + authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType( + "MA1MY0GF9", "MA6DFCTD5", SECRET_TOKEN_TYPE_OUT).orElse(null); + // maybe对接第三方 + if (authSecretTokenOut != null) { + List stationKeys = new ArrayList<>(REDIS.keys("cdjgpc:stationFee:*")); + for (String stationKey : stationKeys) { + CDStationFee cdStationFeeRequest = REDIS.getCacheObject(stationKey); + Map map =new HashMap<>(); + map.put("StationFee",cdStationFeeRequest); + String data = JSONUtil.toJSONString(map); + CommonRequest commonRequest = new CommonRequest<>(); + commonRequest.setData(data); + String ok = ok(commonRequest, "/notification_stationFee", authSecretTokenOut); + log.info("======站点费率推送=========notification_stationFee=================="+ok); + // REDIS.deleteObject(stationKey); + } + } + } +} diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/notification/YKCNotificationStationInfoTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/notification/YKCNotificationStationInfoTask.java new file mode 100644 index 00000000..a70936b9 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/ykc/notification/YKCNotificationStationInfoTask.java @@ -0,0 +1,266 @@ +package com.xhpc.evcs.ykc.notification; + +import com.xhpc.common.api.dto.ChargingStationDto; +import com.xhpc.common.core.utils.bean.BeanUtils; +import com.xhpc.common.data.redis.CacheRateModel; +import com.xhpc.evcs.cdjgpc.dto.CDConnectorInfo; +import com.xhpc.evcs.cdjgpc.dto.CDEquipmentInfo; +import com.xhpc.evcs.cdjgpc.dto.CDStationInfo; +import com.xhpc.evcs.cdjgpc.notification.CDNotificationStationInfoTask; +import com.xhpc.evcs.cwj.dto.CWJConnectorInfo; +import com.xhpc.evcs.cwj.dto.CWJEquipmentInfo; +import com.xhpc.evcs.cwj.dto.CWJStationInfo; +import com.xhpc.evcs.domain.AuthSecretToken; +import com.xhpc.evcs.domain.XhpcStationInternetBlacklist; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.jpa.AuthSecretTokenRepository; +import com.xhpc.evcs.jpa.PlaceholderIRepository; +import com.xhpc.evcs.jpa.XhpcStationInternetBlacklistRepository; +import com.xhpc.evcs.notification.CoreDispatcher; +import com.xhpc.evcs.utils.JSONUtil; +import com.xhpc.order.domain.XhpcPlacreholder; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.*; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; +import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; + +/** + * 云快充 + * + * @author yuyang + * @Date 2026-03-17 13:47 + */ +@Component +@Slf4j +public class YKCNotificationStationInfoTask extends CoreDispatcher { + @Resource + private AuthSecretTokenRepository authSecretTokenRepository; + @Resource + private XhpcStationInternetBlacklistRepository xhpcStationInternetBlacklistRepo; + @Resource + private PlaceholderIRepository placeholderIRepository; + private final Logger logger = LoggerFactory.getLogger(CDNotificationStationInfoTask.class); + + //9099开放定时任务 9009不开放 + @Scheduled(cron = "0 30 0 1/1 * ? ") + public void run() throws IOException { + try{ + List xhpcStationInternetBlacklist = xhpcStationInternetBlacklistRepo.findByInternetUserId(8L); + List stationKeys = new ArrayList<>(REDIS.keys("station:*")); + AuthSecretToken authSecretTokenOut = + authSecretTokenRepository.findByOperatorId3irdptyAndOperatorIdAndSecretTokenType("MA1MY0GF9", "MA6DFCTD5", SECRET_TOKEN_TYPE_OUT).orElse(null); //todo + for (String stationKey : stationKeys) { + //查询不合作的电桩 + for (XhpcStationInternetBlacklist xhpcStationInternetBlack : xhpcStationInternetBlacklist) { + if (!stationKey.substring(8).equals(xhpcStationInternetBlack.getChargingStationId().toString())) { + // maybe对接第三方 + if (authSecretTokenOut != null) { + String chargingStationId = stationKey.substring(8); + //获取场站信息 + String key = "cdjgpc:station:".concat(chargingStationId)+".notification"; + CDStationInfo cdStationInfo =REDIS.getCacheObject(key); + CWJStationInfo cwjStationInfo = new CWJStationInfo(); + BeanUtils.copyBeanProp(cwjStationInfo,cdStationInfo); + cwjStationInfo.setBusineHours("00:00-24:00"); + cwjStationInfo.setParkingDiscountType(2); + cwjStationInfo.setEquipmentInfos(new ArrayList<>()); + //获取占位费信息 + XhpcPlacreholder xhpcPlacreholder = placeholderIRepository.findByYkcStatusAndChargingStationIdAndDelFlag(1,Long.valueOf(chargingStationId), 0); + if(xhpcPlacreholder !=null){ + cwjStationInfo.setOvertimeFee(xhpcPlacreholder.getContent()); + } + //查询场站是桩是否对应上 + ChargingStationDto stationDto = REDIS.getCacheObject("station:"+chargingStationId); + CacheRateModel cacheRateModel = REDIS.getCacheObject("rateModel:" + stationDto.getRateModelId()); + + StringBuilder price = new StringBuilder(); + StringBuilder svcPrice = new StringBuilder(); + + Integer t1Price = cacheRateModel.getT1Price(); + Integer t1SvcPrice = cacheRateModel.getT1SvcPrice(); + Integer t2Price = cacheRateModel.getT2Price(); + Integer t2SvcPrice = cacheRateModel.getT2SvcPrice(); + Integer t3Price = cacheRateModel.getT3Price(); + Integer t3SvcPrice = cacheRateModel.getT3SvcPrice(); + Integer t4Price = cacheRateModel.getT4Price(); + Integer t4SvcPrice = cacheRateModel.getT4SvcPrice(); + + if(cacheRateModel.getTfPricesSeq() !=null && cacheRateModel.getTfPricesSeq().length>0){ + price.append("{"); + svcPrice.append("{"); + for (int i = 0; i < cacheRateModel.getTfPricesSeq().length; i++) { + String time = getTime(i); + String s = cacheRateModel.getTfPricesSeq()[i]; + + if("00".equals(s)){ + price.append(time).append(t1Price.toString()).append(","); + svcPrice.append(time).append(t1SvcPrice.toString()).append(","); + }else if("01".equals(s)){ + price.append(time).append(t2Price.toString()).append(","); + svcPrice.append(time).append(t2SvcPrice.toString()).append(","); + }else if("02".equals(s)){ + price.append(time).append(t3Price.toString()).append(","); + svcPrice.append(time).append(t3SvcPrice.toString()).append(","); + }else{ + price.append(time).append(t4Price.toString()).append(","); + svcPrice.append(time).append(t4SvcPrice.toString()).append(","); + } + } + price.deleteCharAt(price.length()-1).append("}"); + svcPrice.deleteCharAt(svcPrice.length()-1).append("}"); + } + cwjStationInfo.setElectricityFee(price.toString()); + cwjStationInfo.setServiceFee(svcPrice.toString()); + Set pks = stationDto.getPiles(); + if (pks != null) { + List cwjEquipmentInfos = new ArrayList<>(); + for (String pileNo : pks) { + String pk = "pile:".concat(pileNo); + String skey = "cdjgpc:".concat(pk)+".notification"; + CDEquipmentInfo cdEquipmentInfo = REDIS.getCacheObject(skey); + CWJEquipmentInfo cwjEquipmentInfo = new CWJEquipmentInfo(); + BeanUtils.copyBeanProp(cwjEquipmentInfo,cdEquipmentInfo); + + List connectorInfos =new ArrayList<>(); + List connectorInfos1 = cdEquipmentInfo.getConnectorInfos(); + + for (int i = 0; i commonRequest = new CommonRequest<>(); + Map mapStationInfo =new HashMap<>(); + mapStationInfo.put("StationInfo",cwjStationInfo); + String data = JSONUtil.toJSONString(mapStationInfo); + System.out.println("=======data========"+data); + commonRequest.setData(data); + String result =ok(commonRequest,"/notification_stationInfo",authSecretTokenOut); + System.out.println("=====推送充电站信息==result========"+result); + } + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + private String getTime(Integer number){ + String time =""; + if(number ==0){ + time ="00:00:00-00:30:00:"; + }else if(number ==1) { + time = "00:30:00-01:00:00:"; + }else if(number ==2) { + time = "01:00:00-01:30:00:"; + }else if(number ==3) { + time = "01:30:00-02:00:00:"; + }else if(number ==4) { + time = "02:00:00-02:30:00:"; + }else if(number ==5) { + time = "02:30:00-03:00:00:"; + }else if(number ==6) { + time = "03:00:00-03:30:00:"; + }else if(number ==7) { + time = "03:30:00-04:00:00:"; + }else if(number ==8) { + time = "04:00:00-04:30:00:"; + }else if(number ==9) { + time = "04:30:00-05:00:00:"; + }else if(number ==10) { + time = "05:00:00-05:30:00:"; + }else if(number ==11) { + time = "05:30:00-06:00:00:"; + }else if(number ==12) { + time = "06:00:00-06:30:00:"; + }else if(number ==13) { + time = "06:30:00-07:00:00:"; + }else if(number ==14) { + time = "07:00:00-07:30:00:"; + }else if(number ==15) { + time = "07:30:00-08:00:00:"; + }else if(number ==16) { + time = "08:00:00-08:30:00:"; + }else if(number ==17) { + time = "08:30:00-09:00:00:"; + }else if(number ==18) { + time = "09:00:00-09:30:00:"; + }else if(number ==19) { + time = "09:30:00-10:00:00:"; + }else if(number ==20) { + time = "10:00:00-10:30:00:"; + }else if(number ==21) { + time = "10:30:00-11:00:00:"; + }else if(number ==22) { + time = "11:00:00-11:30:00:"; + }else if(number ==23) { + time = "11:30:00-12:00:00:"; + }else if(number ==24) { + time = "12:00:00-12:30:00:"; + }else if(number ==25) { + time = "12:30:00-13:00:00:"; + }else if(number ==26) { + time = "13:00:00-13:30:00:"; + }else if(number ==27) { + time = "13:30:00-14:00:00:"; + }else if(number ==28) { + time = "14:00:00-14:30:00:"; + }else if(number ==29) { + time = "14:30:00-15:00:00:"; + }else if(number ==30){ + time ="15:00:00-15:30:00:"; + }else if(number ==31) { + time = "15:30:00-16:00:00:"; + }else if(number ==32) { + time = "16:00:00-16:30:00:"; + }else if(number ==33) { + time = "16:30:00-17:00:00:"; + }else if(number ==34) { + time = "17:00:00-17:30:00:"; + }else if(number ==35) { + time = "17:30:00-18:00:00:"; + }else if(number ==36) { + time = "18:00:00-18:30:00:"; + }else if(number ==37) { + time = "18:30:00-19:00:00:"; + }else if(number ==38) { + time = "19:00:00-19:30:00:"; + }else if(number ==39) { + time = "19:30:00-20:00:00:"; + }else if(number ==40){ + time ="20:00:00-20:30:00:"; + }else if(number ==41) { + time = "20:30:00-21:00:00:"; + }else if(number ==42) { + time = "21:00:00-21:30:00:"; + }else if(number ==43) { + time = "21:30:00-22:00:00"; + }else if(number ==44) { + time = "22:00:00-22:30:00:"; + }else if(number ==45) { + time = "22:30:00-23:00:00:"; + }else if(number ==46) { + time = "23:00:00-23:30:00"; + }else if(number ==47) { + time = "23:30:00-24:00:00:"; + } + return time; + } +} diff --git a/ruoyi-auth/src/main/java/com/xhpc/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/xhpc/auth/service/SysLoginService.java index e80aaab1..2cdbcc5e 100644 --- a/ruoyi-auth/src/main/java/com/xhpc/auth/service/SysLoginService.java +++ b/ruoyi-auth/src/main/java/com/xhpc/auth/service/SysLoginService.java @@ -84,7 +84,9 @@ public class SysLoginService throw new BaseException("用户不存在/密码错误"); } if(type==0){ - if(user.getDataPowerType()!=0){ + if(user.getDataPowerType()==0 || user.getDataPowerType()==3){ + + }else{ remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "登陆地址错误"); throw new BaseException("登陆地址错误,请在运营商界面登陆"); } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/xhpc/common/core/constant/StatusConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/xhpc/common/core/constant/StatusConstants.java index a0312d49..533e7c50 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/xhpc/common/core/constant/StatusConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/xhpc/common/core/constant/StatusConstants.java @@ -48,6 +48,12 @@ public class StatusConstants { */ public static final String OPERATION_SON_USER_TYPE = "03"; + /** + * 车队用户类型 + */ + public static final String MOTORCADE_USER_TYPE = "04"; + + /** * 全部权限类型 */ @@ -67,6 +73,10 @@ public class StatusConstants { * 流量账号权限类型 */ public static final Integer INTERNET_POWER_TYPE = 3; + /** + * 车队账号权限类型 + */ + public static final Integer MOTORCADE_TYPE = 4; /** * 过期时间半个小时 diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 32a0ddf8..22eeafb5 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -31,6 +31,7 @@ + @@ -87,6 +88,7 @@ u.user_type, u.tenant_id, u.operator_id, + u.internet_user_id, xop.corp_no corpNo from sys_user u left join sys_dept d on u.dept_id = d.dept_id diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcClearingCheckoutDomain.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcClearingCheckoutDomain.java index 15aa4124..f99e8539 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcClearingCheckoutDomain.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcClearingCheckoutDomain.java @@ -38,7 +38,10 @@ public class XhpcClearingCheckoutDomain implements Serializable { * 手续费 */ private BigDecimal handlingFee; - + /** + * 不参与清分金额 + */ + private BigDecimal clearingPrice; /** * 银行手续费 */ @@ -115,4 +118,4 @@ public class XhpcClearingCheckoutDomain implements Serializable { private String tenantName; private static final long serialVersionUID = 1L; -} \ No newline at end of file +} diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcClearingHistoryOrderDomain.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcClearingHistoryOrderDomain.java index 3782ea52..3e618550 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcClearingHistoryOrderDomain.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcClearingHistoryOrderDomain.java @@ -320,5 +320,11 @@ public class XhpcClearingHistoryOrderDomain implements Serializable { private String chargingModeName; + private Integer clearingType; + + private BigDecimal clearingPrice; + + private BigDecimal actClearingPrice; + private static final long serialVersionUID = 1L; } diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcHistoryOrderDomain.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcHistoryOrderDomain.java index 810ce8a2..74dd282a 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcHistoryOrderDomain.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/domain/XhpcHistoryOrderDomain.java @@ -97,6 +97,8 @@ public class XhpcHistoryOrderDomain implements Serializable { */ private BigDecimal actPowerPrice; + private BigDecimal actTotalPrice; + /** * 实收服务费-运营商服务费 */ @@ -304,5 +306,9 @@ public class XhpcHistoryOrderDomain implements Serializable { */ private String chargingTime; + private Integer clearingType; + + private BigDecimal clearingPrice; + private static final long serialVersionUID = 1L; -} \ No newline at end of file +} diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/mapper/XhpcClearingCheckoutMapper.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/mapper/XhpcClearingCheckoutMapper.java index 2c7c1718..1c6831b4 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/mapper/XhpcClearingCheckoutMapper.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/mapper/XhpcClearingCheckoutMapper.java @@ -19,7 +19,7 @@ public interface XhpcClearingCheckoutMapper { List selectByParams(@Param("params") Map params); - + List> getXhpcOperatorParams(@Param("params") Map params); List> selectCheckoutMapByParams(@Param("params") Map params); @@ -31,7 +31,6 @@ public interface XhpcClearingCheckoutMapper { BigDecimal selectAmountByStatus(@Param("operatorId")String operatorId, @Param("status")Integer status); - List selectOrderMapByCheckoutIds(@Param("checkoutIds")String checkoutIds); int updateStatusByIds(@Param("checkoutIds")String checkoutIds, @Param("status")Integer status); @@ -40,4 +39,25 @@ public interface XhpcClearingCheckoutMapper { List> selectMapGroupByStatus(@Param("checkoutIds")String checkoutIds); String selectIdsByStatusAndIds(@Param("checkoutIds")String checkoutIds, @Param("status") Integer status); -} \ No newline at end of file + + //带清分金额 + BigDecimal selectUnclearingAmount(@Param("params") Map params); + //不参与清分基恩 + Map selectClearingPrice(@Param("params") Map params); + + + Map selectCashedAmountOrCashingAmount(@Param("operatorId")String operatorId); + // 1. 批量获取待清分金额 - 返回 List + List> selectUnclearingAmountBatch(@Param("operatorIds") List operatorIds, + @Param("params") Map params); + // 2. 批量获取已提现和提现中金额 - 返回 List + List> selectCashedAmountOrCashingAmountBatch(@Param("operatorIds") List operatorIds); + + // 3. 批量获取不参与清分金额 - 返回 List + List> selectCashAmountYuBatch(@Param("operatorIds") List operatorIds); + + // 4. 批量获取清分价格和总金额 - 返回 List + List> selectClearingPriceBatch(@Param("operatorIds") List operatorIds, + @Param("params") Map params); + +} diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/mapper/XhpcClearingHistoryOrderMapper.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/mapper/XhpcClearingHistoryOrderMapper.java index bcd227c3..e2681cb7 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/mapper/XhpcClearingHistoryOrderMapper.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/mapper/XhpcClearingHistoryOrderMapper.java @@ -22,6 +22,8 @@ public interface XhpcClearingHistoryOrderMapper { List getListPage(@Param("params") Map params); + List getorderExportPage(@Param("params") Map params); + String getClearingOrderIds(@Param("params") Map params); int updateStatusBatchByOrderIds(@Param("orderIds") String orderIds, @Param("status") Integer status, @Param("checkBy")String checkBy); @@ -30,6 +32,9 @@ public interface XhpcClearingHistoryOrderMapper { Map selectCashAmount(@Param("operatorId")String operatorId); + //去除不参与清分的金额 + Map selectCashAmountYu(@Param("operatorId")String operatorId); + List> selectOrderPage(@Param("params") Map params); List selectOrderListByOperator(@Param("operatorId")String operatorId); @@ -52,4 +57,4 @@ public interface XhpcClearingHistoryOrderMapper { */ List> getOrderListPage(@Param("phone")String phone,@Param("transactionNumber")String transactionNumber,@Param("status")Integer status,@Param("chargingStationName")String chargingStationName,@Param("operatorId")Long operatorId,@Param("source")Integer source,@Param("beginStartTime")String beginStartTime,@Param("beginEndTime")String beginEndTime,@Param("userId")Long userId,@Param("type")Integer type,@Param("number")Integer number,@Param("affiliationOrganization")String affiliationOrganization,@Param("evcsOrderNo")String evcsOrderNo,@Param("plateNum")String plateNum,@Param("internetId")Integer internetId,@Param("internetSerialNumber")String internetSerialNumber,@Param("terminalName")String terminalName,@Param("vinCode")String vinCode,@Param("overStartTime")String overStartTime,@Param("overEndTime")String overEndTime,@Param("personnelId")Long personnelId,@Param("confirmResult")Integer confirmResult,@Param("tenantId")String tenantId,@Param("isNotNull")Integer isNotNull, @Param("checkoutId")Integer checkoutId); -} \ No newline at end of file +} diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/WorkOrderServiceImpl.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/WorkOrderServiceImpl.java index 7458f102..353ed86d 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/WorkOrderServiceImpl.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/WorkOrderServiceImpl.java @@ -73,17 +73,17 @@ public class WorkOrderServiceImpl implements WorkOrderService { params.put("userId", logOperatorId); //运营商看自己的场站 - return deviceMapper.selectStationGunDeviceListByParams(params); + return orderMapper.findOrderListByParams(params); }else{ params.put("type", 2); params.put("userId", sysUserId); //查询赋值的场站 - return deviceMapper.selectStationGunDeviceListByParams(params); + return orderMapper.findOrderListByParams(params); } }else{ params.put("type", 0); params.put("userId", sysUserId); - return deviceMapper.selectStationGunDeviceListByParams(params); + return orderMapper.findOrderListByParams(params); } } diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/WorkStationServiceImpl.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/WorkStationServiceImpl.java index 50d67d25..6f6c0c63 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/WorkStationServiceImpl.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/WorkStationServiceImpl.java @@ -52,7 +52,7 @@ public class WorkStationServiceImpl extends BaseService implements WorkStationSe return 0; }else if("故障".equals(cacheMap.get("status").toString())){ return 1; - }else if("空闲".equals(cacheMap.get("status").toString())){ + }else if("空闲".equals(cacheMap.get("status").toString()) || "插枪".equals(cacheMap.get("status").toString())){ if("是".equals(cacheMap.get("vehicleGunStatus").toString())){ return 4; }else{ diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/XhpcClearingCheckoutServiceImpl.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/XhpcClearingCheckoutServiceImpl.java index 947697c3..fc35dd78 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/XhpcClearingCheckoutServiceImpl.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/XhpcClearingCheckoutServiceImpl.java @@ -105,10 +105,149 @@ public class XhpcClearingCheckoutServiceImpl extends BaseService implements Xhpc return checkoutMapper.selectByParams(params); } } - @Override public List> getCheckoutPage(Map params){ - return checkoutMapper.selectCheckoutMapByParams(params); + + //获取运营商 + List> mapList = checkoutMapper.getXhpcOperatorParams(params); + BigDecimal bankRate = new BigDecimal("0.006"); + BigDecimal handlingAmount = BigDecimal.TEN; + + if (mapList != null && !mapList.isEmpty()) { + // 提取所有运营商ID + List operatorIds = mapList.stream() + .map(map -> map.get("operatorId").toString()) + .collect(Collectors.toList()); + + // 1. 批量获取待清分金额 + List> unClearingAmountList = checkoutMapper.selectUnclearingAmountBatch(operatorIds, params); + Map unClearingAmountMap = unClearingAmountList.stream() + .collect(Collectors.toMap( + m -> m.get("operatorId").toString(), + m -> new BigDecimal(m.get("unClearingAmount").toString()) + )); + + // 2. 批量获取已提现和提现中金额 + List> cashAmountList = checkoutMapper.selectCashedAmountOrCashingAmountBatch(operatorIds); + Map> cashAmountMap = cashAmountList.stream() + .collect(Collectors.toMap( + m -> m.get("operatorId").toString(), + m -> { + Map map = new HashMap<>(); + map.put("cashingAmount", new BigDecimal(m.get("cashingAmount").toString())); + map.put("cashedAmount", new BigDecimal(m.get("cashedAmount").toString())); + return map; + } + )); + + // 3. 批量获取不参与清分金额相关数据 + List> excludeClearingList = checkoutMapper.selectCashAmountYuBatch(operatorIds); + Map> excludeClearingMap = excludeClearingList.stream() + .collect(Collectors.toMap( + m -> m.get("operatorId").toString(), + m -> { + Map map = new HashMap<>(); + map.put("powerAmount", new BigDecimal(m.get("powerAmount").toString())); + map.put("serviceAmount", new BigDecimal(m.get("serviceAmount").toString())); + return map; + } + )); + + // 4. 批量获取清分清分价格和总金额 + List> clearingPriceList = checkoutMapper.selectClearingPriceBatch(operatorIds, params); + Map> clearingPriceMap = clearingPriceList.stream() + .collect(Collectors.toMap( + m -> m.get("operatorId").toString(), + m -> { + Map map = new HashMap<>(); + map.put("clearingPrice", new BigDecimal(m.get("clearingPrice").toString())); + map.put("actTotalPrice", new BigDecimal(m.get("actTotalPrice").toString())); + return map; + } + )); + + // 组装数据 + for (Map map : mapList) { + String operatorId = map.get("operatorId").toString(); + + // 待清分金额 + BigDecimal unClearingAmount = unClearingAmountMap.getOrDefault(operatorId, BigDecimal.ZERO); + map.put("unClearingAmount", unClearingAmount.compareTo(BigDecimal.ZERO) >= 0 ? unClearingAmount : BigDecimal.ZERO); + + // 已提现金额和提现中金额 + Map cashMap = cashAmountMap.getOrDefault(operatorId, new HashMap<>()); + map.putAll(cashMap); + + // 不参与清分金额数据 + Map excludeMap = excludeClearingMap.getOrDefault(operatorId, new HashMap<>()); + BigDecimal powerAmountYu = excludeMap.getOrDefault("powerAmount", BigDecimal.ZERO).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal serviceAmountYu = excludeMap.getOrDefault("serviceAmount", BigDecimal.ZERO).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal bankFeeYu = powerAmountYu.add(serviceAmountYu).multiply(bankRate).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal receivedServiceAmountYu = serviceAmountYu.subtract(handlingAmount).subtract(bankFeeYu); + + // 可提现金额 + BigDecimal cashableAmount = powerAmountYu.add(receivedServiceAmountYu); + map.put("cashAmount", cashableAmount.compareTo(BigDecimal.ZERO) >= 0 ? cashableAmount : BigDecimal.ZERO); + + // 清分价格和总金额 + Map clearingMap = clearingPriceMap.getOrDefault(operatorId, new HashMap<>()); + BigDecimal clearingPrice = clearingMap.getOrDefault("clearingPrice", BigDecimal.ZERO); + BigDecimal actTotalPrice = clearingMap.getOrDefault("actTotalPrice", BigDecimal.ZERO); + + map.put("clearingPrice", clearingPrice.compareTo(BigDecimal.ZERO) >= 0 ? clearingPrice : BigDecimal.ZERO); + map.put("actTotalPrice", actTotalPrice.compareTo(BigDecimal.ZERO) >= 0 ? actTotalPrice : BigDecimal.ZERO); + map.put("bankFeeYu", bankFeeYu.compareTo(BigDecimal.ZERO) >= 0 ? bankFeeYu : BigDecimal.ZERO); + map.put("handlingAmount", handlingAmount); + } + } + return mapList; + } + + + public List> getCheckoutPageYu(Map params){ + + //获取运营商 + List> mapList = checkoutMapper.getXhpcOperatorParams(params); + BigDecimal bankRate = new BigDecimal("0.006"); + BigDecimal handlingAmount = BigDecimal.TEN; + if(mapList !=null && mapList.size()>0){ + // 可提现金额 + for (int i = 0; i map = mapList.get(i); + //统计带清分金额、可提现金额、提现中金额、已提现金额、不参与清分金额 + String operatorId = map.get("operatorId").toString(); + params.put("operatorId",operatorId); + // 待清分金额 + BigDecimal unClearingAmount = checkoutMapper.selectUnclearingAmount(params); + map.put("unClearingAmount",unClearingAmount.compareTo(BigDecimal.ZERO)>=0?unClearingAmount:BigDecimal.ZERO); + // 已提现金额\提现中金额 + map.putAll(checkoutMapper.selectCashedAmountOrCashingAmount(operatorId)); + + + //剔除不参与清分金额 + Map cashMapYu = historyOrderMapper.selectCashAmountYu(operatorId); + BigDecimal powerAmountYu = new BigDecimal(cashMapYu.get("powerAmount").toString()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal serviceAmountYu = new BigDecimal(cashMapYu.get("serviceAmount").toString()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal bankFeeYu = powerAmountYu.add(serviceAmountYu).multiply(bankRate).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal receivedServiceAmountYu = serviceAmountYu.subtract(handlingAmount).subtract(bankFeeYu); + //可提现金额 + map.put("cashAmount", powerAmountYu.add(receivedServiceAmountYu).compareTo(BigDecimal.ZERO) >= 0 ? powerAmountYu.add(receivedServiceAmountYu) : BigDecimal.ZERO); + Map cashMap= checkoutMapper.selectClearingPrice(params); + BigDecimal clearingPrice =new BigDecimal(cashMap.get("clearingPrice").toString()); + BigDecimal actTotalPrice =new BigDecimal(cashMap.get("actTotalPrice").toString()); + // 不参与清分金额 + map.put("clearingPrice",clearingPrice.compareTo(BigDecimal.ZERO)>=0?clearingPrice:BigDecimal.ZERO); + //清分总金额 + map.put("actTotalPrice",actTotalPrice.compareTo(BigDecimal.ZERO)>=0?actTotalPrice:BigDecimal.ZERO); + //微信/支付宝手续费 + map.put("bankFeeYu",bankFeeYu.compareTo(BigDecimal.ZERO)>=0?bankFeeYu:BigDecimal.ZERO); + //银行提现费用 + map.put("handlingAmount",handlingAmount); + + } + } + + return mapList; } @Override @@ -121,12 +260,12 @@ public class XhpcClearingCheckoutServiceImpl extends BaseService implements Xhpc // 可提现金额 BigDecimal bankRate = new BigDecimal("0.006"); BigDecimal handlingAmount = BigDecimal.TEN; - + //全部金额包含不参与清分金额 Map cashMap = historyOrderMapper.selectCashAmount(operatorId.toString()); BigDecimal powerAmount = new BigDecimal(cashMap.get("powerAmount").toString()).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal serviceAmount = new BigDecimal(cashMap.get("serviceAmount").toString()).setScale(2, BigDecimal.ROUND_HALF_UP); - - BigDecimal bankFee = powerAmount.add(serviceAmount).subtract(handlingAmount).multiply(bankRate).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal clearingPrice = new BigDecimal(cashMap.get("clearingPrice").toString()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal bankFee = powerAmount.add(serviceAmount).multiply(bankRate).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal receivedServiceAmount = serviceAmount.subtract(handlingAmount).subtract(bankFee); Map resultMap = new HashMap<>(); @@ -137,11 +276,21 @@ public class XhpcClearingCheckoutServiceImpl extends BaseService implements Xhpc resultMap.put("applyServiceAmount", serviceAmount); resultMap.put("clearingOrderIds", cashMap.get("clearingOrderIds")); resultMap.put("handlingFee", handlingAmount); - resultMap.put("bankFee", bankFee); - resultMap.put("receivedPowerAmount", powerAmount); - resultMap.put("receivedServiceAmount", receivedServiceAmount); - resultMap.put("receivedAmount", powerAmount.add(receivedServiceAmount).compareTo(BigDecimal.ZERO) >= 0 ? powerAmount.add(receivedServiceAmount) : BigDecimal.ZERO); + resultMap.put("clearingPrice", clearingPrice); + + //剔除不参与清分金额 + Map cashMapYu = historyOrderMapper.selectCashAmountYu(operatorId.toString()); + BigDecimal powerAmountYu = new BigDecimal(cashMapYu.get("powerAmount").toString()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal serviceAmountYu = new BigDecimal(cashMapYu.get("serviceAmount").toString()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal bankFeeYu = powerAmountYu.add(serviceAmountYu).multiply(bankRate).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal receivedServiceAmountYu = serviceAmountYu.subtract(handlingAmount).subtract(bankFeeYu); + resultMap.put("bankFee", bankFeeYu); + resultMap.put("clearingPower", powerAmountYu); + resultMap.put("clearingService", serviceAmountYu); + resultMap.put("receivedPowerAmount", powerAmountYu); + resultMap.put("receivedServiceAmount", receivedServiceAmountYu); + resultMap.put("receivedAmount", powerAmountYu.add(receivedServiceAmountYu).compareTo(BigDecimal.ZERO) >= 0 ? powerAmountYu.add(receivedServiceAmountYu) : BigDecimal.ZERO); resultMap.put("clearingBankId", bankDomain.getClearingBankId()); return R.ok(resultMap); } @@ -310,6 +459,7 @@ public class XhpcClearingCheckoutServiceImpl extends BaseService implements Xhpc writer.addHeaderAlias("operationSvcCommission", "运维服务费抽成(元)"); writer.addHeaderAlias("actPowerPrice", "运营商实收电费(元)"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费(元)"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额(元)"); writer.addHeaderAlias("startSoc", "启动SOC"); writer.addHeaderAlias("endSoc", "结算SOC"); writer.addHeaderAlias("startTime", "开始充电时间"); @@ -480,6 +630,7 @@ public class XhpcClearingCheckoutServiceImpl extends BaseService implements Xhpc writer.addHeaderAlias("operationSvcCommission", "运维服务费抽成(元)"); writer.addHeaderAlias("actPowerPrice", "运营商实收电费(元)"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费(元)"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额(元)"); writer.addHeaderAlias("startSoc", "启动SOC"); writer.addHeaderAlias("endSoc", "结算SOC"); writer.addHeaderAlias("startTime", "开始充电时间"); diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/XhpcClearingHistoryOrderServiceImpl.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/XhpcClearingHistoryOrderServiceImpl.java index 60a3bddb..2ff990bb 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/XhpcClearingHistoryOrderServiceImpl.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/service/impl/XhpcClearingHistoryOrderServiceImpl.java @@ -154,6 +154,8 @@ public class XhpcClearingHistoryOrderServiceImpl extends BaseService implements writer.addHeaderAlias("actPowerPrice", "运营商实收电费(元)"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费(元)"); writer.addHeaderAlias("actTotalPrice", "运营商实收总费用(元)"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额(元)"); + writer.addHeaderAlias("actClearingPrice", "运营商清分金额(元)"); writer.addHeaderAlias("startSoc", "启动SOC"); writer.addHeaderAlias("endSoc", "结算SOC"); writer.addHeaderAlias("startTime", "开始充电时间"); @@ -221,8 +223,19 @@ public class XhpcClearingHistoryOrderServiceImpl extends BaseService implements bankDomain.put("cashedAmount", cashedAmount); bankDomain.put("unclearingAmount", unClearingAmount); bankDomain.put("cashingAmount", cashingAmount); - bankDomain.put("cashAmount", cashMap.get("amount")); + // 可提现金额 + BigDecimal bankRate = new BigDecimal("0.006"); + BigDecimal handlingAmount = BigDecimal.TEN; + //剔除不参与清分金额 + Map cashMapYu = historyOrderMapper.selectCashAmountYu(operatorId.toString()); + BigDecimal powerAmountYu = new BigDecimal(cashMapYu.get("powerAmount").toString()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal serviceAmountYu = new BigDecimal(cashMapYu.get("serviceAmount").toString()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal bankFeeYu = powerAmountYu.add(serviceAmountYu).multiply(bankRate).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal receivedServiceAmountYu = serviceAmountYu.subtract(handlingAmount).subtract(bankFeeYu); + bankDomain.put("cashAmount", powerAmountYu.add(receivedServiceAmountYu).compareTo(BigDecimal.ZERO) >= 0 ? powerAmountYu.add(receivedServiceAmountYu) : BigDecimal.ZERO); + // 不参与清分金额 + bankDomain.put("clearingPrice", cashMap.get("clearingPrice")); return bankDomain; } diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/task/AutoProcessOrderTask.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/task/AutoProcessOrderTask.java index cf5a7a10..ce923485 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/task/AutoProcessOrderTask.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/task/AutoProcessOrderTask.java @@ -27,7 +27,7 @@ public class AutoProcessOrderTask { @Resource PowerPileService powerPileService; - //111@Scheduled(fixedRate = 60000) + //@Scheduled(fixedRate = 60000) protected void run() { List orderList = workOrderMapper.selectByAutoRun(); diff --git a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/task/SyncHistoryOrderTask.java b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/task/SyncHistoryOrderTask.java index 37d3ef0b..01e19639 100644 --- a/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/task/SyncHistoryOrderTask.java +++ b/xhpc-modules/xhpc-activity/src/main/java/com/xhpc/activity/task/SyncHistoryOrderTask.java @@ -33,9 +33,10 @@ public class SyncHistoryOrderTask { /** - * 每天六点自动同步一天之前所有未同步订单 + * 每小时自动同步一天之前所有未同步订单 */ @Scheduled(cron = "0 0 0/1 * * ?") + //@Scheduled(cron = "0 0/3 * * * ?") @Transactional @GetMapping("/syncTask") public void ExpiredTenantStatusTask() { diff --git a/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcClearingCheckoutMapper.xml b/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcClearingCheckoutMapper.xml index b5b4d671..f738ce6b 100644 --- a/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcClearingCheckoutMapper.xml +++ b/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcClearingCheckoutMapper.xml @@ -25,7 +25,7 @@ cc.clearing_checkout_id, cc.clearing_bank_id, cc.apply_amount, cc.apply_power_amount, cc.apply_service_amount, cc.handling_fee, - cc.received_amount, cc.bank_fee, cc.del_flag, cc.received_power_amount, cc.received_service_amount, + cc.received_amount, cc.bank_fee, cc.del_flag, cc.received_power_amount, cc.received_service_amount,cc.clearing_price, cc.`status`, cc.operator_id, cc.tenant_id, cc.create_by, cc.create_time, cc.update_by, cc.update_time, cc.check_by, cc.check_time @@ -70,54 +70,88 @@ and cc.operator_id in (select operator_id from xhpc_charging_station where charging_station_id in(select charging_station_id from xhpc_user_privilege where user_id=#{params.logOperatorId})) + order by cc.clearing_checkout_id desc,cc.status - - - + SELECT + xt.tenant_id AS 'tenantId', + xt.tenant_name AS 'tenantName', + xo.operator_id AS 'operatorId', + xo.name AS 'operatorName' + FROM xhpc_operator xo + LEFT JOIN xhpc_tenant xt ON xo.tenant_id = xt.tenant_id + WHERE xo.del_flag = 0 - and xo.tenant_id=#{params.tenantId} + AND xo.tenant_id = #{params.tenantId} - and xo.operator_id=#{params.operatorId} + AND xo.operator_id = #{params.operatorId} + + + + @@ -127,6 +161,7 @@ + + select + ifnull(sum(ho.act_total_price), 0) + from xhpc_clearing_history_order as ho + where ho.del_flag=0 and ho.check_status=0 and ho.operator_id=#{params.operatorId} + + AND ho.end_time >= #{params.startTime} + + + AND ho.end_time <= #{params.endTime} + + + + + + + + + + + + + + + + + diff --git a/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcClearingHistoryOrderMapper.xml b/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcClearingHistoryOrderMapper.xml index 6891bbc8..77513baf 100644 --- a/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcClearingHistoryOrderMapper.xml +++ b/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcClearingHistoryOrderMapper.xml @@ -19,6 +19,7 @@ + @@ -65,6 +66,8 @@ + + ho.clearing_order_id, ho.charging_station_id, ho.charge_order_id, ho.user_id, ho.terminal_id, ho.serial_number, @@ -88,9 +91,12 @@ ho.operator_id_evcs, ho.charge_model_evcs, ho.connector_power_evcs, ho.meter_value_end_evcs, ho.meter_value_start_evcs, ho.operator_id3rdpty_evcs, ho.start_time, ho.end_time, ho.stop_reason_evcs, ho.total_power, ho.user_name_evcs, ho.phone, ho.evcs_order_no, ho.confirm_Result, ho.rate_model_id, - ho.charging_mode, + ho.charging_mode,ho.clearing_type, ifnull(ho.internet_degree_commission, 0) as 'internet_degree_commission', ho.`source`, ho.tenant_id, ho.operator_id, ho.operator_name, + ifnull(ho.clearing_price, 0) as 'clearing_price', + ifnull(ho.act_total_price, 0) as 'act_total_price', + ifnull(ho.act_total_price-ho.clearing_price, 0) as 'actClearingPrice', ho.clearing_checkout_id, ho.check_status, ho.check_by, ho.check_time, ifnull(ho.activity_power_price_total, 0) as 'activity_power_price_total', ifnull(ho.activity_service_price_total, 0) as 'activity_service_price_total', @@ -115,7 +121,9 @@ + + + + + select - ifnull(sum(ho.act_power_price + ho.act_service_price), 0) + ifnull(sum(ho.act_power_price + ho.act_service_price), 0) from xhpc_clearing_history_order as ho - left join xhpc_charging_station as ct on ct.charging_station_id = ho.charging_station_id - left join xhpc_operator as op on op.operator_id = ct.operator_id + left join xhpc_charging_station as ct on ct.charging_station_id = ho.charging_station_id + left join xhpc_operator as op on op.operator_id = ct.operator_id where ho.del_flag=0 and ho.check_status not in (1,2) and ct.operator_id=#{operatorId} diff --git a/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcWorkOrderMapper.xml b/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcWorkOrderMapper.xml index 58a34e31..8e4c83ae 100644 --- a/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcWorkOrderMapper.xml +++ b/xhpc-modules/xhpc-activity/src/main/resources/mapper/XhpcWorkOrderMapper.xml @@ -54,6 +54,7 @@ @@ -249,4 +249,18 @@ WHERE user_type = #{userType} and del_flag = 0 - \ No newline at end of file + + + + + + update xhpc_terminal set status = #{status}, prompt = '夜间控制功率,桩停用' where terminal_id in (21,22,23,24,25,26,27,28,29,30) and del_flag =0 + + diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/TimingTerminalDeactivateController.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/TimingTerminalDeactivateController.java new file mode 100644 index 00000000..829aaac0 --- /dev/null +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/TimingTerminalDeactivateController.java @@ -0,0 +1,114 @@ +package com.xhpc.charging.station.controller; + +import com.xhpc.charging.station.service.ITimingTerminalDeactivateService; +import com.xhpc.common.core.domain.R; +import com.xhpc.common.core.utils.poi.ExcelUtil; +import com.xhpc.common.core.web.controller.BaseController; +import com.xhpc.common.core.web.domain.AjaxResult; +import com.xhpc.common.core.web.page.TableDataInfo; +import com.xhpc.common.domain.TimingTerminalDeactivate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import static com.github.pagehelper.page.PageMethod.startPage; + +/** + * @author yuyang + * @Date 2026-05-08 13:50 + */ +@RestController +@RequestMapping("/timingTerminalDeactivate") +public class TimingTerminalDeactivateController extends BaseController { + + @Autowired + private ITimingTerminalDeactivateService deactivateService; + + /** + * 查询桩停用调整列表 + */ + @GetMapping("/list") + public TableDataInfo list(TimingTerminalDeactivate deactivate) { + startPage(); + List list = deactivateService.selectTimingTerminalDeactivateList(deactivate); + return getDataTable(list); + } + + /** + * 导出桩停用调整列表 + */ + @PostMapping("/export") + public void export(HttpServletResponse response, TimingTerminalDeactivate deactivate) throws IOException { + List list = deactivateService.selectTimingTerminalDeactivateList(deactivate); + ExcelUtil util = new ExcelUtil<>(TimingTerminalDeactivate.class); + util.exportExcel(response, list, "桩停用调整数据"); + } + + /** + * 获取桩停用调整详细信息 + */ + @GetMapping("/details") + public AjaxResult details(Long timingTerminalDeactivateId) { + return AjaxResult.success(deactivateService.selectTimingTerminalDeactivateById(timingTerminalDeactivateId)); + } + + /** + * 新增桩停用调整 + */ + @PostMapping("/add") + public R add(@RequestBody TimingTerminalDeactivate deactivate) { + return deactivateService.insertTimingTerminalDeactivate(deactivate); + } + + /** + * 修改桩停用调整 + */ + @PostMapping("/edit") + public R edit(@RequestBody TimingTerminalDeactivate deactivate) { + return deactivateService.updateTimingTerminalDeactivate(deactivate); + } + + /** + * 删除桩停用调整 + */ + @GetMapping("/remove") + public AjaxResult remove(Long timingTerminalDeactivateId) { + return toAjax(deactivateService.deleteTimingTerminalDeactivateById(timingTerminalDeactivateId)); + } + + + /** + * 每分钟执行一次,检查需要开始调整的任务 + */ + @Scheduled(cron = "0 0/3 * * * ? ") + public void executeStartAdjustment() { + try { + //log.info("开始执行桩停用开始调整定时任务"); + deactivateService.executeStartAdjustment(); + //log.info("桩停用开始调整定时任务执行完成"); + } catch (Exception e) { + // log.error("桩停用开始调整定时任务执行失败", e); + } + } + + /** + * 每分钟执行一次,检查需要结束调整的任务 + */ + @Scheduled(cron = "0 0/3 * * * ? ") + public void executeEndAdjustment() { + try { + //log.info("开始执行桩停用结束调整定时任务"); + deactivateService.executeEndAdjustment(); + // log.info("桩停用结束调整定时任务执行完成"); + } catch (Exception e) { + // log.error("桩停用结束调整定时任务执行失败", e); + } + } + + +} diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/XhpcChargingStationController.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/XhpcChargingStationController.java index 68da7db4..b76acabb 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/XhpcChargingStationController.java +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/XhpcChargingStationController.java @@ -245,4 +245,9 @@ public class XhpcChargingStationController extends BaseController { return xhpcChargingStationService.getXhpcRateTimeOrder(rateModelId,startTime,endTime,serialNumber); } + @GetMapping("/getCrossDayXhpcRateTimeOrder") + public R getCrossDayXhpcRateTimeOrder(Long rateModelId,String startTime, String endTime,String serialNumber){ + return xhpcChargingStationService.getCrossDayXhpcRateTimeOrder(rateModelId,startTime,endTime,serialNumber); + } + } diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/XhpcPlaceholderController.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/XhpcPlaceholderController.java index 4fdd7261..1509d4ff 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/XhpcPlaceholderController.java +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/controller/XhpcPlaceholderController.java @@ -32,13 +32,15 @@ public class XhpcPlaceholderController extends BaseController { LogUserUtils logUserUtils; @GetMapping("/list") - public TableDataInfo list(HttpServletRequest request, Long chargingStationId,Integer status,Long operatorId,String startTime,String endTime) { + public TableDataInfo list(HttpServletRequest request, Long chargingStationId,Integer status,Long operatorId,String startTime,String endTime,Integer type,Integer ykcStatus) { LoginUser loginUser = logUserUtils.getLogUser(request); startPage(); Map params = new HashMap<>(); params.put("tenantId", loginUser.getTenantId()); params.put("status", status); + params.put("type", type); + params.put("ykcStatus", ykcStatus); params.put("chargingStationId", chargingStationId); params.put("operatorId", operatorId); params.put("startTime", startTime); diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/mapper/TimingTerminalDeactivateMapper.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/mapper/TimingTerminalDeactivateMapper.java new file mode 100644 index 00000000..6e041878 --- /dev/null +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/mapper/TimingTerminalDeactivateMapper.java @@ -0,0 +1,37 @@ +package com.xhpc.charging.station.mapper; + +import com.xhpc.common.domain.TimingTerminalDeactivate; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @author yuyang + * @Date 2026-05-08 13:43 + */ +public interface TimingTerminalDeactivateMapper { + /** + * 查询桩停用调整列表(带关联查询) + */ + public List selectDeactivateList(TimingTerminalDeactivate deactivate); + + /** + * 批量更新执行状态 + */ + public int batchUpdateType(@Param("list") List ids, @Param("type") Integer type, @Param("errorReason") String errorReason); + + TimingTerminalDeactivate getTimingTerminalDeactivateById( @Param("id")Long id); + + int addTimingTerminalDeactivate(TimingTerminalDeactivate deactivate); + + int updateTimingTerminalDeactivate(TimingTerminalDeactivate deactivate); + + int deleteTimingTerminalDeactivate(@Param("ids")Long ids); + + List getTimingTerminalDeactivateTime(@Param("status")Integer status); + + List> getSerialNumberList(@Param("ids")List ids); + + int updateXhpcTerminalAll(@Param("status")Integer status,@Param("prompt")String prompt,@Param("ids")List ids); +} diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/ITimingTerminalDeactivateService.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/ITimingTerminalDeactivateService.java new file mode 100644 index 00000000..c0959e0a --- /dev/null +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/ITimingTerminalDeactivateService.java @@ -0,0 +1,53 @@ +package com.xhpc.charging.station.service; + +import com.xhpc.common.core.domain.R; +import com.xhpc.common.core.web.domain.AjaxResult; +import com.xhpc.common.domain.TimingTerminalDeactivate; + +import java.util.List; + +/** + * @author yuyang + * @Date 2026-05-08 13:40 + */ +public interface ITimingTerminalDeactivateService { + /** + * 查询桩停用调整 + */ + public TimingTerminalDeactivate selectTimingTerminalDeactivateById(Long id); + + /** + * 查询桩停用调整列表 + */ + public List selectTimingTerminalDeactivateList(TimingTerminalDeactivate deactivate); + + /** + * 新增桩停用调整 + */ + public R insertTimingTerminalDeactivate(TimingTerminalDeactivate deactivate); + + /** + * 修改桩停用调整 + */ + public R updateTimingTerminalDeactivate(TimingTerminalDeactivate deactivate); + + /** + * 批量删除桩停用调整 + */ + public int deleteTimingTerminalDeactivateByIds(List ids); + + /** + * 删除桩停用调整信息 + */ + public int deleteTimingTerminalDeactivateById(Long id); + + /** + * 执行定时任务(开始调整) + */ + public void executeStartAdjustment(); + + /** + * 执行定时任务(结束调整) + */ + public void executeEndAdjustment(); +} diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/IXhpcChargingStationService.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/IXhpcChargingStationService.java index 47b783da..1f8d6c60 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/IXhpcChargingStationService.java +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/IXhpcChargingStationService.java @@ -262,4 +262,7 @@ public interface IXhpcChargingStationService { R getXhpcRateTimeOrder(Long rateModelId,String startTime, String endTime,String serialNumber); + R getCrossDayXhpcRateTimeOrder(Long rateModelId,String startTime, String endTime,String serialNumber); + + } diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/TimingTerminalDeactivateServiceImpl.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/TimingTerminalDeactivateServiceImpl.java new file mode 100644 index 00000000..3e79ce31 --- /dev/null +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/TimingTerminalDeactivateServiceImpl.java @@ -0,0 +1,231 @@ +package com.xhpc.charging.station.service; + +import com.xhpc.charging.station.mapper.TimingTerminalDeactivateMapper; +import com.xhpc.common.api.PowerPileService; +import com.xhpc.common.core.domain.R; +import com.xhpc.common.core.web.domain.AjaxResult; +import com.xhpc.common.domain.TimingTerminalDeactivate; +import com.xhpc.common.redis.service.RedisService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author yuyang + * @Date 2026-05-08 13:41 + */ +@Service +public class TimingTerminalDeactivateServiceImpl implements ITimingTerminalDeactivateService{ + + @Resource + private TimingTerminalDeactivateMapper deactivateMapper; + @Resource + private PowerPileService powerPileService; + @Resource + private RedisService redisService; + + + @Override + public TimingTerminalDeactivate selectTimingTerminalDeactivateById(Long id) { + return deactivateMapper.getTimingTerminalDeactivateById(id); + } + + @Override + public List selectTimingTerminalDeactivateList(TimingTerminalDeactivate deactivate) { + return deactivateMapper.selectDeactivateList(deactivate); + } + + @Override + public R insertTimingTerminalDeactivate(TimingTerminalDeactivate deactivate) { + // 设置默认值 + if (deactivate.getStartType() == null) { + deactivate.setStartType(0); // 未执行 + } + if (deactivate.getStartStatus() == null) { + deactivate.setStartStatus(1); // 默认停止 + } + + if (deactivate.getReason() == null || "".equals(deactivate.getReason())) { + return R.fail(1001, "调整原因不能为空"); + } + if (deactivate.getChargingStationId() == null || "".equals(deactivate.getChargingStationId())) { + return R.fail(1001, "场站不能为空"); + } + if (deactivate.getStartTimingTime() == null || "".equals(deactivate.getStartTimingTime())) { + return R.fail(1001, "调整开始时间不能为空"); + }else{ + if(System.currentTimeMillis()>deactivate.getStartTimingTime().getTime()){ + return R.fail(1001, "调整开始时间不能小于现在时间"); + } + } + + if (deactivate.getEndTimingTime() == null || "".equals(deactivate.getEndTimingTime())) { + return R.fail(1001, "调整结束时间不能为空"); + }else{ + if(System.currentTimeMillis()>deactivate.getEndTimingTime().getTime()){ + return R.fail(1001, "调整结束时间不能小于现在时间"); + } + + if(deactivate.getEndTimingTime().getTime()deactivate.getStartTimingTime().getTime()){ + return R.fail(1001, "调整开始时间不能小于现在时间"); + } + } + + if (deactivate.getEndTimingTime() == null || "".equals(deactivate.getEndTimingTime())) { + return R.fail(1001, "调整结束时间不能为空"); + }else{ + if(System.currentTimeMillis()>deactivate.getEndTimingTime().getTime()){ + return R.fail(1001, "调整结束时间不能小于现在时间"); + } + + if(deactivate.getEndTimingTime().getTime() ids) { + return deactivateMapper.deleteTimingTerminalDeactivate(null); + } + + @Override + public int deleteTimingTerminalDeactivateById(Long id) { + return deactivateMapper.deleteTimingTerminalDeactivate(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void executeStartAdjustment() { + // 查询到达开始时间且未执行的记录 + try{ + List listYu = deactivateMapper.getTimingTerminalDeactivateTime(1); + + for (int j = 0; j > list = deactivateMapper.getSerialNumberList(Arrays.asList(timingTerminalDeactivate.getPileIds().split(","))); + for (int i = 0; i map = list.get(i); + if(map.get("serialNumber") !=null){ + String serialNumberOrderMap = map.get("serialNumber").toString(); + Map cacheMap = redisService.getCacheMap("gun:" + serialNumberOrderMap.substring(0,16)); + if(cacheMap !=null){ + if(cacheMap.get("orderkey") !=null){ + String version ="0C"; + if(cacheMap.get("version") !=null){ + version =cacheMap.get("version").toString(); + } + //同一个桩每道指令有500毫秒的保护期 + Thread.sleep(1500); + System.out.println("===========serialNumberOrderMap=============="+serialNumberOrderMap+"====下发停止命令"); + powerPileService.stopCharging(serialNumberOrderMap, serialNumberOrderMap.substring(0,14), serialNumberOrderMap.substring(0,16), version); + } + } + } + } + } + deactivateMapper.updateXhpcTerminalAll(timingTerminalDeactivate.getStartStatus(),timingTerminalDeactivate.getPrompt(),Arrays.asList(timingTerminalDeactivate.getPileIds().split(","))); + + TimingTerminalDeactivate deactivate=new TimingTerminalDeactivate(); + deactivate.setTimingTerminalDeactivateId(timingTerminalDeactivate.getTimingTerminalDeactivateId()); + deactivate.setStartType(1); + deactivateMapper.updateTimingTerminalDeactivate(deactivate); + } + }catch (Exception e){ + e.printStackTrace(); + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void executeEndAdjustment() { + try{ + // 查询到达结束时间且未执行的记录 + List listYu = deactivateMapper.getTimingTerminalDeactivateTime(2); + + for (int j = 0; j > list = deactivateMapper.getSerialNumberList(Arrays.asList(timingTerminalDeactivate.getPileIds().split(","))); + for (int i = 0; i map = list.get(i); + if(map.get("serialNumber") !=null){ + String serialNumberOrderMap = map.get("serialNumber").toString(); + Map cacheMap = redisService.getCacheMap("gun:" + serialNumberOrderMap.substring(0,16)); + if(cacheMap !=null){ + if(cacheMap.get("orderkey") !=null){ + String version ="0C"; + if(cacheMap.get("version") !=null){ + version =cacheMap.get("version").toString(); + } + //同一个桩每道指令有500毫秒的保护期 + Thread.sleep(1500); + powerPileService.stopCharging(serialNumberOrderMap, serialNumberOrderMap.substring(0,14), serialNumberOrderMap.substring(0,16), version); + } + } + } + } + } + deactivateMapper.updateXhpcTerminalAll(timingTerminalDeactivate.getEndStatus(),timingTerminalDeactivate.getPrompt(),Arrays.asList(timingTerminalDeactivate.getPileIds().split(","))); + + TimingTerminalDeactivate deactivate=new TimingTerminalDeactivate(); + deactivate.setTimingTerminalDeactivateId(timingTerminalDeactivate.getTimingTerminalDeactivateId()); + deactivate.setEndType(1); + deactivateMapper.updateTimingTerminalDeactivate(deactivate); + + } + }catch (Exception e){ + e.printStackTrace(); + } + + } +} diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingStationServiceImpl.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingStationServiceImpl.java index 14145a21..e42c6ad4 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingStationServiceImpl.java +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcChargingStationServiceImpl.java @@ -1,6 +1,7 @@ package com.xhpc.charging.station.service; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import com.xhpc.charging.station.dto.XhpcActivityDiscountDto; import com.xhpc.charging.station.mapper.XhpcChargingStationMapper; @@ -1036,7 +1037,7 @@ public class XhpcChargingStationServiceImpl extends BaseService implements IXhpc }else{ map.put("cause", "--"); } - }else if("空闲".equals(cacheMap.get("status").toString())){ + }else if("空闲".equals(cacheMap.get("status").toString()) || "插枪".equals(cacheMap.get("status").toString())){ if("是".equals(cacheMap.get("vehicleGunStatus").toString())){ map.put("status", 4); continue; @@ -1447,7 +1448,7 @@ public class XhpcChargingStationServiceImpl extends BaseService implements IXhpc if(!"".equals(serialNumbers) && serialNumbers !=null){ for (String serialNumber:split) { Map cacheMap =redisService.getCacheMap("gun:"+serialNumber); - if(cacheMap !=null && "空闲".equals(cacheMap.get("status"))){ + if(cacheMap !=null && ("空闲".equals(cacheMap.get("status"))|| "插枪".equals(cacheMap.get("status").toString()))){ number++; } } @@ -1476,7 +1477,7 @@ public class XhpcChargingStationServiceImpl extends BaseService implements IXhpc "故障".equals(cacheMap.get("status").toString())){ fault++; }else if(cacheMap.containsKey("status") && - "空闲".equals(cacheMap.get("status").toString())){ + ("空闲".equals(cacheMap.get("status").toString())|| "插枪".equals(cacheMap.get("status").toString()))){ freeTime++; }else{ charge++; @@ -1516,7 +1517,7 @@ public class XhpcChargingStationServiceImpl extends BaseService implements IXhpc return 0; }else if("故障".equals(cacheMap.get("status").toString())){ return 1; - }else if("空闲".equals(cacheMap.get("status").toString())){ + }else if("空闲".equals(cacheMap.get("status").toString()) || "插枪".equals(cacheMap.get("status").toString())){ if("是".equals(cacheMap.get("vehicleGunStatus").toString())){ return 4; }else{ @@ -1659,4 +1660,31 @@ public class XhpcChargingStationServiceImpl extends BaseService implements IXhpc redisService.setCacheMap("Yu"+serialNumber,cacheOrder); return R.ok(); } + + @Override + public R getCrossDayXhpcRateTimeOrder(Long rateModelId, String startTime, String endTime,String serialNumber) { + + String start1 = endTime.substring(0,10)+" 00:00:00"; + String end1 = startTime.substring(0,10)+" 23:59:59"; + + DateTime parse1 = DateUtil.parse(startTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse2 = DateUtil.parse(end1, "yyyy-MM-dd HH:mm:ss"); + + DateTime parse3 = DateUtil.parse(start1, "yyyy-MM-dd HH:mm:ss"); + DateTime parse4 = DateUtil.parse(endTime, "yyyy-MM-dd HH:mm:ss"); + + List reatTimeList1 = xhpcChargingStationMapper.getReatTimeList(DateUtil.formatTime(parse1), DateUtil.formatTime(parse2), rateModelId); + + List reatTimeList2 = xhpcChargingStationMapper.getReatTimeList(DateUtil.formatTime(parse3), DateUtil.formatTime(parse4), rateModelId); + List combinedList = new ArrayList<>(); + combinedList.addAll(reatTimeList1); + combinedList.addAll(reatTimeList2); + + Map cacheOrder =new HashMap<>(); + cacheOrder.put(serialNumber,combinedList); + redisService.setCacheMap("Yu"+serialNumber,cacheOrder); + return R.ok(); + } + + } diff --git a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcTimingChargingModelServiceImpl.java b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcTimingChargingModelServiceImpl.java index 6d12f3e5..a302e670 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcTimingChargingModelServiceImpl.java +++ b/xhpc-modules/xhpc-charging-station/src/main/java/com/xhpc/charging/station/service/XhpcTimingChargingModelServiceImpl.java @@ -1,6 +1,7 @@ package com.xhpc.charging.station.service; import cn.hutool.core.date.DateUtil; +import com.xhpc.charging.station.mapper.XhpcChargingStationMapper; import com.xhpc.charging.station.mapper.XhpcTimingChargingModelMapper; import com.xhpc.common.api.PowerPileService; import com.xhpc.common.api.SmsService; @@ -47,6 +48,8 @@ public class XhpcTimingChargingModelServiceImpl extends BaseService implements I private IXhpcChargingStationService xhpcChargingStationService; @Autowired private SmsService smsService; + @Autowired + private XhpcChargingStationMapper xhpcChargingStationMapper; private final ExecutorService executorService = Executors.newFixedThreadPool(20); @@ -589,6 +592,16 @@ public class XhpcTimingChargingModelServiceImpl extends BaseService implements I xhpcTimingChargingModelMapper.updateXhpcTimingChargingModel(xhpcTimingChargingModel); //费率发生改变,缓存到redis powerPileService.getNotificationStationFee(chargingStationId); + + //发送校时校价命令 + Set pileList = xhpcChargingStationMapper.getXchargingPileList(chargingStationId); + if(pileList.size()>0){ + List setlist = new ArrayList<>(pileList); + for (int j = 0; j + + + + + + + + + + + + + + + + + + + + + + + + + + + select d.timing_terminal_deactivate_id, d.charging_station_id, d.pile_ids, + d.start_timing_time, d.start_status, d.start_type, d.end_timing_time, + d.end_status, d.end_type, d.prompt, d.reason, d.error_reason, + d.del_flag, d.create_time, d.create_by, d.update_time, d.update_by, + d.remark, d.tenant_id, + s.name as chargingStationName + from xhpc_timing_terminal_deactivate d + left join xhpc_charging_station s on d.charging_station_id = s.charging_station_id + + + + + + update xhpc_timing_terminal_deactivate + set start_type = #{type}, + error_reason = #{errorReason} + where timing_terminal_deactivate_id in + + #{id} + + + + + + + insert into xhpc_timing_terminal_deactivate + + + charging_station_id, + + + pile_ids, + + + start_timing_time, + + + start_status, + + + start_type, + + + end_timing_time, + + + end_status, + + + end_type, + + + prompt, + + + reason, + + + error_reason, + + + del_flag, + + + create_time, + + + create_by, + + + update_time, + + + update_by, + + + remark, + + + tenant_id, + + + + + + #{chargingStationId}, + + + #{pileIds}, + + + #{startTimingTime}, + + + #{startStatus}, + + + #{startType}, + + + #{endTimingTime}, + + + #{endStatus}, + + + #{endType}, + + + #{prompt}, + + + #{reason}, + + + #{errorReason}, + + + #{delFlag}, + + + #{createTime}, + + + #{createBy}, + + + #{updateTime}, + + + #{updateBy}, + + + #{remark}, + + + #{tenantId}, + + + + + + update xhpc_timing_terminal_deactivate + + charging_station_id = #{chargingStationId}, + pile_ids = #{pileIds}, + start_timing_time = #{startTimingTime}, + start_status = #{startStatus}, + start_type = #{startType}, + end_timing_time = #{endTimingTime}, + end_status = #{endStatus}, + end_type = #{endType}, + prompt = #{prompt}, + reason = #{reason}, + error_reason = #{errorReason}, + + where timing_terminal_deactivate_id =#{timingTerminalDeactivateId} + + + + delete from xhpc_timing_terminal_deactivate where timing_terminal_deactivate_id=#{ids} + + + + + + + + + update xhpc_terminal set status = #{status}, prompt = #{prompt} where del_flag =0 + AND charging_pile_id in + + #{id} + + + + diff --git a/xhpc-modules/xhpc-charging-station/src/main/resources/mapper/XhpcChargingStationMapper.xml b/xhpc-modules/xhpc-charging-station/src/main/resources/mapper/XhpcChargingStationMapper.xml index 0f9d4ef4..59e2a334 100644 --- a/xhpc-modules/xhpc-charging-station/src/main/resources/mapper/XhpcChargingStationMapper.xml +++ b/xhpc-modules/xhpc-charging-station/src/main/resources/mapper/XhpcChargingStationMapper.xml @@ -77,6 +77,7 @@ + @@ -394,6 +395,9 @@ barrier_gate_id=#{barrierGateId}, + + internal_type=#{internalType}, + where charging_station_id = #{chargingStationId} @@ -472,6 +476,8 @@ ct.construction_site as constructionSite, op.name as operatorName, ct.type as type, + ct.internal_type as internalType, + ct.construction_time as constructionTime, ct.charging_method as chargingMethod, ct.open_all_day as openAllDay, @@ -960,6 +966,9 @@ charging_method, + + internal_type, + @@ -1183,6 +1192,9 @@ #{chargingMethod}, + + #{internalType}, + @@ -1527,7 +1539,24 @@ @@ -28,11 +30,18 @@ xp.start_time as startTime, xp.end_time as endTime, xp.status as status, + xp.type as type, + xp.ykc_status as ykcStatus, xp.free_time as freeTime, xp.max_fee as maxFee, xp.create_time createTime, xcs.name as chargingStationName, - xp.charging_station_id as chargingStationId + xp.user_type as userType, + xp.charging_station_id as chargingStationId, + (select group_concat(inu.name separator ',') + from xhpc_internet_user inu + where find_in_set(inu.internet_user_id, xp.internet_user_id) > 0 + ) as internetUserNames from xhpc_placeholder xp left join xhpc_charging_station xcs on xcs.charging_station_id = xp.charging_station_id where xp.del_flag=0 @@ -59,6 +68,12 @@ and xp.status=#{params.status} + + and xp.type=#{params.type} + + + and xp.ykc_status=#{params.ykcStatus} + and xp.charging_station_id in(select charging_station_id from xhpc_charging_station where operator_id=#{params.logOperatorId}) @@ -74,11 +89,20 @@ xp.start_time as startTime, xp.end_time as endTime, xp.status as status, + xp.type as type, + xp.ykc_status as ykcStatus, xp.free_time as freeTime, xp.max_fee as maxFee, xp.content as content, xcs.name as chargingStationName, - xp.charging_station_id as chargingStationId + xp.charging_station_id as chargingStationId, + xp.internet_user_id as internetUserId, + xp.user_type as userType, + xp.ykc_status as ykcStatus, + (select group_concat(inu.name separator ',') + from xhpc_internet_user inu + where find_in_set(inu.internet_user_id, xp.internet_user_id) > 0 + ) as internetUserNames from xhpc_placeholder xp left join xhpc_charging_station xcs on xcs.charging_station_id = xp.charging_station_id where xp.del_flag=0 and xp.placeholder_id =#{placeholderId} @@ -99,6 +123,7 @@ start_time = #{startTime}, end_time = #{endTime}, status = #{status}, + type = #{type}, content = #{content}, max_fee = #{maxFee}, free_time = #{freeTime}, @@ -106,6 +131,9 @@ update_time = #{updateTime}, update_by = #{updateBy}, remark = #{remark}, + internet_user_id = #{internetUserId}, + user_type = #{userType}, + ykc_status = #{ykcStatus}, where placeholder_id = #{placeholderId} @@ -240,6 +268,18 @@ status, + + internet_user_id, + + + user_type, + + + type, + + + ykc_status, + @@ -284,6 +324,18 @@ #{status}, + + #{internetUserId}, + + + #{userType}, + + + #{type}, + + + #{ykcStatus}, + diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/ChargingStationService.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/ChargingStationService.java index 409f7f03..8c18e23f 100644 --- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/ChargingStationService.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/ChargingStationService.java @@ -36,5 +36,7 @@ public interface ChargingStationService { @GetMapping("/station/getXhpcRateTimeOrder") R getXhpcRateTimeOrder(@RequestParam(value = "rateModelId")Long rateModelId,@RequestParam(value = "startTime") String startTime,@RequestParam(value = "endTime") String endTime,@RequestParam(value = "serialNumber") String serialNumber); + @GetMapping("/station/getCrossDayXhpcRateTimeOrder") + R getCrossDayXhpcRateTimeOrder(@RequestParam(value = "rateModelId")Long rateModelId,@RequestParam(value = "startTime") String startTime,@RequestParam(value = "endTime") String endTime,@RequestParam(value = "serialNumber") String serialNumber); } diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/UserTypeService.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/UserTypeService.java index 5372b83f..bdac3658 100644 --- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/UserTypeService.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/UserTypeService.java @@ -51,4 +51,12 @@ public interface UserTypeService { R getMechanismDiscount(@RequestParam(value = "userId")Long userId, @RequestParam(value = "userType")Integer userType, @RequestParam(value = "tenantId")String tenantId,@RequestParam(value = "chargingStationId")Long chargingStationId); + + /** + * 获取车队信息 + */ + @GetMapping("/motorcade/getOrderMotorcade") + R getOrderMotorcade(@RequestParam(value = "mark")String mark); + + } diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/ChargingStationServiceFactory.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/ChargingStationServiceFactory.java index b5817796..f7668936 100644 --- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/ChargingStationServiceFactory.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/ChargingStationServiceFactory.java @@ -55,6 +55,11 @@ public class ChargingStationServiceFactory implements FallbackFactory public R getMechanismDiscount(Long userId, Integer userType, String tenantId,Long chargingStationId) { return R.fail("机构信息获取失败:" + cause.getMessage()); } + + @Override + public R getOrderMotorcade(String mark) { + return R.fail("车队信息获取失败:" + cause.getMessage()); + } }; } } diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/data/up/Certification.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/data/up/Certification.java new file mode 100644 index 00000000..b89e3fdd --- /dev/null +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/data/up/Certification.java @@ -0,0 +1,19 @@ +package com.xhpc.common.data.up; + +/** + * 登录认证 + * + * @author yuyang + * @Date 2026-03-26 15:37 + */ +public class Certification extends BaseData { + + private String pileNo; //桩号 + private String termType; //桩类型 + private String gunNum; + private String version; + private String programVersion; + private String linkType; + private String sim; + private String operator; +} diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/TimingTerminalDeactivate.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/TimingTerminalDeactivate.java new file mode 100644 index 00000000..5f233ab8 --- /dev/null +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/TimingTerminalDeactivate.java @@ -0,0 +1,65 @@ +package com.xhpc.common.domain; + +import com.xhpc.common.core.web.domain.BaseEntity; +import lombok.Data; + +import java.util.Date; + +/** + * 桩停用调整对象 + * + * @author yuyang + * @Date 2026-05-08 11:10 + */ +@Data +public class TimingTerminalDeactivate extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long timingTerminalDeactivateId; + + /** 场站id */ + private Long chargingStationId; + + /** 场站名称(非数据库字段) */ + private String chargingStationName; + + /** 桩id集合 */ + private String pileIds; + + /** 桩名称集合(非数据库字段) */ + private String pileNames; + + /** 调整开始时间 */ + private Date startTimingTime; + + /** 开始调整状态(0启用 1停止) */ + private Integer startStatus; + + /** 开始执行状态(0未执行 1已执行 2执行错误) */ + private Integer startType; + + /** 调整结束时间 */ + private Date endTimingTime; + + /** 结束调整状态(0启用 1停止) */ + private Integer endStatus; + + /** 结束执行状态(0未执行 1已执行 2执行错误) */ + private Integer endType; + + /** 桩停用提示语 */ + private String prompt; + + /** 调整原因 */ + private String reason; + + /** 失败原因 */ + private String errorReason; + + + private Integer delFlag; + + private Long operatorId; +} diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcChargingStation.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcChargingStation.java index 53c4a37c..3f2c7c43 100644 --- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcChargingStation.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcChargingStation.java @@ -298,6 +298,11 @@ public class XhpcChargingStation extends BaseEntity { */ private String chargingMethod; + /** + * 允许充电方式 + */ + private Integer internalType; + public Integer getInstalledTotalPower() { return installedTotalPower; } @@ -906,4 +911,11 @@ public class XhpcChargingStation extends BaseEntity { this.internetEquipmentOwnerId = internetEquipmentOwnerId; } + public Integer getInternalType() { + return internalType; + } + + public void setInternalType(Integer internalType) { + this.internalType = internalType; + } } diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcPlaceholder.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcPlaceholder.java index 8663a7c9..d987aaab 100644 --- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcPlaceholder.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcPlaceholder.java @@ -23,6 +23,9 @@ public class XhpcPlaceholder extends BaseEntity { private Long chargingStationId; private String content; private Integer status; + private Integer type; private Integer delFlag; - + private String internetUserId; + private String userType; + private Integer ykcStatus; } diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/util/UserTypeUtil.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/util/UserTypeUtil.java index de5e5a4e..a0dbe189 100644 --- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/util/UserTypeUtil.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/util/UserTypeUtil.java @@ -14,9 +14,13 @@ public class UserTypeUtil { //流量端用户 public static final String INTERNET = "L"; //社区端用户 - public static final String COMMUNIT = "ST"; + public static final String COMMUNIT = "S"; //B端大客户 - public static final String CUSTOMERS = "BE"; + public static final String CUSTOMERS = "B"; + //车队客户 + public static final String MOTORCADE_USER = "D"; + //车队总负责人 + public static final String MOTORCADE_PERSON_IN_CHARGE = "Z"; //川逸充 public static final String CYCUSER = "CYC"; //c端用户 @@ -32,6 +36,11 @@ public class UserTypeUtil { //车队个人 public static final Integer MOTORCADE_USER_TYPE = 5; + //是否参与清分 + public static final Integer CLEARING_NO = 1; + + + //重新登录 public static final Integer LOGIN_TYPE = 1999; @@ -96,14 +105,14 @@ public class UserTypeUtil { /** - * 系统用户(00 平台管理员 01 运营上 03 子账户 04运维人员) + * 系统用户(00 平台管理员 01 运营上 03 子账户 04运维人员 05车队) */ public static final String SYS_USER_TYPE_ZERO = "00"; public static final String SYS_USER_TYPE_ONE = "01"; public static final String SYS_USER_TYPE_TWO = "02"; public static final String SYS_USER_TYPE_THREE = "03"; public static final String SYS_USER_TYPE_FOUR = "04"; - + public static final String SYS_MOTORCADE_TYPE_FOUR = "05"; /** * 系统租户管理员(0 是系统超管 1 某个租户超管 2普通用户) diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/order/domain/XhpcHistoryOrder.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/order/domain/XhpcHistoryOrder.java index 011f6efc..27cf8fa1 100644 --- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/order/domain/XhpcHistoryOrder.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/order/domain/XhpcHistoryOrder.java @@ -85,6 +85,8 @@ public class XhpcHistoryOrder extends BaseEntity { */ private BigDecimal actServicePrice; + private BigDecimal actTotalPrice; + /** * 流量方总金额抽成 */ @@ -119,6 +121,8 @@ public class XhpcHistoryOrder extends BaseEntity { */ private BigDecimal operationSvcCommission; + private BigDecimal clearingPrice; + /** * 开始充电soc */ @@ -129,10 +133,11 @@ public class XhpcHistoryOrder extends BaseEntity { */ private String endSoc; + private Integer reconciliationStatus; /** * 对账状态(0待确认 1已确认,2待提交,3待审核) */ - private Integer reconciliationStatus; + private Integer clearingType; /** * 清分状态(0待清分 1清分在途,2已提现,3待提交,4待审核) @@ -293,6 +298,10 @@ public class XhpcHistoryOrder extends BaseEntity { */ private Long operatorId; + private String mark; + + private Long motorcadeId; + public Integer getConfirmResult() { return confirmResult; @@ -821,4 +830,44 @@ public class XhpcHistoryOrder extends BaseEntity { public void setOperatorId(Long operatorId) { this.operatorId = operatorId; } + + public String getMark() { + return mark; + } + + public void setMark(String mark) { + this.mark = mark; + } + + public Long getMotorcadeId() { + return motorcadeId; + } + + public void setMotorcadeId(Long motorcadeId) { + this.motorcadeId = motorcadeId; + } + + public Integer getClearingType() { + return clearingType; + } + + public void setClearingType(Integer clearingType) { + this.clearingType = clearingType; + } + + public BigDecimal getClearingPrice() { + return clearingPrice; + } + + public void setClearingPrice(BigDecimal clearingPrice) { + this.clearingPrice = clearingPrice; + } + + public BigDecimal getActTotalPrice() { + return actTotalPrice; + } + + public void setActTotalPrice(BigDecimal actTotalPrice) { + this.actTotalPrice = actTotalPrice; + } } diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/order/domain/XhpcPlacreholder.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/order/domain/XhpcPlacreholder.java index 6649a32c..3a91f5b7 100644 --- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/order/domain/XhpcPlacreholder.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/order/domain/XhpcPlacreholder.java @@ -25,10 +25,11 @@ public class XhpcPlacreholder extends BaseEntity { private BigDecimal maxFee; private Integer freeTime; private Integer status; + private Integer type; private String content; private String tenantId; private Integer delFlag; - + private Integer ykcStatus; } diff --git a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/constant/AliyunTemplateKeyWord.java b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/constant/AliyunTemplateKeyWord.java index 2dbde98d..c7f33669 100644 --- a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/constant/AliyunTemplateKeyWord.java +++ b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/constant/AliyunTemplateKeyWord.java @@ -65,9 +65,9 @@ public class AliyunTemplateKeyWord { */ public static final String OPERATOR_ORDER_REFUND ="尊敬的管理员,用户退款订单"; //免费 - public static final String OPERATOR_PLACEHOLDER_ORDER ="尊敬的用户,你的爱车已停止充电"; + public static final String OPERATOR_PLACEHOLDER_ORDER ="尊敬的用户,你的爱车已停止充电"; //收费 - public static final String OPERATOR_PLACEHOLDER_ORDER_MONEY ="尊敬的用户你好,你的爱车已停止充电"; + public static final String OPERATOR_PLACEHOLDER_ORDER_MONEY ="尊敬的用户你好,你的爱车已停止充电"; public static final String OPERATOR_CODE= "您的验证码是"; } diff --git a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/controller/XhpcSmsController.java b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/controller/XhpcSmsController.java index 2a746ffc..051675e0 100644 --- a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/controller/XhpcSmsController.java +++ b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/controller/XhpcSmsController.java @@ -39,11 +39,13 @@ public class XhpcSmsController extends BaseController { signatureName = "翔桦充电"; templateId = "SMS_226786362"; + if(phone !=null || "".equals(phone)){ - if(!UserTypeUtil.COMMUNIT.equals(phone.substring(0,2)) && !UserTypeUtil.CUSTOMERS.equals(phone.substring(0,2))){ + String firstChar = phone.substring(0, 1); + if(firstChar.matches("[1-9]")){ //C端用户 return xhpcSmsService.getLogonPhoneCode(phone, signatureName, templateId,null); - }else if (UserTypeUtil.COMMUNIT.equals(phone.substring(0,2)) || UserTypeUtil.CUSTOMERS.equals(phone.substring(0,2))){ + }else if (UserTypeUtil.COMMUNIT.equals(phone.substring(0,1)) || UserTypeUtil.CUSTOMERS.equals(phone.substring(0,1))|| UserTypeUtil.MOTORCADE_USER.equals(phone.substring(0,1))|| UserTypeUtil.MOTORCADE_PERSON_IN_CHARGE.equals(phone.substring(0,1))){ R user = userTypeService.getUser(phone, null, null, null,tenantId); if(user !=null && user.getData() !=null){ Map map = (Map)user.getData(); @@ -65,7 +67,7 @@ public class XhpcSmsController extends BaseController { @PostMapping(value = "/send") public void send(@RequestBody Map paramMap) { - + System.out.println("============发送短信=======paramMap==========="+paramMap.toString()); String signatureName = null; String templateId = null; @@ -89,7 +91,6 @@ public class XhpcSmsController extends BaseController { signatureName = AliyunTemplate.SIGNATURE_NAME; templateId = AliyunTemplate.CHARGE_MONEY_INSUFFICIENT; } else if (content.contains(AliyunTemplateKeyWord.REFUND_FAIL)) { - signatureName = AliyunTemplate.SIGNATURE_NAME; templateId = AliyunTemplate.REFUND_FAIL; }else if (content.contains(AliyunTemplateKeyWord.CHARGING_MODEL)) { diff --git a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/XhpcSmsServiceImpl.java b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/XhpcSmsServiceImpl.java index c4f6e925..5be9569f 100644 --- a/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/XhpcSmsServiceImpl.java +++ b/xhpc-modules/xhpc-general/src/main/java/com/xhpc/general/service/XhpcSmsServiceImpl.java @@ -156,9 +156,15 @@ public class XhpcSmsServiceImpl implements IXhpcSmsService { XhpcSms xhpcSms = new XhpcSms(); try { + System.out.println("============发送短信=================="); + System.out.println("============phone=================="+phone); + System.out.println("============signatureName=================="+signatureName); + System.out.println("============templateId=================="+templateId); + System.out.println("============paramMap=================="+paramMap.toString()); + String captcha = redisService.getCacheObject(phone+":"+templateId); if (!templateId.equals(captcha)) { - System.out.println("============发送短信=================="); + //使用阿里云发送通知短信 Map neededParam = aliyunSmsNotice(phone, signatureName, templateId, paramMap); System.out.println("============neededParam=================="+neededParam); diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcChargeOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcChargeOrderController.java index 3dac0151..328568c1 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcChargeOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcChargeOrderController.java @@ -18,6 +18,7 @@ import io.swagger.annotations.Api; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -263,4 +264,31 @@ public class XhpcChargeOrderController extends BaseController { int blacklistUser = iXhpcChargeOrderService.getBlacklistUser(phone, vin, plateNnum, chargingStationId, format); return AjaxResult.success(blacklistUser); } + + + + /** + * 查询订单 + */ + @GetMapping("/getUserOrderMessage") + public AjaxResult getUserOrderMessage(Long userId, Integer source){ + return iXhpcChargeOrderService.getUserOrderMessage(userId,source); + } + + + /** + * 18 19单独处理,实时订单数据10分钟之内没有数据,就自动结算 + */ + @Scheduled(cron = "0 0/1 * * * ?") + public void getAutomaticSettlement(){ + iXhpcChargeOrderService.getAutomaticSettlement(); + } + + + //查询当前用户是否有充电中的订单,适合与C端用户、社区用户和B端用户 + @GetMapping("/getUserOderMassage") + public AjaxResult getUserOderMassage(HttpServletRequest request){ + return iXhpcChargeOrderService.getUserOderMassage(request); + } + } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java index 317b0b6f..21e3dc3a 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/api/XhpcPileOrderController.java @@ -14,6 +14,7 @@ import com.xhpc.common.data.redis.CacheRealtimeData; import com.xhpc.common.domain.XhpcRate; import com.xhpc.common.redis.service.RedisService; import com.xhpc.common.util.UserTypeUtil; +import com.xhpc.order.config.ChargingCheckConfig; import com.xhpc.order.domain.XhpcChargeOrder; import com.xhpc.order.domain.XhpcHistoryOrder; import com.xhpc.order.service.IXhpcChargeOrderService; @@ -63,8 +64,13 @@ public class XhpcPileOrderController extends BaseController { @Autowired private EvcsService evcsService; + @Autowired + private ChargingCheckConfig chargingCheckConfig; + private static final Logger logger = LoggerFactory.getLogger(XhpcPileOrderController.class); + // 缓存key常量 + private static final String CACHE_KEY_CHECK_THRESHOLD = "charging:check:threshold"; /** * 桩启动回调接口 * @@ -134,7 +140,7 @@ public class XhpcPileOrderController extends BaseController { } } //消息对了内容 - if(xhpcChargeOrder.getSource()==0){ + if(xhpcChargeOrder.getSource()==UserTypeUtil.USER_TYPE){ webSocketService.getMessage(message,json.toString()); } return R.ok(); @@ -243,7 +249,7 @@ public class XhpcPileOrderController extends BaseController { }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ message = tenantId + UserTypeUtil.CYCUSER + userId; } - if(xhpcChargeOrder.getSource()==0 || (UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000)){ + if(xhpcChargeOrder.getSource()==UserTypeUtil.USER_TYPE || (UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000)){ map.put("code", code); JSONObject json = new JSONObject(map); //消息对了内容 @@ -262,6 +268,8 @@ public class XhpcPileOrderController extends BaseController { public R pileRealtime(@RequestParam(value = "orderNo")String orderNo) { logger.info("桩实时数据回调接口>>>>>orderNo:" + orderNo); + + //获取实时订单 CacheRealtimeData cacheRealtimeData = redisService.getCacheObject("order:" + orderNo + ".lord"); @@ -307,15 +315,17 @@ public class XhpcPileOrderController extends BaseController { String key = "pile:"+orderNo.substring(0,14); Map cachePile = REDIS.getCacheMap(key); - if(cachePile !=null && cachePile.get("equipmentType") !=null && "1".equals(cachePile.get("equipmentType").toString()) && cacheRealtimeData.getWorkingCurrent()>=300){ + if(cacheRealtimeData !=null &&cachePile !=null && cachePile.get("equipmentType") !=null && "1".equals(cachePile.get("equipmentType").toString()) ){ String keys = "RealtimeOrder:"+orderNo; Map keysMap = new HashMap<>(); Map keysMapOrder = redisService.getCacheMap(keys); int number =1; + + if(keysMapOrder !=null && keysMapOrder.get("number") !=null){ number =(Integer)keysMapOrder.get("number"); - if(number<8){ + if(number<9 && (keysMapOrder.get("identical") ==null || "".equals(keysMapOrder.get("identical").toString()))){ keysMapOrder.put("identical","0"); }else{ if(keysMapOrder.get("identical") ==null || "".equals(keysMapOrder.get("identical").toString())){ @@ -323,7 +333,36 @@ public class XhpcPileOrderController extends BaseController { } } Integer soc = cacheRealtimeData.getSoc(); - if(number>=8 && soc<90){ + + if(number%3==1){ + if(cacheRealtimeData.getAmountCharged() !=null){ + keysMap.put("amountCharged1",cacheRealtimeData.getAmountCharged()); + } + if(cacheRealtimeData.getChargingDegree() !=null){ + keysMap.put("chargingDegree1",cacheRealtimeData.getChargingDegree()); + } + }else if(number%3==2){ + if(cacheRealtimeData.getAmountCharged() !=null){ + keysMap.put("amountCharged2",cacheRealtimeData.getAmountCharged()); + } + if(cacheRealtimeData.getChargingDegree() !=null){ + keysMap.put("chargingDegree2",cacheRealtimeData.getChargingDegree()); + } + }else{ + if(cacheRealtimeData.getAmountCharged() !=null){ + keysMap.put("amountCharged3",cacheRealtimeData.getAmountCharged()); + } + if(cacheRealtimeData.getChargingDegree() !=null){ + keysMap.put("chargingDegree3",cacheRealtimeData.getChargingDegree()); + } + } + // ========== 使用当前阈值(程序启动时已从缓存加载或使用配置文件) ========== + int numberThreshold = chargingCheckConfig.getNumberThreshold(); + int socThreshold = chargingCheckConfig.getSocThreshold(); + int orderPowerThreshold = chargingCheckConfig.getOrderPower(); // 获取电量阈值 + int orderVoltageThreshold = chargingCheckConfig.getVoltageThreshold(); // 获取电压 + int orderCurrentThreshold = chargingCheckConfig.getCurrentThreshold(); // 获取电流 + if(number >= numberThreshold){ String chargingDegree =""; String amountCharged =""; if(number%3==1){ @@ -338,64 +377,60 @@ public class XhpcPileOrderController extends BaseController { } String identical =keysMapOrder.get("identical").toString(); String substring = orderNo.substring(0, 14); - if(chargingDegree.equals(cacheRealtimeData.getChargingDegree().toString()) || amountCharged.equals(cacheRealtimeData.getAmountCharged().toString())){ - if("0".equals(identical)){ - keysMap.put("identical","1"); - }else if("1".equals(identical)){ - keysMap.put("identical","2"); - }else{ - //停止充电 - xhpcChargeOrder.setRemark("充电桩校验故障"); - xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); - powerPileService.stopCharging(orderNo, substring,orderNo.substring(0, 16), "0C"); - System.out.println("=====================p平台下发停止充电=============================="+xhpcChargeOrder.getSerialNumber()); - return R.fail(500,"充电桩校验故障"); + // 标记本次是否有异常 + boolean hasError = false; + String errorMsg = null; + // 1. SOC过低校验(需要额外判断SOC条件) + if(soc < socThreshold){ + if(chargingDegree.equals(cacheRealtimeData.getChargingDegree().toString()) ||amountCharged.equals(cacheRealtimeData.getAmountCharged().toString())){ + hasError = true; + errorMsg = "充电桩校验故障(数据不一致)"; + } + // 电压校验 + int workingVoltage = cacheRealtimeData.getWorkingVoltage(); + if(workingVoltage < orderVoltageThreshold){ + hasError = true; + errorMsg = "电压小于"+orderVoltageThreshold+"V,停止充电"; + } + +// Integer workingCurrent = cacheRealtimeData.getWorkingCurrent(); +// +// if(workingCurrent < orderCurrentThreshold){ +// hasError = true; +// errorMsg = "电流小于"+orderCurrentThreshold+"A,停止充电"; +// } + } + // 2. 电量增量校验(所有达到阈值的订单都执行) + if(!hasError){ + if(chargingDegree.equals(cacheRealtimeData.getChargingDegree().toString()) ||(cacheRealtimeData.getChargingDegree() - Integer.valueOf(chargingDegree) <= orderPowerThreshold)){ + hasError = true; + errorMsg = "充电桩电量增长异常"; } } - - int workingVoltage =Integer.parseInt(keysMapOrder.get("workingVoltage").toString()); - if(workingVoltage<2500){ - //电压小于250V,停止充电 - xhpcChargeOrder.setRemark("电压小于250V,停止充电"); - xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); - powerPileService.stopCharging(orderNo, substring,orderNo.substring(0, 16), "0C"); - System.out.println("=====================p平台下发停止充电=============================="+xhpcChargeOrder.getSerialNumber()); - return R.fail(500,"充电桩校验故障"); + // 统一处理 identical 计数 + if(hasError){ + int currentIdentical = Integer.parseInt(identical); + currentIdentical++; // 异常次数+1 + if(currentIdentical > 2){ // 大于2次,停止充电 + xhpcChargeOrder.setRemark(errorMsg); + xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); + powerPileService.stopCharging(orderNo, substring, orderNo.substring(0, 16), "0C"); + logger.info("充电异常停止,订单号:{},异常次数:{},原因:{}", orderNo, currentIdentical, errorMsg); + return R.fail(500, errorMsg); + } else { + // 记录异常次数,继续充电 + keysMap.put("identical", String.valueOf(currentIdentical)); + logger.info("充电异常警告,订单号:{},异常次数:{},原因:{}", orderNo, currentIdentical, errorMsg); + } + } else { + // 正常情况,重置计数 + keysMap.put("identical", "0"); } + }else{ keysMap.put("identical","0"); } number++; -// try{ -// if(number==9 || number==20){ -// Integer source = xhpcChargeOrder.getSource(); -// //当number=9、20时,判断一次用户金额与当前下发余额是否相等,不相等停止充电 -// if(!UserTypeUtil.INTERNET_TYPE.equals(source)){ -// Object amountObj = redisService.getCacheObject("YE"+xhpcChargeOrder.getSerialNumber()); -// boolean stop =true; -// if(amountObj !=null ){ -// BigDecimal balance1 =new BigDecimal(amountObj.toString()); -// if(cacheMap.get("initBalance") !=null){ -// BigDecimal bigDecimal = new BigDecimal(cacheMap.get("initBalance").toString()).divide(new BigDecimal(10000)).setScale(2, BigDecimal.ROUND_CEILING); -// if(balance1.compareTo(bigDecimal)!=0){ -// stop =false; -// } -// } -// } -// if(!stop){ -// String substring = orderNo.substring(0, 14); -// xhpcChargeOrder.setRemark("获取用户金额失败"); -// xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); -// powerPileService.stopCharging(orderNo, substring,orderNo.substring(0, 16), "0C"); -// System.out.println("=============获取用户金额失败====平台下发停止充电=========="+xhpcChargeOrder.getSerialNumber()); -// return R.fail(500,"充电桩校验故障"); -// } -// } -// } -// -// }catch (Exception e){ -// -// } } keysMap.put("orderNo",cacheRealtimeData.getOrderNo()); @@ -407,28 +442,8 @@ public class XhpcPileOrderController extends BaseController { if(cacheRealtimeData.getWorkingVoltage() !=null){ keysMap.put("workingCurrent",cacheRealtimeData.getWorkingCurrent()); } - if(number%3==1){ - if(cacheRealtimeData.getWorkingVoltage() !=null){ - keysMap.put("amountCharged1",cacheRealtimeData.getAmountCharged()); - } - if(cacheRealtimeData.getWorkingVoltage() !=null){ - keysMap.put("chargingDegree1",cacheRealtimeData.getChargingDegree()); - } - }else if(number%3==2){ - if(cacheRealtimeData.getWorkingVoltage() !=null){ - keysMap.put("amountCharged2",cacheRealtimeData.getAmountCharged()); - } - if(cacheRealtimeData.getWorkingVoltage() !=null){ - keysMap.put("chargingDegree2",cacheRealtimeData.getChargingDegree()); - } - }else{ - if(cacheRealtimeData.getWorkingVoltage() !=null){ - keysMap.put("amountCharged3",cacheRealtimeData.getAmountCharged()); - } - if(cacheRealtimeData.getWorkingVoltage() !=null){ - keysMap.put("chargingDegree3",cacheRealtimeData.getChargingDegree()); - } - } + + redisService.setCacheMap(keys,keysMap); } @@ -436,30 +451,75 @@ public class XhpcPileOrderController extends BaseController { Long userId = xhpcChargeOrder.getUserId(); Integer source = xhpcChargeOrder.getSource(); String tenantId = xhpcChargeOrder.getTenantId(); + + if(xhpcChargeOrder.getMark() !=null && xhpcChargeOrder.getMotorcadeType()==1 && cacheRealtimeData !=null){ + Long motorcadeId = xhpcChargeOrder.getMotorcadeId(); + // 1. 存储当前订单金额到Redis + String orderKey = xhpcChargeOrder.getMark()+":"+motorcadeId+":"+xhpcChargeOrder.getSerialNumber(); + redisService.setCacheObject(orderKey,cacheRealtimeData.getAmountCharged()); + + // 2. 查询当前所有充电订单 + Collection keys = redisService.keys(xhpcChargeOrder.getMark()+":"+motorcadeId+":*"); + System.out.println("=====================查询当前所有充电订单=============================="+keys.size()); + if(keys.size()>1){ + int ruleCents = getRuleCents(keys.size()); + //获取总金额 + String totalKey =xhpcChargeOrder.getMark()+":"+motorcadeId; + BigDecimal totalMoney = (BigDecimal)redisService.getCacheObject(totalKey); + String substring = orderNo.substring(0, 14); + // 计算实时总金额(元) + BigDecimal realtimeTotal = BigDecimal.ZERO; + for (String okey : keys) { + Object amountObj = redisService.getCacheObject(okey); + if (amountObj != null) { + // 金额需要除以10000转为元 + BigDecimal amountInCents = new BigDecimal(amountObj.toString()); + BigDecimal amountInYuan = amountInCents.divide(new BigDecimal(10000), 2, RoundingMode.HALF_UP); + realtimeTotal = realtimeTotal.add(amountInYuan); + } + } + System.out.println("=====================计算实时总金额=============================="+realtimeTotal.toString()); + if(totalMoney.subtract(realtimeTotal).compareTo(new BigDecimal(ruleCents))<=0){ + //停止充电 + xhpcChargeOrder.setRemark("车队金额大于设置值"); + xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); + powerPileService.stopCharging(orderNo, substring,orderNo.substring(0, 16), "0C"); + System.out.println("=====================p平台下发停止充电=============================="+xhpcChargeOrder.getSerialNumber()); + return R.fail(500,"充电桩校验故障"); + } + + } + } try { Date date = new Date(); xhpcChargeOrder.setEndTime(date); xhpcChargeOrder.setUpdateTime(date); xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); - Map map = xhpcRealTimeOrderService.addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, 1); + if(cacheRealtimeData !=null){ + Map map = xhpcRealTimeOrderService.addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, 1); - if(!UserTypeUtil.INTERNET_TYPE.equals(source) ||(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000)){ - //存入换成 - JSONObject json = new JSONObject(map); - String message = ""; - if(UserTypeUtil.USER_TYPE.equals(source)){ - message = tenantId + UserTypeUtil.USER + userId; - }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ - message = tenantId + UserTypeUtil.COMMUNIT + userId; - }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ - message = tenantId + UserTypeUtil.CUSTOMERS + userId; - }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ - message = tenantId + UserTypeUtil.CYCUSER + userId; + if(!UserTypeUtil.INTERNET_TYPE.equals(source) ||(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000)){ + //存入换成 + JSONObject json = new JSONObject(map); + String message = ""; + if(UserTypeUtil.USER_TYPE.equals(source)){ + message = tenantId + UserTypeUtil.USER + userId; + }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ + message = tenantId + "ST" + userId; + }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ + message = tenantId + "BE" + userId; + }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ + message = tenantId + UserTypeUtil.CYCUSER + userId; + }else if(UserTypeUtil.MOTORCADE_TYPE.equals(source)){ + message = tenantId + "Z" + userId; + }else if(UserTypeUtil.MOTORCADE_USER_TYPE.equals(source)){ + message = tenantId + "D" + userId; + } + redisService.setCacheMap("realTimeTenantId:"+message,map); + webSocketService.getMessage(message,json.toString()); + //消息对了内容 + logger.info("桩实时数据发送WebSocket成功>>>>>orderNo:" + orderNo+"websocket :"+message); } - redisService.setCacheMap("realTimeTenantId:"+message,map); - webSocketService.getMessage(message,json.toString()); - //消息对了内容 - logger.info("桩实时数据发送WebSocket成功>>>>>orderNo:" + orderNo+"websocket :"+message); } } catch (Exception e) { Map map = new HashMap<>(); @@ -470,13 +530,17 @@ public class XhpcPileOrderController extends BaseController { if(UserTypeUtil.USER_TYPE.equals(source)){ message = tenantId + UserTypeUtil.USER + userId; }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ - message = tenantId + UserTypeUtil.COMMUNIT + userId; + message = tenantId + "ST" + userId; }else if(UserTypeUtil.CUSTOMERS_TYPE.equals(source)){ - message = tenantId + UserTypeUtil.CUSTOMERS + userId; + message = tenantId + "BE" + userId; }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ message = tenantId + UserTypeUtil.CYCUSER + userId; + }else if(UserTypeUtil.MOTORCADE_TYPE.equals(source)){ + message = tenantId + "Z" + userId; + }else if(UserTypeUtil.MOTORCADE_USER_TYPE.equals(source)){ + message = tenantId + "D" + userId; } - if(xhpcChargeOrder.getSource()==0){ + if(xhpcChargeOrder.getSource()==UserTypeUtil.USER_TYPE){ //消息对了内容 webSocketService.getMessage(message,json.toString()); } @@ -691,6 +755,7 @@ public class XhpcPileOrderController extends BaseController { //生成一条历史订单 XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder(); xhpcHistoryOrder.setStartTime(date); + xhpcHistoryOrder.setClearingType(xhpcChargeOrder.getClearingType()); xhpcHistoryOrder.setInternetSerialNumber(xhpcChargeOrder.getInternetSerialNumber()); xhpcHistoryOrder.setEndTime(date); xhpcHistoryOrder.setPowerPriceTotal(bigDecimal1); @@ -774,21 +839,64 @@ public class XhpcPileOrderController extends BaseController { logger.info("&&&&&&&&&&&&&&&&&&&&&&&&&&&&订单号:"+xhpcChargeOrder.getSerialNumber()+"&&&&&&&&&&&&&&费率模型id:"+xhpcChargeOrder.getRateModelId()); for (XhpcRate xhpcRate:rateModelList) { - if("00".equals(xhpcRate.getRateValue())){ - t1powerFee = xhpcRate.getPowerFee(); - t1serviceFee =xhpcRate.getServiceFee(); - } - if("01".equals(xhpcRate.getRateValue())){ - t2powerFee = xhpcRate.getPowerFee(); - t2serviceFee =xhpcRate.getServiceFee(); - } - if("02".equals(xhpcRate.getRateValue())){ - t3powerFee = xhpcRate.getPowerFee(); - t3serviceFee = xhpcRate.getServiceFee(); - } - if("03".equals(xhpcRate.getRateValue())){ - t4powerFee = xhpcRate.getPowerFee(); - t4serviceFee =xhpcRate.getServiceFee(); + if(UserTypeUtil.MOTORCADE_TYPE==xhpcChargeOrder.getSource() ||UserTypeUtil.MOTORCADE_USER_TYPE==xhpcChargeOrder.getSource()){ + + if(xhpcChargeOrder.getMark()==null){ + xhpcChargeOrder.setStatus(2); + xhpcChargeOrder.setChargingDegree(totalPowerQuantity); + xhpcChargeOrder.setUpdateTime(new Date()); + xhpcChargeOrder.setErroRemark("车队结算时,车队标识不存在"); + xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); + return R.fail(500,"无效订单号:"+orderNo); + } + + R motorcadeMap = userTypeService.getOrderMotorcade(xhpcChargeOrder.getMark()); + if(motorcadeMap !=null && motorcadeMap.getData() !=null ){ + Map motorcadeMessage = (Map)motorcadeMap.getData(); + if (motorcadeMessage == null) { + logger.info("获取用户信息失败>>userMessage>>>orderNo:"+orderNo); + return R.fail(500,"添加订单回调失败"); + } + + if("00".equals(xhpcRate.getRateValue())){ + t1powerFee = new BigDecimal(String.valueOf(motorcadeMessage.get("peakSharpElectricity"))); + t1serviceFee =new BigDecimal(String.valueOf(motorcadeMessage.get("peakSharpService"))); + } + if("01".equals(xhpcRate.getRateValue())){ + t2powerFee = new BigDecimal(String.valueOf(motorcadeMessage.get("peakElectricity"))); + t2serviceFee =new BigDecimal(String.valueOf(motorcadeMessage.get("peakService"))); + } + if("02".equals(xhpcRate.getRateValue())){ + t3powerFee = new BigDecimal(String.valueOf(motorcadeMessage.get("flatElectricity"))); + t3serviceFee = new BigDecimal(String.valueOf(motorcadeMessage.get("flatService"))); + } + if("03".equals(xhpcRate.getRateValue())){ + t4powerFee =new BigDecimal(String.valueOf(motorcadeMessage.get("valleyElectricity"))); + t4serviceFee =new BigDecimal(String.valueOf(motorcadeMessage.get("valleyService"))); + } + }else{ + logger.info("获取用户信息失败>>user>>>orderNo:"+orderNo); + return R.fail(500,"添加订单回调失败"); + } + + + }else{ + if("00".equals(xhpcRate.getRateValue())){ + t1powerFee = xhpcRate.getPowerFee(); + t1serviceFee =xhpcRate.getServiceFee(); + } + if("01".equals(xhpcRate.getRateValue())){ + t2powerFee = xhpcRate.getPowerFee(); + t2serviceFee =xhpcRate.getServiceFee(); + } + if("02".equals(xhpcRate.getRateValue())){ + t3powerFee = xhpcRate.getPowerFee(); + t3serviceFee = xhpcRate.getServiceFee(); + } + if("03".equals(xhpcRate.getRateValue())){ + t4powerFee = xhpcRate.getPowerFee(); + t4serviceFee =xhpcRate.getServiceFee(); + } } } //总电费 @@ -827,17 +935,22 @@ public class XhpcPileOrderController extends BaseController { powerPrice =powerPrice.setScale(2,BigDecimal.ROUND_HALF_UP); //总服务费 servicePrice =servicePrice.setScale(2,BigDecimal.ROUND_HALF_UP); - //防止出现负数 - if(powerPrice.add(servicePrice).compareTo(money)==-1){ - if(powerPrice.compareTo(money)==1){ - powerPrice =money; - servicePrice = money.subtract(powerPrice); - }else{ - servicePrice = money.subtract(powerPrice); - } + if(UserTypeUtil.MOTORCADE_TYPE==xhpcChargeOrder.getSource()||UserTypeUtil.MOTORCADE_USER_TYPE==xhpcChargeOrder.getSource()){ + money= powerPrice.add(servicePrice); }else{ - money = powerPrice.add(servicePrice); + //防止出现负数 + if(powerPrice.add(servicePrice).compareTo(money)==-1){ + if(powerPrice.compareTo(money)==1){ + powerPrice =money; + servicePrice = money.subtract(powerPrice); + }else{ + servicePrice = money.subtract(powerPrice); + } + }else{ + money = powerPrice.add(servicePrice); + } } + if(money.compareTo(new BigDecimal(1000)) > -1){ logger.info("结算金额大于1000>>"+money+">>>orderNo:" + orderNo); xhpcChargeOrder.setStatus(2); @@ -859,8 +972,6 @@ public class XhpcPileOrderController extends BaseController { int status = cacheOrderData.getStatus(); xhpcChargeOrder.setStatus(status); - - //充电时长 Long tiem = (endTime.getTime() - startTime.getTime()) / 1000; if (tiem > 3600) { @@ -886,9 +997,9 @@ public class XhpcPileOrderController extends BaseController { } xhpcChargeOrder.setUpdateTime(date); xhpcChargeOrder.setStatus(status); - XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder(); - //生成一条历史订单 + XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder(); + xhpcHistoryOrder.setClearingType(xhpcChargeOrder.getClearingType()); xhpcHistoryOrder.setStartTime(startTime); xhpcHistoryOrder.setEndTime(endTime); xhpcHistoryOrder.setPowerPriceTotal(powerPrice); @@ -921,6 +1032,7 @@ public class XhpcPileOrderController extends BaseController { } } } + xhpcHistoryOrder.setType(1); xhpcHistoryOrder.setPhone(xhpcChargeOrder.getDriverId()); xhpcHistoryOrder.setUserNameEvcs(xhpcChargeOrder.getDriverId()); @@ -944,6 +1056,10 @@ public class XhpcPileOrderController extends BaseController { message = tenantId + UserTypeUtil.CUSTOMERS + userId; }else if(UserTypeUtil.INTERNET_TYPE.equals(source) && userId>10000){ message = tenantId + UserTypeUtil.CYCUSER + userId; + }else if(UserTypeUtil.MOTORCADE_TYPE.equals(source)){ + message = tenantId + UserTypeUtil.MOTORCADE_PERSON_IN_CHARGE + userId; + }else if(UserTypeUtil.MOTORCADE_USER_TYPE.equals(source)){ + message = tenantId + UserTypeUtil.MOTORCADE_USER + userId; } webSocketService.getMessage(message,json.toString()); } @@ -1188,5 +1304,128 @@ public R pileStartUpBy3rd(@RequestParam(value = "internetSerialNumber") String i } } + /** + * 更清晰的规则获取方法(使用Map) + */ + private int getRuleCents(int vehicleCount) { + // 使用Map更直观 + Map rules = new HashMap<>(); + rules.put(1, 1); + rules.put(2, 10); + rules.put(3, 20); + rules.put(4, 30); + rules.put(5, 40); + // 6辆及以上返回50 + if (vehicleCount >= 6) { + return 50; + } + + return rules.getOrDefault(vehicleCount, 0); + } + + + @PostMapping("/chargeOrder/updateCheckThreshold") + public R updateCheckThreshold(@RequestParam(value = "numberThreshold", required = false) Integer numberThreshold, + @RequestParam(value = "socThreshold", required = false) Integer socThreshold, + @RequestParam(value = "orderPower", required = false) Integer orderPower, + @RequestParam(value = "voltageThreshold", required = false) Integer voltageThreshold, + @RequestParam(value = "currentThreshold", required = false) Integer currentThreshold) { + logger.info("更新充电校验阈值>>>>>numberThreshold:{},socThreshold:{},orderPower:{},voltageThreshold:{},currentThreshold:{}", + numberThreshold, socThreshold, orderPower, voltageThreshold, currentThreshold); + + try { + if (numberThreshold != null && numberThreshold > 0) { + chargingCheckConfig.setNumberThreshold(numberThreshold); + } + if (socThreshold != null && socThreshold > 0 && socThreshold <= 100) { + chargingCheckConfig.setSocThreshold(socThreshold); + } + if (orderPower != null && orderPower > 0) { + chargingCheckConfig.setOrderPower(orderPower); + } + // 新增:电压阈值 + if (voltageThreshold != null && voltageThreshold > 0) { + chargingCheckConfig.setVoltageThreshold(voltageThreshold); + } + // 新增:电流阈值 + if (currentThreshold != null && currentThreshold > 0) { + chargingCheckConfig.setCurrentThreshold(currentThreshold); + } + + // 存入Redis缓存 + Map thresholdMap = new HashMap<>(); + thresholdMap.put("numberThreshold", chargingCheckConfig.getNumberThreshold()); + thresholdMap.put("socThreshold", chargingCheckConfig.getSocThreshold()); + thresholdMap.put("orderPower", chargingCheckConfig.getOrderPower()); + thresholdMap.put("voltageThreshold", chargingCheckConfig.getVoltageThreshold()); + thresholdMap.put("currentThreshold", chargingCheckConfig.getCurrentThreshold()); + thresholdMap.put("updateTime", new Date().toString()); + redisService.setCacheMap(CACHE_KEY_CHECK_THRESHOLD, thresholdMap); + + Map result = new HashMap<>(); + result.put("currentNumberThreshold", chargingCheckConfig.getNumberThreshold()); + result.put("currentSocThreshold", chargingCheckConfig.getSocThreshold()); + result.put("currentOrderPower", chargingCheckConfig.getOrderPower()); + result.put("currentVoltageThreshold", chargingCheckConfig.getVoltageThreshold()); + result.put("currentCurrentThreshold", chargingCheckConfig.getCurrentThreshold()); + result.put("message", "阈值更新成功并已存入缓存"); + + return R.ok(result); + } catch (Exception e) { + logger.error("更新阈值失败", e); + return R.fail(500, "更新阈值失败:" + e.getMessage()); + } + } + + @GetMapping("/chargeOrder/getCheckThreshold") + public R getCheckThreshold() { + Map result = new HashMap<>(); + result.put("numberThreshold", chargingCheckConfig.getNumberThreshold()); + result.put("socThreshold", chargingCheckConfig.getSocThreshold()); + result.put("orderPower", chargingCheckConfig.getOrderPower()); + result.put("voltageThreshold", chargingCheckConfig.getVoltageThreshold()); // 新增 + result.put("currentThreshold", chargingCheckConfig.getCurrentThreshold()); // 新增 + result.put("defaultNumberThreshold", chargingCheckConfig.getDefaultNumberThreshold()); + result.put("defaultSocThreshold", chargingCheckConfig.getDefaultSocThreshold()); + result.put("defaultOrderPower", chargingCheckConfig.getDefaultOrderPower()); + result.put("defaultVoltageThreshold", chargingCheckConfig.getDefaultVoltageThreshold()); // 新增 + result.put("defaultCurrentThreshold", chargingCheckConfig.getDefaultCurrentThreshold()); // 新增 + result.put("cacheLoaded", chargingCheckConfig.isCacheLoaded()); + result.put("message", "获取成功"); + return R.ok(result); + } + + @PostMapping("/chargeOrder/resetCheckThreshold") + public R resetCheckThreshold() { + logger.info("重置充电校验阈值为配置文件默认值"); + + try { + // 重置内存中的阈值(ChargingCheckConfig.resetToDefault() 已包含电压电流) + chargingCheckConfig.resetToDefault(); + + // 删除Redis缓存 + redisService.deleteObject(CACHE_KEY_CHECK_THRESHOLD); + + Map result = new HashMap<>(); + result.put("currentNumberThreshold", chargingCheckConfig.getNumberThreshold()); + result.put("currentSocThreshold", chargingCheckConfig.getSocThreshold()); + result.put("currentOrderPower", chargingCheckConfig.getOrderPower()); + result.put("currentVoltageThreshold", chargingCheckConfig.getVoltageThreshold()); + result.put("currentCurrentThreshold", chargingCheckConfig.getCurrentThreshold()); + result.put("message", "已重置为配置文件默认值并清除缓存"); + + logger.info("阈值重置成功 - number阈值: {}, SOC阈值: {}, 电量阈值: {}, 电压阈值: {}, 电流阈值: {}", + chargingCheckConfig.getNumberThreshold(), + chargingCheckConfig.getSocThreshold(), + chargingCheckConfig.getOrderPower(), + chargingCheckConfig.getVoltageThreshold(), + chargingCheckConfig.getCurrentThreshold()); + + return R.ok(result); + } catch (Exception e) { + logger.error("重置阈值失败", e); + return R.fail(500, "重置阈值失败:" + e.getMessage()); + } + } } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/config/ChargingCheckConfig.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/config/ChargingCheckConfig.java new file mode 100644 index 00000000..c33ad07e --- /dev/null +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/config/ChargingCheckConfig.java @@ -0,0 +1,197 @@ +package com.xhpc.order.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 充电校验配置类 + * + * @author yuyang + * @Date 2026-05-19 10:17 + */ +@Component +public class ChargingCheckConfig { + @Value("${charging.check.number-threshold:9}") + private int defaultNumberThreshold; + + @Value("${charging.check.soc-threshold:85}") + private int defaultSocThreshold; + + @Value("${charging.check.order-power:500}") + private int defaultOrderPower; + + @Value("${charging.check.voltage-threshold:500}") + private int defaultVoltageThreshold; + + @Value("${charging.check.current-threshold:200}") + private int defaultCurrentThreshold; + + // 当前使用的阈值(可能被缓存覆盖或动态修改) + private volatile int currentNumberThreshold; + private volatile int currentSocThreshold; + private volatile int currentOrderPower; + private volatile int currentVoltageThreshold; + private volatile int currentCurrentThreshold; + + // 标记是否已从缓存加载 + private volatile boolean cacheLoaded = false; + + @PostConstruct + public void init() { + // 初始化时使用配置文件的值 + this.currentNumberThreshold = defaultNumberThreshold; + this.currentSocThreshold = defaultSocThreshold; + this.currentOrderPower = defaultOrderPower; + this.currentVoltageThreshold = defaultVoltageThreshold; + this.currentCurrentThreshold = defaultCurrentThreshold; + System.out.println("充电校验配置初始化完成 - number阈值: " + currentNumberThreshold + + ", SOC阈值: " + currentSocThreshold + + ", 电量阈值: " + currentOrderPower + + ", 电压阈值: " + currentVoltageThreshold + + ", 电流阈值: " + currentCurrentThreshold + " (从配置文件读取)"); + } + + // ========== Getters ========== + + public int getNumberThreshold() { + return currentNumberThreshold; + } + + public int getSocThreshold() { + return currentSocThreshold; + } + + public int getOrderPower() { + return currentOrderPower; + } + + public int getVoltageThreshold() { + return currentVoltageThreshold; + } + + public int getCurrentThreshold() { + return currentCurrentThreshold; + } + + // ========== Setters ========== + + public void setNumberThreshold(int numberThreshold) { + this.currentNumberThreshold = numberThreshold; + } + + public void setSocThreshold(int socThreshold) { + this.currentSocThreshold = socThreshold; + } + + public void setOrderPower(int orderPower) { + this.currentOrderPower = orderPower; + } + + public void setVoltageThreshold(int voltageThreshold) { + this.currentVoltageThreshold = voltageThreshold; + } + + public void setCurrentThreshold(int currentThreshold) { + this.currentCurrentThreshold = currentThreshold; + } + + // ========== 默认值Getters ========== + + public int getDefaultNumberThreshold() { + return defaultNumberThreshold; + } + + public int getDefaultSocThreshold() { + return defaultSocThreshold; + } + + public int getDefaultOrderPower() { + return defaultOrderPower; + } + + public int getDefaultVoltageThreshold() { + return defaultVoltageThreshold; + } + + public int getDefaultCurrentThreshold() { + return defaultCurrentThreshold; + } + + // ========== 缓存加载 ========== + + /** + * 从缓存加载阈值(仅在未加载时生效) + */ + public void loadFromCache(Integer cachedNumberThreshold, Integer cachedSocThreshold, + Integer cachedOrderPower, Integer cachedVoltageThreshold, + Integer cachedCurrentThreshold) { + if (!cacheLoaded) { + boolean updated = false; + if (cachedNumberThreshold != null && cachedNumberThreshold > 0) { + this.currentNumberThreshold = cachedNumberThreshold; + System.out.println("从缓存加载number阈值: " + cachedNumberThreshold); + updated = true; + } + if (cachedSocThreshold != null && cachedSocThreshold > 0 && cachedSocThreshold <= 100) { + this.currentSocThreshold = cachedSocThreshold; + System.out.println("从缓存加载SOC阈值: " + cachedSocThreshold); + updated = true; + } + if (cachedOrderPower != null && cachedOrderPower > 0) { + this.currentOrderPower = cachedOrderPower; + System.out.println("从缓存加载电量阈值: " + cachedOrderPower); + updated = true; + } + if (cachedVoltageThreshold != null && cachedVoltageThreshold > 0) { + this.currentVoltageThreshold = cachedVoltageThreshold; + System.out.println("从缓存加载电压阈值: " + cachedVoltageThreshold); + updated = true; + } + if (cachedCurrentThreshold != null && cachedCurrentThreshold > 0) { + this.currentCurrentThreshold = cachedCurrentThreshold; + System.out.println("从缓存加载电流阈值: " + cachedCurrentThreshold); + updated = true; + } + if (updated) { + System.out.println("当前使用阈值 - number: " + currentNumberThreshold + + ", SOC: " + currentSocThreshold + + ", 电量: " + currentOrderPower + + ", 电压: " + currentVoltageThreshold + + ", 电流: " + currentCurrentThreshold); + } + this.cacheLoaded = true; + } + } + + /** + * 重置为配置文件默认值 + */ + public void resetToDefault() { + this.currentNumberThreshold = defaultNumberThreshold; + this.currentSocThreshold = defaultSocThreshold; + this.currentOrderPower = defaultOrderPower; + this.currentVoltageThreshold = defaultVoltageThreshold; + this.currentCurrentThreshold = defaultCurrentThreshold; + System.out.println("重置阈值成功 - number阈值: " + currentNumberThreshold + + ", SOC阈值: " + currentSocThreshold + + ", 电量阈值: " + currentOrderPower + + ", 电压阈值: " + currentVoltageThreshold + + ", 电流阈值: " + currentCurrentThreshold); + } + + /** + * 检查是否已从缓存加载 + */ + public boolean isCacheLoaded() { + return cacheLoaded; + } + + /** + * 设置缓存加载标记(用于测试或特殊场景) + */ + public void setCacheLoaded(boolean cacheLoaded) { + this.cacheLoaded = cacheLoaded; + } +} diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/config/ThresholdCacheLoader.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/config/ThresholdCacheLoader.java new file mode 100644 index 00000000..bb3ad4ca --- /dev/null +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/config/ThresholdCacheLoader.java @@ -0,0 +1,123 @@ +package com.xhpc.order.config; + +import com.xhpc.common.redis.service.RedisService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 启动后加载缓存的组件 + * + * @author yuyang + * @Date 2026-05-19 10:34 + */ +@Component +@Order(1) +public class ThresholdCacheLoader implements CommandLineRunner { + private static final Logger logger = LoggerFactory.getLogger(ThresholdCacheLoader.class); + + private static final String CACHE_KEY_CHECK_THRESHOLD = "charging:check:threshold"; + + @Autowired + private RedisService redisService; + + @Autowired + private ChargingCheckConfig chargingCheckConfig; + + @Override + public void run(String... args) throws Exception { + loadThresholdFromCache(); + } + + /** + * 从Redis缓存加载阈值配置 + */ + public void loadThresholdFromCache() { + logger.info("开始从缓存加载充电校验阈值配置..."); + + try { + Map thresholdMap = redisService.getCacheMap(CACHE_KEY_CHECK_THRESHOLD); + + if (thresholdMap != null && !thresholdMap.isEmpty()) { + Integer cachedNumberThreshold = null; + Integer cachedSocThreshold = null; + Integer cachedOrderPower = null; + Integer cachedVoltageThreshold = null; + Integer cachedCurrentThreshold = null; + + if (thresholdMap.containsKey("numberThreshold")) { + cachedNumberThreshold = Integer.parseInt(thresholdMap.get("numberThreshold").toString()); + } + if (thresholdMap.containsKey("socThreshold")) { + cachedSocThreshold = Integer.parseInt(thresholdMap.get("socThreshold").toString()); + } + if (thresholdMap.containsKey("orderPower")) { + cachedOrderPower = Integer.parseInt(thresholdMap.get("orderPower").toString()); + } + if (thresholdMap.containsKey("voltageThreshold")) { + cachedVoltageThreshold = Integer.parseInt(thresholdMap.get("voltageThreshold").toString()); + } + if (thresholdMap.containsKey("currentThreshold")) { + cachedCurrentThreshold = Integer.parseInt(thresholdMap.get("currentThreshold").toString()); + } + + chargingCheckConfig.loadFromCache(cachedNumberThreshold, cachedSocThreshold, + cachedOrderPower, cachedVoltageThreshold, cachedCurrentThreshold); + logger.info("从缓存加载充电校验阈值成功"); + } else { + logger.info("缓存中无充电校验阈值配置,使用配置文件默认值"); + // 将默认值存入缓存 + saveThresholdToCache(); + } + } catch (Exception e) { + logger.error("从缓存加载充电校验阈值失败,使用配置文件默认值", e); + } + } + + /** + * 保存当前阈值到Redis缓存 + */ + public void saveThresholdToCache() { + try { + Map thresholdMap = new java.util.HashMap<>(); + thresholdMap.put("numberThreshold", chargingCheckConfig.getNumberThreshold()); + thresholdMap.put("socThreshold", chargingCheckConfig.getSocThreshold()); + thresholdMap.put("orderPower", chargingCheckConfig.getOrderPower()); + thresholdMap.put("voltageThreshold", chargingCheckConfig.getVoltageThreshold()); + thresholdMap.put("currentThreshold", chargingCheckConfig.getCurrentThreshold()); + thresholdMap.put("updateTime", new java.util.Date().toString()); + + redisService.setCacheMap(CACHE_KEY_CHECK_THRESHOLD, thresholdMap); + logger.info("保存充电校验阈值到缓存成功"); + } catch (Exception e) { + logger.error("保存充电校验阈值到缓存失败", e); + } + } + + /** + * 刷新缓存中的阈值配置(同时更新内存) + */ + public void refreshCache() { + logger.info("刷新充电校验阈值缓存..."); + saveThresholdToCache(); + // 重新从缓存加载 + loadThresholdFromCache(); + } + + /** + * 清除缓存中的阈值配置 + */ + public void clearCache() { + try { + redisService.deleteObject(CACHE_KEY_CHECK_THRESHOLD); + logger.info("清除充电校验阈值缓存成功"); + } catch (Exception e) { + logger.error("清除充电校验阈值缓存失败", e); + } + } +} diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcHistoryOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcHistoryOrderController.java index 1ab53ca4..d21f5181 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcHistoryOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcHistoryOrderController.java @@ -11,6 +11,7 @@ import com.xhpc.common.core.web.page.TableDataInfo; import com.xhpc.common.log.annotation.Log; import com.xhpc.common.log.enums.BusinessType; import com.xhpc.common.redis.service.RedisService; +import com.xhpc.common.util.UserTypeUtil; import com.xhpc.order.domain.XhpcHistoryOrder; import com.xhpc.order.domain.XhpcStatisticsStation; import com.xhpc.order.domain.XhpcStatisticsTimeInterval; @@ -83,11 +84,11 @@ public class XhpcHistoryOrderController extends BaseController { * @return */ @GetMapping("/getListPage") - public TableDataInfo getListPage(String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone,String transactionNumber,@RequestParam("status")Integer status,String chargingStationName,Long operatorId,Integer source,String beginStartTime,String beginEndTime,@RequestParam("userId") Long userId, Integer type, - String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId, Integer confirmResult) + public TableDataInfo getListPage(String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone,String transactionNumber,Integer status,String chargingStationName,Long operatorId,Integer source,String beginStartTime,String beginEndTime,Long userId, Integer type, + String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId, Integer confirmResult,String mark) { - List> listPage = xhpcHistoryOrderService.getListPage(tenantId,chargingStationId,chargingPileId,terminalId,phone, transactionNumber, status, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult); + List> listPage = xhpcHistoryOrderService.getListPage(tenantId,chargingStationId,chargingPileId,terminalId,phone, transactionNumber, status, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,mark); return getDataTable(listPage); } @@ -133,9 +134,10 @@ public class XhpcHistoryOrderController extends BaseController { String overStartTime, String overEndTime, Long personnelId, - Integer confirmResult) throws IOException { + Integer confirmResult, + String mark) throws IOException { - xhpcHistoryOrderService.export(response,tenantId,chargingStationId,chargingPileId,terminalId, phone, transactionNumber, status, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult); + xhpcHistoryOrderService.export(response,tenantId,chargingStationId,chargingPileId,terminalId, phone, transactionNumber, status, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,mark); } @@ -475,6 +477,8 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setChargingTime(new BigDecimal(xhpc.getChargingTimeNumber()).divide(new BigDecimal(3600), 2, BigDecimal.ROUND_HALF_UP)); } xhpcSt.setChargingNumber(1); + xhpcSt.setClearingType(xhpc.getClearingType()); + xhpcSt.setClearingPrice(xhpc.getClearingPrice()); xhpcSt.setPowerPrice(xhpc.getPowerPriceTotal()); xhpcSt.setServicePrice(xhpc.getServicePriceTotal()); xhpcSt.setTotalPrice(xhpc.getTotalPrice()); @@ -482,6 +486,7 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setActPrice(xhpc.getActPrice()); xhpcSt.setActPowerPrice(xhpc.getActPowerPrice()); xhpcSt.setActServicePrice(xhpc.getActServicePrice()); + xhpcSt.setActTotalPrice(xhpc.getActTotalPrice()); xhpcSt.setInternetCommission(xhpc.getInternetCommission()); xhpcSt.setInternetSvcCommission(xhpc.getInternetSvcCommission()); xhpcSt.setPlatformCommission(xhpc.getPlatformCommission()); @@ -496,7 +501,7 @@ public class XhpcHistoryOrderController extends BaseController { //xhpcSt.setCreateTime(data); xhpcSt.setTerminalId(terminalId); xhpcSt.setHistoryOrderId(historyOrderId); - if(xhpc.getSource()!=null && xhpc.getSource()==1){ + if(xhpc.getSource()!=null && xhpc.getSource()== UserTypeUtil.INTERNET_TYPE){ xhpcSt.setInternetUserId(xhpc.getUserId()); } //时间没有跨天 @@ -581,6 +586,7 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setActPrice(xhpc.getActPrice()); xhpcSt.setActPowerPrice(xhpc.getActPowerPrice()); xhpcSt.setActServicePrice(xhpc.getActServicePrice()); + xhpcSt.setActTotalPrice(xhpc.getActTotalPrice()); xhpcSt.setInternetCommission(xhpc.getInternetCommission()); xhpcSt.setInternetSvcCommission(xhpc.getInternetSvcCommission()); xhpcSt.setPlatformCommission(xhpc.getPlatformCommission()); @@ -592,7 +598,7 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setCreateTime(data); xhpcSt.setTerminalId(terminalId); xhpcSt.setHistoryOrderId(historyOrderId); - if(xhpc.getSource()==1){ + if(xhpc.getSource()==UserTypeUtil.INTERNET_TYPE){ xhpcSt.setInternetUserId(xhpc.getUserId()); } String endTime1 = DateUtil.formatTime(endTime); @@ -851,7 +857,7 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setChargingDegree(chargingDegree); } xhpcSt.setActPrice(xhpcSt.getTotalPrice().subtract(xhpcSt.getPromotionDiscount())); - if(xhpc.getSource()==1){ + if(xhpc.getSource()==UserTypeUtil.INTERNET_TYPE){ xhpcSt.setInternetUserId(xhpc.getUserId()); } xhpcSt.setOperatorId(xhpc.getOperatorId()); @@ -862,6 +868,7 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setHistoryOrderId(xhpc.getHistoryOrderId()); xhpcSt.setStartTimeEvcs(yyyyMMdd+" "+srt); xhpcSt.setEndTimeEvcs(yyyyMMdd+" "+endt); + xhpcSt.setActTotalPrice(xhpc.getActTotalPrice()); xhpcStatisticsService.addStatisticsTime(xhpcSt); //修改历史订单表状态 xhpcHistoryOrderService.updateXhpcHistoryOrder(xhpc.getHistoryOrderId(),1); @@ -904,7 +911,6 @@ public class XhpcHistoryOrderController extends BaseController { if(pilePrompts!=null && pilePrompts!=1){ //获取异常的订单 24小时之外的异常订单 List> xhpcChargeOrderList= chargeOrderService.getXhpcChargeOrderStatus(2,pilePrompts); - if(xhpcChargeOrderList !=null && xhpcChargeOrderList.size()>0){ for (int i = 0; i map = xhpcChargeOrderList.get(i); @@ -993,7 +999,7 @@ public class XhpcHistoryOrderController extends BaseController { @Scheduled(cron = "0 5 * * * ?") @GetMapping("/getInvoTime") public void getNoStatisticsOrderTime(){ - List list = xhpcHistoryOrderService.getNoStatisticsOrderTime(3000); + List list = xhpcHistoryOrderService.getNoStatisticsOrderTime(300); if(list !=null && list.size()>0){ for (XhpcChargeHistoryOrder xhpc:list) { try{ @@ -1010,6 +1016,8 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setChargingTime(new BigDecimal(xhpc.getChargingTimeNumber()).divide(new BigDecimal(3600), 2, BigDecimal.ROUND_HALF_UP)); } xhpcSt.setChargingNumber(1); + xhpcSt.setClearingType(xhpc.getClearingType()); + xhpcSt.setClearingPrice(xhpc.getClearingPrice()); xhpcSt.setPowerPrice(xhpc.getPowerPriceTotal()); xhpcSt.setServicePrice(xhpc.getServicePriceTotal()); xhpcSt.setTotalPrice(xhpc.getTotalPrice()); @@ -1017,6 +1025,7 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setActPrice(xhpc.getActPrice()); xhpcSt.setActPowerPrice(xhpc.getActPowerPrice()); xhpcSt.setActServicePrice(xhpc.getActServicePrice()); + xhpcSt.setActTotalPrice(xhpc.getActTotalPrice()); xhpcSt.setInternetCommission(xhpc.getInternetCommission()); xhpcSt.setInternetSvcCommission(xhpc.getInternetSvcCommission()); xhpcSt.setPlatformCommission(xhpc.getPlatformCommission()); @@ -1031,7 +1040,7 @@ public class XhpcHistoryOrderController extends BaseController { //xhpcSt.setCreateTime(data); xhpcSt.setTerminalId(terminalId); xhpcSt.setHistoryOrderId(historyOrderId); - if(xhpc.getSource()!=null && xhpc.getSource()==1){ + if(xhpc.getSource()!=null && xhpc.getSource()==UserTypeUtil.INTERNET_TYPE){ xhpcSt.setInternetUserId(xhpc.getUserId()); } //时间没有跨天 @@ -1054,6 +1063,10 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setServicePrice(new BigDecimal(xhpcRateTimeFee.get("serviceFee").toString())); } } + if(xhpc.getSource()==UserTypeUtil.MOTORCADE_TYPE){ + xhpcSt.setMark(xhpc.getMark()); + xhpcSt.setMotorcadeId(xhpc.getMotorcadeId()); + } xhpcStatisticsService.addStatisticsTime(xhpcSt); } }catch (Exception e){ @@ -1082,6 +1095,8 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setChargingTime(new BigDecimal(xhpc.getChargingTimeNumber()).divide(new BigDecimal(3600), 2, BigDecimal.ROUND_HALF_UP)); } xhpcSt.setChargingNumber(1); + xhpcSt.setClearingType(xhpc.getClearingType()); + xhpcSt.setClearingPrice(xhpc.getClearingPrice()); xhpcSt.setPowerPrice(xhpc.getPowerPriceTotal()); xhpcSt.setServicePrice(xhpc.getServicePriceTotal()); xhpcSt.setTotalPrice(xhpc.getTotalPrice()); @@ -1095,7 +1110,8 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setOperationSvcCommission(xhpc.getOperationSvcCommission()); xhpcSt.setActPowerPrice(xhpc.getActPowerPrice()); xhpcSt.setActServicePrice(xhpc.getActServicePrice()); - if(xhpc.getSource()!=null && xhpc.getSource()==1){ + xhpcSt.setActTotalPrice(xhpc.getActTotalPrice()); + if(xhpc.getSource()!=null && xhpc.getSource()==UserTypeUtil.INTERNET_TYPE){ xhpcSt.setInternetUserId(xhpc.getUserId()); } xhpcSt.setOperatorId(xhpc.getOperatorId()); @@ -1109,9 +1125,14 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setHistoryOrderId(historyOrderId); xhpcSt.setChargingPileId(xhpc.getChargingPileId()); xhpcSt.setCreateTime(xhpc.getEndTime()); + xhpcSt.setStartTime(xhpc.getStartTime()); xhpcSt.setSource(xhpc.getSource()); xhpcSt.setInternetDegreeCommission(xhpc.getInternetDegreeCommission()); xhpcSt.setType(i); + if(xhpc.getSource()==UserTypeUtil.MOTORCADE_TYPE){ + xhpcSt.setMark(xhpc.getMark()); + xhpcSt.setMotorcadeId(xhpc.getMotorcadeId()); + } xhpcStatisticsService.addStatisticsStation(xhpcSt); } } @@ -1144,6 +1165,8 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setChargingTime(new BigDecimal(xhpc.getChargingTimeNumber()).divide(new BigDecimal(3600), 4, BigDecimal.ROUND_HALF_UP)); } xhpcSt.setChargingNumber(1); + xhpcSt.setClearingType(xhpc.getClearingType()); + xhpcSt.setClearingPrice(xhpc.getClearingPrice()); xhpcSt.setPowerPrice(xhpc.getPowerPriceTotal()); xhpcSt.setServicePrice(xhpc.getServicePriceTotal()); xhpcSt.setTotalPrice(xhpc.getTotalPrice()); @@ -1157,7 +1180,8 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setOperationSvcCommission(xhpc.getOperationSvcCommission()); xhpcSt.setActPowerPrice(xhpc.getActPowerPrice()); xhpcSt.setActServicePrice(xhpc.getActServicePrice()); - if(xhpc.getSource()!=null && xhpc.getSource()==1){ + xhpcSt.setActTotalPrice(xhpc.getActTotalPrice()); + if(xhpc.getSource()!=null && xhpc.getSource()==UserTypeUtil.INTERNET_TYPE){ xhpcSt.setInternetUserId(xhpc.getUserId()); } xhpcSt.setOperatorId(xhpc.getOperatorId()); @@ -1171,9 +1195,15 @@ public class XhpcHistoryOrderController extends BaseController { xhpcSt.setHistoryOrderId(historyOrderId); xhpcSt.setChargingPileId(xhpc.getChargingPileId()); xhpcSt.setCreateTime(xhpc.getEndTime()); + xhpcSt.setStartTime(xhpc.getStartTime()); xhpcSt.setSource(xhpc.getSource()); xhpcSt.setInternetDegreeCommission(xhpc.getInternetDegreeCommission()); xhpcSt.setType(i); + if(xhpc.getSource()==4){ + xhpcSt.setMark(xhpc.getMark()); + xhpcSt.setMotorcadeId(xhpc.getMotorcadeId()); + } + xhpcStatisticsService.addStatisticsStation(xhpcSt); } } @@ -1240,4 +1270,18 @@ public class XhpcHistoryOrderController extends BaseController { return getDataTable(listPage); } + + //未推送订单信息 + @GetMapping("/getOrderMassageOrRateTime") + public AjaxResult getOrderMassageOrRateTime(String serialNumber) throws Exception { + return xhpcHistoryOrderService.getOrderMassageOrRateTime(serialNumber); + } + + + @GetMapping("/addOrderMassageOrRateTime") + public AjaxResult addOrderMassageOrRateTime(String serialNumber,String chargeOrderInfo) throws Exception { + return xhpcHistoryOrderService.addOrderMassageOrRateTime(serialNumber,chargeOrderInfo); + } + + } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcInspectionController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcInspectionController.java index a843f36b..3bbd4457 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcInspectionController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcInspectionController.java @@ -98,4 +98,25 @@ public class XhpcInspectionController extends BaseController { return getDataTable(list); } + + //-------------------------------后台----------------------------------------------- + @GetMapping("/getStationInspectionList") + public TableDataInfo getStationInspectionList(HttpServletRequest request,String startTime,String endTime) { + List> list = xhpcInspectionService.getStationInspectionList(request,startTime,endTime); + return getDataTable(list); + } + + @GetMapping("/getStationInspectionDateList") + public AjaxResult getStationInspectionDateList(@Param("stationId") Long stationId, String time) { + List> inspectionList = xhpcInspectionService.getStationInspectionDateList(stationId, time); + return AjaxResult.success(inspectionList); + } + + @GetMapping("/getStationInspectionMoonList") + public AjaxResult getStationInspectionMoonList(@Param("stationId") Long stationId, String time) { + Map inspectionList = xhpcInspectionService.getStationInspectionMoonList(stationId, time); + return AjaxResult.success(inspectionList); + } + + } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcPlaceholderOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcPlaceholderOrderController.java index d56b2227..b494bc34 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcPlaceholderOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcPlaceholderOrderController.java @@ -42,10 +42,10 @@ public class XhpcPlaceholderOrderController extends BaseController { @GetMapping("/getListPage") public TableDataInfo getListPage(String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, @RequestParam("status")Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, @RequestParam("userId") Long userId, Integer type, - String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult) + String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult, Double totalMoneyMin, Double totalMoneyMax,String placeholderOrderNumber) { - List> listPage = xhpcPlaceholderOrderService.getListPage(tenantId,chargingStationId,chargingPileId,terminalId,phone, transactionNumber, status, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult); + List> listPage = xhpcPlaceholderOrderService.getListPage(tenantId,chargingStationId,chargingPileId,terminalId,phone, transactionNumber, status, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,totalMoneyMin,totalMoneyMax,placeholderOrderNumber); return getDataTable(listPage); } @@ -88,9 +88,12 @@ public class XhpcPlaceholderOrderController extends BaseController { String overStartTime, String overEndTime, Long personnelId, - Integer confirmResult) throws IOException { + Integer confirmResult, + Double totalMoneyMin, + Double totalMoneyMax, + String placeholderOrderNumber) throws IOException { - xhpcPlaceholderOrderService.export(response,tenantId,chargingStationId,chargingPileId,terminalId, phone, transactionNumber, status, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, 1,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult); + xhpcPlaceholderOrderService.export(response,tenantId,chargingStationId,chargingPileId,terminalId, phone, transactionNumber, status, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, 1,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult, totalMoneyMin,totalMoneyMax,placeholderOrderNumber); } @@ -111,25 +114,28 @@ public class XhpcPlaceholderOrderController extends BaseController { xhpcPlaceholderOrderService.getReturnGunRecord(serialNumber,startTime,endTime); } - //超过720分钟的都变成异常订单 - @Scheduled(cron = "0 0/5 * * * ? ") + //超过360分钟的都变成异常订单 + //@Scheduled(cron = "0 0/5 * * * ? ") public void getAbnormal() { xhpcPlaceholderOrderService.getAbnormal(); } - //查询标记为状态 type=3,手动处理的订单 - //@Scheduled(cron = "0 0/5 * * * ? ") + //查询标记为异常状态手动处理的订单 + @Scheduled(cron = "0 0/3 * * * ? ") @GetMapping("/getType") public void getType() { xhpcPlaceholderOrderService.getType(); } - //查询异常订单枪状态 - // @Scheduled(cron = "0 0/1 * * * ? ") - public void getAbnormalTime() { - xhpcPlaceholderOrderService.getAbnormalTime(); + //查询实时占位费订单,是否存在下一个订单,存在该订单就异常 + @Scheduled(cron = "0 0/5 * * * ? ") + @GetMapping("/getOrderNum") + public void getOrderNum() { + xhpcPlaceholderOrderService.getOrderNum(); } + + @GetMapping("/getExamine") public AjaxResult getExamine(@RequestParam Long placeholderOrderId,BigDecimal totalMoney, @RequestParam String startTime , @RequestParam String endTime){ return xhpcPlaceholderOrderService.getExamine(placeholderOrderId,totalMoney,startTime,endTime); diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcRealTimeOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcRealTimeOrderController.java index 6f7ecb9a..994125c1 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcRealTimeOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcRealTimeOrderController.java @@ -132,7 +132,7 @@ public class XhpcRealTimeOrderController extends BaseController { */ @GetMapping("/getExamineMessage") public AjaxResult getExamineMessage(Long realTimeOrderId,Long chargeOrderId){ - return AjaxResult.success(xhpcRealTimeOrderService.getExamineMessage(realTimeOrderId,chargeOrderId)); + return xhpcRealTimeOrderService.getExamineMessageYu(realTimeOrderId,chargeOrderId); } /** @@ -146,4 +146,10 @@ public class XhpcRealTimeOrderController extends BaseController { public AjaxResult getExamine(@RequestParam Long chargingOrderId,@RequestParam BigDecimal powerPrice,@RequestParam BigDecimal servicePrice,@RequestParam BigDecimal chargingDegree,@RequestParam String startTime ,@RequestParam String endTime){ return xhpcRealTimeOrderService.getExamine(chargingOrderId,powerPrice,servicePrice,chargingDegree,startTime,endTime); } + + + @GetMapping("/getExamineYu") + public AjaxResult getExamineYu(){ + return xhpcRealTimeOrderService.getExamineYu(); + } } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcStatisticsController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcStatisticsController.java index 8957ea66..f27aa028 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcStatisticsController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcStatisticsController.java @@ -58,9 +58,9 @@ public class XhpcStatisticsController extends BaseController { * @return */ @GetMapping("/getDateIntervalPage") - public TableDataInfo getDateIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds,Long internetUserId, Long operatorId,String startTime, String endTime,Long userId, Integer type) + public TableDataInfo getDateIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds,Long internetUserId, Long operatorId,String startTime, String endTime,Long userId, Integer type, String beginStartTime, String beginEndTime) { - List> list = xhpcStatisticsService.getDateIntervalPage(request,tenantId,chargingStationId,chargingPileId,terminalId,chargingStationIds,internetUserId,operatorId,startTime,endTime,userId,type); + List> list = xhpcStatisticsService.getDateIntervalPage(request,tenantId,chargingStationId,chargingPileId,terminalId,chargingStationIds,internetUserId,operatorId,startTime,endTime,userId,type,beginStartTime,beginEndTime); return getDataTable(list); } /** @@ -76,9 +76,9 @@ public class XhpcStatisticsController extends BaseController { * @return */ @GetMapping("/getStationIntervalPage") - public TableDataInfo getStationIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds,String operatorIds,Long internetUserId, Long operatorId,String startTime, String endTime, Long userId, Integer type) + public TableDataInfo getStationIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds,String operatorIds,Long internetUserId, Long operatorId,String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) { - List> list = xhpcStatisticsService.getStationIntervalPage(request,tenantId,chargingStationId,chargingPileId,terminalId,chargingStationIds,operatorIds,internetUserId,operatorId,startTime,endTime,userId,type); + List> list = xhpcStatisticsService.getStationIntervalPage(request,tenantId,chargingStationId,chargingPileId,terminalId,chargingStationIds,operatorIds,internetUserId,operatorId,startTime,endTime,userId,type,beginStartTime,beginEndTime); return getDataTable(list); } @@ -93,9 +93,9 @@ public class XhpcStatisticsController extends BaseController { * @return */ @GetMapping("/getOperatorIntervalPage") - public TableDataInfo getOperatorIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String operatorIds, Long operatorId,String startTime, String endTime, Long userId,Integer type) + public TableDataInfo getOperatorIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String operatorIds, Long operatorId,String startTime, String endTime, Long userId,Integer type, String beginStartTime, String beginEndTime) { - List> list = xhpcStatisticsService.getOperatorIntervalPage(request,tenantId,chargingStationId,chargingPileId,terminalId,operatorIds,operatorId,startTime,endTime,userId,type); + List> list = xhpcStatisticsService.getOperatorIntervalPage(request,tenantId,chargingStationId,chargingPileId,terminalId,operatorIds,operatorId,startTime,endTime,userId,type,beginStartTime,beginEndTime); return getDataTable(list); } @@ -110,10 +110,10 @@ public class XhpcStatisticsController extends BaseController { * @return */ @GetMapping("/getInternetUserIntervalPage") - public TableDataInfo getInternetUserIntervalPage(HttpServletRequest request,String internetUserIds,Long internetUserId,String startTime, String endTime, Long userId,Integer type) + public TableDataInfo getInternetUserIntervalPage(HttpServletRequest request,String internetUserIds,Long internetUserId,String startTime, String endTime, Long userId,Integer type, String beginStartTime, String beginEndTime) { startPage(); - List> list = xhpcStatisticsService.getInternetUserIntervalPage(request,internetUserIds,internetUserId,startTime,endTime,userId,type); + List> list = xhpcStatisticsService.getInternetUserIntervalPage(request,internetUserIds,internetUserId,startTime,endTime,userId,type,beginStartTime,beginEndTime); return getDataTable(list); } @@ -130,9 +130,9 @@ public class XhpcStatisticsController extends BaseController { * @return */ @GetMapping("/getTerminalIntervalPage") - public TableDataInfo getTerminalIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,String terminalId,Long operatorId,String startTime, String endTime,Long userId,Integer type) + public TableDataInfo getTerminalIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,String terminalId,Long operatorId,String startTime, String endTime,Long userId,Integer type, String beginStartTime, String beginEndTime) { - List> list = xhpcStatisticsService.getTerminalIntervalPage(request,tenantId,chargingStationId,terminalId,operatorId,startTime,endTime,userId,type); + List> list = xhpcStatisticsService.getTerminalIntervalPage(request,tenantId,chargingStationId,terminalId,operatorId,startTime,endTime,userId,type,beginStartTime,beginEndTime); return getDataTable(list); } @@ -236,9 +236,9 @@ public class XhpcStatisticsController extends BaseController { * @return */ @GetMapping("/getSumSourceList") - public TableDataInfo getSumSourceList(HttpServletRequest request,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId,String startTime, String endTime, String internetUserIds, String chargingStationIds) { + public TableDataInfo getSumSourceList(HttpServletRequest request,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId,String startTime, String endTime, String internetUserIds, String chargingStationIds, String beginStartTime, String beginEndTime) { startPage(); - List> list = xhpcStatisticsService.getSumSourceList(request,tenantId,operatorId,chargingStationId,chargingPileId,terminalId,startTime,endTime,internetUserIds,chargingStationIds); + List> list = xhpcStatisticsService.getSumSourceList(request,tenantId,operatorId,chargingStationId,chargingPileId,terminalId,startTime,endTime,internetUserIds,chargingStationIds,beginStartTime,beginEndTime); return getDataTable(list); } @@ -292,8 +292,8 @@ public class XhpcStatisticsController extends BaseController { * @return */ @PostMapping("/dateInterval/export") - public void dateIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds,Long internetUserId, Long operatorId,String startTime, String endTime,Long userId,Integer type) throws IOException { - xhpcStatisticsService.dateIntervalExport(request,response,tenantId,chargingStationId,chargingPileId,terminalId, chargingStationIds,internetUserId,operatorId,startTime,endTime,userId,type); + public void dateIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds,Long internetUserId, Long operatorId,String startTime, String endTime,Long userId,Integer type, String beginStartTime, String beginEndTime) throws IOException { + xhpcStatisticsService.dateIntervalExport(request,response,tenantId,chargingStationId,chargingPileId,terminalId, chargingStationIds,internetUserId,operatorId,startTime,endTime,userId,type,beginStartTime,beginEndTime); } /** * 电站统计导出 @@ -308,8 +308,8 @@ public class XhpcStatisticsController extends BaseController { * @return */ @PostMapping("/stationInterval/export") - public void stationIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds,String operatorIds,Long internetUserId, Long operatorId,String startTime, String endTime,Long userId,Integer type) throws IOException { - xhpcStatisticsService.stationIntervalExport(request,response,tenantId,chargingStationId,chargingPileId,terminalId, chargingStationIds,operatorIds,internetUserId,operatorId,startTime,endTime,userId,type); + public void stationIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds,String operatorIds,Long internetUserId, Long operatorId,String startTime, String endTime,Long userId,Integer type, String beginStartTime, String beginEndTime) throws IOException { + xhpcStatisticsService.stationIntervalExport(request,response,tenantId,chargingStationId,chargingPileId,terminalId, chargingStationIds,operatorIds,internetUserId,operatorId,startTime,endTime,userId,type,beginStartTime,beginEndTime); } /** @@ -323,8 +323,8 @@ public class XhpcStatisticsController extends BaseController { * @return */ @PostMapping("/operatorInterval/export") - public void operatorIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String operatorIds, Long operatorId,String startTime, String endTime,Long userId,Integer type) throws IOException { - xhpcStatisticsService.operatorIntervalExport(request,response,tenantId,chargingStationId,chargingPileId,terminalId, operatorIds,operatorId,startTime,endTime,userId,type); + public void operatorIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String operatorIds, Long operatorId,String startTime, String endTime,Long userId,Integer type, String beginStartTime, String beginEndTime) throws IOException { + xhpcStatisticsService.operatorIntervalExport(request,response,tenantId,chargingStationId,chargingPileId,terminalId, operatorIds,operatorId,startTime,endTime,userId,type,beginStartTime,beginEndTime); } /** @@ -332,8 +332,8 @@ public class XhpcStatisticsController extends BaseController { * @return */ @PostMapping("/internetUserInterval/export") - public void internetUserIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId, String startTime, String endTime,String internetUserIds, String chargingStationIds) throws IOException { - xhpcStatisticsService.getSumSourceListExport(request,response,tenantId,operatorId,chargingStationId,chargingPileId,terminalId, startTime,endTime,internetUserIds,chargingStationIds); + public void internetUserIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId, String startTime, String endTime,String internetUserIds, String chargingStationIds, String beginStartTime, String beginEndTime) throws IOException { + xhpcStatisticsService.getSumSourceListExport(request,response,tenantId,operatorId,chargingStationId,chargingPileId,terminalId, startTime,endTime,internetUserIds,chargingStationIds,beginStartTime,beginEndTime); } @@ -349,8 +349,8 @@ public class XhpcStatisticsController extends BaseController { * @return */ @PostMapping("/terminalInterval/export") - public void terminalIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId, Long chargingStationId,String terminalId,Long operatorId,String startTime, String endTime,Long userId,Integer type) throws IOException { - xhpcStatisticsService.terminalIntervalExport(request,response,tenantId, chargingStationId,terminalId,operatorId,startTime,endTime,userId,type); + public void terminalIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId, Long chargingStationId,String terminalId,Long operatorId,String startTime, String endTime,Long userId,Integer type, String beginStartTime, String beginEndTime) throws IOException { + xhpcStatisticsService.terminalIntervalExport(request,response,tenantId, chargingStationId,terminalId,operatorId,startTime,endTime,userId,type,beginStartTime,beginEndTime); } /** diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcStopChargingOrderController.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcStopChargingOrderController.java index f227494c..6325cb56 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcStopChargingOrderController.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/controller/XhpcStopChargingOrderController.java @@ -135,4 +135,17 @@ public class XhpcStopChargingOrderController extends BaseController { } } } + + //小程序停止 + @GetMapping("/stopUpY") + public AjaxResult stopUpY(@RequestParam String serialNumber){ + String version ="0C"; + R r = powerPileService.stopCharging(serialNumber, serialNumber.substring(0,14), serialNumber.substring(0,16), version); + + if(r.getCode()==200){ + return AjaxResult.success("停止充电命令已下发"); + }else{ + return AjaxResult.success(r.getMsg()); + } + } } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcChargeOrder.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcChargeOrder.java index fc4b790e..4c11b4ba 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcChargeOrder.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcChargeOrder.java @@ -129,6 +129,8 @@ public class XhpcChargeOrder extends BaseEntity { */ private Integer chargeModelEvcs = 3; + private Integer clearingType = 3; + private Double totalPower; /** @@ -160,6 +162,12 @@ public class XhpcChargeOrder extends BaseEntity { private Integer sunchaStatus; + private String mark; + + private Long motorcadeId; + + private Integer motorcadeType; + public Integer getStopReasonEvcs() { return stopReasonEvcs; @@ -505,4 +513,36 @@ public class XhpcChargeOrder extends BaseEntity { public void setSunchaStatus(Integer sunchaStatus) { this.sunchaStatus = sunchaStatus; } + + public String getMark() { + return mark; + } + + public void setMark(String mark) { + this.mark = mark; + } + + public Long getMotorcadeId() { + return motorcadeId; + } + + public void setMotorcadeId(Long motorcadeId) { + this.motorcadeId = motorcadeId; + } + + public Integer getMotorcadeType() { + return motorcadeType; + } + + public void setMotorcadeType(Integer motorcadeType) { + this.motorcadeType = motorcadeType; + } + + public Integer getClearingType() { + return clearingType; + } + + public void setClearingType(Integer clearingType) { + this.clearingType = clearingType; + } } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcStatisticsStation.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcStatisticsStation.java index 78caba22..492497a2 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcStatisticsStation.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcStatisticsStation.java @@ -1,9 +1,12 @@ package com.xhpc.order.domain; +import com.fasterxml.jackson.annotation.JsonFormat; import com.xhpc.common.core.web.domain.BaseEntity; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; +import java.util.Date; /** * @author yuyang @@ -29,6 +32,10 @@ public class XhpcStatisticsStation extends BaseEntity { * 充电次数 */ private Integer chargingNumber; + + private Integer clearingType; + + private BigDecimal clearingPrice; /** * 电费 */ @@ -57,6 +64,8 @@ public class XhpcStatisticsStation extends BaseEntity { * 实收服务费-运营商服务费 */ private BigDecimal actServicePrice; + + private BigDecimal actTotalPrice; /** * 流量方总金额抽成 */ @@ -152,4 +161,12 @@ public class XhpcStatisticsStation extends BaseEntity { * 活动总金额 */ private BigDecimal activityTotalPrice; + + private String mark; + + private Long motorcadeId; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcStatisticsTimeInterval.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcStatisticsTimeInterval.java index 59ffd06d..6e22f3c6 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcStatisticsTimeInterval.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/domain/XhpcStatisticsTimeInterval.java @@ -61,6 +61,7 @@ public class XhpcStatisticsTimeInterval extends BaseEntity { * 实收服务费-运营商服务费 */ private BigDecimal actServicePrice; + private BigDecimal actTotalPrice; /** * 流量方总金额抽成 */ @@ -93,6 +94,10 @@ public class XhpcStatisticsTimeInterval extends BaseEntity { * 流量方id */ private Long internetUserId; + + private Integer clearingType; + + private BigDecimal clearingPrice; /** * 运营商id */ @@ -153,6 +158,9 @@ public class XhpcStatisticsTimeInterval extends BaseEntity { */ private BigDecimal activityTotalPrice; + private String mark; + + private Long motorcadeId; public Long getStatisticsTimeIntervalId() { @@ -465,4 +473,44 @@ public class XhpcStatisticsTimeInterval extends BaseEntity { public void setActivityTotalPrice(BigDecimal activityTotalPrice) { this.activityTotalPrice = activityTotalPrice; } + + public String getMark() { + return mark; + } + + public void setMark(String mark) { + this.mark = mark; + } + + public Long getMotorcadeId() { + return motorcadeId; + } + + public void setMotorcadeId(Long motorcadeId) { + this.motorcadeId = motorcadeId; + } + + public Integer getClearingType() { + return clearingType; + } + + public void setClearingType(Integer clearingType) { + this.clearingType = clearingType; + } + + public BigDecimal getClearingPrice() { + return clearingPrice; + } + + public void setClearingPrice(BigDecimal clearingPrice) { + this.clearingPrice = clearingPrice; + } + + public BigDecimal getActTotalPrice() { + return actTotalPrice; + } + + public void setActTotalPrice(BigDecimal actTotalPrice) { + this.actTotalPrice = actTotalPrice; + } } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/ChargeDetails.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/ChargeDetails.java new file mode 100644 index 00000000..fbdaa3a8 --- /dev/null +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/ChargeDetails.java @@ -0,0 +1,53 @@ +package com.xhpc.order.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.xhpc.evcs.domain.XhpcStatisticsTimeInterval; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ChargeDetails { + + @JsonProperty("DetailStartTime") + private String detailStartTime; + + @JsonProperty("DetailEndTime") + private String detailEndTime; + + @JsonProperty("ElecPrice") + private Double elecPrice = 0.0; + + @JsonProperty("SevicePrice") + private Double sevicePrice = 0.0; + + @JsonProperty("DetailPower") + private Double detailPower = 0.0; + + @JsonProperty("DetailElecMoney") + private Double detailElecMoney = 0.0; + + @JsonProperty("DetailSeviceMoney") + private Double detailSeviceMoney = 0.0; + + private int idx; + + public ChargeDetails(XhpcStatisticsTimeInterval statistics) { + + this.detailElecMoney = statistics.getPowerPrice().doubleValue(); + this.detailSeviceMoney = statistics.getServicePrice().doubleValue(); + this.elecPrice = statistics.getElecPriceEvcs().doubleValue(); + this.sevicePrice = statistics.getServicePriceEvcs().doubleValue(); + this.detailPower = statistics.getChargingDegree().doubleValue(); + this.detailStartTime = statistics.getStartTimeEvcs(); + this.detailEndTime = statistics.getEndTimeEvcs(); + } + + public ChargeDetails() { + + super(); + } + +} diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/ChargeOrderInfo.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/ChargeOrderInfo.java new file mode 100644 index 00000000..1144b79f --- /dev/null +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/ChargeOrderInfo.java @@ -0,0 +1,291 @@ +package com.xhpc.order.dto; + +import com.fasterxml.jackson.annotation.*; +import com.xhpc.common.core.utils.DateUtils; +import com.xhpc.common.util.DateUtil; +import com.xhpc.evcs.domain.XhpcStatisticsTimeInterval; +import com.xhpc.order.domain.XhpcHistoryOrder; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.Column; +import javax.persistence.Id; +import javax.persistence.Transient; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.*; + +import static com.xhpc.common.core.utils.DateUtils.YYYY_MM_DD_HH_MM_SS; + + +@Setter +@Getter +public class ChargeOrderInfo { + + @Id + @JsonProperty("StartChargeSeq") + private String startChargeSeq; + @JsonIgnore + private Integer startChargeSeqStat; + @JsonIgnore + private Integer failReason; + @JsonIgnore + private String identCode; + @JsonIgnore + @Column(updatable = false) + private String infraOperatorId; + @JsonIgnore + @Column(updatable = false) + private String billerOperatorId;//biller + @JsonProperty("ConnectorID") + private String connectorID; + @JsonProperty("StartTime") + private String startTime; + @JsonProperty("ChargeModel") + private Integer chargeModel; + @JsonProperty("Vin") + private String vin; + @JsonProperty("EndTime") + private String endTime; + @JsonProperty("TotalPower") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalPower = 0.0; + @JsonProperty("TotalElecMoney") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalElecMoney = 0.0; + @JsonProperty("TotalSeviceMoney") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalSeviceMoney = 0.0; + @JsonProperty("TotalMoney") + @Column(columnDefinition = "Decimal(10,2)") + private Double totalMoney = 0.0; + @JsonProperty("StopReason") + private Integer stopReason; + @JsonProperty("SumPeriod") + private Integer sumPeriod; + @JsonProperty("MeterValueStart") + @Column(columnDefinition = "Decimal(10,2)") + private Double meterValueStart = 0.0; + @JsonProperty("MeterValueEnd") + @Column(columnDefinition = "Decimal(10,2)") + private Double meterValueEnd = 0.0; + @JsonProperty("ChargeDetails") + private ChargeDetails[] chargeDetails; + @JsonIgnore + @Transient + private Map additionalProperties = new HashMap(); + + + public ChargeOrderInfo(XhpcHistoryOrder xhpcHistoryOrder) { + this.connectorID = xhpcHistoryOrder.getSerialNumber().substring(0, 16); + this.startChargeSeq = xhpcHistoryOrder.getInternetSerialNumber(); + this.endTime = DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, xhpcHistoryOrder.getEndTime()); + this.connectorID = xhpcHistoryOrder.getSerialNumber().substring(0, 16); + this.endTime = DateUtil.date2String(xhpcHistoryOrder.getEndTime(), DateUtil.DATE_FORMAT_DATE_TIME); + this.startTime = DateUtil.date2String(xhpcHistoryOrder.getStartTime(), DateUtil.DATE_FORMAT_DATE_TIME); + this.chargeModel = xhpcHistoryOrder.getChargeModelEvcs(); + this.totalPower = xhpcHistoryOrder.getTotalPower(); + final BigDecimal powerPriceTotal = xhpcHistoryOrder.getPowerPriceTotal(); + this.totalElecMoney = powerPriceTotal == null ? 0.0 : powerPriceTotal.doubleValue(); + final BigDecimal servicePriceTotal = xhpcHistoryOrder.getServicePriceTotal(); + this.totalSeviceMoney = servicePriceTotal == null ? 0.0 : servicePriceTotal.doubleValue(); + final BigDecimal totalPrice = xhpcHistoryOrder.getTotalPrice(); + this.totalMoney = totalPrice == null ? 0.0 : totalPrice.doubleValue(); + //this.stopReason = xhpcHistoryOrder.getStopReasonEvcs(); + if(xhpcHistoryOrder.getStopReasonEvcs() !=null){ + String stopReasonEvcs = xhpcHistoryOrder.getStopReasonEvcs(); + if("41".equals(stopReasonEvcs) ||"42".equals(stopReasonEvcs)||"43".equals(stopReasonEvcs)||"44".equals(stopReasonEvcs)||"4E".equals(stopReasonEvcs)||"平台停止".equals(stopReasonEvcs)){ + this.stopReason =1; + }else if("4A".equals(stopReasonEvcs) ||"4B".equals(stopReasonEvcs)||"4C".equals(stopReasonEvcs)||"4D".equals(stopReasonEvcs)||"4F".equals(stopReasonEvcs) || + "55".equals(stopReasonEvcs)||"57".equals(stopReasonEvcs)||"62".equals(stopReasonEvcs)||"63".equals(stopReasonEvcs)||"74".equals(stopReasonEvcs)||"75".equals(stopReasonEvcs) + ||"78".equals(stopReasonEvcs)||"79".equals(stopReasonEvcs)||"7A".equals(stopReasonEvcs)||"7B".equals(stopReasonEvcs)||"7C".equals(stopReasonEvcs)||"7D".equals(stopReasonEvcs) + ||"7E".equals(stopReasonEvcs)||"7F".equals(stopReasonEvcs)||"83".equals(stopReasonEvcs)){ + this.stopReason =3; + }else if("5A".equals(stopReasonEvcs)||"82".equals(stopReasonEvcs)){ + this.stopReason =2; + }else if("6B".equals(stopReasonEvcs) ||"6D".equals(stopReasonEvcs)||"5E".equals(stopReasonEvcs)){ + this.stopReason =4; + }else{ + this.stopReason =0; + } + }else{ + this.stopReason =0; + } + if(xhpcHistoryOrder.getMeterValueStartEvcs() !=null && xhpcHistoryOrder.getMeterValueStartEvcs()>0){ + double v = xhpcHistoryOrder.getMeterValueStartEvcs() / 10000; + DecimalFormat df = new DecimalFormat("#.000"); + this.meterValueStart =Double.parseDouble(df.format(v)); + }else{ + this.meterValueStart =0.00; + } + if(xhpcHistoryOrder.getMeterValueEndEvcs() !=null && xhpcHistoryOrder.getMeterValueEndEvcs()>0){ + double v = xhpcHistoryOrder.getMeterValueEndEvcs() / 10000; + DecimalFormat df = new DecimalFormat("#.000"); + this.meterValueEnd =Double.parseDouble(df.format(v)); + } else{ + this.meterValueEnd = 0.00; + } + final List xhpcStatisticsTimeIntervalList = + xhpcHistoryOrder.getXhpcStatisticsTimeIntervalList(); + this.sumPeriod = xhpcStatisticsTimeIntervalList == null ? 0 : xhpcStatisticsTimeIntervalList.size(); + this.chargeDetails = translate(xhpcStatisticsTimeIntervalList); + + } + + private ChargeDetails[] translate(List xhpcStatisticsTimeIntervalList) { + + List details = new LinkedList<>(); + if (xhpcStatisticsTimeIntervalList != null) + for (XhpcStatisticsTimeInterval statistics : xhpcStatisticsTimeIntervalList) { + details.add(new ChargeDetails(statistics)); + } + ChargeDetails[] a = new ChargeDetails[details.size()]; + return details.toArray(a); + } + + public ChargeOrderInfo() { + + } + + @JsonProperty("StartChargeSeq") + public String getStartChargeSeq() { + + return startChargeSeq; + } + + @JsonProperty("StartChargeSeq") + public void setStartChargeSeq(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + } + + public ChargeOrderInfo setStartChargeSeqAndReturn(String startChargeSeq) { + + this.startChargeSeq = startChargeSeq; + return this; + } + + @JsonProperty("ConnectorID") + public String getConnectorID() { + + return connectorID; + } + + @JsonProperty("ConnectorID") + public void setConnectorID(String connectorID) { + + this.connectorID = connectorID; + } + + @JsonProperty("StartTime") + public String getStartTime() { + + return startTime; + } + + @JsonProperty("StartTime") + public void setStartTime(String startTime) { + + this.startTime = startTime; + } + + @JsonProperty("EndTime") + public String getEndTime() { + + return endTime; + } + + @JsonProperty("EndTime") + public void setEndTime(String endTime) { + + this.endTime = endTime; + } + + @JsonProperty("TotalPower") + public Double getTotalPower() { + + return totalPower; + } + + @JsonProperty("TotalPower") + public void setTotalPower(Double totalPower) { + + this.totalPower = totalPower; + } + + @JsonProperty("TotalElecMoney") + public Double getTotalElecMoney() { + + return totalElecMoney; + } + + @JsonProperty("TotalElecMoney") + public void setTotalElecMoney(Double totalElecMoney) { + + this.totalElecMoney = totalElecMoney; + } + + @JsonProperty("TotalSeviceMoney") + public Double getTotalSeviceMoney() { + + return totalSeviceMoney; + } + + @JsonProperty("TotalSeviceMoney") + public void setTotalSeviceMoney(Double totalSeviceMoney) { + + this.totalSeviceMoney = totalSeviceMoney; + } + + @JsonProperty("TotalMoney") + public Double getTotalMoney() { + + return totalMoney; + } + + @JsonProperty("TotalMoney") + public void setTotalMoney(Double totalMoney) { + + this.totalMoney = totalMoney; + } + + @JsonProperty("StopReason") + public Integer getStopReason() { + + return stopReason; + } + + @JsonProperty("StopReason") + public void setStopReason(Integer stopReason) { + + this.stopReason = stopReason; + } + + @JsonProperty("SumPeriod") + public Integer getSumPeriod() { + + return sumPeriod; + } + + @JsonProperty("SumPeriod") + public void setSumPeriod(Integer sumPeriod) { + + this.sumPeriod = sumPeriod; + } + + @JsonAnyGetter + @Transient + public Map getAdditionalProperties() { + + return this.additionalProperties; + } + + @JsonAnySetter + @Transient + public void setAdditionalProperty(String name, Object value) { + + this.additionalProperties.put(name, value); + } + + +} diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/RateTime.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/RateTime.java index 75471976..c9d93852 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/RateTime.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/RateTime.java @@ -32,4 +32,14 @@ public class RateTime implements Serializable { private BigDecimal powerPrice; private static final long serialVersionUID = 1L; + + + public static void main(String[] args) { + RateTime rateTime = new RateTime(); + rateTime.setStartTime("小红"); + RateTime rateTime1 = rateTime; + rateTime1.setStartTime("阿飞"); + + System.out.println("========"+rateTime.getStartTime()); + } } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/XhpcChargeHistoryOrder.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/XhpcChargeHistoryOrder.java index 6f19aa5a..ddb43c22 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/XhpcChargeHistoryOrder.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/dto/XhpcChargeHistoryOrder.java @@ -64,6 +64,7 @@ public class XhpcChargeHistoryOrder { * 实收服务费 */ private BigDecimal actServicePrice; + private BigDecimal actTotalPrice; /** * 流量方总金额抽成 @@ -98,6 +99,8 @@ public class XhpcChargeHistoryOrder { */ private BigDecimal operationSvcCommission; + private BigDecimal clearingPrice; + /** * 订单来源(0C端用户 1流量用户) */ @@ -128,6 +131,9 @@ public class XhpcChargeHistoryOrder { */ private Integer type; + + private Integer clearingType; + /** * 状态(0正常 1停用) */ @@ -280,6 +286,10 @@ public class XhpcChargeHistoryOrder { */ private BigDecimal activityTotalPrice; + private String mark; + + private Long motorcadeId; + public Date getCreateTime() { return createTime; @@ -804,4 +814,44 @@ public class XhpcChargeHistoryOrder { public void setActivityTotalPrice(BigDecimal activityTotalPrice) { this.activityTotalPrice = activityTotalPrice; } + + public String getMark() { + return mark; + } + + public void setMark(String mark) { + this.mark = mark; + } + + public Long getMotorcadeId() { + return motorcadeId; + } + + public void setMotorcadeId(Long motorcadeId) { + this.motorcadeId = motorcadeId; + } + + public Integer getClearingType() { + return clearingType; + } + + public void setClearingType(Integer clearingType) { + this.clearingType = clearingType; + } + + public BigDecimal getClearingPrice() { + return clearingPrice; + } + + public void setClearingPrice(BigDecimal clearingPrice) { + this.clearingPrice = clearingPrice; + } + + public BigDecimal getActTotalPrice() { + return actTotalPrice; + } + + public void setActTotalPrice(BigDecimal actTotalPrice) { + this.actTotalPrice = actTotalPrice; + } } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcChargeOrderMapper.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcChargeOrderMapper.java index 1036a5ff..8c2a21e7 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcChargeOrderMapper.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcChargeOrderMapper.java @@ -102,6 +102,16 @@ public interface XhpcChargeOrderMapper { * 更新川逸充用户余额 */ public int updateAppInternetUserBalance(@Param("userId")Long userId, @Param("balance")BigDecimal balance); + + + /** + * 更新车队总金额 + */ + public int updateMotorcadeRemainingAmont(@Param("userId")Long userId, @Param("remainingAmount")BigDecimal remainingAmount, @Param("consumptionAmount")BigDecimal consumptionAmount); + + public int updateMotorcadeUserSurplusMoney(@Param("userId")Long userId, @Param("surplusMoney")BigDecimal surplusMoney, @Param("consumeMoney")BigDecimal consumeMoney); + + /** * 判断用户是否在充电中 */ @@ -148,6 +158,14 @@ public interface XhpcChargeOrderMapper { */ int getCount(@Param("userId") Long userId,@Param("chargeOrderId")Long chargeOrderId,@Param("source")Integer source,@Param("tenantId")String tenantId); + /** + * 判断是否内部场站 + */ + int getInternalChargingStation(@Param("chargingStationId") Long chargingStationId); + + int getInternalUserType(@Param("chargingStationId") Long chargingStationId,@Param("source")Integer source,@Param("id") Long id); + + /** * 活动 * @return @@ -297,4 +315,11 @@ public interface XhpcChargeOrderMapper { int getXhpcPlaceholderOrderNumber(@Param("userId")Long userId, @Param("source")Integer source, @Param("terminalId")String terminalId); + Map getUserOrderMessage(@Param("userId")Long userId,@Param("source") Integer source); + + List> getAutomaticSettlement(@Param("chargingStationIds") List chargingStationIds); + + + Map getUserOderMassage(@Param("userId")Long userId,@Param("source") Integer source); + } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcHistoryOrderMapper.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcHistoryOrderMapper.java index cbd0e68a..57377e81 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcHistoryOrderMapper.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcHistoryOrderMapper.java @@ -81,7 +81,7 @@ public interface XhpcHistoryOrderMapper { * 历史订单记录(PC) * @return */ - List> getListPage(@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("terminalId")Long terminalId,@Param("phone")String phone,@Param("transactionNumber")String transactionNumber,@Param("status")Integer status,@Param("chargingStationName")String chargingStationName,@Param("operatorId")Long operatorId,@Param("source")Integer source,@Param("beginStartTime")String beginStartTime,@Param("beginEndTime")String beginEndTime,@Param("userId")Long userId,@Param("type")Integer type,@Param("number")Integer number,@Param("affiliationOrganization")String affiliationOrganization,@Param("evcsOrderNo")String evcsOrderNo,@Param("plateNum")String plateNum,@Param("internetId")Integer internetId,@Param("internetSerialNumber")String internetSerialNumber,@Param("terminalName")String terminalName,@Param("vinCode")String vinCode,@Param("overStartTime")String overStartTime,@Param("overEndTime")String overEndTime,@Param("personnelId")Long personnelId,@Param("confirmResult")Integer confirmResult,@Param("tenantId")String tenantId,@Param("isNotNull")Integer isNotNull); + List> getListPage(@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("terminalId")Long terminalId,@Param("phone")String phone,@Param("transactionNumber")String transactionNumber,@Param("status")Integer status,@Param("chargingStationName")String chargingStationName,@Param("operatorId")Long operatorId,@Param("source")Integer source,@Param("beginStartTime")String beginStartTime,@Param("beginEndTime")String beginEndTime,@Param("userId")Long userId,@Param("type")Integer type,@Param("number")Integer number,@Param("affiliationOrganization")String affiliationOrganization,@Param("evcsOrderNo")String evcsOrderNo,@Param("plateNum")String plateNum,@Param("internetId")Integer internetId,@Param("internetSerialNumber")String internetSerialNumber,@Param("terminalName")String terminalName,@Param("vinCode")String vinCode,@Param("overStartTime")String overStartTime,@Param("overEndTime")String overEndTime,@Param("personnelId")Long personnelId,@Param("confirmResult")Integer confirmResult,@Param("tenantId")String tenantId,@Param("isNotNull")Integer isNotNull,@Param("mark")String mark); /** * 获取费率时段 @@ -165,4 +165,8 @@ public interface XhpcHistoryOrderMapper { List> getTerminalListPage(@Param("terminalId")Long terminalId,@Param("status")Integer status,@Param("operatorId")Long operatorId,@Param("chargingStationId")Long chargingStationId); + + XhpcHistoryOrder getOrderMassageOrRateTime(@Param("serialNumber") String serialNumber); + + List> getRateTimeList(@Param("rateModelId")Long rateModelId); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcInspectionMapper.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcInspectionMapper.java index bbfc7466..fc54c8d7 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcInspectionMapper.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcInspectionMapper.java @@ -49,4 +49,10 @@ public interface XhpcInspectionMapper { int updateXhpcInspectionType(@Param("chargingStationId")Long chargingStationId,@Param("time") String time); + List> getStationInspectionList(@Param("status") Integer status,@Param("logOperatorId")Long logOperatorId,@Param("tenantId")String tenantId,@Param("startTime")String startTime,@Param("endTime") String endTime); + + List> getStationInspectionDateList(@Param("stationId") Long stationId,@Param("time") String time); + + List> getStationInspectionTime(@Param("stationId") Long stationId,@Param("time") String time); + List> getStationInspectionMoonList(@Param("stationId") Long stationId,@Param("time") String time,@Param("name")String name); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcPlaceholderOrderMapper.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcPlaceholderOrderMapper.java index 4352790b..d00301c1 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcPlaceholderOrderMapper.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcPlaceholderOrderMapper.java @@ -32,7 +32,7 @@ public interface XhpcPlaceholderOrderMapper { int updateXhpcPlaceholderOrder(XhpcPlaceholderOrder placeholderOrder ); - List> getListPage(@Param("chargingStationId")Long chargingStationId, @Param("chargingPileId")Long chargingPileId, @Param("terminalId")Long terminalId, @Param("phone")String phone, @Param("transactionNumber")String transactionNumber, @Param("status")Integer status, @Param("chargingStationName")String chargingStationName, @Param("operatorId")Long operatorId, @Param("source")Integer source, @Param("beginStartTime")String beginStartTime, @Param("beginEndTime")String beginEndTime, @Param("userId")Long userId, @Param("type")Integer type, @Param("number")Integer number, @Param("affiliationOrganization")String affiliationOrganization, @Param("evcsOrderNo")String evcsOrderNo, @Param("plateNum")String plateNum, @Param("internetId")Integer internetId, @Param("internetSerialNumber")String internetSerialNumber, @Param("terminalName")String terminalName, @Param("vinCode")String vinCode, @Param("overStartTime")String overStartTime, @Param("overEndTime")String overEndTime, @Param("personnelId")Long personnelId, @Param("confirmResult")Integer confirmResult, @Param("tenantId")String tenantId, @Param("isNotNull")Integer isNotNull); + List> getListPage(@Param("chargingStationId")Long chargingStationId, @Param("chargingPileId")Long chargingPileId, @Param("terminalId")Long terminalId, @Param("phone")String phone, @Param("transactionNumber")String transactionNumber, @Param("status")Integer status, @Param("chargingStationName")String chargingStationName, @Param("operatorId")Long operatorId, @Param("source")Integer source, @Param("beginStartTime")String beginStartTime, @Param("beginEndTime")String beginEndTime, @Param("userId")Long userId, @Param("type")Integer type, @Param("number")Integer number, @Param("affiliationOrganization")String affiliationOrganization, @Param("evcsOrderNo")String evcsOrderNo, @Param("plateNum")String plateNum, @Param("internetId")Integer internetId, @Param("internetSerialNumber")String internetSerialNumber, @Param("terminalName")String terminalName, @Param("vinCode")String vinCode, @Param("overStartTime")String overStartTime, @Param("overEndTime")String overEndTime, @Param("personnelId")Long personnelId, @Param("confirmResult")Integer confirmResult, @Param("tenantId")String tenantId, @Param("isNotNull")Integer isNotNull,@Param("totalMoneyMin") Double totalMoneyMin,@Param("totalMoneyMax") Double totalMoneyMax,@Param("placeholderOrderNumber")String placeholderOrderNumber); List> getAbnormalListPage(@Param("chargingStationId")Long chargingStationId, @Param("chargingPileId")Long chargingPileId, @Param("terminalId")Long terminalId, @Param("phone")String phone, @Param("transactionNumber")String transactionNumber, @Param("status")Integer status, @Param("chargingStationName")String chargingStationName, @Param("operatorId")Long operatorId, @Param("source")Integer source, @Param("beginStartTime")String beginStartTime, @Param("beginEndTime")String beginEndTime, @Param("userId")Long userId, @Param("type")Integer type, @Param("number")Integer number, @Param("affiliationOrganization")String affiliationOrganization, @Param("evcsOrderNo")String evcsOrderNo, @Param("plateNum")String plateNum, @Param("internetId")Integer internetId, @Param("internetSerialNumber")String internetSerialNumber, @Param("terminalName")String terminalName, @Param("vinCode")String vinCode, @Param("overStartTime")String overStartTime, @Param("overEndTime")String overEndTime, @Param("personnelId")Long personnelId, @Param("confirmResult")Integer confirmResult, @Param("tenantId")String tenantId, @Param("isNotNull")Integer isNotNull); @@ -57,7 +57,7 @@ public interface XhpcPlaceholderOrderMapper { XhpcPlaceholderOrder getAbnormalTime(); - List> getAbnormalTimeList(); + List getAbnormalTimeList(); int getXhpcPlaceholderOrderNumber(@Param("userId")Long userId, @Param("source")Integer source, @Param("terminalId")String terminalId); @@ -116,11 +116,16 @@ public interface XhpcPlaceholderOrderMapper { List> getType(); - Map getXhpcPlaceholderOrderType(@Param("chargeOrderNo") String chargeOrderNo ,@Param("gunNumber") String gunNumber); + Map getXhpcPlaceholderOrderType(@Param("chargeOrderNo") String chargeOrderNo ,@Param("gunNumber") String gunNumber,@Param("currentMaxId") Long currentMaxId); + + Long getDeviceMessageIdMax(@Param("chargeOrderNo") String chargeOrderNo ,@Param("gunNumber") String gunNumber); + + + Map getXhpcPlaceholderOrderTypeYu(@Param("chargeOrderNo") String chargeOrderNo ,@Param("gunNumber") String gunNumber); int getXhpcHistoryOrderNextOrderTime(@Param("historyOrderId")Long historyOrderId,@Param("terminalId")Long terminalId,@Param("startTime") String startTime); - + int getXhpcHistoryOrderNextOrderTimeYu(@Param("historyOrderId")Long historyOrderId,@Param("terminalId")Long terminalId,@Param("startTime") String startTime); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcRealTimeOrderMapper.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcRealTimeOrderMapper.java index 89ef6852..e3d097b0 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcRealTimeOrderMapper.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcRealTimeOrderMapper.java @@ -212,11 +212,14 @@ public interface XhpcRealTimeOrderMapper { //查询该场站是否有占位费设置 - Map getXhpcPlaceholder(@Param("chargingStationId")Long chargingStationId); + Map getXhpcPlaceholder(@Param("chargingStationId")Long chargingStationId,@Param("internetUserId")String internetUserId,@Param("source")String source); List getReatTimeList(@Param("startTime")String startTime, @Param("endTime")String endTime, @Param("rateModelId")Long rateModelId); int insertXhpcHistoryOrderChargeDetails(XhpcHistoryOrderChargeDetails xhpcHistoryOrderChargeDetails); + + + List getOrderMassageOrRateTime(); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcStatisticsServiceMapper.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcStatisticsServiceMapper.java index 8fef3071..54ec54a8 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcStatisticsServiceMapper.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/mapper/XhpcStatisticsServiceMapper.java @@ -40,7 +40,7 @@ public interface XhpcStatisticsServiceMapper { * @param type 1 平台 2 运营商 3流量方 * @return */ - List> getDateIntervalPage(@Param("chargingStationId") Long chargingStationId,@Param("chargingPileId") Long chargingPileId,@Param("terminalId") Long terminalId,@Param("chargingStationIds") List chargingStationIds,@Param("internetUserId") Long internetUserId,@Param("operatorId") Long operatorId,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("type") Integer type,@Param("userId")Long userId,@Param("tenantId")String tenantId); + List> getDateIntervalPage(@Param("chargingStationId") Long chargingStationId,@Param("chargingPileId") Long chargingPileId,@Param("terminalId") Long terminalId,@Param("chargingStationIds") List chargingStationIds,@Param("internetUserId") Long internetUserId,@Param("operatorId") Long operatorId,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("type") Integer type,@Param("userId")Long userId,@Param("tenantId")String tenantId,@Param("beginStartTime") String beginStartTime,@Param("beginEndTime") String beginEndTime); /** * 电站统计 @@ -53,7 +53,7 @@ public interface XhpcStatisticsServiceMapper { * @param type 1 平台 2 运营商 3流量方 * @return */ - List> getStationIntervalPage(@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("terminalId")Long terminalId,@Param("chargingStationIds") List chargingStationIds,@Param("operatorUserId") List operatorUserId,@Param("internetUserId") Long internetUserId,@Param("operatorId") Long operatorId,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("type") Integer type,@Param("userId") Long userId,@Param("tenantId")String tenantId); + List> getStationIntervalPage(@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("terminalId")Long terminalId,@Param("chargingStationIds") List chargingStationIds,@Param("operatorUserId") List operatorUserId,@Param("internetUserId") Long internetUserId,@Param("operatorId") Long operatorId,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("type") Integer type,@Param("userId") Long userId,@Param("tenantId")String tenantId,@Param("beginStartTime") String beginStartTime,@Param("beginEndTime") String beginEndTime); /** * 运营商统计 @@ -64,7 +64,7 @@ public interface XhpcStatisticsServiceMapper { * @param type 1 平台 2 运营商 3流量方 * @return */ - List> getOperatorIntervalPage(@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("terminalId")Long terminalId,@Param("operatorUserId") List operatorUserId,@Param("operatorId") Long operatorId,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("type") Integer type,@Param("userId") Long userId,@Param("tenantId")String tenantId); + List> getOperatorIntervalPage(@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("terminalId")Long terminalId,@Param("operatorUserId") List operatorUserId,@Param("operatorId") Long operatorId,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("type") Integer type,@Param("userId") Long userId,@Param("tenantId")String tenantId,@Param("beginStartTime") String beginStartTime,@Param("beginEndTime") String beginEndTime); /** * 流量方统计 @@ -88,7 +88,7 @@ public interface XhpcStatisticsServiceMapper { * @param type 1 平台 2 运营商 3流量方 * @return */ - List> getTerminalIntervalPage(@Param("chargingStationId") Long chargingStationId,@Param("terminalId") String terminalId,@Param("operatorId") Long operatorId,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("type") Integer type,@Param("userId") Long userId,@Param("tenantId")String tenantId); + List> getTerminalIntervalPage(@Param("chargingStationId") Long chargingStationId,@Param("terminalId") String terminalId,@Param("operatorId") Long operatorId,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("type") Integer type,@Param("userId") Long userId,@Param("tenantId")String tenantId,@Param("beginStartTime") String beginStartTime,@Param("beginEndTime") String beginEndTime); /** @@ -100,6 +100,7 @@ public interface XhpcStatisticsServiceMapper { */ List> getChargingStationList(@Param("operatorId")Long operatorId,@Param("userId")Long userId,@Param("type")Integer type,@Param("tenantId")String tenantId); + /** * 电桩列表 * @param operatorId 运营商id @@ -118,7 +119,11 @@ public interface XhpcStatisticsServiceMapper { */ List> getOperatorList(@Param("operatorId")Long operatorId,@Param("userId")Long userId,@Param("type")Integer type,@Param("tenantId")String tenantId); + List> getInternetOperatorList(@Param("userId")Long userId,@Param("tenantId")String tenantId); + List> getTenantList(@Param("userId")Long userId,@Param("type")Integer type); + + List> getInternetTenantList(@Param("userId")Long userId); /** * 流量方列表 * @param internetUserId 流量方id @@ -180,7 +185,7 @@ public interface XhpcStatisticsServiceMapper { * 订单来源列表 * @return */ - List> getSumSourceList(@Param("operatorId")Long operatorId,@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("terminalId")Long terminalId,@Param("startTime")String startTime, @Param("endTime")String endTime,@Param("sourceIds")List sourceIds,@Param("chargingStationIdList")List chargingStationIdList,@Param("tenantId")String tenantId,@Param("sysUserId")Long sysUserId,@Param("number")Integer number); + List> getSumSourceList(@Param("operatorId")Long operatorId,@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("terminalId")Long terminalId,@Param("startTime")String startTime, @Param("endTime")String endTime,@Param("sourceIds")List sourceIds,@Param("chargingStationIdList")List chargingStationIdList,@Param("tenantId")String tenantId,@Param("sysUserId")Long sysUserId,@Param("number")Integer number,@Param("beginStartTime")String beginStartTime, @Param("beginEndTime")String beginEndTime); /** * 获取登陆用户信息 @@ -207,7 +212,6 @@ public interface XhpcStatisticsServiceMapper { List getTerminal(@Param("status") Integer status,@Param("logOperatorId")Long logOperatorId,@Param("operatorId")Long operatorId,@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("tenantId")String tenantId); - List> getDateOrder(@Param("type") Integer type,@Param("status") Integer status,@Param("logOperatorId")Long logOperatorId,@Param("operatorId")Long operatorId,@Param("chargingStationId")Long chargingStationId,@Param("chargingPileId")Long chargingPileId,@Param("tenantId")String tenantId,@Param("beginOfDay")String beginOfDay,@Param("endOfDay")String endOfDay); diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java index 650093f6..c9ac1d36 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcChargeOrderService.java @@ -123,6 +123,9 @@ public interface IXhpcChargeOrderService { */ int updateUserBalance(Long userId, BigDecimal balance,Integer source,String tenantId); + + int updateeMotorcadeAmount(Long userId, BigDecimal surplusMoney,BigDecimal consumeMoney,Integer source,String tenantId); + /** * 修改双枪余额 */ @@ -230,7 +233,7 @@ public interface IXhpcChargeOrderService { */ AjaxResult chargingCapacityStartUp(HttpServletRequest request, Long userId, String serialNumber, Integer type,Integer chargingCapacity); - + AjaxResult getUserOderMassage(HttpServletRequest request); /** * 判断用户是否在充电中 */ @@ -245,4 +248,9 @@ public interface IXhpcChargeOrderService { List> getXhpcTerminalList(Long chargingStationId,Long chargingPileId,Integer type,Long userId); int getXhpcPlaceholderOrderNumber(Long userId, Integer source,String terminalId); + + AjaxResult getUserOrderMessage(Long userId, Integer source); + + void getAutomaticSettlement(); + } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcHistoryOrderService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcHistoryOrderService.java index ba25cec8..d6660ff9 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcHistoryOrderService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcHistoryOrderService.java @@ -68,14 +68,14 @@ public interface IXhpcHistoryOrderService { * 历史订单记录(PC) * @return */ - List> getListPage(String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone,String transactionNumber,Integer status,String chargingStationName,Long operatorId,Integer source,String beginStartTime,String beginEndTime,Long userId,Integer type,String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId,Integer confirmResult); + List> getListPage(String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone,String transactionNumber,Integer status,String chargingStationName,Long operatorId,Integer source,String beginStartTime,String beginEndTime,Long userId,Integer type,String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId,Integer confirmResult,String mark); /** * 历史订单记录导出(PC) * @return */ - void export(HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type,String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId,Integer confirmResult) throws IOException; + void export(HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type,String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId,Integer confirmResult,String mark) throws IOException; /** @@ -163,4 +163,7 @@ public interface IXhpcHistoryOrderService { List> getTerminalListPage(HttpServletRequest request,Long terminalId,Long chargingStationId); + AjaxResult getOrderMassageOrRateTime(String serialNumber); + + AjaxResult addOrderMassageOrRateTime(String serialNumber,String chargeOrderInfo); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcInspectionService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcInspectionService.java index 9f9d4b60..4c0ad16b 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcInspectionService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcInspectionService.java @@ -22,4 +22,10 @@ public interface IXhpcInspectionService { List> getInspectionUserList(HttpServletRequest request); Map getDataBoard(HttpServletRequest request); + + List> getStationInspectionList(HttpServletRequest request,String startTime,String endTime); + + List> getStationInspectionDateList( Long stationId, String time); + + Map getStationInspectionMoonList( Long stationId, String time); } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcPlaceholderOrderService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcPlaceholderOrderService.java index 9f82cd1a..a6e72704 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcPlaceholderOrderService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcPlaceholderOrderService.java @@ -25,11 +25,11 @@ public interface IXhpcPlaceholderOrderService { void getReturnGunRecord(String serialNumber,String startTime,String endTime); - List> getListPage(String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type, String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult); + List> getListPage(String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type, String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult, Double totalMoneyMin, Double totalMoneyMax,String placeholderOrderNumber); List> getAbnormalListPage(String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type, String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult); - void export(HttpServletResponse response, String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type, String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult) throws IOException; + void export(HttpServletResponse response, String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type, String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult, Double totalMoneyMin, Double totalMoneyMax,String placeholderOrderNumber) throws IOException; R getById(Long placeholderOrderId); @@ -39,7 +39,8 @@ public interface IXhpcPlaceholderOrderService { void getType(); - void getAbnormalTime(); + void getOrderNum(); + R getPlaceholderIDs(String [] stationIDs); diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java index 9c8b12ad..deaf515c 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcRealTimeOrderService.java @@ -113,6 +113,8 @@ public interface IXhpcRealTimeOrderService { */ Map getExamineMessage(Long realTimeOrderId,Long chargeOrderId); + AjaxResult getExamineMessageYu(Long realTimeOrderId,Long chargeOrderId); + /** * 审核 * @param chargingOrderId @@ -120,7 +122,7 @@ public interface IXhpcRealTimeOrderService { */ AjaxResult getExamine(Long chargingOrderId, BigDecimal powerPrice,BigDecimal servicePrice,BigDecimal chargingDegree,String startTime,String endTime); - + AjaxResult getExamineYu(); /** * 结算订单 * @param powerPrice diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcStatisticsService.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcStatisticsService.java index 7e1aec41..5c0da838 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcStatisticsService.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/IXhpcStatisticsService.java @@ -44,7 +44,7 @@ public interface IXhpcStatisticsService { * @param type 1 平台 2 运营商 3流量方 * @return */ - List> getDateIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type); + List> getDateIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime); /** * 电站统计 @@ -58,7 +58,7 @@ public interface IXhpcStatisticsService { * @param type 1 平台 2 运营商 3流量方 * @return */ - List> getStationIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds,String operatorIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type); + List> getStationIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds,String operatorIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime); /** * 运营商统计 @@ -70,7 +70,7 @@ public interface IXhpcStatisticsService { * @param type 1 平台 2 运营商 3流量方 * @return */ - List> getOperatorIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String operatorIds,Long operatorId, String startTime, String endTime, Long userId, Integer type); + List> getOperatorIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String operatorIds,Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime); /** @@ -83,7 +83,7 @@ public interface IXhpcStatisticsService { * @param type 1 平台 2 运营商 3流量方 * @return */ - List> getInternetUserIntervalPage(HttpServletRequest request,String internetUserIds, Long internetUserId, String startTime, String endTime, Long userId, Integer type); + List> getInternetUserIntervalPage(HttpServletRequest request,String internetUserIds, Long internetUserId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime); /** @@ -97,7 +97,7 @@ public interface IXhpcStatisticsService { * @param type 1 平台 2 运营商 3流量方 * @return */ - List> getTerminalIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId, String terminalId, Long operatorId, String startTime, String endTime, Long userId, Integer type); + List> getTerminalIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId, String terminalId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime); /** * 电站列表 @@ -160,7 +160,7 @@ public interface IXhpcStatisticsService { * 订单来源列表 * @return */ - List> getSumSourceList(HttpServletRequest request,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId,String startTime, String endTime, String sourceIds, String chargingStationIds); + List> getSumSourceList(HttpServletRequest request,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId,String startTime, String endTime, String sourceIds, String chargingStationIds, String beginStartTime, String beginEndTime); /** @@ -234,7 +234,7 @@ public interface IXhpcStatisticsService { * @param type 1 平台 2 运营商 3流量方 * @return */ - void dateIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type) throws IOException; + void dateIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) throws IOException; /** * 电站统计导出 @@ -248,7 +248,7 @@ public interface IXhpcStatisticsService { * @param type 1 平台 2 运营商 3流量方 * @return */ - void stationIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds,String operatorIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type) throws IOException; + void stationIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds,String operatorIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) throws IOException; /** * 运营商统计导出 @@ -260,14 +260,14 @@ public interface IXhpcStatisticsService { * @param type 1 平台 2 运营商 3流量方 * @return */ - void operatorIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String operatorIds,Long operatorId, String startTime, String endTime, Long userId, Integer type) throws IOException; + void operatorIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String operatorIds,Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) throws IOException; /** * 订单来源统计导出 * @return */ - void getSumSourceListExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId, String startTime, String endTime, String sourceIds,String chargingStationIds) throws IOException; + void getSumSourceListExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId, String startTime, String endTime, String sourceIds,String chargingStationIds, String beginStartTime, String beginEndTime) throws IOException; /** @@ -281,7 +281,7 @@ public interface IXhpcStatisticsService { * @param type 1 平台 2 运营商 3流量方 * @return */ - void terminalIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId, Long chargingStationId, String terminalId, Long operatorId, String startTime, String endTime, Long userId, Integer type) throws IOException; + void terminalIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId, Long chargingStationId, String terminalId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) throws IOException; void getMechanismExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type,Integer source) throws IOException ; diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java index 2878d91c..8abcbcf3 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java @@ -233,7 +233,6 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar return AjaxResult.error(UserTypeUtil.LOGIN_TYPE, "此账号不能在该场站充电,请使用手机号登录"); } } - xhpcChargeOrder.setDriverId(userMessage.get("phone").toString()); String pattern = "^([0-9]{16})"; Pattern compile = Pattern.compile(pattern); @@ -257,9 +256,29 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar //查看充电用户金额是否大于5元 //Map userMessage = xhpcChargeOrderMapper.getUserMessage(userId); BigDecimal a = new BigDecimal(5); - if (userMessage == null || userMessage.get("balance") == null || a.compareTo(new BigDecimal(userMessage.get("balance").toString())) == 1) { - return AjaxResult.error(1100, "金额小于5元,不能充电,请充值后再进行充电"); + if(userMessage != null && userMessage.get("userType") != null && UserTypeUtil.MOTORCADE_USER_TYPE==Integer.valueOf(userMessage.get("userType").toString())){ + int motorcadeType = Integer.valueOf(userMessage.get("type").toString()); + if(motorcadeType==0 && userMessage.get("remainingAmount") != null && a.compareTo(new BigDecimal(userMessage.get("remainingAmount").toString())) == 1){ + return AjaxResult.error(1100, "金额小于5元,不能充电,请负责人充值"); + } + if(motorcadeType==1 && a.compareTo(new BigDecimal(userMessage.get("balance").toString())) == 1){ + return AjaxResult.error(1100, "金额小于5元,不能充电,请负责人充值"); + } + }else{ + if(4==Integer.valueOf(userMessage.get("userType").toString())){ + if (userMessage == null || userMessage.get("balance") == null || a.compareTo(new BigDecimal(userMessage.get("balance").toString())) == 1) { + return AjaxResult.error(1100, "金额小于5元,不能充电,请联系管理员充值"); + } + }else{ + if (userMessage == null || userMessage.get("balance") == null || a.compareTo(new BigDecimal(userMessage.get("balance").toString())) == 1) { + return AjaxResult.error(1100, "金额小于5元,不能充电,请充值后再进行充电"); + } + } + } + + + //充电用户是否存在异常的订单 int j = xhpcChargeOrderMapper.countXhpcChargeOrder(userId,userType,tenantId); if (j > 0) { @@ -273,32 +292,42 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar // if (!"".equals(i) && i!=null) { // return AjaxResult.error(1102, "车辆正在充电,请查询车辆充电信息"); // } - if(Integer.valueOf(userMessage.get("sunchaSwitch").toString()) ==0){ + if(Integer.valueOf(userMessage.get("sunchaSwitch").toString()) ==0 && userType != UserTypeUtil.MOTORCADE_TYPE){ //充电用户是否在充电中 String i = xhpcChargeOrderMapper.countXhpcRealTimeOrder(userId,userType,tenantId); if (!"".equals(i) && i!=null) { return AjaxResult.error(1102, "车辆正在充电,请查询车辆充电信息"); } } - //内部使用判断 - if(xhpcTerminal.getChargingStationId()==16L){ - if("BE".equals(userMessage.get("userTypeName").toString())){ - if(!"39".equals(userMessage.get("customersId").toString())){ + + int internal = xhpcChargeOrderMapper.getInternalChargingStation(xhpcTerminal.getChargingStationId()); + + if(internal==1){ + if("BE".equals(userMessage.get("userTypeName").toString()) || "B".equals(userMessage.get("userTypeName").toString())){ + int customersId = xhpcChargeOrderMapper.getInternalUserType(xhpcTerminal.getChargingStationId(), 1, Long.valueOf(userMessage.get("customersId").toString())); + if(customersId==0){ + return AjaxResult.error(1102, "内部使用,请登录相应账号"); + } + }else if("ST".equals(userMessage.get("userTypeName").toString()) || "S".equals(userMessage.get("userTypeName").toString())){ + int customersId = xhpcChargeOrderMapper.getInternalUserType(xhpcTerminal.getChargingStationId(), 0, Long.valueOf(userMessage.get("communityId").toString())); + if(customersId==0){ + return AjaxResult.error(1102, "内部使用,请登录相应账号"); + } + }else if("CD".equals(userMessage.get("userTypeName").toString()) ||"D".equals(userMessage.get("userTypeName").toString()) ||"Z".equals(userMessage.get("userTypeName").toString())){ + int customersId = xhpcChargeOrderMapper.getInternalUserType(xhpcTerminal.getChargingStationId(), 3, Long.valueOf(userMessage.get("motorcadeId").toString())); + if(customersId==0){ return AjaxResult.error(1102, "内部使用,请登录相应账号"); } }else{ return AjaxResult.error(1102, "内部使用,请登录相应账号"); } } - - //终端状态是否空闲 //是否插枪 Map cacheMap = REDIS.getCacheMap("gun:" + terminalSerialNumber); logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>" + terminalSerialNumber); logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>" + cacheMap.toString()); logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>"); - if(cacheMap==null){ return AjaxResult.error(1105, "未注册的终端,请选择其他终端充电"); }else{ @@ -352,7 +381,18 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar return startUpSuncha(userMessage,xhpcChargeOrder,xhpcTerminal,tenantId,userType,terminalSerialNumber,type); } //余额 - String balance = new BigDecimal(userMessage.get("balance").toString()).multiply(new BigDecimal(100)).toString(); + String balance =null; + if(userMessage != null && userMessage.get("userType") != null && UserTypeUtil.MOTORCADE_USER_TYPE==Integer.valueOf(userMessage.get("userType").toString())){ + int motorcadeType = Integer.valueOf(userMessage.get("type").toString()); + if(motorcadeType==0){ + balance = new BigDecimal(userMessage.get("remainingAmount").toString()).multiply(new BigDecimal(100)).toString(); + }else{ + balance = new BigDecimal(userMessage.get("balance").toString()).multiply(new BigDecimal(100)).toString(); + } + }else{ + balance = new BigDecimal(userMessage.get("balance").toString()).multiply(new BigDecimal(100)).toString(); + + } //获取桩信息 Map xhpcChargingPileById =xhpcChargeOrderMapper.getXhpcChargingPileById(xhpcTerminal.getChargingPileId(),tenantId); //启动充电 @@ -378,33 +418,46 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar if(!"".equals(userMessage.get("socUser")) && userMessage.get("socUser") !=null && userMessage.get("socProtect") !=null && !"0".equals(userMessage.get("socProtect").toString())){ number =Integer.parseInt(userMessage.get("socUser").toString()); } - logger.info("<<<<<<<<<<<<11<<<<<<<<<<<>>>>>>>>>>>11>>>>>:"+number); - //平台 - String soc = redisService.getCacheObject("global:"+tenantId+":SOC"); - if(!"".equals(soc) && soc!=null){ - if(number!=0){ - if(Integer.parseInt(soc)-number<0){ - number=Integer.parseInt(soc); - } - }else{ - number=Integer.parseInt(soc); - } - } - logger.info("<<<<<<<<<<<<222<<<<<<<<<<<>>>>>>>>>>>222>>>>>:"+number); Map operatorMessage = xhpcChargeOrderMapper.getOperatorMessage(xhpcTerminal.getChargingStationId()); - if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc"))){ - if(number!=0){ - if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){ + if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc")) && !"".equals(operatorMessage.get("type")) ){ + int operatorType = Integer.valueOf(operatorMessage.get("type").toString()); + if(operatorType ==0){ + if(number!=0){ + if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){ + number=Integer.parseInt(operatorMessage.get("soc").toString()); + } + }else{ number=Integer.parseInt(operatorMessage.get("soc").toString()); } }else{ - number=Integer.parseInt(operatorMessage.get("soc").toString()); + String soc = redisService.getCacheObject("global:"+tenantId+":SOC"); + if(!"".equals(soc) && soc!=null){ + if(number!=0){ + if(Integer.parseInt(soc)-number<0){ + number=Integer.parseInt(soc); + } + }else{ + number=Integer.parseInt(soc); + } + } + } + + }else{ + //平台 + String soc = redisService.getCacheObject("global:"+tenantId+":SOC"); + if(!"".equals(soc) && soc!=null){ + if(number!=0){ + if(Integer.parseInt(soc)-number<0){ + number=Integer.parseInt(soc); + } + }else{ + number=Integer.parseInt(soc); + } } } if(number !=0){ startChargingData.setSoc(number); } - logger.info("<<<<<<<<<<<333<<<<<<<<<<<<>>>>>333>>>>>>>>>>>:"+number); //创建充电订单(充电启动soc初始值,结束是获取,并修改状态) xhpcChargeOrder.setChargingStationId(xhpcTerminal.getChargingStationId()); xhpcChargeOrder.setUserId(userId); @@ -426,12 +479,36 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar } xhpcChargeOrder.setCreateTime(Calendar.getInstance().getTime()); xhpcChargeOrder.setType("91"); - + if(userType==5 || userType==4){ + xhpcChargeOrder.setMark(userMessage.get("mark").toString()); + Long motorcadeId =Long.valueOf(userMessage.get("motorcadeId").toString()); + xhpcChargeOrder.setMotorcadeId(motorcadeId); + if(0==Integer.valueOf(userMessage.get("type").toString()) && userType==5) { + BigDecimal remainingAmount = new BigDecimal(userMessage.get("remainingAmount").toString()); + String totalKey =userMessage.get("mark").toString()+":"+motorcadeId; + redisService.setCacheObject(totalKey,remainingAmount); + xhpcChargeOrder.setMotorcadeType(0); + }else if (userType==4){ + BigDecimal remainingAmount = new BigDecimal(userMessage.get("balance").toString()); + String totalKey =userMessage.get("mark").toString()+":"+motorcadeId; + redisService.setCacheObject(totalKey,remainingAmount); + xhpcChargeOrder.setMotorcadeType(0); + }else{ + xhpcChargeOrder.setMotorcadeType(1); + } + } //获取车牌 Map xhpcUserVehicleMessage = xhpcChargeOrderMapper.getXhpcUserVehicleMessage(xhpcChargeOrder.getUserId(), xhpcChargeOrder.getSource()); if(xhpcUserVehicleMessage !=null && xhpcUserVehicleMessage.get("vehicleName") !=null){ xhpcChargeOrder.setPlateNum(xhpcUserVehicleMessage.get("vehicleName").toString()); } + + if(userMessage.get("clearingType")!=null){ + int clearingType = Integer.valueOf(userMessage.get("clearingType").toString()); + xhpcChargeOrder.setClearingType(clearingType); + } + + xhpcChargeOrderMapper.addXhpcChargeOrder(xhpcChargeOrder); //加用户金额缓存 @@ -507,7 +584,7 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar if(order ==null){ return AjaxResult.error(1104, "未获取到充电订单,拨打客服电话或按急停按钮停止充电"); }else{ - if(order.getSource()==1 && order.getUserId()<10000){ + if(order.getSource()==UserTypeUtil.INTERNET_TYPE && order.getUserId()<10000){ return AjaxResult.error(1104, "请在启动方停止充电"); } if(!order.getUserId().equals(userId)){ @@ -571,6 +648,18 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar return 0; } + @Override + public int updateeMotorcadeAmount(Long userId, BigDecimal surplusMoney,BigDecimal consumeMoney,Integer source,String tenantId) { + //修改用户余额 + if(UserTypeUtil.MOTORCADE_TYPE.equals(source)){ + return xhpcChargeOrderMapper.updateMotorcadeRemainingAmont(userId, surplusMoney,consumeMoney); + }else if(UserTypeUtil.MOTORCADE_USER_TYPE.equals(source)){ + return xhpcChargeOrderMapper.updateMotorcadeUserSurplusMoney(userId, surplusMoney,consumeMoney); + } + return 0; + } + + @Override public int updateUserSunchaBalance(Long userId, BigDecimal balance, Integer source, String tenantId,Integer sunchaStatus) { //修改用户余额 @@ -658,16 +747,11 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar return r; } - - StartChargingData startChargingData = new StartChargingData(); //500000 equals 500 yuan startChargingData.setBalance(chargingAmt * 100); - startChargingData.setGunId(connectorId); - startChargingData.setTel(driverId); - startChargingData.setPileNo(connectorId.substring(0, connectorId.length() - 3)); logger.info("<<<<<<<<<<<<<<<<<<<<<<<<第三方启动>>>>>>connectorId>>>>>>>>>>>"+connectorId); logger.info("<<<<<<<<<<<<<<<<<<<<<<<<第三方启动>>>>>>>connectorId>>>>>>>>>>"+connectorId); @@ -761,30 +845,52 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar //桩、平台(最小的) int number =0; - //平台 - String soc = redisService.getCacheObject("global:"+xhpcTerminal.getTenantId()+":SOC"); - if(!"".equals(soc) && soc!=null){ - if(number!=0){ - if(Integer.parseInt(soc)-number<0){ - number=Integer.parseInt(soc); - } - }else{ - number=Integer.parseInt(soc); - } - } logger.info("<<<<<<<<<<11<<<<<<<<<<<<<>>>>>>>11>>>>>>>>>:" + number); Map operatorMessage = xhpcChargeOrderMapper.getOperatorMessage(xhpcTerminal.getChargingStationId()); - if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc"))){ - if(number!=0){ - if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){ + if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc")) && !"".equals(operatorMessage.get("type")) ){ + int operatorType = Integer.valueOf(operatorMessage.get("type").toString()); + if(operatorType ==0){ + if(number!=0){ + if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){ + number=Integer.parseInt(operatorMessage.get("soc").toString()); + } + }else{ number=Integer.parseInt(operatorMessage.get("soc").toString()); } }else{ - number=Integer.parseInt(operatorMessage.get("soc").toString()); + String soc = redisService.getCacheObject("global:"+xhpcTerminal.getTenantId()+":SOC"); + if(!"".equals(soc) && soc!=null){ + if(number!=0){ + if(Integer.parseInt(soc)-number<0){ + number=Integer.parseInt(soc); + } + }else{ + number=Integer.parseInt(soc); + } + } } + }else{ + //平台 + String soc = redisService.getCacheObject("global:"+xhpcTerminal.getTenantId()+":SOC"); + if(!"".equals(soc) && soc!=null){ + if(number!=0){ + if(Integer.parseInt(soc)-number<0){ + number=Integer.parseInt(soc); + } + }else{ + number=Integer.parseInt(soc); + } + } } startChargingData.setSoc(number); + + int internal = xhpcChargeOrderMapper.getInternalChargingStation(xhpcTerminal.getChargingStationId()); + + if(internal==1){ + return R.fail(500, "内部使用,请登录相应账号"); + } + logger.info("<<<<<<<<<22<<<<<<<<<<<<<<>>>>>>>>22>>>>>>>>:" + number); String startTime = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"); Map extraData1 = xhpcChargeOrderMapper.selectDate3rdNeedBy(connectorId).get(0); @@ -809,6 +915,7 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar xhpcChargeOrder.setSource(1); xhpcChargeOrder.setUserId(userId); xhpcChargeOrder.setChargingMode(chargingMode); + xhpcChargeOrder.setClearingType(0); int res = xhpcChargeOrderMapper.addXhpcChargeOrder(xhpcChargeOrder); //int res = xhpcChargeOrderMapper.addBy3rd(internetSerialNumber, orderNo, driverId, chargingAmt, plateNum, status, // date,null, terminalId, power, chargingStationId, chargingMode, 1, userId); @@ -1042,6 +1149,11 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar startUpSuncha(userMessage, xhpcChargeOrder, xhpcTerminal, tenantId, userType, serialNumber, 4); return R.ok(); } + + if(userMessage.get("clearingType")!=null){ + int clearingType = Integer.valueOf(userMessage.get("clearingType").toString()); + xhpcChargeOrder.setClearingType(clearingType); + } xhpcChargeOrderMapper.addXhpcChargeOrder(xhpcChargeOrder); //插一帧实时数据 @@ -1055,25 +1167,41 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar if(!"".equals(userMessage.get("socUser")) && userMessage.get("socUser") !=null && userMessage.get("socProtect") !=null && !"0".equals(userMessage.get("socProtect").toString())){ number =Integer.parseInt(userMessage.get("socUser").toString()); } - //平台 - String soc = redisService.getCacheObject("global:"+xhpcTerminal.getTenantId()+":SOC"); - if(!"".equals(soc) && soc!=null){ - if(number!=0){ - if(Integer.parseInt(soc)-number<0){ - number=Integer.parseInt(soc); - } - }else{ - number=Integer.parseInt(soc); - } - } Map operatorMessage = xhpcChargeOrderMapper.getOperatorMessage(xhpcTerminal.getChargingStationId()); - if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc"))){ - if(number!=0){ - if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){ + if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc")) && !"".equals(operatorMessage.get("type")) ){ + int operatorType = Integer.valueOf(operatorMessage.get("type").toString()); + if(operatorType ==0){ + if(number!=0){ + if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){ + number=Integer.parseInt(operatorMessage.get("soc").toString()); + } + }else{ number=Integer.parseInt(operatorMessage.get("soc").toString()); } }else{ - number=Integer.parseInt(operatorMessage.get("soc").toString()); + String soc = redisService.getCacheObject("global:"+tenantId+":SOC"); + if(!"".equals(soc) && soc!=null){ + if(number!=0){ + if(Integer.parseInt(soc)-number<0){ + number=Integer.parseInt(soc); + } + }else{ + number=Integer.parseInt(soc); + } + } + } + + }else{ + //平台 + String soc = redisService.getCacheObject("global:"+tenantId+":SOC"); + if(!"".equals(soc) && soc!=null){ + if(number!=0){ + if(Integer.parseInt(soc)-number<0){ + number=Integer.parseInt(soc); + } + }else{ + number=Integer.parseInt(soc); + } } } map.put("soc",number); @@ -1129,7 +1257,7 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar String tenantId = xhpcTerminal.getTenantId(); long l1 = System.currentTimeMillis(); logger.info("<<<<<<<<<<1111<<<<<<<<<<<<<>>>>>>>>>>>>>>>>"); - R user = userTypeService.getUser(null, userId, userType, vinNumber,tenantId); + R user = userTypeService.getUser(null, userId, userType, serialNumber,tenantId); long l2 = System.currentTimeMillis(); logger.info("<<<<<<<<<<2222<<<<<<<<<<<<<>>>>>>>>>>>>>>>>"); Map userMessage = (Map)user.getData(); @@ -1147,8 +1275,24 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar } //查看充电用户金额是否大于5元 BigDecimal a = new BigDecimal(5); - if (userMessage == null || userMessage.get("balance") == null || a.compareTo(new BigDecimal(userMessage.get("balance").toString())) == 1) { - return R.fail(1100, "金额小于5元,不能充电,请充值后再进行充电"); + if(userMessage != null && userMessage.get("userType") != null && UserTypeUtil.MOTORCADE_USER_TYPE==Integer.valueOf(userMessage.get("userType").toString())){ + int motorcadeType = Integer.valueOf(userMessage.get("type").toString()); + if(motorcadeType==0 && userMessage.get("remainingAmount") != null && a.compareTo(new BigDecimal(userMessage.get("remainingAmount").toString())) == 1){ + return R.fail(1100, "金额小于5元,不能充电,请负责人充值"); + } + if(motorcadeType==1 && a.compareTo(new BigDecimal(userMessage.get("balance").toString())) == 1){ + return R.fail(1100, "金额小于5元,不能充电,请负责人充值"); + } + }else{ + if(4==Integer.valueOf(userMessage.get("userType").toString())){ + if (userMessage == null || userMessage.get("balance") == null || a.compareTo(new BigDecimal(userMessage.get("balance").toString())) == 1) { + return R.fail(1100, "金额小于5元,不能充电,请联系管理员充值"); + } + }else{ + if (userMessage == null || userMessage.get("balance") == null || a.compareTo(new BigDecimal(userMessage.get("balance").toString())) == 1) { + return R.fail(1100, "金额小于5元,不能充电,请充值后再进行充电"); + } + } } logger.info("<<<<<<<<<<333<<<<<<<<<<<<<>>>>>>>>>>>>>>>>"); //充电用户是否存在异常的订单 @@ -1218,8 +1362,6 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar // if(blacklistUser>0){ // return R.fail(1104, "该车辆暂停充电,请联系客服"); // } - - String balance = new BigDecimal(userMessage.get("balance").toString()).multiply(new BigDecimal(100)).toString(); //获取桩信息 Map xhpcChargingPileById =xhpcChargeOrderMapper.getXhpcChargingPileById(xhpcTerminal.getChargingPileId(),tenantId); //启动充电 @@ -1234,7 +1376,13 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar } startChargingData.setPileNo(xhpcTerminal.getPileSerialNumber()); startChargingData.setGunId(xhpcTerminal.getSerialNumber().substring(14)); - startChargingData.setBalance(Double.valueOf(balance).intValue()); + if(userType==4 && 0==Integer.valueOf(userMessage.get("type").toString())){ + String balance = new BigDecimal(userMessage.get("remainingAmount").toString()).multiply(new BigDecimal(100)).toString(); + startChargingData.setBalance(Double.valueOf(balance).intValue()); + }else{ + String balance = new BigDecimal(userMessage.get("balance").toString()).multiply(new BigDecimal(100)).toString(); + startChargingData.setBalance(Double.valueOf(balance).intValue()); + } if(xhpcChargingPileById.get("communicationProtocolVersion")!=null && !"".equals(xhpcChargingPileById.get("communicationProtocolVersion").toString())){ startChargingData.setVersion(xhpcChargingPileById.get("communicationProtocolVersion").toString()); }else{ @@ -1245,25 +1393,41 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar if(!"".equals(userMessage.get("socUser")) && userMessage.get("socUser") !=null && userMessage.get("socProtect") !=null && !"0".equals(userMessage.get("socProtect").toString())){ number =Integer.parseInt(userMessage.get("socUser").toString()); } - //平台 - String soc = redisService.getCacheObject("global:"+tenantId+":SOC"); - if(!"".equals(soc) && soc!=null){ - if(number!=0){ - if(Integer.parseInt(soc)-number<0){ - number=Integer.parseInt(soc); - } - }else{ - number=Integer.parseInt(soc); - } - } Map operatorMessage = xhpcChargeOrderMapper.getOperatorMessage(xhpcTerminal.getChargingStationId()); - if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc"))){ - if(number!=0){ - if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){ + if(operatorMessage !=null && operatorMessage.get("soc") !=null && !"".equals(operatorMessage.get("soc")) && !"".equals(operatorMessage.get("type")) ){ + int operatorType = Integer.valueOf(operatorMessage.get("type").toString()); + if(operatorType ==0){ + if(number!=0){ + if(Integer.parseInt(operatorMessage.get("soc").toString())-number<0){ + number=Integer.parseInt(operatorMessage.get("soc").toString()); + } + }else{ number=Integer.parseInt(operatorMessage.get("soc").toString()); } }else{ - number=Integer.parseInt(operatorMessage.get("soc").toString()); + String soc = redisService.getCacheObject("global:"+tenantId+":SOC"); + if(!"".equals(soc) && soc!=null){ + if(number!=0){ + if(Integer.parseInt(soc)-number<0){ + number=Integer.parseInt(soc); + } + }else{ + number=Integer.parseInt(soc); + } + } + } + + }else{ + //平台 + String soc = redisService.getCacheObject("global:"+tenantId+":SOC"); + if(!"".equals(soc) && soc!=null){ + if(number!=0){ + if(Integer.parseInt(soc)-number<0){ + number=Integer.parseInt(soc); + } + }else{ + number=Integer.parseInt(soc); + } } } if(number !=0){ @@ -1273,6 +1437,30 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar logger.info("<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>:"+startChargingData.getSoc()); //创建充电订单(充电启动soc初始值,结束是获取,并修改状态) + int internal = xhpcChargeOrderMapper.getInternalChargingStation(xhpcTerminal.getChargingStationId()); + + if(internal==1){ + if("BE".equals(userMessage.get("userTypeName").toString()) || "B".equals(userMessage.get("userTypeName").toString())){ + int customersId = xhpcChargeOrderMapper.getInternalUserType(xhpcTerminal.getChargingStationId(), 1, Long.valueOf(userMessage.get("customersId").toString())); + if(customersId==0){ + return R.fail(1102, "内部使用,请登录相应账号"); + } + }else if("ST".equals(userMessage.get("userTypeName").toString()) || "S".equals(userMessage.get("userTypeName").toString())){ + int customersId = xhpcChargeOrderMapper.getInternalUserType(xhpcTerminal.getChargingStationId(), 0, Long.valueOf(userMessage.get("communityId").toString())); + if(customersId==0){ + return R.fail(1102, "内部使用,请登录相应账号"); + } + }else if("CD".equals(userMessage.get("userTypeName").toString())||"D".equals(userMessage.get("userTypeName").toString())||"Z".equals(userMessage.get("userTypeName").toString())){ + int customersId = xhpcChargeOrderMapper.getInternalUserType(xhpcTerminal.getChargingStationId(), 3, Long.valueOf(userMessage.get("motorcadeId").toString())); + if(customersId==0){ + return R.fail(1102, "内部使用,请登录相应账号"); + } + }else{ + return R.fail(1102, "内部使用,请登录相应账号"); + } + } + + xhpcChargeOrder.setChargingStationId(xhpcTerminal.getChargingStationId()); xhpcChargeOrder.setUserId(userId); xhpcChargeOrder.setTerminalId(xhpcTerminal.getTerminalId()); @@ -1291,13 +1479,28 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar xhpcChargeOrder.setCreateTime(Calendar.getInstance().getTime()); xhpcChargeOrder.setType("91"); xhpcChargeOrder.setVinNormal(vinNumber); - + if(userType==5 || userType==4){ + xhpcChargeOrder.setMark(userMessage.get("mark").toString()); + Long motorcadeId =Long.valueOf(userMessage.get("motorcadeId").toString()); + xhpcChargeOrder.setMotorcadeId(motorcadeId); + if(0==Integer.valueOf(userMessage.get("type").toString()) || userType==4) { + BigDecimal remainingAmount = new BigDecimal(userMessage.get("remainingAmount").toString()); + String totalKey =userMessage.get("mark").toString()+":"+motorcadeId; + redisService.setCacheObject(totalKey,remainingAmount); + }else{ + xhpcChargeOrder.setMotorcadeType(1); + } + } if(Integer.valueOf(userMessage.get("sunchaSwitch").toString()) !=0){ startUpSuncha(userMessage,xhpcChargeOrder,xhpcTerminal,tenantId,userType,serialNumber,5); return R.ok(); } + if(userMessage.get("clearingType")!=null){ + int clearingType = Integer.valueOf(userMessage.get("clearingType").toString()); + xhpcChargeOrder.setClearingType(clearingType); + } //加用户金额缓存 - redisService.setCacheObject("YE"+xhpcChargeOrder.getSerialNumber(),new BigDecimal(userMessage.get("balance").toString())); + //redisService.setCacheObject("YE"+xhpcChargeOrder.getSerialNumber(),new BigDecimal(userMessage.get("balance").toString())); xhpcChargeOrderMapper.addXhpcChargeOrder(xhpcChargeOrder); // executorService.execute(new Runnable() { @@ -1323,7 +1526,12 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar // } // }); Map map =new HashMap<>(); - map.put("balance",userMessage.get("balance")); + if(userType==4 && 0==Integer.valueOf(userMessage.get("type").toString())){ + map.put("balance",userMessage.get("remainingAmount")); + }else{ + map.put("balance",userMessage.get("balance")); + } + map.put("serialNumber",orderNo); //用户、桩、平台(最小的) map.put("soc",number); @@ -1985,6 +2193,19 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar } @Override + @Transactional + public AjaxResult getUserOderMassage(HttpServletRequest request) { + LoginUser loginUser = tokenService.getLoginUser(request); + Integer userType = loginUser.getUserType(); + Long userid = loginUser.getUserid(); + //查询是否有充电中的订单 + Map map = xhpcChargeOrderMapper.getUserOderMassage(userid, userType); + if(map ==null || map.get("serialNumber")==null){ + return AjaxResult.error(); + } + return AjaxResult.success(map); + } + @Override public String countXhpcRealTimeOrder(Long userId, Integer source, String tenantId) { return xhpcChargeOrderMapper.countXhpcRealTimeOrder(userId,source,tenantId); } @@ -2005,6 +2226,61 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar return xhpcChargeOrderMapper.getXhpcPlaceholderOrderNumber(userId, source, terminalId); } + @Override + public AjaxResult getUserOrderMessage(Long userId, Integer source) { + Map userOrderMessage = xhpcChargeOrderMapper.getUserOrderMessage(userId, source); + return AjaxResult.success(userOrderMessage); + } + + @Override + public void getAutomaticSettlement() { + + try{ + List chargingStationIds = new ArrayList<>(); + chargingStationIds.add("18"); + chargingStationIds.add("19"); + List> list = xhpcChargeOrderMapper.getAutomaticSettlement(chargingStationIds); + for (int i = 0; i map = list.get(i); + Long chargeOrderId = Long.valueOf(map.get("chargeOrderId").toString()); + Long realTimeOrderId = Long.valueOf(map.get("realTimeOrderId").toString()); + + Map examineMessage = xhpcRealTimeOrderService.getExamineMessage(realTimeOrderId, chargeOrderId); + if(examineMessage !=null && examineMessage.get("powerPriceTotal")!=null && examineMessage.get("servicePriceTotal")!=null && examineMessage.get("chargingDegree")!=null){ + BigDecimal powerPrice = new BigDecimal(examineMessage.get("powerPriceTotal").toString()); + BigDecimal servicePrice = new BigDecimal(examineMessage.get("servicePriceTotal").toString()); + BigDecimal chargingDegree = new BigDecimal(examineMessage.get("chargingDegree").toString()); + String startTime=null; + String endTime=null; + if(examineMessage.get("startTime")!=null){ + startTime = examineMessage.get("startTime").toString(); + }else{ + startTime = map.get("chargeCreateTime").toString(); + } + + if(examineMessage.get("endTime")!=null){ + endTime = examineMessage.get("endTime").toString(); + }else{ + endTime = map.get("createTime").toString(); + } + + xhpcRealTimeOrderService.getExamine(chargeOrderId,powerPrice,servicePrice,chargingDegree,startTime,endTime); + + }else{ + XhpcChargeOrder chargeOrder = new XhpcChargeOrder(); + chargeOrder.setChargeOrderId(chargeOrderId); + chargeOrder.setStatus(2); + xhpcChargeOrderMapper.updateXhpcChargeOrder(chargeOrder); + } + + + } + }catch (Exception e){ + + } + } + + //判断双枪启规则 private AjaxResult startUpSuncha(Map userMessage,XhpcChargeOrder xhpcChargeOrder,XhpcTerminal xhpcTerminal,String tenantId,Integer source,String terminalSerialNumber,Integer type){ diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcHistoryOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcHistoryOrderServiceImpl.java index 149937f0..96ba56af 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcHistoryOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcHistoryOrderServiceImpl.java @@ -6,8 +6,11 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.poi.excel.BigExcelWriter; import cn.hutool.poi.excel.ExcelUtil; +import com.alibaba.fastjson.JSON; import com.xhpc.common.api.UserTypeService; +import com.xhpc.common.core.constant.StatusConstants; import com.xhpc.common.core.domain.R; +import com.xhpc.common.core.utils.DateUtils; import com.xhpc.common.core.utils.SecurityUtils; import com.xhpc.common.core.web.domain.AjaxResult; import com.xhpc.common.core.web.service.BaseService; @@ -38,8 +41,12 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.*; +import static com.xhpc.common.core.utils.DateUtils.YYYY_MM_DD_HH_MM_SS; + /** * @author yuyang * @date 2021/8/3 21:23 @@ -298,7 +305,7 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis } @Override - public List> getListPage(String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type,String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId,Integer confirmResult) { + public List> getListPage(String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type,String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId,Integer confirmResult,String mark) { Integer number = 0; //电话和用户类型都不为null number =3 @@ -315,34 +322,43 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis //获取登陆用户 Long logUserId = SecurityUtils.getUserId(); LoginUser loginUser = tokenService.getLoginUser(); + SysUser sysUser = loginUser.getSysUser(); //桩的统计、该时段金额 List> list = new ArrayList<>(); - if (userId != UserTypeUtil.USER_ID) { - Map landUser = xhpcHistoryOrderMapper.getLandUser(logUserId); + if (loginUser.getUserid() != UserTypeUtil.USER_ID) { + Map landUser = xhpcHistoryOrderMapper.getLandUser(loginUser.getUserid()); if (landUser != null) { if (landUser.get("userType") != null) { startPage(); - if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(landUser.get("userType").toString())) { + if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())) { Long logOperatorId = Long.valueOf(landUser.get("operatorId").toString()); //运营商看自己的场站 - list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0); + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0,mark); + }else if (UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())) { + Long logOperatorId = sysUser.getInternetUserId(); + //流量方 + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 3, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0,mark); + }else if (UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())) { + Long logOperatorId = sysUser.getInternetUserId(); + //车队 + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 4, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0,mark); } else { //查询赋值的场站 - list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 2, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logUserId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0); + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 2, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logUserId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0,mark); } } } } else { startPage(); - list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0); + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0,mark); } return list; } @Override - public void export(HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type,String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId,Integer confirmResult) throws IOException { + public void export(HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type,String affiliationOrganization,String evcsOrderNo,String plateNum,Integer internetId,String internetSerialNumber,String terminalName,String vinCode,String overStartTime,String overEndTime,Long personnelId,Integer confirmResult,String mark) throws IOException { Integer number = 0; //电话和用户类型都不为null number =3 @@ -365,16 +381,24 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis //桩的统计、该时段金额 List> list = new ArrayList<>(); if (userId != UserTypeUtil.USER_ID) { - if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())) { - Long logOperatorId = sysUser.getOperatorId(); - //运营商看自己的场站 - list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,1); - } else { - //查询赋值的场站 - list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 2, chargingStationName, operatorId, source, beginStartTime, beginEndTime, sysUserId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,1); - } + if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())) { + Long logOperatorId = Long.valueOf(sysUser.getOperatorId()); + //运营商看自己的场站 + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0,mark); + }else if (UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())) { + Long logOperatorId = sysUser.getInternetUserId(); + //流量方 + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 3, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0,mark); + }else if (UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())) { + Long logOperatorId = sysUser.getInternetUserId(); + //车队 + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 4, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0,mark); + } else { + //查询赋值的场站 + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 2, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logUserId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,0,mark); + } } else { - list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,1); + list = xhpcHistoryOrderMapper.getListPage(chargingStationId,chargingPileId,terminalId,phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, userId, type, number,affiliationOrganization,evcsOrderNo,plateNum,internetId,internetSerialNumber,terminalName,vinCode,overStartTime,overEndTime,personnelId,confirmResult,tenantId,1,mark); } Map reasonMap = StopReasonEnum.getMap(); @@ -426,7 +450,8 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis writer.addHeaderAlias("stopReasonEvcs", "停止原因代码"); writer.addHeaderAlias("stopReasonEvcsStr", "停止原因说明"); writer.addHeaderAlias("sourceName", "用户类型"); - + writer.addHeaderAlias("vinCode", "VIN码"); + writer.addHeaderAlias("plateNum", "车牌"); // writer.addHeaderAlias("plateNum", "电站名称"); // writer.addHeaderAlias("disputeOrderStatus", "桩编号"); @@ -740,6 +765,69 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis return list; } + @Override + public AjaxResult getOrderMassageOrRateTime(String serialNumber) { + Map map =new HashMap<>(); + XhpcHistoryOrder xhpcHistoryOrder = xhpcHistoryOrderMapper.getOrderMassageOrRateTime(serialNumber); + + if(xhpcHistoryOrder !=null){ + Map map1=new HashMap<>(); + map1.put("connectorID",xhpcHistoryOrder.getSerialNumber().substring(0, 16)); + map1.put("StartChargeSeq",xhpcHistoryOrder.getInternetSerialNumber()); + map1.put("SerialNumber",xhpcHistoryOrder.getSerialNumber()); + map1.put("EndTime",date2String(xhpcHistoryOrder.getEndTime(), "yyyy-MM-dd HH:mm:ss")); + map1.put("StartTime",date2String(xhpcHistoryOrder.getStartTime(), "yyyy-MM-dd HH:mm:ss")); + map1.put("ChargeModel",xhpcHistoryOrder.getChargeModelEvcs()); + map1.put("TotalPower",xhpcHistoryOrder.getTotalPower()); + map1.put("TotalElecMoney",xhpcHistoryOrder.getPowerPriceTotal().doubleValue()); + map1.put("TotalSeviceMoney",xhpcHistoryOrder.getServicePriceTotal().doubleValue()); + map1.put("TotalMoney",xhpcHistoryOrder.getTotalPrice().doubleValue()); + if(xhpcHistoryOrder.getStopReasonEvcs() !=null){ + String stopReasonEvcs = xhpcHistoryOrder.getStopReasonEvcs(); + if("40".equals(stopReasonEvcs)||"0".equals(stopReasonEvcs)||"00".equals(stopReasonEvcs)||"45".equals(stopReasonEvcs)||"APP 远程停止".equals(stopReasonEvcs) + ||"72".equals(stopReasonEvcs)){ + map1.put("StopReason",0); + }else if("41".equals(stopReasonEvcs) ||"42".equals(stopReasonEvcs)||"43".equals(stopReasonEvcs)||"44".equals(stopReasonEvcs)||"4E".equals(stopReasonEvcs)||"平台停止".equals(stopReasonEvcs)){ + map1.put("StopReason",1); + }else if("4A".equals(stopReasonEvcs) ||"4B".equals(stopReasonEvcs)||"4C".equals(stopReasonEvcs)||"4D".equals(stopReasonEvcs)||"4F".equals(stopReasonEvcs) || + "55".equals(stopReasonEvcs)||"57".equals(stopReasonEvcs)||"62".equals(stopReasonEvcs)||"63".equals(stopReasonEvcs)||"74".equals(stopReasonEvcs)||"75".equals(stopReasonEvcs) + ||"78".equals(stopReasonEvcs)||"79".equals(stopReasonEvcs)||"7A".equals(stopReasonEvcs)||"7B".equals(stopReasonEvcs)||"7C".equals(stopReasonEvcs)||"7D".equals(stopReasonEvcs) + ||"7E".equals(stopReasonEvcs)||"7F".equals(stopReasonEvcs)||"83".equals(stopReasonEvcs)){ + map1.put("StopReason",3); + }else if("5A".equals(stopReasonEvcs)||"82".equals(stopReasonEvcs)){ + map1.put("StopReason",2); + }else if("6B".equals(stopReasonEvcs) ||"6D".equals(stopReasonEvcs)||"5E".equals(stopReasonEvcs)){ + map1.put("StopReason",4); + }else{ + map1.put("StopReason",0); + } + }else{ + map1.put("StopReason",0); + } + map1.put("SumPeriod",xhpcHistoryOrder.getXhpcStatisticsTimeIntervalList().size()); + + map.put("orderMassage",map1); + + List> rateTimeList = xhpcHistoryOrderMapper.getRateTimeList(xhpcHistoryOrder.getRateModelId()); + + map.put("rateTimeList",rateTimeList); + + return AjaxResult.success(map); + } + + + return AjaxResult.error("订单号为null,请重新输入"); + } @Override + public AjaxResult addOrderMassageOrRateTime(String serialNumber,String chargeOrderInfo) { + XhpcHistoryOrder xhpcHistoryOrder = xhpcHistoryOrderMapper.getOrderMassageOrRateTime(serialNumber); + //ChargeOrderInfo orderInfo = JSON.parseObject(chargeOrderInfo, ChargeOrderInfo.class); + + redisService.setCacheObject("notification:"+xhpcHistoryOrder.getSerialNumber(),chargeOrderInfo); + return AjaxResult.success("订单补退已提交,等待推送"); + } + + + /** * 历史信息费率时段 @@ -1035,8 +1123,25 @@ public class XhpcHistoryOrderServiceImpl extends BaseService implements IXhpcHis // } } + public static final String date2String(Date date) { + return date2String(date, "yyyyMMddHHmmss"); + } + public static final String date2String(Date date, String format) { + if (date == null) { + return ""; + } + DateFormat df = new SimpleDateFormat(format); + return df.format(date); + } + + public static void main(String[] args) { + String num1 ="notification:80836000050009012605202331599222"; + System.out.println("==="+num1.substring(13)); + String num2 ="MA25CNM38260520233149738745"; + System.out.println("==="+num2.substring(0, 9)); + } } diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcInspectionServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcInspectionServiceImpl.java index a86154c1..4f2df1da 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcInspectionServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcInspectionServiceImpl.java @@ -255,7 +255,7 @@ public class XhpcInspectionServiceImpl implements IXhpcInspectionService { offline++; }else if("故障".equals(cacheMap.get("status").toString())){ fault++; - }else if("空闲".equals(cacheMap.get("status").toString())){ + }else if("空闲".equals(cacheMap.get("status").toString()) || "插枪".equals(cacheMap.get("status").toString())){ normal++; }else{ normal++; @@ -281,7 +281,6 @@ public class XhpcInspectionServiceImpl implements IXhpcInspectionService { Map todayOrderMap = xhpcInspectionMapper.getChargingStationOrder(today,1,logOperatorId,tenantId,stationId); objectMap.putAll(todayOrderMap); }else{ - System.out.println("======3333================"); String today = DateUtil.today(); Map todayOrderMap = xhpcInspectionMapper.getChargingStationOrder(today,2,logOperatorId,tenantId,stationId); objectMap.putAll(todayOrderMap); @@ -374,7 +373,7 @@ public class XhpcInspectionServiceImpl implements IXhpcInspectionService { if(!cacheMap.isEmpty()){ if ("离线".equals(cacheMap.get("status").toString())){ }else if("故障".equals(cacheMap.get("status").toString())){ - }else if("空闲".equals(cacheMap.get("status").toString())){ + }else if("空闲".equals(cacheMap.get("status").toString()) || "插枪".equals(cacheMap.get("status").toString())){ normal++; }else{ normal++; @@ -436,7 +435,7 @@ public class XhpcInspectionServiceImpl implements IXhpcInspectionService { if(!cacheMap.isEmpty()){ if ("离线".equals(cacheMap.get("status").toString())){ }else if("故障".equals(cacheMap.get("status").toString())){ - }else if("空闲".equals(cacheMap.get("status").toString())){ + }else if("空闲".equals(cacheMap.get("status").toString()) || "插枪".equals(cacheMap.get("status").toString())){ normal++; }else{ normal++; @@ -499,7 +498,7 @@ public class XhpcInspectionServiceImpl implements IXhpcInspectionService { if(!cacheMap.isEmpty()){ if ("离线".equals(cacheMap.get("status").toString())){ }else if("故障".equals(cacheMap.get("status").toString())){ - }else if("空闲".equals(cacheMap.get("status").toString())){ + }else if("空闲".equals(cacheMap.get("status").toString()) || "插枪".equals(cacheMap.get("status").toString())){ normal++; }else{ normal++; @@ -520,6 +519,56 @@ public class XhpcInspectionServiceImpl implements IXhpcInspectionService { return map1; } + @Override + public List> getStationInspectionList(HttpServletRequest request, String startTime, String endTime) { + + LoginUser loginUser = tokenService.getLoginUser(request); + + String tenantId = loginUser.getTenantId(); + Long logUserId = SecurityUtils.getUserId(); + SysUser sysUser = loginUser.getSysUser(); + List> mapList =new ArrayList<>(); + if(tenantId !=null && !"".equals(tenantId)){ + if(sysUser.getUserId() !=UserTypeUtil.USER_ID){ + Long logOperatorId = sysUser.getOperatorId(); + if ("01".equals(sysUser.getUserType())) { + mapList= xhpcInspectionMapper.getStationInspectionList(1,logOperatorId,tenantId,startTime,endTime); + }else{ + mapList= xhpcInspectionMapper.getStationInspectionList(2,logUserId,tenantId,startTime,endTime); + } + }else{ + mapList= xhpcInspectionMapper.getStationInspectionList(0,null,tenantId,startTime,endTime); + } + } + return mapList; + } + + @Override + public List> getStationInspectionDateList(Long stationId, String time) { + String today = DateUtil.today(); + List> list =new ArrayList<>(); + if(time==null || "".equals(time)){ + list = xhpcInspectionMapper.getStationInspectionDateList(stationId, today); + }else{ + list = xhpcInspectionMapper.getStationInspectionDateList(stationId, time); + } + return list; + } + + @Override + public Map getStationInspectionMoonList(Long stationId, String time) { + String today = DateUtil.today(); + List> list =xhpcInspectionMapper.getStationInspectionDateList(stationId, today); + Map mapList =new HashMap<>(); + for (int i = 0; i map = list.get(i); + String name = map.get("name").toString(); + List> stationInspectionMoonList = xhpcInspectionMapper.getStationInspectionMoonList(stationId, time, name); + mapList.put(name,stationInspectionMoonList); + } + return mapList; + } + BigDecimal toBigDecimal(Object obj) { if (obj == null) return BigDecimal.ZERO; String str = obj.toString().trim(); diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcPlaceholderOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcPlaceholderOrderServiceImpl.java index 94f7411d..501a884e 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcPlaceholderOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcPlaceholderOrderServiceImpl.java @@ -105,6 +105,7 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp // if(result==0){ // endTime = startTime; // } + } String start = DateUtil.formatTime(startTime); String end = DateUtil.formatTime(endTime); @@ -349,15 +350,19 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp xhpcPlaceholderOrder.setType(1); REDIS.setCacheMap(gunNumber, cacheGun); - if(xhpcPlaceholderOrder.getSource() !=1){ + if(xhpcPlaceholderOrder.getSource() !=UserTypeUtil.INTERNET_TYPE){ Long userId = xhpcPlaceholderOrder.getUserId(); Integer source = xhpcPlaceholderOrder.getSource(); String tenantId = xhpcPlaceholderOrder.getTenantId(); - if(0 == xhpcPlaceholderOrder.getSource()){ + if(UserTypeUtil.USER_TYPE == xhpcPlaceholderOrder.getSource()){ xhpcPlaceholderOrder.setChargingMode("C端用户"); - }else if(2 == xhpcPlaceholderOrder.getSource()){ + }else if(UserTypeUtil.COMMUNIT_TYPE == xhpcPlaceholderOrder.getSource()){ xhpcPlaceholderOrder.setChargingMode("社区用户"); + }else if(UserTypeUtil.MOTORCADE_TYPE == xhpcPlaceholderOrder.getSource()){ + xhpcPlaceholderOrder.setChargingMode("车队用户"); + }else if(UserTypeUtil.MOTORCADE_USER_TYPE == xhpcPlaceholderOrder.getSource()){ + xhpcPlaceholderOrder.setChargingMode("车队用户"); }else{ xhpcPlaceholderOrder.setChargingMode("B端用户"); } @@ -709,14 +714,18 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp REDIS.setCacheMap(orderKey, cacheOrder); xhpcPlaceholderOrder.setType(1); - if(xhpcPlaceholderOrder.getSource() !=1){ + if(xhpcPlaceholderOrder.getSource() !=UserTypeUtil.INTERNET_TYPE){ Long userId = xhpcPlaceholderOrder.getUserId(); Integer source = xhpcPlaceholderOrder.getSource(); String tenantId = xhpcPlaceholderOrder.getTenantId(); - if(0 == xhpcPlaceholderOrder.getSource()){ + if(UserTypeUtil.USER_TYPE == xhpcPlaceholderOrder.getSource()){ xhpcPlaceholderOrder.setChargingMode("C端用户"); - }else if(2 == xhpcPlaceholderOrder.getSource()){ + }else if(UserTypeUtil.COMMUNIT_TYPE == xhpcPlaceholderOrder.getSource()){ + xhpcPlaceholderOrder.setChargingMode("社区用户"); + }else if(UserTypeUtil.COMMUNIT_TYPE == xhpcPlaceholderOrder.getSource()){ + xhpcPlaceholderOrder.setChargingMode("社区用户"); + }else if(UserTypeUtil.COMMUNIT_TYPE == xhpcPlaceholderOrder.getSource()){ xhpcPlaceholderOrder.setChargingMode("社区用户"); }else{ xhpcPlaceholderOrder.setChargingMode("B端用户"); @@ -792,7 +801,7 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp } @Override - public List> getListPage(String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type, String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult) { + public List> getListPage(String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type, String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult, Double totalMoneyMin, Double totalMoneyMax,String placeholderOrderNumber) { Integer number = 0; //电话和用户类型都不为null number =3 //电话不为null,用户类型为null number =1 @@ -816,18 +825,18 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp if (UserTypeUtil.SYS_SUPER_TYPE_ONE.equals(loginUser.getSuperType())) { tenantId = loginUser.getTenantId(); Long logOperatorId = sysUser.getOperatorId(); - list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0); + list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0, totalMoneyMin, totalMoneyMax,placeholderOrderNumber); } if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())) { Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0); + list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0, totalMoneyMin, totalMoneyMax,placeholderOrderNumber); } else { - list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 2, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logUserId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0); + list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 2, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logUserId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0, totalMoneyMin, totalMoneyMax,placeholderOrderNumber); } } else { startPage(); - list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logUserId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0); + list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logUserId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0, totalMoneyMin, totalMoneyMax,placeholderOrderNumber); } return list; @@ -872,7 +881,7 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp } @Override - public void export(HttpServletResponse response, String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type, String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult) throws IOException { + public void export(HttpServletResponse response, String tenantId, Long chargingStationId, Long chargingPileId, Long terminalId, String phone, String transactionNumber, Integer status, String chargingStationName, Long operatorId, Integer source, String beginStartTime, String beginEndTime, Long userId, Integer type, String affiliationOrganization, String evcsOrderNo, String plateNum, Integer internetId, String internetSerialNumber, String terminalName, String vinCode, String overStartTime, String overEndTime, Long personnelId, Integer confirmResult, Double totalMoneyMin, Double totalMoneyMax,String placeholderOrderNumber) throws IOException { Integer number = 0; //电话和用户类型都不为null number =3 @@ -896,17 +905,17 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp if (UserTypeUtil.SYS_SUPER_TYPE_ONE.equals(loginUser.getSuperType())) { tenantId = loginUser.getTenantId(); Long logOperatorId = sysUser.getOperatorId(); - list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0); + list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0, totalMoneyMin, totalMoneyMax,placeholderOrderNumber); } if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())) { Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0); + list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 1, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logOperatorId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0, totalMoneyMin, totalMoneyMax,placeholderOrderNumber); } else { - list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 2, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logUserId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0); + list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 2, chargingStationName, operatorId, source, beginStartTime, beginEndTime, logUserId, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0, totalMoneyMin, totalMoneyMax,placeholderOrderNumber); } } else { - list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, null, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0); + list = xhpcPlaceholderOrderMapper.getListPage(chargingStationId, chargingPileId, terminalId, phone, transactionNumber, 0, chargingStationName, operatorId, source, beginStartTime, beginEndTime, null, type, number, affiliationOrganization, evcsOrderNo, plateNum, internetId, internetSerialNumber, terminalName, vinCode, overStartTime, overEndTime, personnelId, confirmResult, tenantId, 0, totalMoneyMin, totalMoneyMax,placeholderOrderNumber); } // 通过工具类创建writer,默认创建xls格式 @@ -1214,11 +1223,10 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp //查询type=3的数据 List> mapList = xhpcPlaceholderOrderMapper.getType(); for (int i = 0; i < mapList.size(); i++) { - Map map = mapList.get(i); - int source = Integer.parseInt(map.get("source").toString()); - String serialNumber = map.get("serialNumber").toString(); - Long placeholderOrderId = Long.parseLong(map.get("placeholderOrderId").toString()); - if(source==0){ + try{ + Map map = mapList.get(i); + String serialNumber = map.get("serialNumber").toString(); + Long placeholderOrderId = Long.parseLong(map.get("placeholderOrderId").toString()); //查询历史订单是否为0 int count = xhpcPlaceholderOrderMapper.getXhpcHistoryOrderTotalPrice(serialNumber, 2); if(count==0){ @@ -1227,114 +1235,85 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp String startTime = map.get("startTime").toString(); Long historyOrderId =Long.valueOf(map.get("historyOrderId").toString()); Long terminalId =Long.valueOf(map.get("terminalId").toString()); - //查看下一单的时间是否超过30分钟 - int result = xhpcPlaceholderOrderMapper.getXhpcHistoryOrderNextOrderTime(historyOrderId, terminalId, startTime); - if(result==0){ - getExamine(placeholderOrderId,new BigDecimal(0),map.get("startTime").toString(),map.get("startTime").toString()); - }else{ + //查看是否有下一单 + int number = xhpcPlaceholderOrderMapper.getXhpcHistoryOrderNextOrderTimeYu(historyOrderId, terminalId, startTime); + //有下一单返回1 没有下一单返回0 + if(number==0){ //查询最后拔枪的时间 - Map mapTime = xhpcPlaceholderOrderMapper.getXhpcPlaceholderOrderType(serialNumber, serialNumber.substring(0, 16)); - if (mapTime!=null && mapTime.get("createTime") !=null){ - getExamine(placeholderOrderId,new BigDecimal(0),map.get("startTime").toString(),mapTime.get("createTime").toString()); + Map mapTime = xhpcPlaceholderOrderMapper.getXhpcPlaceholderOrderTypeYu(serialNumber, serialNumber.substring(0, 16)); + if (mapTime != null && mapTime.get("createTime") != null) { + System.out.println("==111=========createTime==============="+mapTime.get("createTime").toString()); + getExamine(placeholderOrderId, new BigDecimal(0), map.get("startTime").toString(),mapTime.get("createTime").toString()); } - } - } - }else if(source==1){ - String internetSerialNumber = map.get("internetSerialNumber").toString(); - if("MA25CNM38".equals(internetSerialNumber.substring(0,9))){ - //修改新电途订单 - XhpcPlaceholderOrder xhpcPlaceholderOrder = new XhpcPlaceholderOrder(); - xhpcPlaceholderOrder.setPlaceholderOrderId(placeholderOrderId); - xhpcPlaceholderOrder.setEndTime(DateUtil.parse(map.get("startTime").toString(),"yyyy-MM-dd HH:mm:ss")); - xhpcPlaceholderOrder.setTotalTimeSpan(0); - xhpcPlaceholderOrder.setOvertimePrice(new BigDecimal(0)); - xhpcPlaceholderOrder.setTotalMoney(new BigDecimal(0)); - xhpcPlaceholderOrder.setType(0); - xhpcPlaceholderOrderMapper.updateXhpcPlaceholderOrder(xhpcPlaceholderOrder); - }else{ - int count = xhpcPlaceholderOrderMapper.getXhpcHistoryOrderTotalPrice(serialNumber, 2); - if(count==0){ - getExamine(placeholderOrderId,new BigDecimal(0),map.get("startTime").toString(),map.get("startTime").toString()); }else{ - String startTime = map.get("startTime").toString(); - Long historyOrderId =Long.valueOf(map.get("historyOrderId").toString()); - Long terminalId =Long.valueOf(map.get("terminalId").toString()); //查看下一单的时间是否超过30分钟 int result = xhpcPlaceholderOrderMapper.getXhpcHistoryOrderNextOrderTime(historyOrderId, terminalId, startTime); if(result==0){ getExamine(placeholderOrderId,new BigDecimal(0),map.get("startTime").toString(),map.get("startTime").toString()); - }else { + }else{ //查询最后拔枪的时间 - Map mapTime = xhpcPlaceholderOrderMapper.getXhpcPlaceholderOrderType(serialNumber, serialNumber.substring(0, 16)); - if (mapTime != null && mapTime.get("createTime") != null) { - getExamine(placeholderOrderId, new BigDecimal(0), map.get("startTime").toString(), mapTime.get("createTime").toString()); + System.out.println("===33333========createTime==============="); + //查询出最大一条数据 + Long deviceMessageIdMax = xhpcPlaceholderOrderMapper.getDeviceMessageIdMax(serialNumber, serialNumber.substring(0, 16)); + if (deviceMessageIdMax !=null) { + Map mapTime = xhpcPlaceholderOrderMapper.getXhpcPlaceholderOrderType(serialNumber, serialNumber.substring(0, 16),deviceMessageIdMax); + if (mapTime!=null && mapTime.get("createTime") !=null){ + System.out.println("===222========createTime==============="+mapTime.get("createTime").toString()+"==========serialNumber========"+serialNumber); + getExamine(placeholderOrderId,new BigDecimal(0),map.get("startTime").toString(),mapTime.get("createTime").toString()); + } } + } } } + }catch (Exception e){ + e.printStackTrace(); } } - } + + @Override - public void getAbnormalTime() { - List> mapList = xhpcPlaceholderOrderMapper.getAbnormalTimeList(); - for (int i = 0; i < mapList.size(); i++) { - Map map = mapList.get(i); - BigDecimal totalPrice = new BigDecimal(map.get("totalPrice").toString()); - XhpcPlaceholderOrder xhpcPlaceholderOrder =new XhpcPlaceholderOrder(); - xhpcPlaceholderOrder.setPlaceholderOrderId(Long.parseLong(map.get("placeholderOrderId").toString())); - int source = Integer.parseInt(map.get("source").toString()); - if( source!=1) { - if (0 == source) { - xhpcPlaceholderOrder.setChargingMode("C端用户"); - } else if (2 == source) { - xhpcPlaceholderOrder.setChargingMode("社区用户"); - } else { - xhpcPlaceholderOrder.setChargingMode("B端用户"); - } - } - xhpcPlaceholderOrder.setSerialNumber(map.get("serialNumber").toString()); - xhpcPlaceholderOrder.setTenantId(map.get("tenantId").toString()); - if(map.get("startTime").toString().length()==19){ - xhpcPlaceholderOrder.setStartTime(DateUtil.parse(map.get("startTime").toString().replace("T", " "))); - }else{ - xhpcPlaceholderOrder.setStartTime(DateUtil.parse(map.get("startTime").toString())); - } - if(new BigDecimal(0).compareTo(totalPrice)==0){ - if(map.get("startTime").toString().length()==19){ - xhpcPlaceholderOrder.setEndTime(DateUtil.parse(map.get("startTime").toString().replace("T", " "))); - }else{ - xhpcPlaceholderOrder.setEndTime(DateUtil.parse(map.get("startTime").toString())); - } - xhpcPlaceholderOrder.setTotalTimeSpan(0); - xhpcPlaceholderOrder.setOvertimePrice(new BigDecimal(0)); - xhpcPlaceholderOrder.setTotalMoney(new BigDecimal(0)); - xhpcPlaceholderOrder.setType(1); + public void getOrderNum() { + //当前实时数据的终端有新的订单异常处理 + List abnormalTimeList = xhpcPlaceholderOrderMapper.getAbnormalTimeList(); + + for (int i = 0; i map1 = xhpcPlaceholderOrderMapper.getXhpcDeviceMessage(xhpcPlaceholderOrder.getSerialNumber().substring(0,16), 0, xhpcPlaceholderOrder.getTenantId(),xhpcPlaceholderOrder.getStartTime()); - if(map1 !=null && map1.get("createTime") !=null){ - System.out.println(map1.get("createTime").toString()); - if(map1.get("createTime").toString().length()==19){ - getExamine(xhpcPlaceholderOrder.getPlaceholderOrderId(),null,DateUtil.format(xhpcPlaceholderOrder.getStartTime(),"yyyy-MM-dd HH:mm:ss"),DateUtil.format(DateUtil.parse(map1.get("createTime").toString().replace("T"," "), "yyyy-MM-dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss")); - }else{ - getExamine(xhpcPlaceholderOrder.getPlaceholderOrderId(),null,DateUtil.format(xhpcPlaceholderOrder.getStartTime(),"yyyy-MM-dd HH:mm:ss"),DateUtil.format(DateUtil.parse(map1.get("createTime").toString(), "yyyy-MM-dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss")); + //0离线 1故障 2空闲 3充电 4 已插枪 5未知 + //查询当前桩的状态是否空闲 + String serialNumber = xhpcPlaceholderOrder.getSerialNumber().substring(0, 16); + Map cacheMap =redisService.getCacheMap("gun:"+serialNumber); + boolean fian =false; + if(!cacheMap.isEmpty()){ + if ("离线".equals(cacheMap.get("status").toString())){ + fian =true; + }else if("故障".equals(cacheMap.get("status").toString())){ + fian =true; + }else if("空闲".equals(cacheMap.get("status").toString()) || "插枪".equals(cacheMap.get("status").toString())){ + if("是".equals(cacheMap.get("vehicleGunStatus").toString())){ + + }else{ + fian =true; + } } - }else{ -// if(map.get("startTime").toString().length()==19){ -// xhpcPlaceholderOrder.setEndTime(DateUtil.parse(map.get("startTime").toString().replace("T", " "))); -// }else{ -// xhpcPlaceholderOrder.setEndTime(DateUtil.parse(map.get("startTime").toString())); -// } -// xhpcPlaceholderOrder.setTotalTimeSpan(0); -// xhpcPlaceholderOrder.setOvertimePrice(new BigDecimal(0)); -// xhpcPlaceholderOrder.setTotalMoney(new BigDecimal(0)); - xhpcPlaceholderOrder.setType(3); + } + if(fian){ + xhpcPlaceholderOrder.setType(2); xhpcPlaceholderOrderMapper.updateXhpcPlaceholderOrder(xhpcPlaceholderOrder); } } } + + + + } @Override @@ -1590,7 +1569,7 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp xhpcPlaceholderOrder.setOvertimePrice(new BigDecimal("0.0")); } //xhpcPlaceholderOrder.setTotalMoney(totalMoneyYu); - if(xhpcPlaceholderOrder.getSource() !=1){ + if(xhpcPlaceholderOrder.getSource() !=UserTypeUtil.INTERNET_TYPE){ Long userId = xhpcPlaceholderOrder.getUserId(); Integer source = xhpcPlaceholderOrder.getSource(); String tenantId = xhpcPlaceholderOrder.getTenantId(); @@ -1718,16 +1697,20 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp // 通过工具类创建writer,默认创建xls格式 BigExcelWriter writer = ExcelUtil.getBigWriter("temp_" + System.currentTimeMillis() + ".xlsx"); writer.addHeaderAlias("kudaiDianMoney", "快电总费用"); + writer.addHeaderAlias("kudaiDianRefundMoney", "快电退款费用"); + writer.addHeaderAlias("kudaiDianRechargeMoney", "快电用户已支付费用"); writer.addHeaderAlias("henDaMoney", "恒大总费用"); writer.addHeaderAlias("xinDianTuMoney", "新电途总费用"); writer.addHeaderAlias("refundMoney", "新电途退款费用"); writer.addHeaderAlias("refundMoney", "新电途用户已支付费用"); + writer.addHeaderAlias("yunKuaiChongMoney", "云快充总费用"); + writer.addHeaderAlias("yunKuaiChongRefundMoney", "云快充退款费用"); + writer.addHeaderAlias("yunKuaiChongRechargeMoney", "云快充用户已支付费用"); writer.addHeaderAlias("xiaoJuMoney", "小桔总费用"); writer.addHeaderAlias("cheWeiJiaMoney", "车为家总费用"); - writer.addHeaderAlias("sourceName", "用户类型"); - writer.addHeaderAlias("CDuanMoney", "C端用户"); - writer.addHeaderAlias("sheQuMoney", "社区用户"); - writer.addHeaderAlias("BDuanMoney", "B端用户"); + writer.addHeaderAlias("actPrice", "平台用户总费用"); + writer.addHeaderAlias("appealRechargeMoney", "平台用户退款总费用"); + writer.addHeaderAlias("appealRefundMoney", "平台用户支付总费用"); // 默认的,未添加alias的属性也会写出,如果想只写出加了别名的字段,可以调用此方法排除之 writer.setOnlyAlias(true); // 一次性写出内容,使用默认样式,强制输出标题 @@ -1797,13 +1780,20 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp BigExcelWriter writer = ExcelUtil.getBigWriter("temp_" + System.currentTimeMillis() + ".xlsx"); writer.addHeaderAlias("createTime", "日期"); writer.addHeaderAlias("kudaiDianMoney", "快电总费用"); + writer.addHeaderAlias("kudaiDianRefundMoney", "快电退款费用"); + writer.addHeaderAlias("kudaiDianRechargeMoney", "快电用户已支付费用"); writer.addHeaderAlias("henDaMoney", "恒大总费用"); writer.addHeaderAlias("xinDianTuMoney", "新电途总费用"); writer.addHeaderAlias("refundMoney", "新电途退款费用"); writer.addHeaderAlias("refundMoney", "新电途用户已支付费用"); + writer.addHeaderAlias("ykcMoney", "云快充总费用"); + writer.addHeaderAlias("ykcRefundMoney", "云快充退款费用"); + writer.addHeaderAlias("ykcRechargeMoney", "云快充用户已支付费用"); writer.addHeaderAlias("xiaoJuMoney", "小桔总费用"); writer.addHeaderAlias("cheWeiJiaMoney", "车为家总费用"); - writer.addHeaderAlias("actPrice", "C端用户总费用"); + writer.addHeaderAlias("actPrice", "平台用户总费用"); + writer.addHeaderAlias("appealRechargeMoney", "平台用户退款总费用"); + writer.addHeaderAlias("appealRefundMoney", "平台用户支付总费用"); // 默认的,未添加alias的属性也会写出,如果想只写出加了别名的字段,可以调用此方法排除之 writer.setOnlyAlias(true); // 一次性写出内容,使用默认样式,强制输出标题 @@ -1875,16 +1865,21 @@ public class XhpcPlaceholderOrderServiceImpl extends BaseService implements IXhp writer.addHeaderAlias("chargingStationName", "电站名称"); writer.addHeaderAlias("operatorName", "运营商名称"); writer.addHeaderAlias("kudaiDianMoney", "快电总费用"); + writer.addHeaderAlias("kudaiDianRefundMoney", "快电退款费用"); + writer.addHeaderAlias("kudaiDianRechargeMoney", "快电用户已支付费用"); writer.addHeaderAlias("henDaMoney", "恒大总费用"); writer.addHeaderAlias("xinDianTuMoney", "新电途总费用"); writer.addHeaderAlias("refundMoney", "新电途退款费用"); writer.addHeaderAlias("refundMoney", "新电途用户已支付费用"); + writer.addHeaderAlias("henDaMoney", "恒大总费用"); + writer.addHeaderAlias("ykcMoney", "云快充总费用"); + writer.addHeaderAlias("ykcRefundMoney", "云快充退款费用"); + writer.addHeaderAlias("ykcRechargeMoney", "云快充用户已支付费用"); writer.addHeaderAlias("xiaoJuMoney", "小桔总费用"); writer.addHeaderAlias("cheWeiJiaMoney", "车为家总费用"); - writer.addHeaderAlias("CDuanMoney", "C端用户总用"); - writer.addHeaderAlias("sheQuMoney", "社区总费用"); - writer.addHeaderAlias("BDuanMoney", "B端总费用"); - writer.addHeaderAlias("actPrice", "C端用户总费用"); + writer.addHeaderAlias("actPrice", "平台用户总费用"); + writer.addHeaderAlias("appealRechargeMoney", "平台用户退款总费用"); + writer.addHeaderAlias("appealRefundMoney", "平台用户支付总费用"); // 默认的,未添加alias的属性也会写出,如果想只写出加了别名的字段,可以调用此方法排除之 writer.setOnlyAlias(true); // 一次性写出内容,使用默认样式,强制输出标题 diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java index 82cc993f..6441f7c9 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcRealTimeOrderServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.xhpc.common.api.*; +import com.xhpc.common.core.constant.StatusConstants; import com.xhpc.common.core.domain.R; import com.xhpc.common.core.utils.HttpUtils; import com.xhpc.common.core.web.domain.AjaxResult; @@ -120,10 +121,18 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe Long logUserId = loginUser.getUserid(); if(!UserTypeUtil.SYS_USER_TYPE_ADMIN.equals(sysUser.getUserId())) { startPage(); - if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ + if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 list = xhpcRealTimeOrderMapper.list(chargingStationId,chargingPileId,terminalId,phone,transactionNumber,source,chargingStationName,terminalName,operatorId,startTime,endTime,number,status,logOperatorId,1,affiliationOrganization,plateNum,internetId,internetSerialNumber,tenantId); + }else if(UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //流量方 + list = xhpcRealTimeOrderMapper.list(chargingStationId,chargingPileId,terminalId,phone,transactionNumber,source,chargingStationName,terminalName,operatorId,startTime,endTime,number,status,logOperatorId,3,affiliationOrganization,plateNum,internetId,internetSerialNumber,tenantId); + }else if(UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //车队 + list = xhpcRealTimeOrderMapper.list(chargingStationId,chargingPileId,terminalId,phone,transactionNumber,source,chargingStationName,terminalName,operatorId,startTime,endTime,number,status,logOperatorId,4,affiliationOrganization,plateNum,internetId,internetSerialNumber,tenantId); }else{ //查询赋值的场站 list = xhpcRealTimeOrderMapper.list(chargingStationId,chargingPileId,terminalId,phone,transactionNumber,source,chargingStationName,terminalName,operatorId,startTime,endTime,number,status,logUserId,2,affiliationOrganization,plateNum,internetId,internetSerialNumber,tenantId); @@ -298,15 +307,20 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe return message; } //获取开始充电时间、结束时间、计费模型、充电度数、已充金额 - if(chargeOrder.getRateModelId()==null || "".equals(chargeOrder.getRateModelId().toString())){ Map xhpcChargingStationMap = xhpcRealTimeOrderMapper.getXhpcChargingStationById(chargeOrder.getChargingStationId()); chargeOrder.setRateModelId(Long.valueOf(xhpcChargingStationMap.get("rateModelId").toString())); } //获取该订单最后一条实时数据 - - Long rateModelId = chargeOrder.getRateModelId(); + Boolean judgment =true; if(cacheMap !=null && cacheMap.get("orderData") !=null){ + CacheOrderData cacheOrderData = (CacheOrderData)cacheMap.get("orderData"); + if(cacheOrderData.getT1PowerQuantity()==null || cacheOrderData.getT2PowerQuantity()==null|| cacheOrderData.getT3PowerQuantity()==null|| cacheOrderData.getT4PowerQuantity()==null){ + judgment =false; + } + } + Long rateModelId = chargeOrder.getRateModelId(); + if(cacheMap !=null && cacheMap.get("orderData") !=null && judgment){ CacheOrderData cacheOrderData = (CacheOrderData)cacheMap.get("orderData"); BigDecimal bigDecimal = new BigDecimal(10000); BigDecimal money = new BigDecimal(cacheOrderData.getCost()).divide(bigDecimal,2,BigDecimal.ROUND_HALF_UP); @@ -485,8 +499,8 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe //算服务费和电费 if(amountCharged.compareTo(powerPriceTotal)>-1){ BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal); - message.put("powerPriceTotal",powerPriceTotal); - message.put("servicePriceTotal",servicePriceTotal); + message.put("powerPriceTotal",powerPriceTotal.setScale(2,BigDecimal.ROUND_HALF_UP)); + message.put("servicePriceTotal",servicePriceTotal.setScale(2,BigDecimal.ROUND_HALF_UP)); }else{ message.put("powerPriceTotal",amountCharged); message.put("servicePriceTotal",0); @@ -529,7 +543,332 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe } + @Transactional + @Override + public AjaxResult getExamineMessageYu(Long realTimeOrderId,Long chargeOrderId) { + if(realTimeOrderId==null){ + Map message = xhpcRealTimeOrderMapper.getMessageChargeOrderId(chargeOrderId); + if(message.get("createTime") !=null && message.get("startTime")==null && message.get("endTime")==null){ + message.put("startTime",message.get("createTime").toString()); + DateTime parse = DateUtil.parse(message.get("createTime").toString(), "yyyy-MM-dd HH:mm:ss"); + DateTime dateTime = DateUtil.offset(parse, DateField.MILLISECOND,10000); + message.put("endTime",DateUtil.format(dateTime, "yyyy-MM-dd HH:mm:ss")); + } + message.put("powerPriceTotal",0); + message.put("servicePriceTotal",0); + message.put("chargingDegree",0); + return AjaxResult.success(message); + } + //基本信息 + Map message = xhpcRealTimeOrderMapper.getMessage(realTimeOrderId); + try{ + XhpcChargeOrder chargeOrder = xhpcChargeOrderService.getChargingOrderId(Long.parseLong(message.get("chargeOrderId").toString())); + Map cacheMap = redisService.getCacheMap("order:" + chargeOrder.getSerialNumber()); + if (cacheMap !=null && cacheMap.get("startTime")!=null && cacheMap.get("lastOrderTime")!=null) { + String startTime = cacheMap.get("startTime").toString(); + String lastOrderTime = cacheMap.get("lastOrderTime").toString(); + chargeOrder.setStartTime(DateUtil.parse(startTime)); + chargeOrder.setEndTime(DateUtil.parse(lastOrderTime)); + message.put("startTime",startTime); + message.put("endTime",lastOrderTime); + + if(cacheMap.get("endSoc")==null){ + message.put("endSoc",message.get("soc").toString()); + } + if(cacheMap.get("startSoc")!=null){ + message.put("startSoc",cacheMap.get("startSoc").toString()); + } + + if (cacheMap.get("totalPower")!=null && cacheMap.get("totalMoney")!=null) { + String totalPower = cacheMap.get("totalPower").toString(); + //String totalPowerSub = totalPower.substring(0, totalPower.length() - 1); + String totalMoney = cacheMap.get("totalMoney").toString(); + //String totalMoneySub = totalMoney.substring(0, totalMoney.length() - 1); + chargeOrder.setChargingDegree(new BigDecimal(totalPower)); + chargeOrder.setAmountCharged(new BigDecimal(totalMoney)); + message.put("chargingDegree",new BigDecimal(totalPower)); + } + } + if(message.get("chargeOrderId") == null){ + message.put("powerPriceTotal",0); + message.put("servicePriceTotal",0); + return AjaxResult.success(message); + } + //获取开始充电时间、结束时间、计费模型、充电度数、已充金额 + if(chargeOrder.getRateModelId()==null || "".equals(chargeOrder.getRateModelId().toString())){ + Map xhpcChargingStationMap = xhpcRealTimeOrderMapper.getXhpcChargingStationById(chargeOrder.getChargingStationId()); + chargeOrder.setRateModelId(Long.valueOf(xhpcChargingStationMap.get("rateModelId").toString())); + } + //获取该订单最后一条实时数据 + Boolean judgment =true; + if(cacheMap !=null && cacheMap.get("orderData") !=null){ + CacheOrderData cacheOrderData = (CacheOrderData)cacheMap.get("orderData"); + if(cacheOrderData.getT1PowerQuantity()==null || cacheOrderData.getT2PowerQuantity()==null|| cacheOrderData.getT3PowerQuantity()==null|| cacheOrderData.getT4PowerQuantity()==null){ + judgment =false; + } + } + Long rateModelId = chargeOrder.getRateModelId(); + if(cacheMap !=null && cacheMap.get("orderData") !=null && judgment){ + CacheOrderData cacheOrderData = (CacheOrderData)cacheMap.get("orderData"); + BigDecimal bigDecimal = new BigDecimal(10000); + BigDecimal money = new BigDecimal(cacheOrderData.getCost()).divide(bigDecimal,2,BigDecimal.ROUND_HALF_UP); + //00: 尖费率 01: 峰费率 02: 平费率 03: 谷费率 + BigDecimal t1powerFee =new BigDecimal(0); + BigDecimal t2powerFee =new BigDecimal(0); + BigDecimal t3powerFee =new BigDecimal(0); + BigDecimal t4powerFee =new BigDecimal(0); + BigDecimal t1serviceFee =new BigDecimal(0); + BigDecimal t2serviceFee =new BigDecimal(0); + BigDecimal t3serviceFee =new BigDecimal(0); + BigDecimal t4serviceFee =new BigDecimal(0); + //费率计费模型 + List rateModelList = xhpcChargeOrderService.getRateModelId(rateModelId); + for (XhpcRate xhpcRate:rateModelList) { + + if(UserTypeUtil.MOTORCADE_TYPE==chargeOrder.getSource() ||UserTypeUtil.MOTORCADE_USER_TYPE==chargeOrder.getSource()){ + if(chargeOrder.getMark()==null){ + chargeOrder.setStatus(2); + chargeOrder.setUpdateTime(new Date()); + chargeOrder.setErroRemark("车队结算时,车队标识不存在"); + xhpcChargeOrderService.updateXhpcChargeOrder(chargeOrder); + return AjaxResult.error("无效订单"); + } + + R motorcadeMap = userTypeService.getOrderMotorcade(chargeOrder.getMark()); + if(motorcadeMap !=null && motorcadeMap.getData() !=null ){ + Map motorcadeMessage = (Map)motorcadeMap.getData(); + if (motorcadeMessage == null) { + return AjaxResult.error("查询车队用户信息失败"); + } + + if("00".equals(xhpcRate.getRateValue())){ + t1powerFee = new BigDecimal(String.valueOf(motorcadeMessage.get("peakSharpElectricity"))); + t1serviceFee =new BigDecimal(String.valueOf(motorcadeMessage.get("peakSharpService"))); + } + if("01".equals(xhpcRate.getRateValue())){ + t2powerFee = new BigDecimal(String.valueOf(motorcadeMessage.get("peakElectricity"))); + t2serviceFee =new BigDecimal(String.valueOf(motorcadeMessage.get("peakService"))); + } + if("02".equals(xhpcRate.getRateValue())){ + t3powerFee = new BigDecimal(String.valueOf(motorcadeMessage.get("flatElectricity"))); + t3serviceFee = new BigDecimal(String.valueOf(motorcadeMessage.get("flatService"))); + } + if("03".equals(xhpcRate.getRateValue())){ + t4powerFee =new BigDecimal(String.valueOf(motorcadeMessage.get("valleyElectricity"))); + t4serviceFee =new BigDecimal(String.valueOf(motorcadeMessage.get("valleyService"))); + } + }else{ + return AjaxResult.error("查询车队用户信息失败"); + } + + }else{ + if("00".equals(xhpcRate.getRateValue())){ + t1powerFee = xhpcRate.getPowerFee(); + t1serviceFee =xhpcRate.getServiceFee(); + } + if("01".equals(xhpcRate.getRateValue())){ + t2powerFee = xhpcRate.getPowerFee(); + t2serviceFee =xhpcRate.getServiceFee(); + } + if("02".equals(xhpcRate.getRateValue())){ + t3powerFee = xhpcRate.getPowerFee(); + t3serviceFee = xhpcRate.getServiceFee(); + } + if("03".equals(xhpcRate.getRateValue())){ + t4powerFee = xhpcRate.getPowerFee(); + t4serviceFee =xhpcRate.getServiceFee(); + } + } + } + BigDecimal powerPrice =new BigDecimal(0); + BigDecimal servicePrice =new BigDecimal(0); + //因桩有误差,电费和服务费重新计算 + if(!"0".equals(cacheOrderData.getT1PowerQuantity().toString())){ + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(t1powerFee).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(t1serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP); + powerPrice=powerPrice.add(multiply1); + servicePrice=servicePrice.add(multiply2); + } + if(!"0".equals(cacheOrderData.getT2PowerQuantity().toString())){ + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(t2powerFee).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(t2serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP); + powerPrice=powerPrice.add(multiply1); + servicePrice=servicePrice.add(multiply2); + } + if(!"0".equals(cacheOrderData.getT3PowerQuantity().toString())){ + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(t3powerFee).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(t3serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP); + powerPrice=powerPrice.add(multiply1); + servicePrice=servicePrice.add(multiply2); + } + if(!"0".equals(cacheOrderData.getT4PowerQuantity().toString())){ + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(t4powerFee).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(t4serviceFee).setScale(2, BigDecimal.ROUND_HALF_UP); + powerPrice=powerPrice.add(multiply1); + servicePrice=servicePrice.add(multiply2); + } + powerPrice =powerPrice.setScale(2,BigDecimal.ROUND_HALF_UP); + //总服务费 + servicePrice =servicePrice.setScale(2,BigDecimal.ROUND_HALF_UP); + message.put("powerPriceTotal",powerPrice); + message.put("servicePriceTotal",servicePrice); + chargeOrder.setStartTime(DateUtil.parse(cacheOrderData.getStartTime())); + chargeOrder.setEndTime(DateUtil.parse(cacheOrderData.getEndTime())); + if(cacheOrderData.getStartSoc() !=null){ + chargeOrder.setStartSoc(cacheOrderData.getStartSoc()+""); + } + if(cacheOrderData.getEndTime() !=null){ + chargeOrder.setEndSoc(cacheOrderData.getEndSoc()+""); + } + if(cacheOrderData.getTotalPowerQuantity() !=null){ + BigDecimal chargingDegree1 = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(bigDecimal,2,BigDecimal.ROUND_HALF_UP); + chargeOrder.setChargingDegree(chargingDegree1); + } + chargeOrder.setAmountCharged(money); + }else{ + if (cacheMap.get("startTime")!=null && cacheMap.get("lastOrderTime")!=null) { + chargeOrder.setStartTime(DateUtil.parse(cacheMap.get("startTime").toString())); + chargeOrder.setEndTime(DateUtil.parse(cacheMap.get("lastOrderTime").toString())); + if (cacheMap.get("totalPower")!=null && cacheMap.get("totalMoney")!=null) { + String totalPower = cacheMap.get("totalPower").toString(); + //String totalPowerSub = totalPower.substring(0, totalPower.length() - 1); + String totalMoney = cacheMap.get("totalMoney").toString(); + chargeOrder.setChargingDegree(new BigDecimal(totalPower)); + chargeOrder.setAmountCharged(new BigDecimal(totalMoney)); + } + }else{ + //没有获取到时间 1.获取缓存数据 2.缓存没有获取数据库数据 + List list = (List) cacheMap.get("realtimeDataList"); + + CacheRealtimeData startData =new CacheRealtimeData(); + CacheRealtimeData endData =new CacheRealtimeData(); + + if (list != null && list.size() > 0) { + endData =list.get(list.size()-1); + for (int i = 0; i 0){ + break; + } + } + } + if(endData !=null && endData.getAmountCharged() !=null && startData.getChargingTime()>0){ + //最后一祯时间 + Date endTime = DateUtil.parse(endData.getCreateTime()); + Date startTime =DateUtil.parse(startData.getCreateTime()); + //充电时长 + BigDecimal chargingDegree = new BigDecimal(endData.getChargingDegree()).divide(new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP); + chargeOrder.setStartTime(startTime); + chargeOrder.setEndTime(endTime); + chargeOrder.setStartSoc(startData.getSoc().toString()); + chargeOrder.setEndSoc(endData.getSoc().toString()); + chargeOrder.setChargingDegree(chargingDegree); + chargeOrder.setAmountCharged(new BigDecimal(endData.getAmountCharged()).divide(new BigDecimal(10000),2,BigDecimal.ROUND_HALF_UP)); + }else{ + //当没有缓存数据时,查询数据库 + XhpcRealTimeOrder startRealTimeOrder = xhpcRealTimeOrderMapper.getChargingOrderId(chargeOrder.getChargeOrderId(), 1); + if(startRealTimeOrder ==null){ + message.put("powerPriceTotal",0); + message.put("servicePriceTotal",0); + return AjaxResult.success(message); + } + XhpcRealTimeOrder endRealTimeOrder = xhpcRealTimeOrderMapper.getChargingOrderId(chargeOrder.getChargeOrderId(), 2); + //最后一祯时间 + Date endTime = endRealTimeOrder.getCreateTime(); + Date startTime = startRealTimeOrder.getCreateTime(); + BigDecimal chargingDegree = endRealTimeOrder.getChargingDegree(); + chargeOrder.setChargingTime(endRealTimeOrder.getChargingTime()); + if(startRealTimeOrder.getRealTimeOrderId().equals(startRealTimeOrder.getRealTimeOrderId())){ + message.put("powerPriceTotal",0); + message.put("servicePriceTotal",0); + return AjaxResult.success(message); + } + chargeOrder.setStartTime(startTime); + chargeOrder.setEndTime(endTime); + chargeOrder.setStartSoc(startRealTimeOrder.getSoc()); + chargeOrder.setEndSoc(endRealTimeOrder.getSoc()); + Integer chargingTimeNumber = endRealTimeOrder.getChargingTimeNumber(); + if(chargingTimeNumber>0){ + chargeOrder.setChargingTimeNumber(Long.valueOf(chargingTimeNumber*60)); + }else{ + chargeOrder.setChargingTimeNumber(0L); + } + chargeOrder.setChargingDegree(chargingDegree); + + chargeOrder.setAmountCharged(endRealTimeOrder.getAmountCharged()); + } + } + Date startTime2 = chargeOrder.getStartTime(); + Date updateTime2 = chargeOrder.getEndTime(); + BigDecimal amountCharged = chargeOrder.getAmountCharged(); + //充电度数 + BigDecimal chargingDegree = chargeOrder.getChargingDegree(); + BigDecimal powerPriceTotal =new BigDecimal(0); + //1时间没有跨天 + DateTime parse = DateUtil.parse(DateUtil.format(startTime2, "yyyy-MM-dd"), "yyyy-MM-dd"); + DateTime parse1 = DateUtil.parse(DateUtil.format(updateTime2, "yyyy-MM-dd"), "yyyy-MM-dd"); + //每分钟多少度电 + BigDecimal decimal = new BigDecimal((updateTime2.getTime() - startTime2.getTime())).divide(new BigDecimal(60000),4,BigDecimal.ROUND_HALF_UP); + BigDecimal divide = chargingDegree.divide(decimal,4,BigDecimal.ROUND_HALF_UP); + long betweenDay = DateUtil.between(parse,parse1, DateUnit.DAY); + if(betweenDay==0){ + powerPriceTotal = getBigDecimal(rateModelId,DateUtil.formatTime(startTime2), DateUtil.formatTime(updateTime2), powerPriceTotal, divide); + }else{ + //跨天 + powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime2), "23:59:59", powerPriceTotal, divide); + System.out.println(">>>>>>跨天前>>>>>>>"+powerPriceTotal); + //明天 + DateTime tomorrow = DateUtil.offsetDay(startTime2,1); + Date startTime3 = DateUtil.beginOfDay(tomorrow); + powerPriceTotal = getBigDecimal(rateModelId, DateUtil.formatTime(startTime3), DateUtil.formatTime(updateTime2), powerPriceTotal, divide); + System.out.println(">>>>>>跨天后>>>>>>>"+powerPriceTotal); + } + //算服务费和电费 + if(amountCharged.compareTo(powerPriceTotal)>-1){ + BigDecimal servicePriceTotal =amountCharged.subtract(powerPriceTotal); + message.put("powerPriceTotal",powerPriceTotal.setScale(2,BigDecimal.ROUND_HALF_UP)); + message.put("servicePriceTotal",servicePriceTotal.setScale(2,BigDecimal.ROUND_HALF_UP)); + }else{ + message.put("powerPriceTotal",amountCharged); + message.put("servicePriceTotal",0); + } + } + + message.put("chargingDegree",chargeOrder.getChargingDegree()); + Long tiem = (chargeOrder.getEndTime().getTime() - chargeOrder.getStartTime().getTime()) / 1000; + if (tiem > 3600) { + long hours = tiem / 3600; + double mins = (double) ((tiem - (hours * 3600)) / 60); + message.put("chargingTime",hours + "时" + new BigDecimal(mins).setScale(0) + "分"); + chargeOrder.setChargingTime(hours + "时" + new BigDecimal(mins).setScale(0) + "分"); + } else { + double mins = (double) (tiem / 60); + message.put("chargingTime",new BigDecimal(mins).setScale(0) + "分"); + chargeOrder.setChargingTime(new BigDecimal(mins).setScale(0) + "分"); + } + message.put("startSoc",chargeOrder.getStartSoc()); + message.put("endSoc",chargeOrder.getEndSoc()); + + if(cacheMap.get("stopReasonHex") !=null && "".equals(cacheMap.get("stopReasonHex").toString())){ + chargeOrder.setType(cacheMap.get("stopReasonHex").toString()); + }else{ + chargeOrder.setType("90"); + } + message.put("startTime",chargeOrder.getStartTime()); + message.put("endTime",chargeOrder.getEndTime()); + //修改充电订单 + xhpcChargeOrderService.updateXhpcChargeOrder(chargeOrder); + + }catch (Exception e){ + e.printStackTrace(); + logger.info("======================异常订单审核异常======================="); + message.put("powerPriceTotal",0); + message.put("servicePriceTotal",0); + } + return AjaxResult.success(message); + + } @Override @Transactional public AjaxResult getExamine(Long chargingOrderId, BigDecimal powerPrice, BigDecimal servicePrice,BigDecimal chargingDegree,String startTime,String endTime) { @@ -623,7 +962,35 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe } } - if(!UserTypeUtil.INTERNET_TYPE.equals(source)){ + + + if(UserTypeUtil.MOTORCADE_TYPE.equals(source) || UserTypeUtil.MOTORCADE_USER_TYPE.equals(source)){ + R user = userTypeService.getUser(null, userId, source, null, tenantId); + boolean judge = false; + if(user !=null && user.getData() !=null){ + userMessage = (Map)user.getData(); + + if(0==Integer.valueOf(userMessage.get("type").toString())){ + if (userMessage == null || userMessage.get("remainingAmount") == null) { + judge =true; + } + }else{ + if (userMessage == null || userMessage.get("balance") == null) { + judge =true; + } + } + }else{ + judge =true; + } + if(judge){ + //订单异常 + xhpcChargeOrder.setStatus(2); + //异常原因 + xhpcChargeOrder.setErroRemark("".equals(xhpcChargeOrder.getErroRemark())?"用户id:" + userId + "为空":xhpcChargeOrder.getErroRemark()+"用户id:" + userId + "为空"); + xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); + return AjaxResult.error("用户id:" + userId + "为空"); + } + }else if(!UserTypeUtil.INTERNET_TYPE.equals(source)){ R user = userTypeService.getUser(null, userId, source, null, tenantId); boolean judge = false; if(user !=null && user.getData() !=null){ @@ -680,6 +1047,9 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe if("车为家".equals(xhpcChargeOrder.getChargingMode())){ xhpcHistoryOrder.setChargingMode("7"); } + if("云快充".equals(xhpcChargeOrder.getChargingMode())){ + xhpcHistoryOrder.setChargingMode("8"); + } xhpcHistoryOrder.setStartTime(xhpcChargeOrder.getStartTime()); if(xhpcChargeOrder.getEndTime()==null ){ xhpcHistoryOrder.setEndTime(xhpcChargeOrder.getStartTime()); @@ -704,6 +1074,69 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe return AjaxResult.success(); } + + @Override + @Transactional + public AjaxResult getExamineYu() { + List list = xhpcRealTimeOrderMapper.getOrderMassageOrRateTime(); + + for (int i = 0; i >>>>>>>>>>>>>>>>"); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return R.fail(); + }else{ + logger.info("<<<<<<<<<<<<<<<<扣钱成功>>>>>>>>>>用户金额>>>>>>>"+balance1 +">>>>>>>>>>扣款金额>>>>>>>>>>"+actPrice+">>>>>>>>>>>>>剩余金额>>>>>>>>>>>>>>>>"+subtract+">>>>订单号>>>>>>>"+xhpcHistoryOrder.getSerialNumber()); + //添加流水 + xhpcChargeOrderService.addUserAccountStatement(xhpcChargeOrder.getMotorcadeId(), actPrice.negate(), subtract, xhpcChargeOrder.getChargeOrderId(), 3, date,xhpcChargeOrder.getSource()); + map.put("userId",userId); + map.put("amount",subtract); + } + }else if(0==Integer.valueOf(userMessage.get("type").toString())){ + //扣除用户实际消费金额,添加消费记录 剩余的钱 + BigDecimal balance1 =new BigDecimal(userMessage.get("remainingAmount").toString()); + subtract = balance1.subtract(actPrice); + //消费金额 + BigDecimal consumptionAmount =new BigDecimal(userMessage.get("consumptionAmount").toString()).add(actPrice); + + int i = xhpcChargeOrderService.updateeMotorcadeAmount(xhpcChargeOrder.getMotorcadeId(), subtract,consumptionAmount,UserTypeUtil.MOTORCADE_TYPE,xhpcChargeOrder.getTenantId()); + if(i==0){ + //扣钱失败 + logger.info("<<<<<<<<<<<<<<<<扣钱失败>>>>>>>>>>>>>>>>>"); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return R.fail(); + }else{ + logger.info("<<<<<<<<<<<<<<<<扣钱成功>>>>>>>>>>用户金额>>>>>>>"+balance1 +">>>>>>>>>>扣款金额>>>>>>>>>>"+actPrice+">>>>>>>>>>>>>剩余金额>>>>>>>>>>>>>>>>"+subtract+">>>>订单号>>>>>>>"+xhpcHistoryOrder.getSerialNumber()); + //添加流水 + xhpcChargeOrderService.addUserAccountStatement(xhpcChargeOrder.getMotorcadeId(), actPrice.negate(), subtract, xhpcChargeOrder.getChargeOrderId(), 3, date,xhpcChargeOrder.getSource()); + map.put("userId",userId); + map.put("amount",subtract); + } + }else{ + //扣除用户实际消费金额,添加消费记录 剩余的钱 + BigDecimal balance1 =new BigDecimal(userMessage.get("balance").toString()); + subtract = balance1.subtract(actPrice); + logger.info("<<<<<<<<<<<<<<<<原本金额>>>>>>>>balance1>>>>>>>>>"+balance1.toString()); + logger.info("<<<<<<<<<<<<<<<<剩余金额>>>>>>>>subtract>>>>>>>>>"+subtract.toString()); + //消费金额 + BigDecimal consumeMoney =new BigDecimal(userMessage.get("consumeMoney").toString()).add(actPrice); + + int i = xhpcChargeOrderService.updateeMotorcadeAmount(userId, subtract,consumeMoney,5,xhpcChargeOrder.getTenantId()); + if(i==0){ + //扣钱失败 + logger.info("<<<<<<<<<<<<<<<<扣钱失败>>>>>>>>>>>>>>>>>"); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return R.fail(); + }else{ + logger.info("<<<<<<<<<<<<<<<<扣钱成功>>>>>>>>>>用户金额>>>>>>>"+balance1 +">>>>>>>>>>扣款金额>>>>>>>>>>"+actPrice+">>>>>>>>>>>>>剩余金额>>>>>>>>>>>>>>>>"+subtract+">>>>订单号>>>>>>>"+xhpcHistoryOrder.getSerialNumber()); + //添加流水 + xhpcChargeOrderService.addUserAccountStatement(userId, actPrice.negate(), subtract, xhpcChargeOrder.getChargeOrderId(), 3, date,5); + map.put("userId",userId); + map.put("amount",subtract); +// xhpcChargeOrder.setSource(5); +// xhpcHistoryOrder.setSource(5); + } + } + }else if(!UserTypeUtil.INTERNET_TYPE.equals(source)){ //增加流水订单号 if(operatorMessage!=null && operatorMessage.get("operatorId")!=null){ String evcs = EvcsUtil.transferInternetOrderNo(xhpcChargeOrder.getSerialNumber(), operatorMessage.get("operatorId").toString()); @@ -1388,6 +1898,20 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe xhpcHistoryOrder.setVinNormal(new StringBuffer(xhpcHistoryOrder.getVinNormal()).reverse().toString()); } } + xhpcHistoryOrder.setMark(xhpcChargeOrder.getMark()); + + + BigDecimal bigDecimal = xhpcHistoryOrder.getActPowerPrice().add(xhpcHistoryOrder.getActServicePrice()); + xhpcHistoryOrder.setActTotalPrice(bigDecimal); + //该订单是否参与清分0 + if(xhpcChargeOrder.getClearingType().equals(UserTypeUtil.CLEARING_NO)){ + xhpcHistoryOrder.setClearingType(xhpcChargeOrder.getClearingType()); + xhpcHistoryOrder.setClearingPrice(bigDecimal); +// xhpcHistoryOrder.setActServicePrice(new BigDecimal(0)); +// xhpcHistoryOrder.setActPowerPrice(new BigDecimal(0)); + }else{ + xhpcHistoryOrder.setClearingPrice(new BigDecimal(0)); + } xhpcHistoryOrderService.insert(xhpcHistoryOrder); } xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); @@ -1407,7 +1931,7 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe try{ logger.info("<<<<<<<<<<<<<<<<进行入短信发送>>>>>>>>>>>>>>>>>"); - if(!UserTypeUtil.INTERNET_TYPE.equals(source)){ + if(!UserTypeUtil.INTERNET_TYPE.equals(source) && !UserTypeUtil.MOTORCADE_TYPE.equals(source)&& !UserTypeUtil.MOTORCADE_USER_TYPE.equals(source)){ if(userMessage !=null && userMessage.get("phone") != null){ if("1".equals(xhpcChargingPile.get("type").toString())){ if(UserTypeUtil.USER_TYPE.equals(source)){ @@ -1468,7 +1992,7 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe logger.info("<<<<<<<<<<<<<<<<发送短信失败>>>>>>>>>>>>>>>>>"); } addPileEndOrder(xhpcHistoryOrder, xhpcChargeOrder, xhpcChargeOrder.getSerialNumber(),1); - if(!UserTypeUtil.INTERNET_TYPE.equals(source)){ + if(!UserTypeUtil.INTERNET_TYPE.equals(source) && !UserTypeUtil.MOTORCADE_TYPE.equals(source) && !UserTypeUtil.MOTORCADE_USER_TYPE.equals(source)){ try{ //双枪修改逻辑,查询是否是双枪 if(xhpcChargeOrder.getSunchaStatus()!=0){ @@ -1623,19 +2147,26 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe e.printStackTrace(); } //查询该场站是否有占位费 - Map xhpcPlaceholderMap = xhpcRealTimeOrderMapper.getXhpcPlaceholder(xhpcHistoryOrder.getChargingStationId()); + Map xhpcPlaceholderMap; + if(xhpcHistoryOrder.getSource() != UserTypeUtil.INTERNET_TYPE){ + xhpcPlaceholderMap = xhpcRealTimeOrderMapper.getXhpcPlaceholder(xhpcHistoryOrder.getChargingStationId(),null,xhpcHistoryOrder.getSource()+""); + }else{ + xhpcPlaceholderMap = xhpcRealTimeOrderMapper.getXhpcPlaceholder(xhpcHistoryOrder.getChargingStationId(),xhpcHistoryOrder.getUserId()+"",null); + } System.out.println("===============生成占位费订单============================="); - if(xhpcPlaceholderMap !=null && xhpcHistoryOrder.getUserId() !=3){ + if(xhpcPlaceholderMap !=null){ //占位订单生成 XhpcPlaceholderOrder placeholderOrder = new XhpcPlaceholderOrder(); - if(xhpcHistoryOrder.getSource() !=1){ + if(xhpcHistoryOrder.getSource() !=UserTypeUtil.INTERNET_TYPE){ if(0 == xhpcHistoryOrder.getSource()){ placeholderOrder.setChargingMode("C端用户"); }else if(2 == xhpcHistoryOrder.getSource()){ placeholderOrder.setChargingMode("社区用户"); - }else{ + }else if(3 == xhpcHistoryOrder.getSource()){ placeholderOrder.setChargingMode("B端用户"); + }else{ + placeholderOrder.setChargingMode("车队"); } }else{ placeholderOrder.setChargingMode(xhpcHistoryOrder.getChargingMode()); @@ -1648,7 +2179,7 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe placeholderOrder.setUserId(xhpcHistoryOrder.getUserId()); placeholderOrder.setSerialNumber(xhpcHistoryOrder.getSerialNumber()); placeholderOrder.setInternetSerialNumber(xhpcHistoryOrder.getInternetSerialNumber()); - if(xhpcChargeOrder.getSource()==1){ + if(xhpcChargeOrder.getSource()==UserTypeUtil.INTERNET_TYPE){ placeholderOrder.setInternetIdEvcs(xhpcHistoryOrder.getInternetSerialNumber().substring(0,9)); } placeholderOrder.setConfirmResult(-2); @@ -1675,12 +2206,13 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe Map cacheGun =new HashMap<>(); cacheGun.put("previousOrder",xhpcHistoryOrder.getSerialNumber()); REDIS.setCacheMap(gunkey, cacheGun); - if(xhpcHistoryOrder.getTotalPrice().compareTo(new BigDecimal(0))>0){ - //生成历史订单收费明细 - installXhpcHistoryOrderChargeDetails(xhpcHistoryOrder); - } - } + if(xhpcHistoryOrder.getTotalPrice().compareTo(new BigDecimal(0))>0){ + //生成历史订单收费明细 + installXhpcHistoryOrderChargeDetails(xhpcHistoryOrder); + } + String orderKey = xhpcChargeOrder.getMark()+":"+xhpcChargeOrder.getMotorcadeId()+":"+xhpcChargeOrder.getSerialNumber(); + redisService.deleteObject(orderKey); }catch (Exception e){ e.printStackTrace(); logger.info("<<<<<<<<<<<<<<<<运行异常,结算失败,数据回滚>>>>>>>>>>>>>>>>>"+xhpcChargeOrder.getSerialNumber()); @@ -1996,6 +2528,9 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe if("车为家".equals(xhpcChargeOrder.getChargingMode())){ xhpcHistoryOrder.setChargingMode("7"); } + if("运快充".equals(xhpcChargeOrder.getChargingMode())){ + xhpcHistoryOrder.setChargingMode("7"); + } Map pushOrder = redisService.getCacheMap("pushOrder:"+xhpcChargeOrder.getSerialNumber()); if(pushOrder !=null){ if(pushOrder.get("operatorId3rdpty") !=null){ @@ -2356,634 +2891,636 @@ public class XhpcRealTimeOrderServiceImpl extends BaseService implements IXhpcRe Stack chargeDetailsStack =new Stack<>(); Map cacheMap = REDIS.getCacheMap("order:"+ horder.getSerialNumber()); CacheOrderData cacheOrderData = (CacheOrderData)cacheMap.get("orderData"); - BigDecimal bigDecimal = new BigDecimal(10000); - int t1=0; - int t12 =2; - int t13 =3; - BigDecimal bigDecimal1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); - int t2 =0; - int t22 =2; - int t23 =3; - BigDecimal bigDecimal2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); - int t3 =0; - int t32 =2; - int t33 =3; - BigDecimal bigDecimal3 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); - int t4 =0; - int t43 =3; - int t42 =2; - BigDecimal bigDecimal4 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); - - - for (XhpcRateTimeYuDto xpcRateTime:xhpcRateTimes) { - String rateValue = xpcRateTime.getRateValue(); - if("00".equals(rateValue)){ - t1=t1+1; - } else if ("01".equals(rateValue)) { - t2=t2+1; - }else if ("02".equals(rateValue)) { - t3=t3+1; - }else if ("03".equals(rateValue)) { - t4=t4+1; - } - } - BigDecimal decimalYu = new BigDecimal((horder.getEndTime().getTime() - horder.getStartTime().getTime())).divide(new BigDecimal(60000),4,BigDecimal.ROUND_HALF_UP); - BigDecimal divideYu = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(new BigDecimal(10000),4,BigDecimal.ROUND_HALF_UP); - //每分钟多少度电 - BigDecimal quantity =new BigDecimal(0); - if(decimalYu.compareTo(new BigDecimal(0))!=0){ - quantity = decimalYu.divide(divideYu,4,BigDecimal.ROUND_HALF_UP); - } - for (XhpcRateTimeYuDto xpcRateTime:xhpcRateTimes) { - XhpcHistoryOrderChargeDetails chargeDetails = new XhpcHistoryOrderChargeDetails(); - String rateValue = xpcRateTime.getRateValue(); - - String rateStartTime = cn.hutool.core.date.DateUtil.format(xpcRateTime.getStartTime(), "HH:mm:ss"); - - String orderStartTime = cn.hutool.core.date.DateUtil.format(horder.getStartTime(), "yyyy-MM-dd HH:mm:ss"); - - rateStartTime = orderStartTime.substring(0,10)+" "+rateStartTime; - - String rateEndTime = cn.hutool.core.date.DateUtil.format(xpcRateTime.getEndTime(), "HH:mm:ss"); - - String orderEndTime = cn.hutool.core.date.DateUtil.format(horder.getEndTime(), "yyyy-MM-dd HH:mm:ss"); - - rateEndTime = orderStartTime.substring(0,10)+" "+rateEndTime; - - DateTime startTime1 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - - DateTime endTime1 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - - if("00".equals(rateValue)){ - boolean judgeStart =false; - boolean judgeEnd =false; - - if(horder.getStartTime().getTime()-startTime1.getTime()>0){ - chargeDetails.setDetailStartTime(orderStartTime); - judgeStart =true; - }else{ - chargeDetails.setDetailStartTime(rateStartTime); - } - if(horder.getEndTime().getTime()-endTime1.getTime()>0){ - chargeDetails.setDetailEndTime(rateEndTime); - }else{ - chargeDetails.setDetailEndTime(orderEndTime); - judgeEnd =true; - } - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - - if(t1==1){ - BigDecimal divide = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); - - BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(divide.doubleValue()); - chargeDetailsStack.push(chargeDetails); - }else if(t1==2){ - - if(t12==2){ - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - //剩余电量 - bigDecimal1 = bigDecimal1.subtract(multiply); - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - }else{ - BigDecimal multiply1 = bigDecimal1.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = bigDecimal1.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(bigDecimal1.doubleValue()); - chargeDetailsStack.push(chargeDetails); - } - t12 = t12-1; - }else if(t1==3){ - if(t13==3){ - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - //剩余电量 - bigDecimal1 = bigDecimal1.subtract(multiply); - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - }else if(t13==2){ - - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal1 = bigDecimal1.subtract(multiply); - }else{ - BigDecimal multiply1 = bigDecimal1.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = bigDecimal1.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(bigDecimal1.doubleValue()); - chargeDetailsStack.push(chargeDetails); - } - t13 = t13-1; - } - - } else if ("01".equals(rateValue)) { - boolean judgeStart =false; - boolean judgeEnd =false; - - if(horder.getStartTime().getTime()-startTime1.getTime()>0){ - chargeDetails.setDetailStartTime(orderStartTime); - judgeStart =true; - }else{ - chargeDetails.setDetailStartTime(rateStartTime); - } - if(horder.getEndTime().getTime()-endTime1.getTime()>0){ - chargeDetails.setDetailEndTime(rateEndTime); - }else{ - chargeDetails.setDetailEndTime(orderEndTime); - judgeEnd =true; - } - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - - if(t2==1){ - BigDecimal divide = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); - - BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(divide.doubleValue()); - chargeDetailsStack.push(chargeDetails); - }else if(t2==2){ - - if(t22==2){ - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal2 = bigDecimal2.subtract(multiply); - - }else{ - BigDecimal multiply1 = bigDecimal2.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = bigDecimal2.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(bigDecimal2.doubleValue()); - chargeDetailsStack.push(chargeDetails); - } - t22 = t22-1; - }else if(t2==3){ - if(t23==3){ - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal2 = bigDecimal2.subtract(multiply); - }else if(t23==2){ - - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal2 = bigDecimal2.subtract(multiply); - }else{ - BigDecimal multiply1 = bigDecimal2.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = bigDecimal2.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(bigDecimal2.doubleValue()); - chargeDetailsStack.push(chargeDetails); - } - t23 = t23-1; - } - - }else if ("02".equals(rateValue)) { - boolean judgeStart =false; - boolean judgeEnd =false; - - if(horder.getStartTime().getTime()-startTime1.getTime()>0){ - chargeDetails.setDetailStartTime(orderStartTime); - judgeStart =true; - }else{ - chargeDetails.setDetailStartTime(rateStartTime); - } - if(horder.getEndTime().getTime()-endTime1.getTime()>0){ - chargeDetails.setDetailEndTime(rateEndTime); - }else{ - chargeDetails.setDetailEndTime(orderEndTime); - judgeEnd =true; - } - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - - if(t3==1){ - BigDecimal divide = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); - - BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(divide.doubleValue()); - chargeDetailsStack.push(chargeDetails); - }else if(t3==2){ - - if(t32==2){ - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal3 = bigDecimal3.subtract(multiply); - - }else{ - BigDecimal multiply1 = bigDecimal3.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = bigDecimal3.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(bigDecimal3.doubleValue()); - chargeDetailsStack.push(chargeDetails); - } - t32 = t32-1; - }else if(t3==3){ - if(t33==3){ - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal3 = bigDecimal3.subtract(multiply); - }else if(t33==2){ - - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal3 = bigDecimal3.subtract(multiply); - }else{ - BigDecimal multiply1 = bigDecimal3.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = bigDecimal3.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(bigDecimal3.doubleValue()); - chargeDetailsStack.push(chargeDetails); - } - t33 = t33-1; - } - - }else if ("03".equals(rateValue)) { - boolean judgeStart =false; - boolean judgeEnd =false; - - if(horder.getStartTime().getTime()-startTime1.getTime()>0){ - chargeDetails.setDetailStartTime(orderStartTime); - judgeStart =true; - }else{ - chargeDetails.setDetailStartTime(rateStartTime); - } - if(horder.getEndTime().getTime()-endTime1.getTime()>0){ - chargeDetails.setDetailEndTime(rateEndTime); - }else{ - chargeDetails.setDetailEndTime(orderEndTime); - judgeEnd =true; - } - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - - if(t4==1){ - BigDecimal divide = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); - - BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(divide.doubleValue()); - chargeDetailsStack.push(chargeDetails); - }else if(t4==2){ - - if(t42==2){ - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal4 = bigDecimal4.subtract(multiply); - - }else{ - BigDecimal multiply1 = bigDecimal4.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = bigDecimal4.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(bigDecimal4.doubleValue()); - chargeDetailsStack.push(chargeDetails); - } - t42 = t42-1; - }else if(t4==3){ - if(t43==3){ - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal4 = bigDecimal4.subtract(multiply); - }else if(t43==2){ - - if(judgeStart){ - rateStartTime = orderStartTime; - } - if(judgeEnd){ - rateEndTime = orderEndTime; - } - DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); - DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); - long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3,parse2, DateUnit.MINUTE); - //获得电量 - BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); - - - BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(multiply.doubleValue()); - chargeDetailsStack.push(chargeDetails); - - //剩余电量 - bigDecimal4 = bigDecimal4.subtract(multiply); - }else{ - BigDecimal multiply1 = bigDecimal4.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - BigDecimal multiply2 = bigDecimal4.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); - - chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); - chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); - chargeDetails.setDetailElecMoney(multiply1.doubleValue()); - chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); - chargeDetails.setDetailPower(bigDecimal4.doubleValue()); - chargeDetailsStack.push(chargeDetails); - } - t43 = t43-1; + if(cacheOrderData !=null &&cacheOrderData.getT1PowerQuantity()!=null &&cacheOrderData.getT2PowerQuantity()!=null&& cacheOrderData.getT3PowerQuantity()!=null&& cacheOrderData.getT4PowerQuantity()!=null) { + + BigDecimal bigDecimal = new BigDecimal(10000); + int t1 = 0; + int t12 = 2; + int t13 = 3; + BigDecimal bigDecimal1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); + int t2 = 0; + int t22 = 2; + int t23 = 3; + BigDecimal bigDecimal2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); + int t3 = 0; + int t32 = 2; + int t33 = 3; + BigDecimal bigDecimal3 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); + int t4 = 0; + int t43 = 3; + int t42 = 2; + BigDecimal bigDecimal4 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); + + + for (XhpcRateTimeYuDto xpcRateTime : xhpcRateTimes) { + String rateValue = xpcRateTime.getRateValue(); + if ("00".equals(rateValue)) { + t1 = t1 + 1; + } else if ("01".equals(rateValue)) { + t2 = t2 + 1; + } else if ("02".equals(rateValue)) { + t3 = t3 + 1; + } else if ("03".equals(rateValue)) { + t4 = t4 + 1; } } + BigDecimal decimalYu = new BigDecimal((horder.getEndTime().getTime() - horder.getStartTime().getTime())).divide(new BigDecimal(60000), 4, BigDecimal.ROUND_HALF_UP); + BigDecimal divideYu = new BigDecimal(cacheOrderData.getTotalPowerQuantity()).divide(new BigDecimal(10000), 4, BigDecimal.ROUND_HALF_UP); + //每分钟多少度电 + BigDecimal quantity = new BigDecimal(0); + if (decimalYu.compareTo(new BigDecimal(0)) != 0) { + quantity = decimalYu.divide(divideYu, 4, BigDecimal.ROUND_HALF_UP); + } + for (XhpcRateTimeYuDto xpcRateTime : xhpcRateTimes) { + XhpcHistoryOrderChargeDetails chargeDetails = new XhpcHistoryOrderChargeDetails(); + String rateValue = xpcRateTime.getRateValue(); + + String rateStartTime = cn.hutool.core.date.DateUtil.format(xpcRateTime.getStartTime(), "HH:mm:ss"); + + String orderStartTime = cn.hutool.core.date.DateUtil.format(horder.getStartTime(), "yyyy-MM-dd HH:mm:ss"); + + rateStartTime = orderStartTime.substring(0, 10) + " " + rateStartTime; + + String rateEndTime = cn.hutool.core.date.DateUtil.format(xpcRateTime.getEndTime(), "HH:mm:ss"); + + String orderEndTime = cn.hutool.core.date.DateUtil.format(horder.getEndTime(), "yyyy-MM-dd HH:mm:ss"); + + rateEndTime = orderStartTime.substring(0, 10) + " " + rateEndTime; + + DateTime startTime1 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + + DateTime endTime1 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + + if ("00".equals(rateValue)) { + boolean judgeStart = false; + boolean judgeEnd = false; + + if (horder.getStartTime().getTime() - startTime1.getTime() > 0) { + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart = true; + } else { + chargeDetails.setDetailStartTime(rateStartTime); + } + if (horder.getEndTime().getTime() - endTime1.getTime() > 0) { + chargeDetails.setDetailEndTime(rateEndTime); + } else { + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd = true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if (t1 == 1) { + BigDecimal divide = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal); + + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT1PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } else if (t1 == 2) { + + if (t12 == 2) { + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + } else { + BigDecimal multiply1 = bigDecimal1.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal1.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal1.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t12 = t12 - 1; + } else if (t1 == 3) { + if (t13 == 3) { + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } else if (t13 == 2) { + + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal1 = bigDecimal1.subtract(multiply); + } else { + BigDecimal multiply1 = bigDecimal1.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal1.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal1.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t13 = t13 - 1; + } + + } else if ("01".equals(rateValue)) { + boolean judgeStart = false; + boolean judgeEnd = false; + + if (horder.getStartTime().getTime() - startTime1.getTime() > 0) { + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart = true; + } else { + chargeDetails.setDetailStartTime(rateStartTime); + } + if (horder.getEndTime().getTime() - endTime1.getTime() > 0) { + chargeDetails.setDetailEndTime(rateEndTime); + } else { + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd = true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if (t2 == 1) { + BigDecimal divide = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal); + + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT2PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } else if (t2 == 2) { + + if (t22 == 2) { + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + + } else { + BigDecimal multiply1 = bigDecimal2.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal2.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal2.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t22 = t22 - 1; + } else if (t2 == 3) { + if (t23 == 3) { + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + } else if (t23 == 2) { + + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal2 = bigDecimal2.subtract(multiply); + } else { + BigDecimal multiply1 = bigDecimal2.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal2.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal2.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t23 = t23 - 1; + } + + } else if ("02".equals(rateValue)) { + boolean judgeStart = false; + boolean judgeEnd = false; + + if (horder.getStartTime().getTime() - startTime1.getTime() > 0) { + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart = true; + } else { + chargeDetails.setDetailStartTime(rateStartTime); + } + if (horder.getEndTime().getTime() - endTime1.getTime() > 0) { + chargeDetails.setDetailEndTime(rateEndTime); + } else { + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd = true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if (t3 == 1) { + BigDecimal divide = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal); + + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT3PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } else if (t3 == 2) { + + if (t32 == 2) { + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + + } else { + BigDecimal multiply1 = bigDecimal3.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal3.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal3.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t32 = t32 - 1; + } else if (t3 == 3) { + if (t33 == 3) { + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + } else if (t33 == 2) { + + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal3 = bigDecimal3.subtract(multiply); + } else { + BigDecimal multiply1 = bigDecimal3.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal3.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal3.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t33 = t33 - 1; + } + + } else if ("03".equals(rateValue)) { + boolean judgeStart = false; + boolean judgeEnd = false; + + if (horder.getStartTime().getTime() - startTime1.getTime() > 0) { + chargeDetails.setDetailStartTime(orderStartTime); + judgeStart = true; + } else { + chargeDetails.setDetailStartTime(rateStartTime); + } + if (horder.getEndTime().getTime() - endTime1.getTime() > 0) { + chargeDetails.setDetailEndTime(rateEndTime); + } else { + chargeDetails.setDetailEndTime(orderEndTime); + judgeEnd = true; + } + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + + if (t4 == 1) { + BigDecimal divide = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal); + + BigDecimal multiply1 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = new BigDecimal(cacheOrderData.getT4PowerQuantity()).divide(bigDecimal).multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(divide.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } else if (t4 == 2) { + + if (t42 == 2) { + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + + } else { + BigDecimal multiply1 = bigDecimal4.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal4.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal4.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t42 = t42 - 1; + } else if (t4 == 3) { + if (t43 == 3) { + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + } else if (t43 == 2) { + + if (judgeStart) { + rateStartTime = orderStartTime; + } + if (judgeEnd) { + rateEndTime = orderEndTime; + } + DateTime parse2 = cn.hutool.core.date.DateUtil.parse(rateStartTime, "yyyy-MM-dd HH:mm:ss"); + DateTime parse3 = cn.hutool.core.date.DateUtil.parse(rateEndTime, "yyyy-MM-dd HH:mm:ss"); + long betweenDay4 = cn.hutool.core.date.DateUtil.between(parse3, parse2, DateUnit.MINUTE); + //获得电量 + BigDecimal multiply = quantity.multiply(new BigDecimal(betweenDay4)); + + + BigDecimal multiply1 = multiply.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = multiply.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(multiply.doubleValue()); + chargeDetailsStack.push(chargeDetails); + + //剩余电量 + bigDecimal4 = bigDecimal4.subtract(multiply); + } else { + BigDecimal multiply1 = bigDecimal4.multiply(xpcRateTime.getPowerFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal multiply2 = bigDecimal4.multiply(xpcRateTime.getServiceFee()).setScale(2, BigDecimal.ROUND_HALF_UP); + + chargeDetails.setElecPrice(xpcRateTime.getPowerFee().doubleValue()); + chargeDetails.setSevicePrice(xpcRateTime.getServiceFee().doubleValue()); + chargeDetails.setDetailElecMoney(multiply1.doubleValue()); + chargeDetails.setDetailSeviceMoney(multiply2.doubleValue()); + chargeDetails.setDetailPower(bigDecimal4.doubleValue()); + chargeDetailsStack.push(chargeDetails); + } + t43 = t43 - 1; + } + } + } + + //写入数据库 + for (int i = 0; i < chargeDetailsStack.size(); i++) { + + XhpcHistoryOrderChargeDetails xhpcHistoryOrderChargeDetails = chargeDetailsStack.get(i); + xhpcHistoryOrderChargeDetails.setHistoryOrdersId(horder.getHistoryOrderId()); + xhpcHistoryOrderChargeDetails.setStartTime(DateUtil.format(horder.getStartTime(), "yyyy-MM-dd HH:mm:ss")); + xhpcHistoryOrderChargeDetails.setEndTime(DateUtil.format(horder.getEndTime(), "yyyy-MM-dd HH:mm:ss")); + xhpcHistoryOrderChargeDetails.setTotalPower(horder.getTotalPower()); + xhpcHistoryOrderChargeDetails.setTotalElecMoney(horder.getPowerPriceTotal().doubleValue()); + xhpcHistoryOrderChargeDetails.setTotalSeviceMoney(horder.getServicePriceTotal().doubleValue()); + xhpcHistoryOrderChargeDetails.setTotalMoney(horder.getTotalPrice().doubleValue()); + xhpcRealTimeOrderMapper.insertXhpcHistoryOrderChargeDetails(xhpcHistoryOrderChargeDetails); + } } - //写入数据库 - for (int i = 0; i > getDateIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type) { + public List> getDateIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) { List chargingStationIdList =new ArrayList<>(); if(!"".equals(chargingStationIds) && chargingStationIds !=null){ @@ -175,24 +184,32 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati List> list =new ArrayList<>(); if(!UserTypeUtil.SYS_USER_TYPE_ADMIN.equals(sysUser.getUserId())){ startPage(); - if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ + if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId, chargingStationIdList,internetUserId, operatorId, startTime, endTime, 1,logOperatorId,tenantId); + list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId, chargingStationIdList,internetUserId, operatorId, startTime, endTime, 1,logOperatorId,tenantId,beginStartTime,beginEndTime); + }else if(UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //运营商看自己的场站 + list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId, chargingStationIdList,internetUserId, operatorId, startTime, endTime, 3,logOperatorId,tenantId,beginStartTime,beginEndTime); + }else if(UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //运营商看自己的场站 + list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId, chargingStationIdList,internetUserId, operatorId, startTime, endTime, 4,logOperatorId,tenantId,beginStartTime,beginEndTime); }else{ //查询赋值的场站 - list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 2,sysUserId,tenantId); + list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 2,sysUserId,tenantId,beginStartTime,beginEndTime); } }else{ startPage(); - list =xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 0,sysUserId,tenantId); + list =xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 0,sysUserId,tenantId,beginStartTime,beginEndTime); } return list; } @Override - public List> getStationIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds, String operatorIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type) { + public List> getStationIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String chargingStationIds, String operatorIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) { List chargingStationIdList =new ArrayList<>(); if(!"".equals(chargingStationIds) && chargingStationIds !=null){ @@ -208,17 +225,25 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati List> list =new ArrayList<>(); if(!UserTypeUtil.SYS_USER_TYPE_ADMIN.equals(sysUser.getUserId())){ startPage(); - if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ + if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,1,logOperatorId,tenantId); + list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,1,logOperatorId,tenantId,beginStartTime,beginEndTime); + }else if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //运营商看自己的场站 + list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,3,logOperatorId,tenantId,beginStartTime,beginEndTime); + }else if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //运营商看自己的场站 + list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,4,logOperatorId,tenantId,beginStartTime,beginEndTime); }else{ //查询赋值的场站 - list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,2,sysUserId,tenantId); + list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,2,sysUserId,tenantId,beginStartTime,beginEndTime); } }else{ startPage(); - list =xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,0,sysUserId,tenantId); + list =xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,0,sysUserId,tenantId,beginStartTime,beginEndTime); } @@ -226,7 +251,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati } @Override - public List> getOperatorIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String operatorIds, Long operatorId, String startTime, String endTime, Long userId, Integer type) { + public List> getOperatorIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId,String operatorIds, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) { List operatorUserId =new ArrayList<>(); if(!"".equals(operatorIds) && operatorIds !=null){ @@ -238,24 +263,32 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati List> list =new ArrayList<>(); if(!UserTypeUtil.SYS_USER_TYPE_ADMIN.equals(sysUser.getUserId())){ startPage(); - if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ + if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 1,logOperatorId,tenantId); + list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 1,logOperatorId,tenantId,beginStartTime,beginEndTime); + }else if(UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //运营商看自己的场站 + list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 3,logOperatorId,tenantId,beginStartTime,beginEndTime); + }else if(UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //运营商看自己的场站 + list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 4,logOperatorId,tenantId,beginStartTime,beginEndTime); }else{ //查询赋值的场站 - list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 2,sysUserId,tenantId); + list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 2,sysUserId,tenantId,beginStartTime,beginEndTime); } }else{ startPage(); - list =xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 0,sysUserId,tenantId); + list =xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 0,sysUserId,tenantId,beginStartTime,beginEndTime); } return list; } @Override - public List> getInternetUserIntervalPage(HttpServletRequest request,String internetUserIds, Long internetUserId, String startTime, String endTime, Long userId, Integer type) { + public List> getInternetUserIntervalPage(HttpServletRequest request,String internetUserIds, Long internetUserId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) { List internetIds =new ArrayList<>(); if(!"".equals(internetUserIds) && internetUserIds !=null){ internetIds= Arrays.asList(internetUserIds.split(",")); @@ -285,7 +318,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati * @return */ @Override - public List> getTerminalIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId, String terminalId, Long operatorId, String startTime, String endTime, Long userId, Integer type) { + public List> getTerminalIntervalPage(HttpServletRequest request,String tenantId,Long chargingStationId, String terminalId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) { //获取登陆用户 LoginUser loginUser = tokenService.getLoginUser(request); List> list =new ArrayList<>(); @@ -296,14 +329,14 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 1,logOperatorId,tenantId); + list = xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 1,logOperatorId,tenantId,beginStartTime,beginEndTime); }else{ //查询赋值的场站 - list = xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 2,sysUserId,tenantId); + list = xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 2,sysUserId,tenantId,beginStartTime,beginEndTime); } }else{ startPage(); - list =xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 0,sysUserId,tenantId); + list =xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 0,sysUserId,tenantId,beginStartTime,beginEndTime); } @@ -318,10 +351,18 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati Long sysUserId = sysUser.getUserId(); //获取登陆用户 if(!UserTypeUtil.SYS_USER_TYPE_ADMIN.equals(sysUser.getUserId())){ - if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ + if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 return AjaxResult.success(xhpcStatisticsServiceMapper.getChargingStationList(operatorId, logOperatorId, 1,tenantId)); + }else if(UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //流量方 + return AjaxResult.success(xhpcStatisticsServiceMapper.getChargingStationList(operatorId, logOperatorId, 3,tenantId)); + }else if(UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())){ + //车队 + Long logOperatorId = sysUser.getInternetUserId(); + return AjaxResult.success(xhpcStatisticsServiceMapper.getChargingStationList(operatorId, logOperatorId, 4,tenantId)); }else{ //查询赋值的场站 return AjaxResult.success(xhpcStatisticsServiceMapper.getChargingStationList(operatorId, sysUserId, 2,tenantId)); @@ -348,10 +389,18 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati Long sysUserId = sysUser.getUserId(); //获取登陆用户 if(!UserTypeUtil.SYS_USER_TYPE_ADMIN.equals(sysUser.getUserId())){ - if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ + if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 return AjaxResult.success(xhpcStatisticsServiceMapper.getChargingPileList(chargingStationId,operatorId, logOperatorId, 1,tenantId,display)); + }else if(UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //流量方 + return AjaxResult.success(xhpcStatisticsServiceMapper.getChargingPileList(chargingStationId,operatorId, logOperatorId, 3,tenantId,display)); + }else if(UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())){ + //车队 + Long logOperatorId = sysUser.getInternetUserId(); + return AjaxResult.success(xhpcStatisticsServiceMapper.getChargingPileList(chargingStationId,operatorId, logOperatorId,4,tenantId,display)); }else{ //查询赋值的场站 return AjaxResult.success(xhpcStatisticsServiceMapper.getChargingPileList(chargingStationId,operatorId, sysUserId, 2,tenantId,display)); @@ -368,7 +417,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati SysUser sysUser = loginUser.getSysUser(); Long sysUserId = sysUser.getUserId(); if(!UserTypeUtil.SYS_USER_TYPE_ADMIN.equals(sysUser.getUserId())){ - if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ + if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 if(tenantId !=null && !"".equals(tenantId)){ @@ -376,6 +425,22 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati }else{ return AjaxResult.success(xhpcStatisticsServiceMapper.getOperatorList(operatorId, logOperatorId, 1,null)); } + }else if(UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //流量方 + if(tenantId !=null && !"".equals(tenantId)){ + return AjaxResult.success(xhpcStatisticsServiceMapper.getInternetOperatorList(logOperatorId,tenantId)); + }else{ + return AjaxResult.success(xhpcStatisticsServiceMapper.getInternetOperatorList(logOperatorId,null)); + } + }else if(UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())){ + //车队 + Long logOperatorId = sysUser.getInternetUserId(); + if(tenantId !=null && !"".equals(tenantId)){ + return AjaxResult.success(xhpcStatisticsServiceMapper.getInternetOperatorList(logOperatorId,tenantId)); + }else{ + return AjaxResult.success(xhpcStatisticsServiceMapper.getInternetOperatorList(logOperatorId,null)); + } }else{ //查询赋值的场站 if(tenantId !=null && !"".equals(tenantId)){ @@ -400,10 +465,18 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati SysUser sysUser = loginUser.getSysUser(); Long sysUserId = sysUser.getUserId(); if(!UserTypeUtil.SYS_USER_TYPE_ADMIN.equals(sysUser.getUserId())){ - if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ + if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 return AjaxResult.success(xhpcStatisticsServiceMapper.getTenantList(logOperatorId, 1)); + }else if(UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //流量方 + return AjaxResult.success(xhpcStatisticsServiceMapper.getInternetTenantList(logOperatorId)); + }else if(UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //车队 + return AjaxResult.success(xhpcStatisticsServiceMapper.getTenantList(logOperatorId, 4)); }else{ //查询赋值的场站 return AjaxResult.success(xhpcStatisticsServiceMapper.getTenantList(sysUserId, 2)); @@ -429,14 +502,23 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati SysUser sysUser = loginUser.getSysUser(); Long sysUserId = sysUser.getUserId(); if(!UserTypeUtil.SYS_USER_TYPE_ADMIN.equals(sysUser.getUserId())){ - if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ + if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 return AjaxResult.success(xhpcStatisticsServiceMapper.getTerminalList(operatorId,chargingStationId,chargingPileId, logOperatorId, 1,tenantId)); + }else if(UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //流量方 + return AjaxResult.success(xhpcStatisticsServiceMapper.getTerminalList(operatorId,chargingStationId,chargingPileId, logOperatorId, 3,tenantId)); + }else if(UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())){ + Long logOperatorId = sysUser.getInternetUserId(); + //车队 + return AjaxResult.success(xhpcStatisticsServiceMapper.getTerminalList(operatorId,chargingStationId,chargingPileId, logOperatorId, 4,tenantId)); }else{ //查询赋值的场站 return AjaxResult.success(xhpcStatisticsServiceMapper.getTerminalList(operatorId,chargingStationId,chargingPileId, sysUserId, 2,tenantId)); } + }else{ return AjaxResult.success(xhpcStatisticsServiceMapper.getTerminalList(operatorId,chargingStationId,chargingPileId, sysUserId, 0,tenantId)); } @@ -468,7 +550,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati } @Override - public List> getSumSourceList(HttpServletRequest request,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId,String startTime, String endTime, String sourceIds,String chargingStationIds) { + public List> getSumSourceList(HttpServletRequest request,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId,String startTime, String endTime, String sourceIds,String chargingStationIds, String beginStartTime, String beginEndTime) { List sourceList =new ArrayList<>(); if(!"".equals(sourceIds) && sourceIds !=null){ sourceList= Arrays.asList(sourceIds.split(",")); @@ -487,14 +569,14 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcStatisticsServiceMapper.getSumSourceList(operatorId,chargingStationId,chargingPileId,terminalId,startTime, endTime, sourceList,chargingStationIdList,tenantId,logOperatorId,1); + list = xhpcStatisticsServiceMapper.getSumSourceList(operatorId,chargingStationId,chargingPileId,terminalId,startTime, endTime, sourceList,chargingStationIdList,tenantId,logOperatorId,1,beginStartTime,beginEndTime); }else{ //查询赋值的场站 - list = xhpcStatisticsServiceMapper.getSumSourceList(operatorId,chargingStationId,chargingPileId,terminalId,startTime, endTime, sourceList, chargingStationIdList,tenantId,sysUserId,2); + list = xhpcStatisticsServiceMapper.getSumSourceList(operatorId,chargingStationId,chargingPileId,terminalId,startTime, endTime, sourceList, chargingStationIdList,tenantId,sysUserId,2,beginStartTime,beginEndTime); } }else{ startPage(); - list = xhpcStatisticsServiceMapper.getSumSourceList(operatorId,chargingStationId,chargingPileId,terminalId,startTime, endTime, sourceList, chargingStationIdList,tenantId,sysUserId,0); + list = xhpcStatisticsServiceMapper.getSumSourceList(operatorId,chargingStationId,chargingPileId,terminalId,startTime, endTime, sourceList, chargingStationIdList,tenantId,sysUserId,0,beginStartTime,beginEndTime); } return list; } @@ -637,6 +719,8 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati writer.addHeaderAlias("actPowerPrice", "运营商实收电费"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费"); writer.addHeaderAlias("actTotalPrice", "运营商实收总费用"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额"); + writer.addHeaderAlias("actClearingPrice", "运营商清分金额"); writer.addHeaderAlias("activityPowerPriceTotal", "活动电费"); writer.addHeaderAlias("activityServicePriceTotal", "活动服务费"); writer.addHeaderAlias("activityTotalPrice", "活动总金额"); @@ -657,7 +741,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati @Override - public void dateIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type) throws IOException { + public void dateIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) throws IOException { List> list =new ArrayList<>(); List chargingStationIdList =new ArrayList<>(); @@ -674,13 +758,13 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 1,logOperatorId,tenantId); + list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 1,logOperatorId,tenantId,beginStartTime,beginEndTime); }else{ //查询赋值的场站 - list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 2,sysUserId,tenantId); + list = xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 2,sysUserId,tenantId,beginStartTime,beginEndTime); } }else{ - list =xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 0,sysUserId,tenantId); + list =xhpcStatisticsServiceMapper.getDateIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList, internetUserId, operatorId, startTime, endTime, 0,sysUserId,tenantId,beginStartTime,beginEndTime); } // 通过工具类创建writer,默认创建xls格式 @@ -703,6 +787,8 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati writer.addHeaderAlias("actPowerPrice", "运营商实收电费"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费"); writer.addHeaderAlias("actTotalPrice", "运营商实收总费用"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额"); + writer.addHeaderAlias("actClearingPrice", "运营商清分金额"); writer.addHeaderAlias("activityPowerPriceTotal", "活动电费"); writer.addHeaderAlias("activityServicePriceTotal", "活动服务费"); writer.addHeaderAlias("activityTotalPrice", "活动总金额"); @@ -725,7 +811,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati } @Override - public void stationIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds,String operatorIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type) throws IOException { + public void stationIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String chargingStationIds,String operatorIds, Long internetUserId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) throws IOException { List> list =new ArrayList<>(); List chargingStationIdList =new ArrayList<>(); @@ -744,13 +830,13 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,1,logOperatorId,tenantId); + list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,1,logOperatorId,tenantId,beginStartTime,beginEndTime); }else{ //查询赋值的场站 - list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,2,sysUserId,tenantId); + list = xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,2,sysUserId,tenantId,beginStartTime,beginEndTime); } }else{ - list =xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,0,sysUserId,tenantId); + list =xhpcStatisticsServiceMapper.getStationIntervalPage(chargingStationId,chargingPileId,terminalId,chargingStationIdList,operatorUserId,internetUserId,operatorId,startTime,endTime,0,sysUserId,tenantId,beginStartTime,beginEndTime); } // 通过工具类创建writer,默认创建xls格式 @@ -775,6 +861,8 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati writer.addHeaderAlias("actPowerPrice", "运营商实收电费"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费"); writer.addHeaderAlias("actTotalPrice", "运营商实收总费用"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额"); + writer.addHeaderAlias("actClearingPrice", "运营商清分金额"); writer.addHeaderAlias("activityPowerPriceTotal", "活动电费"); writer.addHeaderAlias("activityServicePriceTotal", "活动服务费"); writer.addHeaderAlias("activityTotalPrice", "活动总金额"); @@ -797,7 +885,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati } @Override - public void operatorIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String operatorIds,Long operatorId, String startTime, String endTime, Long userId, Integer type) throws IOException { + public void operatorIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long chargingStationId,Long chargingPileId,Long terminalId, String operatorIds,Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) throws IOException { List> list =new ArrayList<>(); List operatorUserId =new ArrayList<>(); @@ -812,13 +900,13 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 1,logOperatorId,tenantId); + list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 1,logOperatorId,tenantId,beginStartTime,beginEndTime); }else{ //查询赋值的场站 - list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 2,sysUserId,tenantId); + list = xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 2,sysUserId,tenantId,beginStartTime,beginEndTime); } }else{ - list =xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 0,sysUserId,tenantId); + list =xhpcStatisticsServiceMapper.getOperatorIntervalPage(chargingStationId,chargingPileId,terminalId,operatorUserId, operatorId, startTime, endTime, 0,sysUserId,tenantId,beginStartTime,beginEndTime); } // 通过工具类创建writer,默认创建xls格式 BigExcelWriter writer = ExcelUtil.getBigWriter("temp_" + System.currentTimeMillis() + ".xlsx"); @@ -842,6 +930,9 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati writer.addHeaderAlias("actPowerPrice", "运营商实收电费"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费"); writer.addHeaderAlias("actTotalPrice", "运营商实收总费用"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额"); + writer.addHeaderAlias("actClearingPrice", "运营商清分金额"); + writer.addHeaderAlias("activityPowerPriceTotal", "活动电费"); writer.addHeaderAlias("activityServicePriceTotal", "活动服务费"); writer.addHeaderAlias("activityTotalPrice", "活动总金额"); @@ -866,9 +957,9 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati @Override - public void getSumSourceListExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId, String startTime, String endTime, String sourceIds, String chargingStationIds) throws IOException { + public void getSumSourceListExport(HttpServletRequest request,HttpServletResponse response,String tenantId,Long operatorId,Long chargingStationId,Long chargingPileId,Long terminalId, String startTime, String endTime, String sourceIds, String chargingStationIds, String beginStartTime, String beginEndTime) throws IOException { - List> list = getSumSourceList(request,tenantId,operatorId,chargingStationId,chargingPileId,terminalId,startTime, endTime, sourceIds,chargingStationIds); + List> list = getSumSourceList(request,tenantId,operatorId,chargingStationId,chargingPileId,terminalId,startTime, endTime, sourceIds,chargingStationIds,beginStartTime,beginEndTime); // 通过工具类创建writer,默认创建xls格式 BigExcelWriter writer = ExcelUtil.getBigWriter("temp_" + System.currentTimeMillis() + ".xlsx"); @@ -892,6 +983,8 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati writer.addHeaderAlias("actPowerPrice", "运营商实收电费"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费"); writer.addHeaderAlias("actTotalPrice", "运营商实收总费用"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额"); + writer.addHeaderAlias("actClearingPrice", "运营商清分金额"); writer.addHeaderAlias("activityPowerPriceTotal", "活动电费"); writer.addHeaderAlias("activityServicePriceTotal", "活动服务费"); writer.addHeaderAlias("activityTotalPrice", "活动总金额"); @@ -915,7 +1008,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati @Override - public void terminalIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId, Long chargingStationId, String terminalId, Long operatorId, String startTime, String endTime, Long userId, Integer type) throws IOException { + public void terminalIntervalExport(HttpServletRequest request,HttpServletResponse response,String tenantId, Long chargingStationId, String terminalId, Long operatorId, String startTime, String endTime, Long userId, Integer type, String beginStartTime, String beginEndTime) throws IOException { LoginUser loginUser = tokenService.getLoginUser(request); List> list =new ArrayList<>(); SysUser sysUser = loginUser.getSysUser(); @@ -925,13 +1018,13 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati if(UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType())){ Long logOperatorId = sysUser.getOperatorId(); //运营商看自己的场站 - list = xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 1,logOperatorId,tenantId); + list = xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 1,logOperatorId,tenantId,beginStartTime,beginEndTime); }else{ //查询赋值的场站 - list = xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 2,sysUserId,tenantId); + list = xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 2,sysUserId,tenantId,beginStartTime,beginEndTime); } }else{ - list =xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 0,sysUserId,tenantId); + list =xhpcStatisticsServiceMapper.getTerminalIntervalPage(chargingStationId, terminalId, operatorId, startTime, endTime, 0,sysUserId,tenantId,beginStartTime,beginEndTime); } // 通过工具类创建writer,默认创建xls格式 BigExcelWriter writer = ExcelUtil.getBigWriter("temp_" + System.currentTimeMillis() + ".xlsx"); @@ -956,6 +1049,8 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati writer.addHeaderAlias("actPowerPrice", "运营商实收电费"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费"); writer.addHeaderAlias("actTotalPrice", "运营商实收总费用"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额"); + writer.addHeaderAlias("actClearingPrice", "运营商清分金额"); writer.addHeaderAlias("activityPowerPriceTotal", "活动电费"); writer.addHeaderAlias("activityServicePriceTotal", "活动服务费"); writer.addHeaderAlias("activityTotalPrice", "活动总金额"); @@ -1025,6 +1120,8 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati writer.addHeaderAlias("actPowerPrice", "运营商实收电费"); writer.addHeaderAlias("actServicePrice", "运营商实收服务费"); writer.addHeaderAlias("actTotalPrice", "运营商实收总费用"); + writer.addHeaderAlias("clearingPrice", "运营商不参与清分金额"); + writer.addHeaderAlias("actClearingPrice", "运营商清分金额"); writer.addHeaderAlias("activityPowerPriceTotal", "活动电费"); writer.addHeaderAlias("activityServicePriceTotal", "活动服务费"); writer.addHeaderAlias("activityTotalPrice", "活动总金额"); @@ -1073,10 +1170,20 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati Map map =new HashMap<>(); if(tenantId !=null && !"".equals(tenantId)){ if(sysUser.getUserId() !=UserTypeUtil.USER_ID){ - if ("01".equals(sysUser.getUserType())) { + if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())) { Long logOperatorId = sysUser.getOperatorId(); //今日订单量 extracted(1,operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay, lastBeginOfDay, lastEndOfDay, weekBeginOfDay, weekEndOfDay, map, logOperatorId); + }else if (UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())) { + //流量方 + Long logOperatorId = sysUser.getInternetUserId(); + //今日订单量 + extracted(3,operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay, lastBeginOfDay, lastEndOfDay, weekBeginOfDay, weekEndOfDay, map, logOperatorId); + }else if (UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())) { + //流量方 + Long logOperatorId = sysUser.getInternetUserId(); + //今日订单量 + extracted(4,operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay, lastBeginOfDay, lastEndOfDay, weekBeginOfDay, weekEndOfDay, map, logOperatorId); }else{ //今日订单量 extracted(2,operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay, lastBeginOfDay, lastEndOfDay, weekBeginOfDay, weekEndOfDay, map, logUserId); @@ -1104,11 +1211,21 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati Map map =new HashMap<>(); if(tenantId !=null && !"".equals(tenantId)){ if(sysUser.getUserId() !=UserTypeUtil.USER_ID){ - if ("01".equals(sysUser.getUserType())) { + if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())) { Long logOperatorId = sysUser.getOperatorId(); //今日电量 int todayDegreeNUmber = xhpcStatisticsServiceMapper.getTodayDegreeNUmber(1, logOperatorId, operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay); map.put("todayDegree",todayDegreeNUmber); + }else if (UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())) { + Long logOperatorId = sysUser.getInternetUserId(); + //今日电量 + int todayDegreeNUmber = xhpcStatisticsServiceMapper.getTodayDegreeNUmber(3, logOperatorId, operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay); + map.put("todayDegree",todayDegreeNUmber); + }else if (UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())) { + Long logOperatorId = sysUser.getInternetUserId(); + //今日电量 + int todayDegreeNUmber = xhpcStatisticsServiceMapper.getTodayDegreeNUmber(4, logOperatorId, operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay); + map.put("todayDegree",todayDegreeNUmber); }else{ //今日电量 int todayDegreeNUmber = xhpcStatisticsServiceMapper.getTodayDegreeNUmber(2, logUserId, operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay); @@ -1138,10 +1255,18 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati Map map =new HashMap<>(); if(tenantId !=null && !"".equals(tenantId)){ if(sysUser.getUserId() !=UserTypeUtil.USER_ID){ - if ("01".equals(sysUser.getUserType())) { + if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())) { Long logOperatorId = sysUser.getOperatorId(); //今日营收 extracted(1,operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay, map, logOperatorId); + }else if (UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())) { + Long logOperatorId = sysUser.getInternetUserId(); + //今日营收 + extracted(3,operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay, map, logOperatorId); + }else if (UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())) { + Long logOperatorId = sysUser.getInternetUserId(); + //今日营收 + extracted(4,operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay, map, logOperatorId); }else{ //今日营收 extracted(2,operatorId, chargingStationId, chargingPileId, tenantId, beginOfDay, endOfDay, map, logUserId); @@ -1176,6 +1301,12 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati if ("01".equals(sysUser.getUserType())) { //运营商看自己的场站 return extracted(1,logOperatorId,operatorId, chargingStationId, chargingPileId, tenantId); + }else if ("02".equals(sysUser.getInternetUserId())) { + //运营商看自己的场站 + return extracted(3,sysUser.getInternetUserId(),operatorId, chargingStationId, chargingPileId, tenantId); + }else if ("04".equals(sysUser.getInternetUserId())) { + //运营商看自己的场站 + return extracted(4,sysUser.getInternetUserId(),operatorId, chargingStationId, chargingPileId, tenantId); }else{ //查询赋值的场站 return extracted(2,logUserId,operatorId, chargingStationId, chargingPileId, tenantId); @@ -1267,9 +1398,15 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati if(tenantId !=null && !"".equals(tenantId)){ if(sysUser.getUserId() !=UserTypeUtil.USER_ID){ Long logOperatorId = sysUser.getOperatorId(); - if ("01".equals(sysUser.getUserType())) { + if (UserTypeUtil.SYS_USER_TYPE_ONE.equals(sysUser.getUserType()) && StatusConstants.OPERATION_POWER_TYPE.equals(sysUser.getDataPowerType())) { //运营商看自己的场站 return extracted(1,type,logOperatorId,operatorId,chargingStationId,chargingPileId,tenantId,conditionBeginOfDay,conditionEndOfDay) ; + }else if (UserTypeUtil.SYS_USER_TYPE_TWO.equals(sysUser.getUserType()) && StatusConstants.INTERNET_POWER_TYPE.equals(sysUser.getDataPowerType())) { + //运营商看自己的场站 + return extracted(1,type,sysUser.getInternetUserId(),operatorId,chargingStationId,chargingPileId,tenantId,conditionBeginOfDay,conditionEndOfDay) ; + }else if (UserTypeUtil.SYS_MOTORCADE_TYPE_FOUR.equals(sysUser.getUserType()) && StatusConstants.MOTORCADE_TYPE.equals(sysUser.getDataPowerType())) { + //运营商看自己的场站 + return extracted(1,type,sysUser.getInternetUserId(),operatorId,chargingStationId,chargingPileId,tenantId,conditionBeginOfDay,conditionEndOfDay) ; }else{ //查询赋值的场站 return extracted(2,type,logUserId,operatorId,chargingStationId,chargingPileId,tenantId,conditionBeginOfDay,conditionEndOfDay) ; @@ -1753,7 +1890,7 @@ public class XhpcStatisticsServiceImpl extends BaseService implements IXhpcStati "故障".equals(cacheMap.get("status").toString())){ fault++; }else if(cacheMap.containsKey("status") && - "空闲".equals(cacheMap.get("status").toString())){ + ("空闲".equals(cacheMap.get("status").toString()) || "插枪".equals(cacheMap.get("status").toString()))){ if("是".equals(cacheMap.get("vehicleGunStatus").toString())){ insertGun++; }else{ diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/tasks/ScheduledTasks.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/tasks/ScheduledTasks.java index 099c1ed3..905a6a09 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/tasks/ScheduledTasks.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/tasks/ScheduledTasks.java @@ -80,7 +80,7 @@ public class ScheduledTasks { //定时清理推送订单数据保留 - @Scheduled(cron = "0 0 11 * * ? ") + //@Scheduled(cron = "0 0 11 * * ? ") public void deleteOrderCacheDate(){ xhpcRealTimeOrderService.deleteOrderCacheDate(); } diff --git a/xhpc-modules/xhpc-order/src/main/resources/bootstrap.yml b/xhpc-modules/xhpc-order/src/main/resources/bootstrap.yml index 8fd67a26..fcdfcf84 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/bootstrap.yml +++ b/xhpc-modules/xhpc-order/src/main/resources/bootstrap.yml @@ -23,6 +23,13 @@ spring: # 共享配置 shared-configs: - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +charging: + check: + number-threshold: 9 # number阈值(>=此值时开始校验) + soc-threshold: 85 # SOC阈值(小于此值时进行校验) + order-power: 200 # 每一帧电量阈值只差(小于此值时进行校验 500表示0.05) + voltage-threshold: 2500 # 电压下降阈值(单位:0.1V,500表示50V) + current-threshold: 100 # 电流下降阈值(单位:0.1A,200表示20A) #logging: # level: # com.xhpc.order.mapper: debug diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml index 8633c740..b366c628 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcChargeOrderMapper.xml @@ -37,7 +37,10 @@ - + + + + @@ -204,6 +207,15 @@ update xhpc_app_internet_user set balance=#{balance} where app_internet_user_id=#{userId} + + + update xhpc_motorcade set remaining_amount =#{remainingAmount} , consumption_amount=#{consumptionAmount} where motorcade_id=#{userId} + + + + update xhpc_motorcade_personnel set surplus_money=#{surplusMoney} , consume_money=#{consumeMoney} where motorcade_personnel_id=#{userId} + + + + + + @@ -511,6 +555,7 @@ commission_type as commissionType, operator_id_evcs as operatorIdEvcs, duty_paragraph as dutyParagraph, + type as type, soc as soc, platform_commission_rate as platformCommissionRate, (select name from xhpc_charging_station where charging_station_id=#{chargingStationId}) chargingStationName, @@ -948,4 +993,87 @@ + + + + + + + + diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml index c35e9871..670f1101 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcHistoryOrderMapper.xml @@ -60,6 +60,10 @@ + + + + @@ -71,7 +75,7 @@ create_time, create_by, update_time, update_by, remark, `state`, vin_normal, search_value, operator_id_evcs, charge_model_evcs, connector_power_evcs, meter_value_end_evcs, meter_value_start_evcs, operator_id3rdpty_evcs, start_time, stop_reason_evcs, total_power, - user_name_evcs, phone, rate_model_id + user_name_evcs, phone, rate_model_id,mark, clearing_type, clearing_price,act_service_price, motorcade_id @@ -239,6 +243,21 @@ activity_id, + + mark, + + + motorcade_id, + + + clearing_type, + + + clearing_price, + + + act_total_price, + @@ -403,6 +422,21 @@ #{activityId}, + + #{mark}, + + + #{motorcadeId}, + + + #{clearingType}, + + + #{clearingPrice}, + + + #{actTotalPrice}, + @@ -1013,7 +1047,7 @@ ho.type as orderType, ho.start_soc as startSoc, ho.end_soc as endSoc, - ho.vin_normal as vinCode, + co.vin_normal as vinCode, ho.internet_serial_number as internetSerialNumber, ho.evcs_order_no as evcsOrderNo, ho.total_price as totalPrice, @@ -1055,11 +1089,16 @@ -- WHEN xpo.source = 1 AND xpo.user_id IN (1, 2, 4, 7) THEN xpo.total_money -- ELSE 0 -- END AS placeholderTotalMoney, - + mop.name as motorcadePersonnelName, + mop.account as motorcadePersonnelAccount, + mo.contact_name as motorcadeName, + mo.account as motorcadeAccount, case when co.source=0 then "C端用户" when co.source=1 then "流量方用户" when co.source=2 then "社区用户" - else "B端客户!" + when co.source=3 then "B端客户" + when co.source=4 then "车队管理员" + else "车队用户" end sourceName, case when ho.parking_voucher=1 then '否' else '是' @@ -1069,6 +1108,7 @@ when ho.charging_mode="3" then "新电途" when ho.charging_mode="4" then "小桔" when ho.charging_mode="7" then "车为家" + when ho.charging_mode="8" then "云快充" when ho.charging_mode="微信" then "微信" when ho.charging_mode="支付宝" then "支付宝" when ho.charging_mode="App" then "App" @@ -1085,6 +1125,8 @@ left join xhpc_app_user as apu on apu.app_user_id = ho.user_id and ho.internet_serial_number is null and ho.source=0 left join xhpc_community_personnel as cop on cop.community_personnel_id = ho.user_id and ho.internet_serial_number is null and ho.source=2 left join xhpc_customers_personnel as cup on cup.customers_personnel_id = ho.user_id and ho.internet_serial_number is null and ho.source=3 + left join xhpc_motorcade_personnel as mop on mop.motorcade_personnel_id = ho.user_id and ho.source =5 + left join xhpc_motorcade as mo on mo.motorcade_id = ho.user_id and ho.source =4 left join xhpc_charge_order co on co.charge_order_id = ho.charge_order_id -- left join xhpc_placeholder_order xpo on xpo.history_order_id = ho.history_order_id @@ -1094,6 +1136,10 @@ select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_community_personnel as xcp on xcp.community_personnel_id = hio.user_id where hio.source=2 and xcp.account LIKE concat('%',#{phone}, '%') union select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_customers_personnel as xcup on xcup.customers_personnel_id = hio.user_id where hio.source=3 and xcup.account LIKE concat('%',#{phone}, '%') + union + select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_motorcade_personnel as xmp on xmp.motorcade_personnel_id = hio.user_id where hio.source=5 and xmp.account LIKE concat('%',#{phone}, '%') + union + select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_motorcade as xo on xo.motorcade_id = hio.user_id where hio.source=4 and xo.account LIKE concat('%',#{phone}, '%') ) ut on ut.history_order_id = ho.history_order_id where ho.status =0 and ho.del_flag=0 @@ -1154,7 +1200,9 @@ and op.operator_id =#{operatorId} - + + and ho.mark like concat('%', #{mark}, '%') + and ho.history_order_id in (select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_app_user as xau on xau.app_user_id = hio.user_id where hio.source=0) @@ -1168,6 +1216,12 @@ and ho.history_order_id in (select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_customers_personnel as xcup on xcup.customers_personnel_id = hio.user_id where hio.source=3) + + and ho.history_order_id in ( select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_motorcade_personnel as xmp on xmp.motorcade_personnel_id = hio.user_id where hio.source=5) + + + and ho.history_order_id in ( select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_motorcade as mo on mo.motorcade_id = hio.user_id where hio.source=4) + @@ -1182,6 +1236,12 @@ and ho.history_order_id in(select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_customers_personnel as xcup on xcup.customers_personnel_id = hio.user_id where hio.source=3 and xcup.account LIKE concat('%',#{phone}, '%')) + + and ho.history_order_id in ( select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_motorcade_personnel as xmp on xmp.motorcade_personnel_id = hio.user_id where hio.source=5 and xmp.account LIKE concat('%',#{phone}, '%')) + + + and ho.history_order_id in ( select hio.history_order_id as history_order_id from xhpc_history_order as hio INNER JOIN xhpc_motorcade as mo on mo.motorcade_id = hio.user_id where hio.source=4 and mo.account LIKE concat('%',#{phone}, '%')) + and co.charging_station_id in (select charging_station_id from xhpc_charging_station where operator_id=#{userId}) @@ -1189,6 +1249,12 @@ and co.charging_station_id in (select charging_station_id from xhpc_user_privilege where user_id=#{userId}) + + and ho.source =1 and ho.user_id=#{logOperatorId} + + + and (ho.source =4 or ho.source =5) and ho.motorcade_id=#{logOperatorId} + and ho.user_id=#{personnelId} @@ -1262,6 +1328,7 @@ ho.act_power_price as actPowerPrice, ho.act_service_price as actServicePrice, ho.total_power as totalPower, + ho.clearing_price as clearingPrice, ed.total_power as sanTotalPower, ed.total_money as sanTotalMoney, case when ed.dispute_reason=1 then "交易不存在" @@ -1276,6 +1343,8 @@ (SELECT account from xhpc_customers_personnel where customers_personnel_id = co.user_id and ho.source=3) as customersAccount, co.Plate_num as plateNum, (SELECT name from xhpc_internet_user where internet_user_id = co.user_id and co.source =1) as internetName, + (SELECT account from xhpc_motorcade_personnel where motorcade_personnel_id = co.user_id and co.source=5) as motorcadePersonnelAccount, + (SELECT account from xhpc_motorcade where motorcade_id = co.user_id and co.source=4) as motorcadeAccount, ho.stop_reason_evcs as stopReasonRvcsName from xhpc_history_order ho left join xhpc_charging_station as ct on ct.charging_station_id = ho.charging_station_id @@ -1296,6 +1365,7 @@ ho.act_price as actPrice, ho.act_power_price as actPowerPrice, ho.act_service_price as actServicePrice, + ho.act_total_price as actTotalPrice, ho.internet_commission as internetCommission, ho.internet_svc_commission as internetSvcCommission, ho.internet_degree_commission as internetDegreeCommission, @@ -1320,6 +1390,10 @@ ho.activity_power_price_total as activityPowerPriceTotal, ho.activity_service_price_total as activityServicePriceTotal, ho.activity_total_price as activityTotalPrice, + ho.mark as mark, + ho.clearing_type as clearingType, + ho.clearing_price as clearingPrice, + ho.motorcade_id as motorcadeId, ho.create_time as createTime from xhpc_history_order ho left join xhpc_charging_station cs on cs.charging_station_id = ho.charging_station_id @@ -1337,8 +1411,11 @@ ho.promotion_discount as promotionDiscount, ho.total_price as totalPrice, ho.act_price as actPrice, + ho.clearing_type as clearingType, + ho.clearing_price as clearingPrice, ho.act_power_price as actPowerPrice, ho.act_service_price as actServicePrice, + ho.act_total_price as actTotalPrice, ho.internet_commission as internetCommission, ho.internet_svc_commission as internetSvcCommission, ho.internet_degree_commission as internetDegreeCommission, @@ -1404,6 +1481,8 @@ co.user_id as userId, co.user_id as internetUserId, ho.charging_mode as chargingMode, + ho.clearing_type as clearingType, + ho.clearing_price as clearingPrice, ho.activity_power_price_total as activityPowerPriceTotal, ho.activity_service_price_total as activityServicePriceTotal, ho.activity_total_price as activityTotalPrice, @@ -1707,6 +1786,7 @@ when xho.charging_mode="3" then "新电途" when xho.charging_mode="4" then "小桔" when xho.charging_mode="7" then "车为家" + when xho.charging_mode="8" then "云快充" when xho.charging_mode="微信" then "微信" when xho.charging_mode="支付宝" then "支付宝" when xho.charging_mode="App" then "App" @@ -1838,6 +1918,7 @@ when ho.charging_mode="3" then "新电途" when ho.charging_mode="4" then "小桔" when ho.charging_mode="7" then "车为家" + when ho.charging_mode="8" then "云快充" when ho.charging_mode="微信" then "微信" when ho.charging_mode="支付宝" then "支付宝" when ho.charging_mode="App" then "App" @@ -1930,6 +2011,7 @@ when ho.charging_mode="3" then "新电途" when ho.charging_mode="4" then "小桔" when ho.charging_mode="7" then "车为家" + when ho.charging_mode="8" then "云快充" when ho.charging_mode="微信" then "微信" when ho.charging_mode="支付宝" then "支付宝" when ho.charging_mode="App" then "App" @@ -1963,4 +2045,20 @@ order by ho.end_time desc + + + + + diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcInspectionMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcInspectionMapper.xml index 84a52535..4ea05ed8 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcInspectionMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcInspectionMapper.xml @@ -545,4 +545,138 @@ update xhpc_inspection set status =1 where charging_station_id=#{chargingStationId} and data_time=#{time} and type!=7 and status=0 + + + + + + + + + diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcPlaceholderOrderMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcPlaceholderOrderMapper.xml index 7c44666b..b4b4007e 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcPlaceholderOrderMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcPlaceholderOrderMapper.xml @@ -378,6 +378,8 @@ ho.placeholder_order_id as placeholderOrderId, ho.serial_number as serialNumber, ct.name as chargingStationName, + ho.recharge_money as rechargeMoney, + ho.refund_money as refundMoney, ter.pile_serial_number as pileSerialNumber, ter.name as terminalName, op.operator_id as operatorId, @@ -490,6 +492,9 @@ and ho.end_time <= #{overEndTime} + + and ho.placeholder_order_number like concat('%', #{placeholderOrderNumber}, '%') + and ho.serial_number like concat('%', #{transactionNumber}, '%') @@ -542,6 +547,14 @@ and ho.tenant_id=#{tenantId} + + and ho.total_money >=#{totalMoneyMin} + + + and ho.total_money <=#{totalMoneyMax} + + + @@ -605,6 +618,7 @@ when ho.charging_mode="3" then "新电途" when ho.charging_mode="4" then "小桔" when ho.charging_mode="7" then "车为家" + when ho.charging_mode="8" then "云快充" when ho.charging_mode="微信" then "微信" when ho.charging_mode="支付宝" then "支付宝" when ho.charging_mode="App" then "App" @@ -706,7 +720,7 @@ - order by ho.create_time desc + order by ho.placeholder_order_id @@ -715,6 +729,8 @@ ho.placeholder_order_id as placeholderOrderId, ho.serial_number as serialNumber, ho.placeholder_id as placeholderId, + ho.recharge_money as rechargeMoney, + ho.refund_money as refundMoney, ct.name as chargingStationName, ter.pile_serial_number as pileSerialNumber, ter.name as terminalName, @@ -933,24 +949,15 @@ - update xhpc_placeholder_order set type=2 where TIMESTAMPDIFF(MINUTE, IFNULL(start_time, NOW()), NOW()) > 720 and (status=1 or status=2) and type =0 + update xhpc_placeholder_order set type=2 where TIMESTAMPDIFF(MINUTE, IFNULL(start_time, NOW()), NOW()) > 360 and (status=1 or status=2) and type =0 - + select * from xhpc_placeholder_order where type=0 @@ -1054,16 +1066,19 @@ ifnull(SUM(CASE WHEN ss.charging_mode = 1 THEN total_money ELSE 0 END),0) AS "kudaiDianMoney", ifnull(SUM(CASE WHEN ss.charging_mode = 2 THEN total_money ELSE 0 END),0) AS "henDaMoney", ifnull(SUM(CASE WHEN ss.charging_mode = 3 THEN total_money ELSE 0 END),0) AS "xinDianTuMoney", + ifnull(SUM(CASE WHEN ss.charging_mode = 8 THEN total_money ELSE 0 END),0) AS "ykcMoney", ifnull(sum(CASE WHEN ss.charging_mode = 1 THEN refund_money ELSE 0 END),0) "kudaiDianRefundMoney", ifnull(sum(CASE WHEN ss.charging_mode = 1 THEN recharge_money ELSE 0 END),0) "kudaiDianRechargeMoney", ifnull(sum(CASE WHEN ss.charging_mode = 3 THEN refund_money ELSE 0 END),0) "xinDianTuRefundMoney", ifnull(sum(CASE WHEN ss.charging_mode = 3 THEN recharge_money ELSE 0 END),0) "xinDianTuRechargeMoney", + ifnull(sum(CASE WHEN ss.charging_mode = 8 THEN refund_money ELSE 0 END),0) "ykcRefundMoney", + ifnull(sum(CASE WHEN ss.charging_mode = 8 THEN recharge_money ELSE 0 END),0) "ykcRechargeMoney", ifnull(SUM(CASE WHEN ss.charging_mode = 4 THEN total_money ELSE 0 END),0) AS "xiaoJuMoney", ifnull(SUM(CASE WHEN ss.charging_mode = 7 THEN total_money ELSE 0 END),0) AS "cheWeiJiaMoney", - ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7) THEN act_price ELSE 0 END),0) AS "actPrice", - ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7) THEN appeal_recharge_money ELSE 0 END),0) AS "appealRechargeMoney", - ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7) THEN appeal_refund_money ELSE 0 END),0) AS "appealRefundMoney" - DATE(ss.create_time ,'%Y-%m-%d') AS createTime, + ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7,8) THEN act_price ELSE 0 END),0) AS "actPrice", + ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7,8) THEN appeal_recharge_money ELSE 0 END),0) AS "appealRechargeMoney", + ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7,8) THEN appeal_refund_money ELSE 0 END),0) AS "appealRefundMoney", + DATE_FORMAT(ss.create_time ,'%Y-%m-%d') AS createTime from xhpc_placeholder_order ss left join xhpc_charging_station cs on cs.charging_station_id = ss.charging_station_id left join xhpc_operator xo on cs.operator_id = xo.operator_id @@ -1104,15 +1119,18 @@ ifnull(SUM(CASE WHEN ss.charging_mode = 1 THEN total_money ELSE 0 END),0) AS "kudaiDianMoney", ifnull(SUM(CASE WHEN ss.charging_mode = 2 THEN total_money ELSE 0 END),0) AS "henDaMoney", ifnull(SUM(CASE WHEN ss.charging_mode = 3 THEN total_money ELSE 0 END),0) AS "xinDianTuMoney", + ifnull(SUM(CASE WHEN ss.charging_mode = 8 THEN total_money ELSE 0 END),0) AS "ykcMoney", ifnull(sum(CASE WHEN ss.charging_mode = 1 THEN refund_money ELSE 0 END),0) "kudaiDianRefundMoney", ifnull(sum(CASE WHEN ss.charging_mode = 1 THEN recharge_money ELSE 0 END),0) "kudaiDianRechargeMoney", ifnull(sum(CASE WHEN ss.charging_mode = 3 THEN refund_money ELSE 0 END),0) "xinDianTuRefundMoney", ifnull(sum(CASE WHEN ss.charging_mode = 3 THEN recharge_money ELSE 0 END),0) "xinDianTuRechargeMoney", + ifnull(SUM(CASE WHEN ss.charging_mode = 8 THEN refund_money ELSE 0 END),0) AS "ykcRefundMoney", + ifnull(SUM(CASE WHEN ss.charging_mode = 8 THEN recharge_money ELSE 0 END),0) AS "ykcRechargeMoney", ifnull(SUM(CASE WHEN ss.charging_mode = 4 THEN total_money ELSE 0 END),0) AS "xiaoJuMoney", ifnull(SUM(CASE WHEN ss.charging_mode = 7 THEN total_money ELSE 0 END),0) AS "cheWeiJiaMoney", - ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7) THEN act_price ELSE 0 END),0) AS "actPrice", - ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7) THEN appeal_recharge_money ELSE 0 END),0) AS "appealRechargeMoney", - ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7) THEN appeal_refund_money ELSE 0 END),0) AS "appealRefundMoney", + ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7,8) THEN act_price ELSE 0 END),0) AS "actPrice", + ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7,8) THEN appeal_recharge_money ELSE 0 END),0) AS "appealRechargeMoney", + ifnull(SUM(CASE WHEN ss.charging_mode NOT IN (1, 2, 3, 4, 7,8) THEN appeal_refund_money ELSE 0 END),0) AS "appealRefundMoney", cs.name as chargingStationName, xo.name operatorName from xhpc_placeholder_order as ss @@ -1286,41 +1304,25 @@ @@ -1334,26 +1336,91 @@ serial_number AS serialNumber, DATE_FORMAT(start_time,'%Y-%m-%d %H:%i:%s') as startTime from xhpc_placeholder_order - where (type =3 or type=2) and TIMESTAMPDIFF(MINUTE, IFNULL(start_time, NOW()), NOW()) > 720 + where type=2 order by placeholder_order_id asc LIMIT 20 - - + -- 第一条SQL:查询最大ID + SELECT MAX(`device_message_id`) as current_max_id FROM `xhpc_device_message` - WHERE `gun_status` = 0 + WHERE `charge_order_no` = #{chargeOrderNo} AND `gun_number` = #{gunNumber} - AND `device_message_id` >= ( - SELECT `device_message_id` - FROM `xhpc_device_message` - WHERE `remark` = '充电交易结算记录' - AND `charge_order_no` = #{chargeOrderNo} + + + + - + diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcRealTimeOrderMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcRealTimeOrderMapper.xml index 962c6855..09178a42 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcRealTimeOrderMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcRealTimeOrderMapper.xml @@ -55,6 +55,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into xhpc_real_time_order @@ -687,6 +747,10 @@ cup.account as customersAccount, cop.name as communityName, cop.account as communityAccount, + mop.name as motorcadePersonnelName, + mop.account as motorcadePersonnelAccount, + mo.contact_name as motorcadeName, + mo.account as motorcadeAccount, co.create_time as createTime, apu.phone as appUserPhone from xhpc_charge_order co @@ -698,6 +762,8 @@ left join xhpc_app_user as apu on apu.app_user_id = co.user_id and co.source =0 left join xhpc_community_personnel as cop on cop.community_personnel_id = co.user_id and co.source =2 left join xhpc_customers_personnel as cup on cup.customers_personnel_id = co.user_id and co.source =3 + left join xhpc_motorcade_personnel as mop on mop.motorcade_personnel_id = co.user_id and co.source =5 + left join xhpc_motorcade as mo on mo.motorcade_id = co.user_id and co.source =4 LEFT JOIN ( SELECT charging_order_id,real_time_order_id,soc,charging_degree,charging_time FROM xhpc_real_time_order WHERE real_time_order_id IN ( SELECT max( real_time_order_id ) FROM xhpc_real_time_order GROUP BY charging_order_id ) @@ -709,6 +775,10 @@ select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_community_personnel as xcp on xcp.community_personnel_id = xco.user_id where xco.source=2 and xcp.account LIKE concat('%',#{phone}, '%') union select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_customers_personnel as xcup on xcup.customers_personnel_id = xco.user_id where xco.source=3 and xcup.account LIKE concat('%',#{phone}, '%') + union + select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_motorcade_personnel as xmp on xmp.motorcade_personnel_id = xco.user_id where xco.source=5 and xmp.account LIKE concat('%',#{phone}, '%') + union + select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_motorcade as xo on xo.motorcade_id = xco.user_id where xco.source=4 and xo.account LIKE concat('%',#{phone}, '%') ) ut on ut.charge_order_id = co.charge_order_id where co.status=#{status} and co.del_flag=0 @@ -756,20 +826,24 @@ and op.operator_id =#{operatorId} - + and co.charge_order_id in (select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_app_user as xau on xau.app_user_id = xco.user_id where xco.source=0 and xau.phone LIKE concat('%',#{phone}, '%')) and co.charge_order_id in (select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_internet_user as xiu on xiu.internet_user_id = xco.user_id where xco.source=1 and xiu.phone LIKE concat('%',#{phone}, '%')) - - - - and co.charge_order_id in (select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_app_user as xau on xau.app_user_id = xco.user_id where xco.source=0 and xau.phone LIKE concat('%',#{phone}, '%')) + + and co.charge_order_id in (select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_community_personnel as xcp on xcp.community_personnel_id = xco.user_id where xco.source=2 and xcp.account LIKE concat('%',#{phone}, '%')) - - a and co.charge_order_id in (select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_internet_user as xiu on xiu.internet_user_id = xco.user_id where xco.source=1 and xiu.phone LIKE concat('%',#{phone}, '%')) + + and co.charge_order_id in (select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_customers_personnel as xcup on xcup.customers_personnel_id = xco.user_id where xco.source=3 and xcup.account LIKE concat('%',#{phone}, '%')) + + + and co.charge_order_id in ( select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_motorcade_personnel as xmp on xmp.motorcade_personnel_id = xco.user_id where xco.source=5 and xmp.account LIKE concat('%',#{phone}, '%')) + + + and co.charge_order_id in ( select xco.charge_order_id as charge_order_id from xhpc_charge_order as xco INNER JOIN xhpc_motorcade as mo on mo.motorcade_id = xco.user_id where mo.source=4 and mo.account LIKE concat('%',#{phone}, '%')) @@ -778,6 +852,12 @@ and co.charging_station_id in (select charging_station_id from xhpc_user_privilege where user_id=#{userId}) + + and co.source =1 and co.user_id=#{logOperatorId} + + + and co.source =4 and co.motorcade_id=#{logOperatorId} + order by co.create_time desc @@ -808,11 +888,13 @@ co.Plate_num as plateNum, co.start_time as startTime, co.end_time as endTime, - (SELECT phone FROM xhpc_app_user where app_user_id = co.user_id) as appUserPhone, + (SELECT phone FROM xhpc_app_user where app_user_id = co.user_id and co.source=0) as appUserPhone, co.driver_id as internetUserPhone, (SELECT name from xhpc_internet_user where internet_user_id = co.user_id and co.source=1) as internetName, (SELECT account from xhpc_community_personnel where community_personnel_id = co.user_id and co.source=2) as communityAccount, - (SELECT account from xhpc_customers_personnel where customers_personnel_id = co.user_id and co.source=3) as customersAccount + (SELECT account from xhpc_customers_personnel where customers_personnel_id = co.user_id and co.source=3) as customersAccount, + (SELECT account from xhpc_motorcade_personnel where motorcade_personnel_id = co.user_id and co.source=5) as motorcadePersonnelAccount, + (SELECT account from xhpc_motorcade where motorcade_id = co.user_id and co.source=4) as motorcadeAccount from xhpc_real_time_order ro Left join xhpc_charge_order co on co.serial_number = ro.transaction_number Left join xhpc_charging_station as ct on ct.charging_station_id = ro.charging_station_id @@ -1131,6 +1213,9 @@ and (find_in_set(#{internetUserId}, xad.cus_user_list) or xad.cus_user_list='-1') + + and (find_in_set(#{internetUserId}, xad.cus_user_list) or xad.cus_user_list='-1') + and xad.start_time <=#{startTime} and xad.end_time > #{startTime} order by xad.start_time asc @@ -1330,12 +1415,41 @@ max_fee as maxFee, free_time as freeTime, placeholder_id as placeholderId - from xhpc_placeholder where del_flag =0 and status =1 and NOW() >= start_time AND NOW() <= end_time and charging_station_id =#{chargingStationId} + from xhpc_placeholder where del_flag =0 and NOW() >= start_time AND NOW() <= end_time and charging_station_id =#{chargingStationId} + + and find_in_set(#{internetUserId}, internet_user_id) > 0 and type =1 + + + and find_in_set(#{internetUserId}, internet_user_id) > 0 and ykc_status =1 + + + and find_in_set(#{internetUserId}, internet_user_id) > 0 and status =1 + + + and status =1 and find_in_set(#{source}, user_type) > 0 + + select * from xhpc_history_order where 1=1 + diff --git a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcStatisticsMapper.xml b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcStatisticsMapper.xml index 20c8e37b..64c8bfd2 100644 --- a/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcStatisticsMapper.xml +++ b/xhpc-modules/xhpc-order/src/main/resources/mapper/XhpcStatisticsMapper.xml @@ -34,6 +34,7 @@ + + + + + + + @@ -743,6 +843,21 @@ activity_total_price, + + mark, + + + motorcade_id, + + + clearing_type, + + + clearing_price, + + + act_total_price, + @@ -844,6 +959,21 @@ #{activityTotalPrice}, + + #{mark}, + + + #{motorcadeId}, + + + #{clearingType}, + + + #{clearingPrice}, + + + #{actTotalPrice}, + @@ -946,6 +1076,24 @@ activity_total_price, + + mark, + + + motorcade_id, + + + clearing_type, + + + clearing_price, + + + start_time, + + + act_total_price, + @@ -1044,6 +1192,24 @@ #{activityTotalPrice}, + + #{mark}, + + + #{motorcadeId}, + + + #{clearingType}, + + + #{clearingPrice}, + + + #{startTime}, + + + #{actTotalPrice}, + @@ -1078,9 +1244,11 @@ format(ifnull(sum(ss.activity_service_price_total),0), 2) activityServicePriceTotal, format(ifnull(sum(ss.activity_total_price),0), 2) activityTotalPrice, format(ifnull(sum(ss.act_price),0), 2) actPrice, + format(ifnull(sum(ss.clearing_price),0), 2) clearingPrice, format(ifnull(sum(ss.act_power_price),0), 2) actPowerPrice, format(ifnull(sum(ss.act_service_price),0), 2) actServicePrice, - format(ifnull(sum(ss.act_service_price + ss.act_power_price),0), 2) actTotalPrice, + format(ifnull(sum(ss.act_total_price),0), 2) actTotalPrice, + format(ifnull(sum(ss.act_total_price-ss.clearing_price),0), 2) actClearingPrice, format(ifnull(sum(ss.promotion_discount),0), 2) promotionDiscount, format(ifnull(sum(ss.internet_commission),0), 2) internetCommission, format(ifnull(sum(ss.internet_svc_commission),0), 2) internetSvcCommission, @@ -1100,6 +1268,13 @@ and ss.create_time <= #{endTime} + + + and ss.start_time >= #{beginStartTime} + + + and ss.start_time <= #{beginEndTime} + and ss.operator_id =#{operatorId} @@ -1174,6 +1349,12 @@ and charging_station_id in (select charging_station_id from xhpc_charging_station where operator_id=#{logOperatorId}) + + and source =1 and user_id=#{logOperatorId} + + + and source =4 and motorcade_id=#{logOperatorId} + and charging_station_id in (select charging_station_id from xhpc_user_privilege where user_id=#{logOperatorId}) @@ -1259,6 +1440,12 @@ and charging_station_id in (select charging_station_id from xhpc_user_privilege where user_id=#{logOperatorId}) + + and source =1 and user_id=#{logOperatorId} + + + and source =4 and motorcade_id=#{logOperatorId} + diff --git a/xhpc-modules/xhpc-payment/pom.xml b/xhpc-modules/xhpc-payment/pom.xml index 3c43cfbf..c3504339 100644 --- a/xhpc-modules/xhpc-payment/pom.xml +++ b/xhpc-modules/xhpc-payment/pom.xml @@ -85,6 +85,11 @@ com.ruoyi ruoyi-common-log + + com.squareup.okhttp3 + okhttp + 3.14.9 + diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java index ec3fc951..a082f7d2 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java @@ -182,7 +182,96 @@ public class AlipayPaymentController { return AjaxResult.error("生成订单失败,请稍后在试"); } + @Log(title = "欠费支付", businessType = BusinessType.INSERT) + @NoRepeatSubmit(lockTime = 3) + @PostMapping("/arrearsPayment") + @ApiOperation(value = "欠费支付") + public AjaxResult arrearsPayment(HttpServletRequest servletRequest, @RequestBody Map map) throws Exception { + String openid = StringUtils.valueOf(map.get("openid")); + if (StringUtils.isEmpty(openid)) { + return AjaxResult.error(HttpStatus.NOT_NULL, "openid不能为空"); + } + //总金额(是)订单总金额,单位为元 + String amount = StringUtils.valueOf(map.get("amount")); + if (StringUtils.isEmpty(amount)) { + return AjaxResult.error(HttpStatus.NOT_NULL, "充值金额不能为空"); + } + //用户信息id + String userId = StringUtils.valueOf(map.get("userId")); + if (StringUtils.isEmpty(userId)) { + return AjaxResult.error(HttpStatus.NOT_NULL, "用户信息不能为空"); + } + LoginUser loginUser = tokenService.getLoginUser(servletRequest); + Long userid = loginUser.getUserid(); + Integer userType = loginUser.getUserType(); + String tenantId = loginUser.getTenantId(); + if(UserTypeUtil.CUSTOMERS_TYPE.equals(userType)){ + return AjaxResult.error(HttpStatus.ERROR_STATUS, "大客户不支持充值,请让管理员在平台充值"); + } + Map refundOrder = iXhpcRefundOrderService.getNotRefundOrder(userid,userType,tenantId); + if (StringUtils.isNotNull(refundOrder)) { + return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "用户存正在退款"); + } + String orderNumber = StringUtils.numFormat(userid, 1, StatusConstants.FLOWING_WATER_RECHARGE_TYPE); + + XhpcSettingConfig xhpcSettingConfig = xhpcCommonPayment.getXhpcSettingConfigTenantId(UserTypeUtil.OPERATION_ALI_PAY_TYPE, tenantId); + if(xhpcSettingConfig ==null){ + return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "支付宝充值失败,继续充值请联系客服"); + } + //生成充值订单 + XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.addRechargeOrder(userId+"", new BigDecimal(amount), "2", orderNumber,userType,null); + String attach = attachYu(StringUtils.valueOf(xhpcRechargeOrder.getRechargeOrderId()), StringUtils.valueOf(amount), null, orderNumber); + + /** 初始化 **/ + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + /** 支付宝网关 **/ + certAlipayRequest.setServerUrl(xhpcSettingConfig.getZhbServerUrl()); + /** 应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024 **/ + certAlipayRequest.setAppId(xhpcSettingConfig.getZfbAppId()); + /** 应用私钥, 如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602471154?ant_source=antsupport **/ + certAlipayRequest.setPrivateKey(xhpcSettingConfig.getZfbPrivateKey()); + /** 应用公钥证书路径,下载后保存位置的绝对路径 **/ + certAlipayRequest.setCertPath(xhpcSettingConfig.getZfbAppCertPublicKey()); + /** 支付宝公钥证书路径,下载后保存位置的绝对路径 **/ + certAlipayRequest.setAlipayPublicCertPath(xhpcSettingConfig.getZfbAlipayCertPublicKeyRsa()); + /** 支付宝根证书路径,下载后保存位置的绝对路径 **/ + certAlipayRequest.setRootCertPath(xhpcSettingConfig.getZfbAlipayRootCert()); + /** 设置签名类型 **/ + certAlipayRequest.setSignType("RSA2"); + /** 设置请求格式,固定值json **/ + certAlipayRequest.setFormat("json"); + /** 设置编码格式 **/ + certAlipayRequest.setCharset("UTF-8"); + AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); + //AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", environment.getProperty("ALIPAYAPPID"), environment.getProperty("ALIPAYPRIVATEKEY"), "json", "utf-8", environment.getProperty("ALIPAYPUBLICKEY"), "RSA2"); + AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); + String encode = URLEncoder.encode(attach); + + request.setBizContent("{" + "\"out_trade_no\":\""+orderNumber+"\"," + + "\"product_code\":\"JSAPI_PAY\"," + + "\"op_app_id\":\"2021002156615717\"," + + "\"total_amount\":"+amount+"," + + "\"subject\":\"翔桦充电\"," + + "\"timeout_express\":\"30m\"," + + "\"passback_params\":\""+encode+"\"," + + "\"buyer_id\":\""+openid+"\"" + + "}"); + request.setNotifyUrl(xhpcSettingConfig.getZfbCallbackUrl()); + try { + //这里和普通的接口调用不同,使用的是sdkExecute + AlipayTradeCreateResponse response = alipayClient.certificateExecute(request); + if(response.isSuccess()){ + String trade_no = response.getTradeNo();// 获取返回的tradeNO。 + return AjaxResult.success(trade_no); + } else { + return AjaxResult.error("生成订单失败,请稍后在试!"); + } + } catch (AlipayApiException e) { + e.printStackTrace(); + } + return AjaxResult.error("生成订单失败,请稍后在试"); + } /** * 2 * 支付宝服务器异步通知url * 3 * @throws Exception diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/TransferToUser.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/TransferToUser.java new file mode 100644 index 00000000..463b70b5 --- /dev/null +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/TransferToUser.java @@ -0,0 +1,199 @@ +package com.xhpc.payment.controller; + +import com.google.gson.annotations.SerializedName; +import com.google.gson.annotations.Expose; +import com.xhpc.payment.util.WXPayUtility; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +/** + * @author yuyang + * @Date 2026-05-26 15:47 + */ +public class TransferToUser { + private static String HOST = "https://api.mch.weixin.qq.com"; + private static String METHOD = "POST"; + private static String PATH = "/v3/fund-app/mch-transfer/transfer-bills"; + + public static void main(String[] args) { + // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/merchant/4013070756 + TransferToUser client = new TransferToUser( + "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756 + "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053 + "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 + "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816 + "/path/to/wxp_pub.pem" // 微信支付公钥文件路径,本地文件路径 + ); + + TransferToUserRequest request = new TransferToUserRequest(); + request.appid = "wxf636efh567hg4356"; + request.outBillNo = "plfk2020042013"; + request.transferSceneId = "1000"; + request.openid = "o-MYE42l80oelYMDE34nYD456Xoy"; + request.userName = client.encrypt("user_name"); + request.transferAmount = 400000L; + request.transferRemark = "新会员开通有礼"; + request.notifyUrl = "https://www.weixin.qq.com/wxpay/pay.php"; + request.userRecvPerception = "现金奖励"; + request.transferSceneReportInfos = new ArrayList<>(); + { + TransferSceneReportInfo transferSceneReportInfosItem0 = new TransferSceneReportInfo(); + transferSceneReportInfosItem0.infoType = "活动名称"; + transferSceneReportInfosItem0.infoContent = "新会员有礼"; + request.transferSceneReportInfos.add(transferSceneReportInfosItem0); + TransferSceneReportInfo transferSceneReportInfosItem1 = new TransferSceneReportInfo(); + transferSceneReportInfosItem1.infoType = "奖励说明"; + transferSceneReportInfosItem1.infoContent = "注册会员抽奖一等奖"; + request.transferSceneReportInfos.add(transferSceneReportInfosItem1); + }; + try { + TransferToUserResponse response = client.run(request); + // TODO: 请求成功,继续业务逻辑 + System.out.println(response); + } catch (WXPayUtility.ApiException e) { + // TODO: 请求失败,根据状态码执行不同的逻辑 + e.printStackTrace(); + } + } + + + + + public TransferToUserResponse run(TransferToUserRequest request) { + String uri = PATH; + String reqBody = WXPayUtility.toJson(request); + + Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); + reqBuilder.addHeader("Accept", "application/json"); + reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); + reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo,privateKey, METHOD, uri, reqBody)); + reqBuilder.addHeader("Content-Type", "application/json"); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), reqBody); + reqBuilder.method(METHOD, requestBody); + Request httpRequest = reqBuilder.build(); + + // 发送HTTP请求 + OkHttpClient client = new OkHttpClient.Builder().build(); + try (Response httpResponse = client.newCall(httpRequest).execute()) { + String respBody = WXPayUtility.extractBody(httpResponse); + if (httpResponse.code() >= 200 && httpResponse.code() < 300) { + // 2XX 成功,验证应答签名 + WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, + httpResponse.headers(), respBody); + + // 从HTTP应答报文构建返回数据 + return WXPayUtility.fromJson(respBody, TransferToUserResponse.class); + } else { + throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); + } + } catch (IOException e) { + throw new UncheckedIOException("Sending request to " + uri + " failed.", e); + } + } + + private final String mchid; + private final String certificateSerialNo; + private final PrivateKey privateKey; + private final String wechatPayPublicKeyId; + private final PublicKey wechatPayPublicKey; + + public TransferToUser(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { + this.mchid = mchid; + this.certificateSerialNo = certificateSerialNo; + this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); + this.wechatPayPublicKeyId = wechatPayPublicKeyId; + this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); + } + + public String encrypt(String plainText) { + return WXPayUtility.encrypt(this.wechatPayPublicKey, plainText); + } + + public static class TransferToUserRequest { + @SerializedName("appid") + public String appid; + + @SerializedName("out_bill_no") + public String outBillNo; + + @SerializedName("transfer_scene_id") + public String transferSceneId; + + @SerializedName("openid") + public String openid; + + @SerializedName("user_name") + public String userName; + + @SerializedName("transfer_amount") + public Long transferAmount; + + @SerializedName("transfer_remark") + public String transferRemark; + + @SerializedName("notify_url") + public String notifyUrl; + + @SerializedName("user_recv_perception") + public String userRecvPerception; + + @SerializedName("transfer_scene_report_infos") + public List transferSceneReportInfos = new ArrayList(); + } + + public static class TransferToUserResponse { + @SerializedName("out_bill_no") + public String outBillNo; + + @SerializedName("transfer_bill_no") + public String transferBillNo; + + @SerializedName("create_time") + public String createTime; + + @SerializedName("state") + public TransferBillStatus state; + + @SerializedName("package_info") + public String packageInfo; + } + + public static class TransferSceneReportInfo { + @SerializedName("info_type") + public String infoType; + + @SerializedName("info_content") + public String infoContent; + } + + public enum TransferBillStatus { + @SerializedName("ACCEPTED") + ACCEPTED, + @SerializedName("PROCESSING") + PROCESSING, + @SerializedName("WAIT_USER_CONFIRM") + WAIT_USER_CONFIRM, + @SerializedName("TRANSFERING") + TRANSFERING, + @SerializedName("SUCCESS") + SUCCESS, + @SerializedName("FAIL") + FAIL, + @SerializedName("CANCELING") + CANCELING, + @SerializedName("CANCELLED") + CANCELLED + } + +} diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java index b3d46dd0..3dad951f 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java @@ -208,6 +208,123 @@ public class WxPaymentController { return AjaxResult.success(sign); } + + + @Log(title = "欠费支付", businessType = BusinessType.INSERT) + @NoRepeatSubmit(lockTime = 3) + @PostMapping("/arrearsPayment") + @ApiOperation(value = "欠费支付") + public AjaxResult arrearsPayment(HttpServletRequest servletRequest, @RequestBody Map map) throws Exception { + String openid = StringUtils.valueOf(map.get("openid")); + if (StringUtils.isEmpty(openid)) { + return AjaxResult.error(HttpStatus.NOT_NULL, "openid不能为空"); + } + //总金额(是)订单总金额,单位为分 + String amount = StringUtils.valueOf(map.get("amount")); + if (StringUtils.isEmpty(amount)) { + return AjaxResult.error(HttpStatus.NOT_NULL, "充值金额不能为空"); + } + + //用户信息id + if(map.get("userId") ==null || "".equals(map.get("userId").toString())){ + return AjaxResult.error(HttpStatus.NOT_NULL, "请在我的里面进行充值"); + } + String userId = StringUtils.valueOf(map.get("userId")); + + LoginUser loginUser = tokenService.getLoginUser(servletRequest); + Long userid = loginUser.getUserid(); + Integer userType = loginUser.getUserType(); + String tenantId = loginUser.getTenantId(); + + if(UserTypeUtil.CUSTOMERS_TYPE.equals(userType)){ + return AjaxResult.error(HttpStatus.ERROR_STATUS, "大客户不支持充值,请让管理员在平台充值"); + } + + Map refundOrder = iXhpcRefundOrderService.getNotRefundOrder(userid,userType,tenantId); + if (StringUtils.isNotNull(refundOrder)) { + return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "用户存正在退款"); + } + BigDecimal amount1 = new BigDecimal(amount).multiply(new BigDecimal(100)); + String orderNumber = StringUtils.numFormat(Long.parseLong(userId), 1, StatusConstants.FLOWING_WATER_RECHARGE_TYPE); + if (amount1.compareTo(new BigDecimal(0.0))==0) { + return AjaxResult.error(HttpStatus.NOT_NULL, "充值金额不能为0"); + } + XhpcSettingConfig xhpcSettingConfig = xhpcCommonPayment.getXhpcSettingConfigTenantId(UserTypeUtil.OPERATION_WX_TYPE, tenantId); + if(xhpcSettingConfig ==null){ + return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "微信充值失败,继续充值请联系客服"); + } + //生成充值订单 + XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.addRechargeOrder(userId, new BigDecimal(amount), "1", orderNumber,userType,null); + //附加数据(否) + String attach = attachYu(StringUtils.valueOf(xhpcRechargeOrder.getRechargeOrderId()), StringUtils.valueOf(amount), null, orderNumber); + //商品描述(是) + String body = "用户充值"; + //商户订单号(是) + String outTradeNo = orderNumber; + int Fee = amount1.intValue(); + //终端ip(是) + String spbillCreateIp = getRemoteLoginUserIp(servletRequest); + //交易类型(是) + String tradeType = "JSAPI"; + Date date = new Date(); + //微信过期时间格式 + SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMddHHmmss"); + //过期时间半个小时 + Date expireTime = new Date(date.getTime() + StatusConstants.EXPIRE_TIME); + String timeStr = format1.format(expireTime); + //发送请求 + PrintWriter out = null; + BufferedReader in = null; + StringBuffer result = new StringBuffer(); + try { + URL realUrl = new URL(xhpcSettingConfig.getWxPaymentUrl()); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("Content-Type", "text/xml"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + out.print(createXMLParam(Fee, attach, tradeType, spbillCreateIp, outTradeNo, body, timeStr, xhpcSettingConfig.getWxCallbackUrl(), xhpcSettingConfig.getWxAppId(), xhpcSettingConfig.getWxMchId(), xhpcSettingConfig.getWxMchKey(), openid)); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result.append(line); + System.out.println(result); + } + } catch (Exception e) { + e.printStackTrace(); + } + //使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + //app + Map sign = createSign(result.toString(), Double.parseDouble(amount),xhpcSettingConfig.getWxMchKey()); + return AjaxResult.success(sign); + } + + + /** * 生成签名 * diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcRefundAuditController.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcRefundAuditController.java index bf94ac92..bd1bb88b 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcRefundAuditController.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcRefundAuditController.java @@ -10,6 +10,7 @@ import com.alipay.api.domain.AlipayFundTransUniTransferModel; import com.alipay.api.domain.Participant; import com.alipay.api.request.AlipayFundTransUniTransferRequest; import com.alipay.api.response.AlipayFundTransUniTransferResponse; +import com.google.gson.annotations.SerializedName; import com.xhpc.common.api.SmsService; import com.xhpc.common.api.WorkOrderYuService; import com.xhpc.common.core.constant.HttpStatus; @@ -37,6 +38,8 @@ import com.xhpc.payment.service.IXhpcRefundAuditService; import com.xhpc.payment.service.IXhpcRefundOrderService; import com.xhpc.payment.service.IXhpcUserAccountStatementService; import com.xhpc.payment.service.impl.XhpcUserAccountStatementServiceImpl; +import com.xhpc.payment.util.TransferBillStatus; +import com.xhpc.payment.util.WXPayUtility; import com.xhpc.system.api.model.LoginUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -65,10 +68,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.math.BigDecimal; import java.security.KeyStore; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @EnableScheduling @RestController @@ -306,6 +306,8 @@ public class XhpcRefundAuditController extends BaseController { return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单状态不能退款"); } + + CloseableHttpClient httpClient = null; try { //证书的地址 @@ -828,4 +830,149 @@ public class XhpcRefundAuditController extends BaseController { } } + //新版微信商户退款到零钱 + public AjaxResult enterpriseCheckOutYu(@RequestBody XhpcRefundAudit xhpcRefundAudit) { + //只有审核通过才能退款 + XhpcRefundOrder refundOrder = new XhpcRefundOrder(); + Long refundOrderId = xhpcRefundAudit.getRefundOrderId(); + refundOrder.setRefundOrderId(refundOrderId); + + Map xhpcRefundOrder = iXhpcRefundOrderService.info(xhpcRefundAudit.getRefundOrderId()); + if (StringUtils.isNull(xhpcRefundOrder)) { + return AjaxResult.error(HttpStatus.DATA_ERROR, "订单不存在"); + } + int source = Integer.parseInt(xhpcRefundOrder.get("source").toString()); + + String userId = StringUtils.valueOf(xhpcRefundOrder.get("userId")); + String phone = ""; + if (source == 0 || (source == 1 && Long.valueOf(userId) > 10000)) { + phone = xhpcRefundOrder.get("phone").toString(); + } else { + phone = xhpcRefundOrder.get("communityPhone").toString(); + } + logger.info("++++++++++++xhpcRefundOrder++++++++++++++++"); + logger.info("++++++++++++xhpcRefundOrder++++++++++++++++" + xhpcRefundOrder.toString()); + logger.info("++++++++++++xhpcRefundOrder++++++++++++++++"); + + + BigDecimal amount = new BigDecimal(xhpcRefundOrder.get("amount").toString()); + logger.info("++++++++++++amount++++++++++++++++" + amount); + String amountRefundOrder = "-" + amount.toString(); + String tenantId = StringUtils.valueOf(xhpcRefundOrder.get("tenantId")); + XhpcSettingConfig xhpcSettingConfig = xhpcCommonPayment.getXhpcSettingConfigTenantId(UserTypeUtil.OPERATION_WX_TYPE, xhpcRefundOrder.get("tenantId").toString()); + if (xhpcSettingConfig == null) { + refundOrder.setStatus(2); + refundOrder.setRemark("订单状态不能退款"); + updateXhpcRefundOrder(refundOrder, amountRefundOrder, userId, phone, 2, source, tenantId); + return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单状态不能退款"); + } + + String examineStatus = StringUtils.valueOf(xhpcRefundOrder.get("examineStatus")); + if (!"1".equals(examineStatus)) { + refundOrder.setStatus(2); + refundOrder.setRemark("订单状态不能退款"); + updateXhpcRefundOrder(refundOrder, amountRefundOrder, userId, phone, 2, source, tenantId); + return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单状态不能退款"); + } + String status = StringUtils.valueOf(xhpcRefundOrder.get("status")); + if (!"0".equals(status)) { + refundOrder.setStatus(2); + refundOrder.setRemark("订单状态不能退款"); + updateXhpcRefundOrder(refundOrder, amountRefundOrder, userId, phone, 2, source, tenantId); + return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单状态不能退款"); + } + CloseableHttpClient httpClient = null; + try { + //证书的地址 + //String certPath = ConfigListener.getConf().get("certPath"); + //System.out.println("certPath:"+certPath); + httpClient = initCert(xhpcSettingConfig); + } catch (Exception e) { + e.printStackTrace(); + + } + String orderOutNumber = StringUtils.valueOf(xhpcRefundOrder.get("refundOrderNumber")); + String openId = StringUtils.valueOf(xhpcRefundOrder.get("openId")); + //Double amount = Double.parseDouble(StringUtils.valueOf(xhpcRefundOrder.get("amount"))); + //退款金额单位为分 + BigDecimal value = amount.multiply(new BigDecimal(100)); + Integer refund_fee = value.intValue(); + if (refund_fee <= 0) { + refundOrder.setStatus(2); + refundOrder.setRemark("订单金额出错"); + updateXhpcRefundOrder(refundOrder,amountRefundOrder,userId,phone,2,source,tenantId); + return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单金额出错"); + } + if(UserTypeUtil.USER_TYPE.equals(source)){ + Map appUserInfo = xhpcUserAccountStatementMapper.appUserInfo(Long.parseLong(userId)); + String balance = StringUtils.valueOf(appUserInfo.get("balance")); + if (StringUtils.isNull(appUserInfo)) { + refundOrder.setStatus(2); + refundOrder.setRemark("用户不存在"); + updateXhpcRefundOrder(refundOrder,amountRefundOrder,userId,phone,2,source,tenantId); + return AjaxResult.error(HttpStatus.DATA_ERROR, "用户不存在"); + } + BigDecimal surplus = BigDecimal.valueOf(Double.valueOf(balance)).subtract(amount); + if (surplus.compareTo(BigDecimal.ZERO) == -1) { + refundOrder.setStatus(2); + refundOrder.setRemark("余额不足"); + updateXhpcRefundOrder(refundOrder,amountRefundOrder,userId,phone,2,source,tenantId); + return AjaxResult.error(HttpStatus.ERROR_STATUS, "余额不足"); + } + }else if(UserTypeUtil.COMMUNIT_TYPE.equals(source)){ + Map communityPersonnel = iXhpcRefundAuditService.getCommunityPersonnelById(Long.parseLong(userId), tenantId); + if (StringUtils.isNull(communityPersonnel)) { + refundOrder.setStatus(2); + refundOrder.setRemark("用户不存在"); + updateXhpcRefundOrder(refundOrder,amountRefundOrder,userId,phone,2,source,tenantId); + return AjaxResult.error(HttpStatus.DATA_ERROR, "用户不存在"); + } + String balance = StringUtils.valueOf(communityPersonnel.get("balance")); + BigDecimal surplus = BigDecimal.valueOf(Double.valueOf(balance)).subtract(amount); + if (surplus.compareTo(BigDecimal.ZERO) == -1) { + refundOrder.setStatus(2); + refundOrder.setRemark("余额不足"); + updateXhpcRefundOrder(refundOrder,amountRefundOrder,userId,phone,2,source,tenantId); + return AjaxResult.error(HttpStatus.ERROR_STATUS, "余额不足"); + } + }else if(UserTypeUtil.INTERNET_TYPE.equals(source)){ + System.out.println("================获取退款川逸充用户信息========================================"); + System.out.println("================获取退款川逸充用户信息========================================"); + System.out.println("================获取退款川逸充用户信息========================================"); + Map appInternetUser = iXhpcRefundAuditService.getXhpcAppInternetUserById(Long.parseLong(userId), tenantId); + if (StringUtils.isNull(appInternetUser)) { + refundOrder.setStatus(2); + refundOrder.setRemark("用户不存在"); + updateXhpcRefundOrder(refundOrder,amountRefundOrder,userId,phone,2,source,tenantId); + return AjaxResult.error(HttpStatus.DATA_ERROR, "用户不存在"); + } + String balance = StringUtils.valueOf(appInternetUser.get("balance")); + BigDecimal surplus = BigDecimal.valueOf(Double.valueOf(balance)).subtract(amount); + if (surplus.compareTo(BigDecimal.ZERO) == -1) { + refundOrder.setStatus(2); + refundOrder.setRemark("余额不足"); + updateXhpcRefundOrder(refundOrder,amountRefundOrder,userId,phone,2,source,tenantId); + return AjaxResult.error(HttpStatus.ERROR_STATUS, "余额不足"); + } + }else{ + return AjaxResult.error(HttpStatus.DATA_ERROR, "用户不存在"); + } + try{ + + }catch (Exception e){ + + } + TransferToUser client = new TransferToUser( + xhpcSettingConfig.getWxMchId(), // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756 + "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053 + "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 + "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816 + "/path/to/wxp_pub.pem" // 微信支付公钥文件路径,本地文件路径 + ); + + + + return null; + } + } diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcUserAccountStatementServiceImpl.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcUserAccountStatementServiceImpl.java index 96b8ee66..d7cd35c5 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcUserAccountStatementServiceImpl.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcUserAccountStatementServiceImpl.java @@ -56,7 +56,7 @@ public class XhpcUserAccountStatementServiceImpl extends BaseService implements /** * 用户流水分页列表 * - * @param C端用户id + * @param * @return */ @Override diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/util/TransferBillStatus.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/util/TransferBillStatus.java new file mode 100644 index 00000000..c026a846 --- /dev/null +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/util/TransferBillStatus.java @@ -0,0 +1,26 @@ +package com.xhpc.payment.util; + +import com.google.gson.annotations.SerializedName; + +/** + * @author yuyang + * @Date 2026-05-26 15:45 + */ +public enum TransferBillStatus { + @SerializedName("ACCEPTED") + ACCEPTED, + @SerializedName("PROCESSING") + PROCESSING, + @SerializedName("WAIT_USER_CONFIRM") + WAIT_USER_CONFIRM, + @SerializedName("TRANSFERING") + TRANSFERING, + @SerializedName("SUCCESS") + SUCCESS, + @SerializedName("FAIL") + FAIL, + @SerializedName("CANCELING") + CANCELING, + @SerializedName("CANCELLED") + CANCELLED +} diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/util/WXPayUtility.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/util/WXPayUtility.java new file mode 100644 index 00000000..c1206f2f --- /dev/null +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/util/WXPayUtility.java @@ -0,0 +1,904 @@ +package com.xhpc.payment.util; +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import java.util.List; +import java.util.Map.Entry; +import okhttp3.Headers; +import okhttp3.Response; +import okio.BufferedSource; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.SecureRandom; +import java.security.Signature; +import java.security.SignatureException; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.time.DateTimeException; +import java.time.Duration; +import java.time.Instant; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.security.MessageDigest; +import java.io.InputStream; +import org.bouncycastle.crypto.digests.SM3Digest; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.Security; +/** + * 微信支付工具类 + * + * @author yuyang + * @Date 2026-05-26 15:41 + */ +public class WXPayUtility { + private static final Gson gson = new GsonBuilder() + .disableHtmlEscaping() + .addSerializationExclusionStrategy(new ExclusionStrategy() { + @Override + public boolean shouldSkipField(FieldAttributes fieldAttributes) { + final Expose expose = fieldAttributes.getAnnotation(Expose.class); + return expose != null && !expose.serialize(); + } + + @Override + public boolean shouldSkipClass(Class aClass) { + return false; + } + }) + .addDeserializationExclusionStrategy(new ExclusionStrategy() { + @Override + public boolean shouldSkipField(FieldAttributes fieldAttributes) { + final Expose expose = fieldAttributes.getAnnotation(Expose.class); + return expose != null && !expose.deserialize(); + } + + @Override + public boolean shouldSkipClass(Class aClass) { + return false; + } + }) + .create(); + private static final char[] SYMBOLS = + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); + private static final SecureRandom random = new SecureRandom(); + + /** + * 将 Object 转换为 JSON 字符串 + */ + public static String toJson(Object object) { + return gson.toJson(object); + } + + /** + * 将 JSON 字符串解析为特定类型的实例 + */ + public static T fromJson(String json, Class classOfT) throws JsonSyntaxException { + return gson.fromJson(json, classOfT); + } + + /** + * 从公私钥文件路径中读取文件内容 + * + * @param keyPath 文件路径 + * @return 文件内容 + */ + private static String readKeyStringFromPath(String keyPath) { + try { + return new String(Files.readAllBytes(Paths.get(keyPath)), StandardCharsets.UTF_8); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + /** + * 读取 PKCS#8 格式的私钥字符串并加载为私钥对象 + * + * @param keyString 私钥文件内容,以 -----BEGIN PRIVATE KEY----- 开头 + * @return PrivateKey 对象 + */ + public static PrivateKey loadPrivateKeyFromString(String keyString) { + try { + keyString = keyString.replace("-----BEGIN PRIVATE KEY-----", "") + .replace("-----END PRIVATE KEY-----", "") + .replaceAll("\\s+", ""); + return KeyFactory.getInstance("RSA").generatePrivate( + new PKCS8EncodedKeySpec(Base64.getDecoder().decode(keyString))); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException(e); + } catch (InvalidKeySpecException e) { + throw new IllegalArgumentException(e); + } + } + + /** + * 从 PKCS#8 格式的私钥文件中加载私钥 + * + * @param keyPath 私钥文件路径 + * @return PrivateKey 对象 + */ + public static PrivateKey loadPrivateKeyFromPath(String keyPath) { + return loadPrivateKeyFromString(readKeyStringFromPath(keyPath)); + } + + /** + * 读取 PKCS#8 格式的公钥字符串并加载为公钥对象 + * + * @param keyString 公钥文件内容,以 -----BEGIN PUBLIC KEY----- 开头 + * @return PublicKey 对象 + */ + public static PublicKey loadPublicKeyFromString(String keyString) { + try { + keyString = keyString.replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", "") + .replaceAll("\\s+", ""); + return KeyFactory.getInstance("RSA").generatePublic( + new X509EncodedKeySpec(Base64.getDecoder().decode(keyString))); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException(e); + } catch (InvalidKeySpecException e) { + throw new IllegalArgumentException(e); + } + } + + /** + * 从 PKCS#8 格式的公钥文件中加载公钥 + * + * @param keyPath 公钥文件路径 + * @return PublicKey 对象 + */ + public static PublicKey loadPublicKeyFromPath(String keyPath) { + return loadPublicKeyFromString(readKeyStringFromPath(keyPath)); + } + + /** + * 创建指定长度的随机字符串,字符集为[0-9a-zA-Z],可用于安全相关用途 + */ + public static String createNonce(int length) { + char[] buf = new char[length]; + for (int i = 0; i < length; ++i) { + buf[i] = SYMBOLS[random.nextInt(SYMBOLS.length)]; + } + return new String(buf); + } + + /** + * 使用公钥按照 RSA_PKCS1_OAEP_PADDING 算法进行加密 + * + * @param publicKey 加密用公钥对象 + * @param plaintext 待加密明文 + * @return 加密后密文 + */ + public static String encrypt(PublicKey publicKey, String plaintext) { + final String transformation = "RSA/ECB/OAEPWithSHA-1AndMGF1Padding"; + + try { + Cipher cipher = Cipher.getInstance(transformation); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + return Base64.getEncoder().encodeToString(cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8))); + } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { + throw new IllegalArgumentException("The current Java environment does not support " + transformation, e); + } catch (InvalidKeyException e) { + throw new IllegalArgumentException("RSA encryption using an illegal publicKey", e); + } catch (BadPaddingException | IllegalBlockSizeException e) { + throw new IllegalArgumentException("Plaintext is too long", e); + } + } + + /** + * 使用私钥按照 RSA_PKCS1_OAEP_PADDING 算法进行解密 + * + * @param privateKey 解密用私钥对象 + * @param ciphertext 待解密密文(Base64编码的字符串) + * @return 解密后明文 + */ + public static String rsaOaepDecrypt(PrivateKey privateKey, String ciphertext) { + final String transformation = "RSA/ECB/OAEPWithSHA-1AndMGF1Padding"; + + try { + Cipher cipher = Cipher.getInstance(transformation); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(ciphertext)); + return new String(decryptedBytes, StandardCharsets.UTF_8); + } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { + throw new IllegalArgumentException("The current Java environment does not support " + transformation, e); + } catch (InvalidKeyException e) { + throw new IllegalArgumentException("RSA decryption using an illegal privateKey", e); + } catch (BadPaddingException | IllegalBlockSizeException e) { + throw new IllegalArgumentException("Ciphertext decryption failed", e); + } + } + + public static String aesAeadDecrypt(byte[] key, byte[] associatedData, byte[] nonce, + byte[] ciphertext) { + final String transformation = "AES/GCM/NoPadding"; + final String algorithm = "AES"; + final int tagLengthBit = 128; + + try { + Cipher cipher = Cipher.getInstance(transformation); + cipher.init( + Cipher.DECRYPT_MODE, + new SecretKeySpec(key, algorithm), + new GCMParameterSpec(tagLengthBit, nonce)); + if (associatedData != null) { + cipher.updateAAD(associatedData); + } + return new String(cipher.doFinal(ciphertext), StandardCharsets.UTF_8); + } catch (InvalidKeyException + | InvalidAlgorithmParameterException + | BadPaddingException + | IllegalBlockSizeException + | NoSuchAlgorithmException + | NoSuchPaddingException e) { + throw new IllegalArgumentException(String.format("AesAeadDecrypt with %s Failed", + transformation), e); + } + } + + /** + * 使用私钥按照指定算法进行签名 + * + * @param message 待签名串 + * @param algorithm 签名算法,如 SHA256withRSA + * @param privateKey 签名用私钥对象 + * @return 签名结果 + */ + public static String sign(String message, String algorithm, PrivateKey privateKey) { + byte[] sign; + try { + Signature signature = Signature.getInstance(algorithm); + signature.initSign(privateKey); + signature.update(message.getBytes(StandardCharsets.UTF_8)); + sign = signature.sign(); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException("The current Java environment does not support " + algorithm, e); + } catch (InvalidKeyException e) { + throw new IllegalArgumentException(algorithm + " signature uses an illegal privateKey.", e); + } catch (SignatureException e) { + throw new RuntimeException("An error occurred during the sign process.", e); + } + return Base64.getEncoder().encodeToString(sign); + } + + /** + * 使用公钥按照特定算法验证签名 + * + * @param message 待签名串 + * @param signature 待验证的签名内容 + * @param algorithm 签名算法,如:SHA256withRSA + * @param publicKey 验签用公钥对象 + * @return 签名验证是否通过 + */ + public static boolean verify(String message, String signature, String algorithm, + PublicKey publicKey) { + try { + Signature sign = Signature.getInstance(algorithm); + sign.initVerify(publicKey); + sign.update(message.getBytes(StandardCharsets.UTF_8)); + return sign.verify(Base64.getDecoder().decode(signature)); + } catch (SignatureException e) { + return false; + } catch (InvalidKeyException e) { + throw new IllegalArgumentException("verify uses an illegal publickey.", e); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException("The current Java environment does not support" + algorithm, e); + } + } + + /** + * 根据微信支付APIv3请求签名规则构造 Authorization 签名 + * + * @param mchid 商户号 + * @param certificateSerialNo 商户API证书序列号 + * @param privateKey 商户API证书私钥 + * @param method 请求接口的HTTP方法,请使用全大写表述,如 GET、POST、PUT、DELETE + * @param uri 请求接口的URL + * @param body 请求接口的Body + * @return 构造好的微信支付APIv3 Authorization 头 + */ + public static String buildAuthorization(String mchid, String certificateSerialNo, + PrivateKey privateKey, + String method, String uri, String body) { + String nonce = createNonce(32); + long timestamp = Instant.now().getEpochSecond(); + + String message = String.format("%s\n%s\n%d\n%s\n%s\n", method, uri, timestamp, nonce, + body == null ? "" : body); + + String signature = sign(message, "SHA256withRSA", privateKey); + + return String.format( + "WECHATPAY2-SHA256-RSA2048 mchid=\"%s\",nonce_str=\"%s\",signature=\"%s\"," + + "timestamp=\"%d\",serial_no=\"%s\"", + mchid, nonce, signature, timestamp, certificateSerialNo); + } + + /** + * 计算输入流的哈希值 + * + * @param inputStream 输入流 + * @param algorithm 哈希算法名称,如 "SHA-256", "SHA-1" + * @return 哈希值的十六进制字符串 + */ + private static String calculateHash(InputStream inputStream, String algorithm) { + try { + MessageDigest digest = MessageDigest.getInstance(algorithm); + byte[] buffer = new byte[8192]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + digest.update(buffer, 0, bytesRead); + } + byte[] hashBytes = digest.digest(); + StringBuilder hexString = new StringBuilder(); + for (byte b : hashBytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + return hexString.toString(); + } catch (NoSuchAlgorithmException e) { + throw new UnsupportedOperationException(algorithm + " algorithm not available", e); + } catch (IOException e) { + throw new RuntimeException("Error reading from input stream", e); + } + } + + /** + * 计算输入流的 SHA256 哈希值 + * + * @param inputStream 输入流 + * @return SHA256 哈希值的十六进制字符串 + */ + public static String sha256(InputStream inputStream) { + return calculateHash(inputStream, "SHA-256"); + } + + /** + * 计算输入流的 SHA1 哈希值 + * + * @param inputStream 输入流 + * @return SHA1 哈希值的十六进制字符串 + */ + public static String sha1(InputStream inputStream) { + return calculateHash(inputStream, "SHA-1"); + } + + /** + * 计算输入流的 SM3 哈希值 + * + * @param inputStream 输入流 + * @return SM3 哈希值的十六进制字符串 + */ + public static String sm3(InputStream inputStream) { + // 确保Bouncy Castle Provider已注册 + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(new BouncyCastleProvider()); + } + + try { + SM3Digest digest = new SM3Digest(); + byte[] buffer = new byte[8192]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + digest.update(buffer, 0, bytesRead); + } + byte[] hashBytes = new byte[digest.getDigestSize()]; + digest.doFinal(hashBytes, 0); + + StringBuilder hexString = new StringBuilder(); + for (byte b : hashBytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + return hexString.toString(); + } catch (IOException e) { + throw new RuntimeException("Error reading from input stream", e); + } + } + + /** + * 对参数进行 URL 编码 + * + * @param content 参数内容 + * @return 编码后的内容 + */ + public static String urlEncode(String content) { + try { + return URLEncoder.encode(content, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + /** + * 对参数Map进行 URL 编码,生成 QueryString + * + * @param params Query参数Map + * @return QueryString + */ + public static String urlEncode(Map params) { + if (params == null || params.isEmpty()) { + return ""; + } + + StringBuilder result = new StringBuilder(); + for (Entry entry : params.entrySet()) { + if (entry.getValue() == null) { + continue; + } + + String key = entry.getKey(); + Object value = entry.getValue(); + if (value instanceof List) { + List list = (List) entry.getValue(); + for (Object temp : list) { + appendParam(result, key, temp); + } + } else { + appendParam(result, key, value); + } + } + return result.toString(); + } + + /** + * 将键值对 放入返回结果 + * + * @param result 返回的query string + * @param key 属性 + * @param value 属性值 + */ + private static void appendParam(StringBuilder result, String key, Object value) { + if (result.length() > 0) { + result.append("&"); + } + + String valueString; + // 如果是基本类型、字符串或枚举,直接转换;如果是对象,序列化为JSON + if (value instanceof String || value instanceof Number || + value instanceof Boolean || value instanceof Enum) { + valueString = value.toString(); + } else { + valueString = toJson(value); + } + + result.append(key) + .append("=") + .append(urlEncode(valueString)); + } + + /** + * 从应答中提取 Body + * + * @param response HTTP 请求应答对象 + * @return 应答中的Body内容,Body为空时返回空字符串 + */ + public static String extractBody(Response response) { + if (response.body() == null) { + return ""; + } + + try { + BufferedSource source = response.body().source(); + return source.readUtf8(); + } catch (IOException e) { + throw new RuntimeException(String.format("An error occurred during reading response body. " + + "Status: %d", response.code()), e); + } + } + + /** + * 根据微信支付APIv3应答验签规则对应答签名进行验证,验证不通过时抛出异常 + * + * @param wechatpayPublicKeyId 微信支付公钥ID + * @param wechatpayPublicKey 微信支付公钥对象 + * @param headers 微信支付应答 Header 列表 + * @param body 微信支付应答 Body + */ + public static void validateResponse(String wechatpayPublicKeyId, PublicKey wechatpayPublicKey, + Headers headers, + String body) { + String timestamp = headers.get("Wechatpay-Timestamp"); + String requestId = headers.get("Request-ID"); + try { + Instant responseTime = Instant.ofEpochSecond(Long.parseLong(timestamp)); + // 拒绝过期请求 + if (Duration.between(responseTime, Instant.now()).abs().toMinutes() >= 5) { + throw new IllegalArgumentException( + String.format("Validate response failed, timestamp[%s] is expired, request-id[%s]", + timestamp, requestId)); + } + } catch (DateTimeException | NumberFormatException e) { + throw new IllegalArgumentException( + String.format("Validate response failed, timestamp[%s] is invalid, request-id[%s]", + timestamp, requestId)); + } + String serialNumber = headers.get("Wechatpay-Serial"); + if (!Objects.equals(serialNumber, wechatpayPublicKeyId)) { + throw new IllegalArgumentException( + String.format("Validate response failed, Invalid Wechatpay-Serial, Local: %s, Remote: " + + "%s", wechatpayPublicKeyId, serialNumber)); + } + + String signature = headers.get("Wechatpay-Signature"); + String message = String.format("%s\n%s\n%s\n", timestamp, headers.get("Wechatpay-Nonce"), + body == null ? "" : body); + + boolean success = verify(message, signature, "SHA256withRSA", wechatpayPublicKey); + if (!success) { + throw new IllegalArgumentException( + String.format("Validate response failed,the WechatPay signature is incorrect.%n" + + "Request-ID[%s]\tresponseHeader[%s]\tresponseBody[%.1024s]", + headers.get("Request-ID"), headers, body)); + } + } + + /** + * 根据微信支付APIv3通知验签规则对通知签名进行验证,验证不通过时抛出异常 + * @param wechatpayPublicKeyId 微信支付公钥ID + * @param wechatpayPublicKey 微信支付公钥对象 + * @param headers 微信支付通知 Header 列表 + * @param body 微信支付通知 Body + */ + public static void validateNotification(String wechatpayPublicKeyId, + PublicKey wechatpayPublicKey, Headers headers, + String body) { + String timestamp = headers.get("Wechatpay-Timestamp"); + try { + Instant responseTime = Instant.ofEpochSecond(Long.parseLong(timestamp)); + // 拒绝过期请求 + if (Duration.between(responseTime, Instant.now()).abs().toMinutes() >= 5) { + throw new IllegalArgumentException( + String.format("Validate notification failed, timestamp[%s] is expired", timestamp)); + } + } catch (DateTimeException | NumberFormatException e) { + throw new IllegalArgumentException( + String.format("Validate notification failed, timestamp[%s] is invalid", timestamp)); + } + String serialNumber = headers.get("Wechatpay-Serial"); + if (!Objects.equals(serialNumber, wechatpayPublicKeyId)) { + throw new IllegalArgumentException( + String.format("Validate notification failed, Invalid Wechatpay-Serial, Local: %s, " + + "Remote: %s", + wechatpayPublicKeyId, + serialNumber)); + } + + String signature = headers.get("Wechatpay-Signature"); + String message = String.format("%s\n%s\n%s\n", timestamp, headers.get("Wechatpay-Nonce"), + body == null ? "" : body); + + boolean success = verify(message, signature, "SHA256withRSA", wechatpayPublicKey); + if (!success) { + throw new IllegalArgumentException( + String.format("Validate notification failed, WechatPay signature is incorrect.\n" + + "responseHeader[%s]\tresponseBody[%.1024s]", + headers, body)); + } + } + + /** + * 对微信支付通知进行签名验证、解析,同时将业务数据解密。验签名失败、解析失败、解密失败时抛出异常 + * @param apiv3Key 商户的 APIv3 Key + * @param wechatpayPublicKeyId 微信支付公钥ID + * @param wechatpayPublicKey 微信支付公钥对象 + * @param headers 微信支付请求 Header 列表 + * @param body 微信支付请求 Body + * @return 解析后的通知内容,解密后的业务数据可以使用 Notification.getPlaintext() 访问 + */ + public static Notification parseNotification(String apiv3Key, String wechatpayPublicKeyId, + PublicKey wechatpayPublicKey, Headers headers, + String body) { + validateNotification(wechatpayPublicKeyId, wechatpayPublicKey, headers, body); + Notification notification = gson.fromJson(body, Notification.class); + notification.decrypt(apiv3Key); + return notification; + } + + /** + * 微信支付API错误异常,发送HTTP请求成功,但返回状态码不是 2XX 时抛出本异常 + */ + public static class ApiException extends RuntimeException { + private static final long serialVersionUID = 2261086748874802175L; + + private final int statusCode; + private final String body; + private final Headers headers; + private final String errorCode; + private final String errorMessage; + + public ApiException(int statusCode, String body, Headers headers) { + super(String.format("微信支付API访问失败,StatusCode: [%s], Body: [%s], Headers: [%s]", statusCode, + body, headers)); + this.statusCode = statusCode; + this.body = body; + this.headers = headers; + + if (body != null && !body.isEmpty()) { + JsonElement code; + JsonElement message; + + try { + JsonObject jsonObject = gson.fromJson(body, JsonObject.class); + code = jsonObject.get("code"); + message = jsonObject.get("message"); + } catch (JsonSyntaxException ignored) { + code = null; + message = null; + } + this.errorCode = code == null ? null : code.getAsString(); + this.errorMessage = message == null ? null : message.getAsString(); + } else { + this.errorCode = null; + this.errorMessage = null; + } + } + + /** + * 获取 HTTP 应答状态码 + */ + public int getStatusCode() { + return statusCode; + } + + /** + * 获取 HTTP 应答包体内容 + */ + public String getBody() { + return body; + } + + /** + * 获取 HTTP 应答 Header + */ + public Headers getHeaders() { + return headers; + } + + /** + * 获取 错误码 (错误应答中的 code 字段) + */ + public String getErrorCode() { + return errorCode; + } + + /** + * 获取 错误消息 (错误应答中的 message 字段) + */ + public String getErrorMessage() { + return errorMessage; + } + } + + public static class Notification { + @SerializedName("id") + private String id; + @SerializedName("create_time") + private String createTime; + @SerializedName("event_type") + private String eventType; + @SerializedName("resource_type") + private String resourceType; + @SerializedName("summary") + private String summary; + @SerializedName("resource") + private Resource resource; + private String plaintext; + + public String getId() { + return id; + } + + public String getCreateTime() { + return createTime; + } + + public String getEventType() { + return eventType; + } + + public String getResourceType() { + return resourceType; + } + + public String getSummary() { + return summary; + } + + public Resource getResource() { + return resource; + } + + /** + * 获取解密后的业务数据(JSON字符串,需要自行解析) + */ + public String getPlaintext() { + return plaintext; + } + + private void validate() { + if (resource == null) { + throw new IllegalArgumentException("Missing required field `resource` in notification"); + } + resource.validate(); + } + + /** + * 使用 APIv3Key 对通知中的业务数据解密,解密结果可以通过 getPlainText 访问。 + * 外部拿到的 Notification 一定是解密过的,因此本方法没有设置为 public + * @param apiv3Key 商户APIv3 Key + */ + private void decrypt(String apiv3Key) { + validate(); + + plaintext = aesAeadDecrypt( + apiv3Key.getBytes(StandardCharsets.UTF_8), + resource.associatedData.getBytes(StandardCharsets.UTF_8), + resource.nonce.getBytes(StandardCharsets.UTF_8), + Base64.getDecoder().decode(resource.ciphertext) + ); + } + + public static class Resource { + @SerializedName("algorithm") + private String algorithm; + + @SerializedName("ciphertext") + private String ciphertext; + + @SerializedName("associated_data") + private String associatedData; + + @SerializedName("nonce") + private String nonce; + + @SerializedName("original_type") + private String originalType; + + public String getAlgorithm() { + return algorithm; + } + + public String getCiphertext() { + return ciphertext; + } + + public String getAssociatedData() { + return associatedData; + } + + public String getNonce() { + return nonce; + } + + public String getOriginalType() { + return originalType; + } + + private void validate() { + if (algorithm == null || algorithm.isEmpty()) { + throw new IllegalArgumentException("Missing required field `algorithm` in Notification" + + ".Resource"); + } + if (!Objects.equals(algorithm, "AEAD_AES_256_GCM")) { + throw new IllegalArgumentException(String.format("Unsupported `algorithm`[%s] in " + + "Notification.Resource", algorithm)); + } + + if (ciphertext == null || ciphertext.isEmpty()) { + throw new IllegalArgumentException("Missing required field `ciphertext` in Notification" + + ".Resource"); + } + + if (associatedData == null || associatedData.isEmpty()) { + throw new IllegalArgumentException("Missing required field `associatedData` in " + + "Notification.Resource"); + } + + if (nonce == null || nonce.isEmpty()) { + throw new IllegalArgumentException("Missing required field `nonce` in Notification" + + ".Resource"); + } + + if (originalType == null || originalType.isEmpty()) { + throw new IllegalArgumentException("Missing required field `originalType` in " + + "Notification.Resource"); + } + } + } + } + /** + * 根据文件名获取对应的Content-Type + * @param fileName 文件名 + * @return Content-Type字符串 + */ + public static String getContentTypeByFileName(String fileName) { + if (fileName == null || fileName.isEmpty()) { + return "application/octet-stream"; + } + + // 获取文件扩展名 + String extension = ""; + int lastDotIndex = fileName.lastIndexOf('.'); + if (lastDotIndex > 0 && lastDotIndex < fileName.length() - 1) { + extension = fileName.substring(lastDotIndex + 1).toLowerCase(); + } + + // 常见文件类型映射 + Map contentTypeMap = new HashMap<>(); + // 图片类型 + contentTypeMap.put("png", "image/png"); + contentTypeMap.put("jpg", "image/jpeg"); + contentTypeMap.put("jpeg", "image/jpeg"); + contentTypeMap.put("gif", "image/gif"); + contentTypeMap.put("bmp", "image/bmp"); + contentTypeMap.put("webp", "image/webp"); + contentTypeMap.put("svg", "image/svg+xml"); + contentTypeMap.put("ico", "image/x-icon"); + + // 文档类型 + contentTypeMap.put("pdf", "application/pdf"); + contentTypeMap.put("doc", "application/msword"); + contentTypeMap.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + contentTypeMap.put("xls", "application/vnd.ms-excel"); + contentTypeMap.put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + contentTypeMap.put("ppt", "application/vnd.ms-powerpoint"); + contentTypeMap.put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"); + + // 文本类型 + contentTypeMap.put("txt", "text/plain"); + contentTypeMap.put("html", "text/html"); + contentTypeMap.put("css", "text/css"); + contentTypeMap.put("js", "application/javascript"); + contentTypeMap.put("json", "application/json"); + contentTypeMap.put("xml", "application/xml"); + contentTypeMap.put("csv", "text/csv"); + + // 音视频类型 + contentTypeMap.put("mp3", "audio/mpeg"); + contentTypeMap.put("wav", "audio/wav"); + contentTypeMap.put("mp4", "video/mp4"); + contentTypeMap.put("avi", "video/x-msvideo"); + contentTypeMap.put("mov", "video/quicktime"); + + // 压缩文件类型 + contentTypeMap.put("zip", "application/zip"); + contentTypeMap.put("rar", "application/x-rar-compressed"); + contentTypeMap.put("7z", "application/x-7z-compressed"); + + + return contentTypeMap.getOrDefault(extension, "application/octet-stream"); + } +} diff --git a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcRechargeOrderMapper.xml b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcRechargeOrderMapper.xml index 1e150ee5..8a8ce986 100644 --- a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcRechargeOrderMapper.xml +++ b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcRechargeOrderMapper.xml @@ -201,6 +201,28 @@ and xro.source=#{source} and cup.account like concat('%', #{phone}, '%') + + + and xro.source=#{source} + + + and xro.source=#{source} + + + and xro.source=#{source} + + + + + and xau.phone like concat('%', #{phone}, '%') + + + and cop.account like concat('%', #{phone}, '%') + + + and cup.account like concat('%', #{phone}, '%') + + and xro.recharge_order_number like concat('%', #{rechargeOrderNumber}, '%') diff --git a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcUserAccountStatementMapper.xml b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcUserAccountStatementMapper.xml index 058d939f..b8dfeed7 100644 --- a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcUserAccountStatementMapper.xml +++ b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcUserAccountStatementMapper.xml @@ -220,23 +220,110 @@ + select + balance, + app_user_id AS appUserId, + weixin_open_id as weixinOpenId, + alipay_open_id as alipayOpenId + from xhpc_app_user where app_user_id=#{appUserId} and tenant_id=#{tenantId} + + + + INSERT INTO xhpc_app_user diff --git a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommonMapper.xml b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommonMapper.xml index e03718f4..13cca224 100644 --- a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommonMapper.xml +++ b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommonMapper.xml @@ -25,6 +25,7 @@ xau.del_flag delFlag, concat(0) as userType, concat("C") as userTypeName, + concat(0) as clearingType, xau.tenant_id tenantId, xau.soc_protect socProtect, ten.status tenantStatus, @@ -68,6 +69,7 @@ xcp.tenant_id tenantId, xcp.del_flag delFlag, concat(2) as userType, + xcp.clearing_type as clearingType, xcp.soc_protect socProtect, ten.status tenantStatus, concat("ST") as userTypeName, @@ -113,6 +115,7 @@ xcp.del_flag delFlag, xcp.tenant_id tenantId, concat(3) as userType, + xcp.clearing_type as clearingType, xcp.soc_protect socProtect, ten.status tenantStatus, concat("BE") as userTypeName, @@ -158,6 +161,7 @@ xau.alipay_login as alipayLogin, xau.del_flag delFlag, concat(1) as userType, + concat(0) as clearingType, concat("CYC") as userTypeName, xau.tenant_id tenantId, xau.soc_protect socProtect, @@ -179,8 +183,99 @@ + - + + + + + diff --git a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommunityMapper.xml b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommunityMapper.xml index dcbd3b59..3d48e1ae 100644 --- a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommunityMapper.xml +++ b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCommunityMapper.xml @@ -249,6 +249,7 @@ SELECT community_personnel_id AS communityPersonnelId, name AS name, + clearing_type as clearingType, community_id AS communityId, weixin_open_id as weixinOpenId, alipay_open_id AS alipayOpenId, @@ -336,6 +337,9 @@ create_type, + + clearing_type, + @@ -395,6 +399,9 @@ #{createType}, + + #{clearingType}, + @@ -402,6 +409,7 @@ select community_personnel_id AS communityPersonnelId, name AS name, + clearing_type as clearingType, community_id AS communityId, account AS account, phone AS phone, @@ -446,6 +454,7 @@ update_by = #{updateBy}, remark = #{remark}, is_refund_application = #{isRefundApplication}, + clearing_type=#{clearingType}, where community_personnel_id=#{communityPersonnelId} diff --git a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCustomersMapper.xml b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCustomersMapper.xml index 8640e8d5..8b31ee5d 100644 --- a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCustomersMapper.xml +++ b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcCustomersMapper.xml @@ -256,6 +256,7 @@ name AS name, customers_id AS customersId, account AS account, + clearing_type as clearingType, phone AS phone, recharge_money AS rechargeMoney, consume_money AS consumeMoney, @@ -340,6 +341,7 @@ create_type, + clearing_type, @@ -399,6 +401,7 @@ #{createType}, + #{clearingType}, @@ -406,6 +409,7 @@ select customers_personnel_id AS customersPersonnelId, name AS name, + clearing_type as clearingType, customers_id AS customersId, account AS account, phone AS phone, @@ -449,6 +453,7 @@ update_time = #{updateTime}, update_by = #{updateBy}, remark = #{remark}, + clearing_type = #{clearingType}, where customers_personnel_id=#{customersPersonnelId} @@ -472,4 +477,18 @@ and me.charging_station_id=#{chargingStationId} + + + + diff --git a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcMotorcadeMapper.xml b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcMotorcadeMapper.xml index 8b824655..7e0502fe 100644 --- a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcMotorcadeMapper.xml +++ b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcMotorcadeMapper.xml @@ -25,6 +25,10 @@ + + + + + + + + insert into xhpc_motorcade @@ -126,9 +174,54 @@ total_amount, + + remaining_amount, + + + consumption_amount, + + + allocated_amount, + mark, + + peak_sharp_electricity, + + + peak_sharp_service, + + + peak_electricity, + + + peak_service, + + + flat_electricity, + + + flat_service, + + + valley_electricity, + + + valley_service, + + + account, + + + vin_number, + + + vehicle_name, + + + clearing_type, + @@ -191,9 +284,55 @@ #{totalAmount}, + + #{remainingAmount}, + + + #{consumptionAmount}, + + + #{allocatedAmount}, + #{mark}, + + + #{peakSharpElectricity}, + + + #{peakSharpService}, + + + #{peakElectricity}, + + + #{peakService}, + + + #{flatElectricity}, + + + #{flatService}, + + + #{valleyElectricity}, + + + #{valleyService}, + + + #{account}, + + + #{vinNumber}, + + + #{vehicleName}, + + + #{clearingType}, + @@ -216,7 +355,46 @@ remark = #{remark}, motorcade_type = #{motorcadeType}, ilk = #{ilk}, - + total_amount = #{totalAmount}, + remaining_amount = #{remainingAmount}, + consumption_amount = #{consumptionAmount}, + allocated_amount = #{allocatedAmount}, + + peak_sharp_electricity= #{peakSharpElectricity}, + + + peak_sharp_service=#{peakSharpService}, + + + peak_electricity=#{peakElectricity}, + + + peak_service= #{peakService}, + + + flat_electricity= #{flatElectricity}, + + + flat_service= #{flatService}, + + + valley_electricity=#{valleyElectricity}, + + + valley_service=#{valleyService}, + + + account=#{account}, + + + vin_number=#{vinNumber}, + + + vehicle_name=#{vehicleName}, + + + clearing_type=#{clearingType}, + where motorcade_id=#{motorcadeId} @@ -233,19 +411,37 @@ select co.motorcade_id as motorcadeId, co.name as name, + co.clearing_type as clearingType, co.service_preferential as servicePreferential, co.motorcade_type as motorcadeType, co.min_people as minPeople, co.contact_name as contactName, co.contact_phone as contactPhone, co.address as address, + co.mark as mark, + co.vin_number as vinNumber, co.dimension as dimension, co.ilk as ilk, co.total_amount as totalAmount, + co.remaining_amount as remainingAmount, + co.consumption_amount as consumptionAmount, + co.allocated_amount as allocatedAmount, + co.peak_sharp_electricity as peakSharpElectricity, + co.peak_sharp_service as peakSharpService, + co.peak_electricity as peakElectricity, + co.peak_service as peakService, + co.flat_electricity as flatElectricity, + co.flat_service as flatService, + co.valley_electricity as valleyElectricity, + co.valley_service as valleyService, co.status as status, + co.account as account, + (select vehicle_name as vehicleName from xhpc_user_vehicle where app_user_id = co.motorcade_id and source=4 and del_flag=0 order by type desc,create_time desc LIMIT 1) as vehicleName, + (select vin_spec_code as vinNumber from xhpc_user_vehicle where app_user_id = co.motorcade_id and source=4 and del_flag=0 order by type desc,create_time desc LIMIT 1) as vinNumber, group_concat(me.charging_station_id) chargingStationIds from xhpc_motorcade co left join xhpc_mechanism me on me.mechanism_id = co.motorcade_id and me.source = 3 and me.del_flag =0 + where 1=1 and co.motorcade_id=#{motorcadeId} @@ -279,12 +475,14 @@ account AS account, tenant_id as tenantId, phone AS phone, + clearing_type AS clearingType, recharge_money AS rechargeMoney, consume_money AS consumeMoney, red_packet AS redPacket, surplus_money AS surplusMoney, type, vin_number as vinNumber, + vehicle_name as vehicleName, status FROM xhpc_motorcade_personnel @@ -364,6 +562,15 @@ vin_number, + + vehicle_name, + + + suncha_switch, + + + clearing_type, + @@ -426,6 +633,15 @@ #{vinNumber}, + + #{vehicleName}, + + + #{sunchaSwitch}, + + + #{clearingType}, + @@ -433,6 +649,7 @@ select motorcade_personnel_id AS motorcadePersonnelId, name AS name, + clearing_type AS clearingType, motorcade_id AS motorcadeId, account AS account, phone AS phone, @@ -440,6 +657,7 @@ surplus_money AS surplusMoney, type, vin_number AS vinNumber, + vehicle_name AS vehicleName, status from xhpc_motorcade_personnel where del_flag =0 @@ -479,6 +697,7 @@ remark = #{remark}, vin_number = #{vinNumber}, is_refund_application = #{isRefundApplication}, + clearing_type = #{clearingType}, where motorcade_personnel_id=#{motorcadePersonnelId} diff --git a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcOperatorMapper.xml b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcOperatorMapper.xml index 3ee04209..b7acec67 100644 --- a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcOperatorMapper.xml +++ b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcOperatorMapper.xml @@ -34,6 +34,7 @@ + @@ -43,7 +44,8 @@ xo.longitude, xo.latitude, xo.email, xo.commission_type commissionType, xo.platform_commission_rate platformCommissionRate, xo.maintenance_commission_rate maintenanceCommissionRate, - xo.business_license_id businessLicenseId, xo.withdrawal_time withdrawalTime, xo.soc, + xo.type,xo.business_license_id businessLicenseId, + xo.withdrawal_time withdrawalTime, xo.soc, xo.status, xo.del_flag delFlag, xo.create_time createTime, xo.create_by createBy, xo.update_time updateTime, xo.update_by updateBy, xo.remark @@ -142,6 +144,9 @@ tenant_id, + + type, + @@ -234,6 +239,9 @@ #{tenantId}, + + #{type}, + diff --git a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcUserMapper.xml b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcUserMapper.xml index 6d3981b0..a9e73aac 100644 --- a/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcUserMapper.xml +++ b/xhpc-modules/xhpc-user/src/main/resources/mapper/XhpcUserMapper.xml @@ -28,6 +28,7 @@ + @@ -52,7 +53,8 @@ create_time = #{createTime}, update_by = #{updateBy}, update_time = #{updateTime}, - remark = #{remark} + remark = #{remark}, + super_type = #{superType} WHERE user_id = #{userId}