作者 shenhailong

电费充值接口

... ... @@ -166,3 +166,5 @@ devops:
tianbo-tcs-recept: D:\Data\Receive
cfps-subscribe-dir: D:\系统部署\imf_Warehouse_reader\xmlFromImf
#10079
eeid:
ipAddress: 192.168.50.23
... ...
... ... @@ -7,13 +7,12 @@ import com.sunyo.energy.location.service.ElectricityMeterService;
import com.sunyo.energy.location.service.WaterElectricityParameterService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Date;
@RequestMapping("/electricity_meter")
@Controller
public class ElectricityParameterController {
... ... @@ -27,7 +26,6 @@ public class ElectricityParameterController {
@Autowired
ElectricityMeterService electricityMeterService;
@ApiOperation(value = "电表参数配置")
@RequestMapping("/add")
@ResponseBody
... ... @@ -96,6 +94,7 @@ public class ElectricityParameterController {
* @param eeId
* @return
*/
@ApiOperation(value = "电表实时信息查询")
@RequestMapping(value = "/getEnergyInfoForRealTime")
@ResponseBody
public ElectricityBalanceThree getEnergyInfoForRealTime(@RequestParam(value = "eeId", required = false) String eeId){
... ... @@ -109,4 +108,21 @@ public class ElectricityParameterController {
}
}
/**
* 电表充值
* @param eeId
* @return
*/
@ApiOperation(value = "电表充值缴费")
@RequestMapping(value = "/rechargeDevices")
@ResponseBody
public ResultJson rechargeDevices(@RequestParam(value = "eeId", required = false) String eeId,
@RequestParam(value = "money", required = false) String money,
@RequestParam(value = "actionType", required = false) String actionType){
int i = electricityMeterService.rechargeDevices(eeId, money, actionType);
return i > 0 ? new ResultJson("200", "充值成功") : new ResultJson("500", "网络异常");
}
}
... ...
package com.sunyo.energy.location.model;
import lombok.Data;
/**
* @author shenhailong
* <p>
* 2020/6/2/17:44
*/
@Data
public class RechargeDevicesResult {
private String errcode;
private String errmessage;
}
... ...
... ... @@ -3,6 +3,7 @@ package com.sunyo.energy.location.service;
import com.sunyo.energy.location.controller.response.ResultJson;
import com.sunyo.energy.location.model.ElectricityBalanceThree;
import java.math.BigDecimal;
import java.util.Map;
/**
... ... @@ -19,4 +20,6 @@ public interface ElectricityMeterService {
*/
ElectricityBalanceThree getEnergyInfoForRealTime(String deviceId) throws Exception;
int rechargeDevices(String deviceId, String money, String actionType);
}
... ...
... ... @@ -6,9 +6,14 @@ import com.sunyo.energy.location.controller.response.ResultJson;
import com.sunyo.energy.location.model.*;
import com.sunyo.energy.location.service.ElectricityMeterService;
import com.sunyo.energy.location.utils.HttpsUtils;
import com.sunyo.energy.location.utils.Md5Utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import sun.security.provider.MD5;
import java.awt.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
... ... @@ -27,7 +32,17 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService {
/**
* 获取电表实时数据/余额
*/
private final static String electricityBanlance = "http://192.168.1.2:18080/api/emcs/getEnergyInfoForRealTime";
private final static String electricityBanlanceUrl = "http://192.168.1.2:18080/api/emcs/getEnergyInfoForRealTime";
/**
* 电表充值接口读取配置文件ip地址
*/
@Value("${eeid.ipAddress}")
private String ipAddress;
/**
* 电表充值接口地址
*/
private final static String rechargeDevicesUrl = "http://192.168.1.2:18080/api/emcs/rechargeDevices";
/**
* 电费查询
... ... @@ -101,7 +116,7 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService {
public Number balance(String deviceId){
// 获取电表余额
String s1 = HttpsUtils.sendPostHttpRequest(electricityBanlance, "1");
String s1 = HttpsUtils.sendPostHttpRequest(electricityBanlanceUrl, "1");
ElectricityBalanceOne electricityBalanceOne = JSON.parseObject(s1, ElectricityBalanceOne.class);
... ... @@ -124,7 +139,7 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService {
datas.put("deviceId", "1");
try {
String infoForRealTime = HttpsUtils.sendPost(electricityBanlance, datas);
String infoForRealTime = HttpsUtils.sendPost(electricityBanlanceUrl, datas);
ElectricityBalanceOne electricityBalanceOne = JSON.parseObject(infoForRealTime, ElectricityBalanceOne.class);
List<ElectricityBalanceThree> infoForRealTimeList = electricityBalanceOne.getData().getDatas();
for (ElectricityBalanceThree electricityBalanceThree: infoForRealTimeList){
... ... @@ -138,4 +153,33 @@ public class ElectricityMeterServiceImp implements ElectricityMeterService {
return null;
}
}
@Override
public int rechargeDevices(String deviceId, String money, String actionType) {
Map<String, Object> map = new HashMap<>();
map.put("actionType", actionType);
map.put("deviceId", deviceId);
map.put("money", money);
map.put("ipAddress", ipAddress);
// 设置secret值 设备id 跟金额 盐 需要进行加密
BigDecimal bigDecimal = new BigDecimal(money).setScale(2, RoundingMode.HALF_UP);
String moneyString = String.valueOf(bigDecimal);
String secret = Md5Utils.getMD5(deviceId + moneyString + "tiansu", true, 32);
map.put("secret", secret);
try {
String result = HttpsUtils.sendPost(rechargeDevicesUrl, map);
RechargeDevicesResult rechargeDevicesResult = JSON.parseObject(result, RechargeDevicesResult.class);
if ("0".equals(rechargeDevicesResult.getErrcode())){
return 1;
}
}catch (Exception e){
e.printStackTrace();
return 0;
}
return 0;
}
}
... ...
package com.sunyo.energy.location.utils;
import sun.misc.BASE64Encoder;
import java.security.MessageDigest;
/**
* @author shenhailong
* <p>
* 2020/6/2/17:30
*/
public class Md5Utils {
/**
* 通用加密方法
* @param str 需要加密的字符串
* @param isUpper 字母大小写(false为小写,true为大写)
* @param bit 加密的位数(16,32,64)
* @return
*/
public static String getMD5(String str, boolean isUpper, Integer bit) {
String md5 = null;
try {
// 创建加密对象
MessageDigest md = MessageDigest.getInstance("md5");
if (bit == 64) {
BASE64Encoder bw = new BASE64Encoder();
md5 = bw.encode(md.digest(str.getBytes("utf-8")));
} else {
// 计算MD5函数
md.update(str.getBytes());
byte b[] = md.digest();
int i;
StringBuilder sb = new StringBuilder();
for (byte aB : b) {
i = aB;
if (i < 0) {
i += 256;
}
if (i < 16) {
sb.append("0");
}
sb.append(Integer.toHexString(i));
}
md5 = sb.toString();
if (bit == 16) {
//截取32位md5为16位
md5 = md5.substring(8, 24);
if (isUpper) {
md5 = md5.toUpperCase();
}
return md5;
}
}
//转换成大写
if (isUpper) {
md5 = md5.toUpperCase();
}
} catch (Exception e) {
e.printStackTrace();
}
return md5;
}
}
... ...