作者 shenhailong

电费充值接口

@@ -166,3 +166,5 @@ devops: @@ -166,3 +166,5 @@ devops:
166 tianbo-tcs-recept: D:\Data\Receive 166 tianbo-tcs-recept: D:\Data\Receive
167 cfps-subscribe-dir: D:\系统部署\imf_Warehouse_reader\xmlFromImf 167 cfps-subscribe-dir: D:\系统部署\imf_Warehouse_reader\xmlFromImf
168 #10079 168 #10079
  169 +eeid:
  170 + ipAddress: 192.168.50.23
@@ -7,13 +7,12 @@ import com.sunyo.energy.location.service.ElectricityMeterService; @@ -7,13 +7,12 @@ import com.sunyo.energy.location.service.ElectricityMeterService;
7 import com.sunyo.energy.location.service.WaterElectricityParameterService; 7 import com.sunyo.energy.location.service.WaterElectricityParameterService;
8 import io.swagger.annotations.ApiOperation; 8 import io.swagger.annotations.ApiOperation;
9 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.beans.factory.annotation.Value;
10 import org.springframework.stereotype.Controller; 11 import org.springframework.stereotype.Controller;
11 import org.springframework.web.bind.annotation.RequestMapping; 12 import org.springframework.web.bind.annotation.RequestMapping;
12 import org.springframework.web.bind.annotation.RequestParam; 13 import org.springframework.web.bind.annotation.RequestParam;
13 import org.springframework.web.bind.annotation.ResponseBody; 14 import org.springframework.web.bind.annotation.ResponseBody;
14 15
15 -import java.util.Date;  
16 -  
17 @RequestMapping("/electricity_meter") 16 @RequestMapping("/electricity_meter")
18 @Controller 17 @Controller
19 public class ElectricityParameterController { 18 public class ElectricityParameterController {
@@ -27,7 +26,6 @@ public class ElectricityParameterController { @@ -27,7 +26,6 @@ public class ElectricityParameterController {
27 @Autowired 26 @Autowired
28 ElectricityMeterService electricityMeterService; 27 ElectricityMeterService electricityMeterService;
29 28
30 -  
31 @ApiOperation(value = "电表参数配置") 29 @ApiOperation(value = "电表参数配置")
32 @RequestMapping("/add") 30 @RequestMapping("/add")
33 @ResponseBody 31 @ResponseBody
@@ -96,6 +94,7 @@ public class ElectricityParameterController { @@ -96,6 +94,7 @@ public class ElectricityParameterController {
96 * @param eeId 94 * @param eeId
97 * @return 95 * @return
98 */ 96 */
  97 + @ApiOperation(value = "电表实时信息查询")
99 @RequestMapping(value = "/getEnergyInfoForRealTime") 98 @RequestMapping(value = "/getEnergyInfoForRealTime")
100 @ResponseBody 99 @ResponseBody
101 public ElectricityBalanceThree getEnergyInfoForRealTime(@RequestParam(value = "eeId", required = false) String eeId){ 100 public ElectricityBalanceThree getEnergyInfoForRealTime(@RequestParam(value = "eeId", required = false) String eeId){
@@ -109,4 +108,21 @@ public class ElectricityParameterController { @@ -109,4 +108,21 @@ public class ElectricityParameterController {
109 } 108 }
110 } 109 }
111 110
  111 + /**
  112 + * 电表充值
  113 + * @param eeId
  114 + * @return
  115 + */
  116 + @ApiOperation(value = "电表充值缴费")
  117 + @RequestMapping(value = "/rechargeDevices")
  118 + @ResponseBody
  119 + public ResultJson rechargeDevices(@RequestParam(value = "eeId", required = false) String eeId,
  120 + @RequestParam(value = "money", required = false) String money,
  121 + @RequestParam(value = "actionType", required = false) String actionType){
  122 +
  123 + int i = electricityMeterService.rechargeDevices(eeId, money, actionType);
  124 +
  125 + return i > 0 ? new ResultJson("200", "充值成功") : new ResultJson("500", "网络异常");
  126 + }
  127 +
112 } 128 }
  1 +package com.sunyo.energy.location.model;
  2 +
  3 +import lombok.Data;
  4 +
  5 +/**
  6 + * @author shenhailong
  7 + * <p>
  8 + * 2020/6/2/17:44
  9 + */
  10 +@Data
  11 +public class RechargeDevicesResult {
  12 +
  13 + private String errcode;
  14 +
  15 + private String errmessage;
  16 +
  17 +}
@@ -3,6 +3,7 @@ package com.sunyo.energy.location.service; @@ -3,6 +3,7 @@ package com.sunyo.energy.location.service;
3 import com.sunyo.energy.location.controller.response.ResultJson; 3 import com.sunyo.energy.location.controller.response.ResultJson;
4 import com.sunyo.energy.location.model.ElectricityBalanceThree; 4 import com.sunyo.energy.location.model.ElectricityBalanceThree;
5 5
  6 +import java.math.BigDecimal;
6 import java.util.Map; 7 import java.util.Map;
7 8
8 /** 9 /**
@@ -19,4 +20,6 @@ public interface ElectricityMeterService { @@ -19,4 +20,6 @@ public interface ElectricityMeterService {
19 */ 20 */
20 ElectricityBalanceThree getEnergyInfoForRealTime(String deviceId) throws Exception; 21 ElectricityBalanceThree getEnergyInfoForRealTime(String deviceId) throws Exception;
21 22
  23 + int rechargeDevices(String deviceId, String money, String actionType);
  24 +
22 } 25 }
@@ -6,9 +6,14 @@ import com.sunyo.energy.location.controller.response.ResultJson; @@ -6,9 +6,14 @@ import com.sunyo.energy.location.controller.response.ResultJson;
6 import com.sunyo.energy.location.model.*; 6 import com.sunyo.energy.location.model.*;
7 import com.sunyo.energy.location.service.ElectricityMeterService; 7 import com.sunyo.energy.location.service.ElectricityMeterService;
8 import com.sunyo.energy.location.utils.HttpsUtils; 8 import com.sunyo.energy.location.utils.HttpsUtils;
  9 +import com.sunyo.energy.location.utils.Md5Utils;
  10 +import org.springframework.beans.factory.annotation.Value;
9 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
  12 +import sun.security.provider.MD5;
10 13
11 import java.awt.*; 14 import java.awt.*;
  15 +import java.math.BigDecimal;
  16 +import java.math.RoundingMode;
12 import java.util.HashMap; 17 import java.util.HashMap;
13 import java.util.List; 18 import java.util.List;
14 import java.util.Map; 19 import java.util.Map;
@@ -27,7 +32,17 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService { @@ -27,7 +32,17 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService {
27 /** 32 /**
28 * 获取电表实时数据/余额 33 * 获取电表实时数据/余额
29 */ 34 */
30 - private final static String electricityBanlance = "http://192.168.1.2:18080/api/emcs/getEnergyInfoForRealTime"; 35 + private final static String electricityBanlanceUrl = "http://192.168.1.2:18080/api/emcs/getEnergyInfoForRealTime";
  36 +
  37 + /**
  38 + * 电表充值接口读取配置文件ip地址
  39 + */
  40 + @Value("${eeid.ipAddress}")
  41 + private String ipAddress;
  42 + /**
  43 + * 电表充值接口地址
  44 + */
  45 + private final static String rechargeDevicesUrl = "http://192.168.1.2:18080/api/emcs/rechargeDevices";
31 46
32 /** 47 /**
33 * 电费查询 48 * 电费查询
@@ -101,7 +116,7 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService { @@ -101,7 +116,7 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService {
101 public Number balance(String deviceId){ 116 public Number balance(String deviceId){
102 117
103 // 获取电表余额 118 // 获取电表余额
104 - String s1 = HttpsUtils.sendPostHttpRequest(electricityBanlance, "1"); 119 + String s1 = HttpsUtils.sendPostHttpRequest(electricityBanlanceUrl, "1");
105 120
106 ElectricityBalanceOne electricityBalanceOne = JSON.parseObject(s1, ElectricityBalanceOne.class); 121 ElectricityBalanceOne electricityBalanceOne = JSON.parseObject(s1, ElectricityBalanceOne.class);
107 122
@@ -124,7 +139,7 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService { @@ -124,7 +139,7 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService {
124 datas.put("deviceId", "1"); 139 datas.put("deviceId", "1");
125 try { 140 try {
126 141
127 - String infoForRealTime = HttpsUtils.sendPost(electricityBanlance, datas); 142 + String infoForRealTime = HttpsUtils.sendPost(electricityBanlanceUrl, datas);
128 ElectricityBalanceOne electricityBalanceOne = JSON.parseObject(infoForRealTime, ElectricityBalanceOne.class); 143 ElectricityBalanceOne electricityBalanceOne = JSON.parseObject(infoForRealTime, ElectricityBalanceOne.class);
129 List<ElectricityBalanceThree> infoForRealTimeList = electricityBalanceOne.getData().getDatas(); 144 List<ElectricityBalanceThree> infoForRealTimeList = electricityBalanceOne.getData().getDatas();
130 for (ElectricityBalanceThree electricityBalanceThree: infoForRealTimeList){ 145 for (ElectricityBalanceThree electricityBalanceThree: infoForRealTimeList){
@@ -138,4 +153,33 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService { @@ -138,4 +153,33 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService {
138 return null; 153 return null;
139 } 154 }
140 } 155 }
  156 +
  157 + @Override
  158 + public int rechargeDevices(String deviceId, String money, String actionType) {
  159 +
  160 + Map<String, Object> map = new HashMap<>();
  161 + map.put("actionType", actionType);
  162 + map.put("deviceId", deviceId);
  163 + map.put("money", money);
  164 + map.put("ipAddress", ipAddress);
  165 + // 设置secret值 设备id 跟金额 盐 需要进行加密
  166 + BigDecimal bigDecimal = new BigDecimal(money).setScale(2, RoundingMode.HALF_UP);
  167 + String moneyString = String.valueOf(bigDecimal);
  168 + String secret = Md5Utils.getMD5(deviceId + moneyString + "tiansu", true, 32);
  169 + map.put("secret", secret);
  170 + try {
  171 +
  172 + String result = HttpsUtils.sendPost(rechargeDevicesUrl, map);
  173 + RechargeDevicesResult rechargeDevicesResult = JSON.parseObject(result, RechargeDevicesResult.class);
  174 +
  175 + if ("0".equals(rechargeDevicesResult.getErrcode())){
  176 + return 1;
  177 + }
  178 +
  179 + }catch (Exception e){
  180 + e.printStackTrace();
  181 + return 0;
  182 + }
  183 + return 0;
  184 + }
141 } 185 }
  1 +package com.sunyo.energy.location.utils;
  2 +
  3 +import sun.misc.BASE64Encoder;
  4 +
  5 +import java.security.MessageDigest;
  6 +
  7 +/**
  8 + * @author shenhailong
  9 + * <p>
  10 + * 2020/6/2/17:30
  11 + */
  12 +public class Md5Utils {
  13 +
  14 + /**
  15 + * 通用加密方法
  16 + * @param str 需要加密的字符串
  17 + * @param isUpper 字母大小写(false为小写,true为大写)
  18 + * @param bit 加密的位数(16,32,64)
  19 + * @return
  20 + */
  21 + public static String getMD5(String str, boolean isUpper, Integer bit) {
  22 + String md5 = null;
  23 + try {
  24 + // 创建加密对象
  25 + MessageDigest md = MessageDigest.getInstance("md5");
  26 + if (bit == 64) {
  27 + BASE64Encoder bw = new BASE64Encoder();
  28 + md5 = bw.encode(md.digest(str.getBytes("utf-8")));
  29 + } else {
  30 + // 计算MD5函数
  31 + md.update(str.getBytes());
  32 + byte b[] = md.digest();
  33 + int i;
  34 + StringBuilder sb = new StringBuilder();
  35 + for (byte aB : b) {
  36 + i = aB;
  37 + if (i < 0) {
  38 + i += 256;
  39 + }
  40 + if (i < 16) {
  41 + sb.append("0");
  42 + }
  43 + sb.append(Integer.toHexString(i));
  44 + }
  45 + md5 = sb.toString();
  46 + if (bit == 16) {
  47 + //截取32位md5为16位
  48 + md5 = md5.substring(8, 24);
  49 + if (isUpper) {
  50 + md5 = md5.toUpperCase();
  51 + }
  52 + return md5;
  53 + }
  54 + }
  55 + //转换成大写
  56 + if (isUpper) {
  57 + md5 = md5.toUpperCase();
  58 + }
  59 + } catch (Exception e) {
  60 + e.printStackTrace();
  61 + }
  62 + return md5;
  63 + }
  64 +
  65 +}