diff --git a/suimangService/src/main/java/com/iformall/service/park/ParkAdapterService.java b/suimangService/src/main/java/com/iformall/service/park/ParkAdapterService.java deleted file mode 100644 index a187ba1..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/ParkAdapterService.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.iformall.service.park; - -import java.util.Map; - -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCouponOrderCarCVo; - -/** - * 新的用NewParkAdapterService - * @author alascor - * - */ -public interface ParkAdapterService { - - ResultData parkInitConfig(WxPark park) throws Exception; - - /** - * 停车场初始化登陆 - * @param paramMap - * @param park - * @param member - * @return vendorPersonId 停车场的会员编号 - */ - String initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception; - - /** - * 绑定车牌 - * @param paramMap - * @param park - * @param cuUserId - * @return vendorPersonId 停车场的会员编号 - */ - String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception; - - /** - * 解绑车牌 - */ - void unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception; - - /** - * 获取停车费, 给老的集成用 - */ - ResultData carStopFee(Map paramMap, WxPark park) throws Exception; - - /** - * 是否忽略使用券缓存,不忽略,则走系统,根据停车场出入场通知来控制。忽略,则不需要此判断来判定停车券是否已经使用 - * @return - */ - boolean ignoreUseCouponCache(); - - /** - * 停车券使用, 给老的集成用 - */ - ResultData useCoupon(Map paramMap,WxPark park,WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) throws Exception; - - /** - * 查询停车场状态, 给老的集成用 - */ - ResultData getParkStatus(WxPark park) throws Exception; -} diff --git a/suimangService/src/main/java/com/iformall/service/park/ParkBatchCallBackAdapterService.java b/suimangService/src/main/java/com/iformall/service/park/ParkBatchCallBackAdapterService.java deleted file mode 100644 index 1624c3a..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/ParkBatchCallBackAdapterService.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.iformall.service.park; - -import java.util.List; -import java.util.Map; - -import com.iformall.service.park.entity.ParkNotifyParam; - -/** - * 停车场回调 -- 批量传回 - * @author alascor - * - */ -public interface ParkBatchCallBackAdapterService { - - /** - * 解析车辆入场通知参数 - * @param param - */ - List parseInNoticyParam(Object param); - - /** - * 解析车辆出场通知参数 - * @param param - */ - List parseOutNoticyParam(Object param); - - /** - * 解析车辆解绑通知参数 - * @param param - */ - List parseUnbindNoticyParam(Object param); - - /** - * 解析支付结果通知参数 - * @param param - */ - List parsePaidNoticyParam(Object param); -} diff --git a/suimangService/src/main/java/com/iformall/service/park/ParkCallBackAdapterService.java b/suimangService/src/main/java/com/iformall/service/park/ParkCallBackAdapterService.java deleted file mode 100644 index cff99ce..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/ParkCallBackAdapterService.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.iformall.service.park; - -import java.util.Map; - -import com.iformall.service.park.entity.ParkNotifyParam; - -/** - * 停车场回调 - * @author alascor - * - */ -public interface ParkCallBackAdapterService { - - /** - * 解析车辆入场通知参数 - * @param param - */ - ParkNotifyParam parseInNoticyParam(Object param); - - /** - * 解析车辆出场通知参数 - * @param param - */ - ParkNotifyParam parseOutNoticyParam(Object param); - - /** - * 解析车辆解绑通知参数 - * @param param - */ - ParkNotifyParam parseUnbindNoticyParam(Object param); - - /** - * 解析支付结果通知参数 - * @param param - */ - ParkNotifyParam parsePaidNoticyParam(Object param); -} diff --git a/suimangService/src/main/java/com/iformall/service/park/ParkFactory.java b/suimangService/src/main/java/com/iformall/service/park/ParkFactory.java deleted file mode 100644 index 24899d8..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/ParkFactory.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.iformall.service.park; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.iformall.common.ErrorCode; -import com.iformall.enums.EnumCarVendor; -import com.iformall.exception.MallinkException; -import com.iformall.service.park.impl.bolink.BoLinkParkService; -import com.iformall.service.park.impl.cyf.CYFParkCallbackService; -import com.iformall.service.park.impl.cyf.CYFParkService; -import com.iformall.service.park.impl.dahua.DaHuaParkService; -import com.iformall.service.park.impl.haikangweishi.HaiKangWeiShiParkCallbackService; -import com.iformall.service.park.impl.haikangweishi.HaiKangWeiShiParkService; -import com.iformall.service.park.impl.jieshun.JieShunParkCallbackService; -import com.iformall.service.park.impl.jieshun.JieShunParkService; -import com.iformall.service.park.impl.shangan.ShangAnParkService; -import com.iformall.service.park.impl.tjd.TJDParkService; - -@Service -public class ParkFactory { - - @Autowired - CYFParkService cyfService; - @Autowired - BoLinkParkService bolinkService; - @Autowired - DaHuaParkService daHuaService; - @Autowired - ShangAnParkService shangAnService; - @Autowired - TJDParkService tjdService; - @Autowired - JieShunParkService jieshunService; - @Autowired - HaiKangWeiShiParkService haikangWeishiService; - - @Autowired - CYFParkCallbackService cyfCallbackService; - @Autowired - JieShunParkCallbackService jieshunCallBackService; - @Autowired - HaiKangWeiShiParkCallbackService haikangWeishiCallBackService; - - private Map parkServiceMap ; - private Map enumMap ; - private Map callBackServiceMap;//推送单条 - private Map batchCallBackServiceMap;//推送多条 - - private Map getServiceMap() { - if (null != parkServiceMap ) { - return parkServiceMap; - } - parkServiceMap = new ConcurrentHashMap(); - //车易付 - parkServiceMap.put(EnumCarVendor.CAE_CYF.getCode(), cyfService); - parkServiceMap.put(EnumCarVendor.CAR_BOLINK.getCode(), bolinkService); - parkServiceMap.put(EnumCarVendor.CAR_DAHUA.getCode(), daHuaService); - parkServiceMap.put(EnumCarVendor.CAR_SHANGAN.getCode(), shangAnService); - parkServiceMap.put(EnumCarVendor.CAR_TJD.getCode(), tjdService); - parkServiceMap.put(EnumCarVendor.CAR_JIESHUN.getCode(), jieshunService); - parkServiceMap.put(EnumCarVendor.CAR_HAIKANGWEISHI.getCode(), haikangWeishiService); - return parkServiceMap; - - } - - private Map getEnumMap() { - if (null != enumMap) { - return enumMap; - } - enumMap = new ConcurrentHashMap(); - for (EnumCarVendor v : EnumCarVendor.values()) { - enumMap.put(v.getCode(), v); - } - return enumMap; - } - - private Map getCallBackServiceMap() { - if (null != callBackServiceMap) { - return callBackServiceMap; - } - callBackServiceMap = new ConcurrentHashMap(); - callBackServiceMap.put(EnumCarVendor.CAE_CYF.getCode(), cyfCallbackService); - return callBackServiceMap; - } - - private Map getBatchCallBackServiceMap() { - if (null != batchCallBackServiceMap) { - return batchCallBackServiceMap; - } - batchCallBackServiceMap = new ConcurrentHashMap(); - batchCallBackServiceMap.put(EnumCarVendor.CAR_JIESHUN.getCode(), jieshunCallBackService); - batchCallBackServiceMap.put(EnumCarVendor.CAR_HAIKANGWEISHI.getCode(), haikangWeishiCallBackService); - return batchCallBackServiceMap; - } - - - public ParkAdapterService getParkService(Integer code) { - EnumCarVendor vendor = getEnumMap().get(code); - if (null == vendor) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "车厂["+code+"]不持支。"); - } - return getServiceMap().get(vendor.getCode()); - } - - public ParkCallBackAdapterService getParkCallbackService(Integer code) { - EnumCarVendor vendor = getEnumMap().get(code); - if (null == vendor) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "车厂["+code+"]不支持."); - } - return getCallBackServiceMap().get(vendor.getCode()); - } - - public ParkBatchCallBackAdapterService getParkBatchCallbackService(Integer code) { - EnumCarVendor vendor = getEnumMap().get(code); - if (null == vendor) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "车厂["+code+"]不支持."); - } - return getBatchCallBackServiceMap().get(vendor.getCode()); - } - - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java b/suimangService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java deleted file mode 100644 index f56ac6c..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/entity/ParkNotifyParam.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.iformall.service.park.entity; - -import java.io.Serializable; -import java.util.Date; - -import lombok.Data; - -@Data -public class ParkNotifyParam implements Serializable{ - - private static final long serialVersionUID = -8295607395328571534L; - - String parkId; - - String synId; - - String parkName; - - String carNumber; - - Date entranceTime; - - Date outTime; - - String fee; - - String parkOrderId; - - Date payTime; - - String paidServiceFee;//支付服务费 - - Object sourceParam; - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java b/suimangService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java deleted file mode 100644 index 7a58005..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/entity/ParkStopFee.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.iformall.service.park.entity; - -import java.io.Serializable; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; - -public class ParkStopFee implements Serializable{ - - private static final long serialVersionUID = 6478840764729191197L; - - /*停车场返回的订单ID**/ - private String orderId=""; - /*入场时间 格式:yyyy-MM-dd HH:mm:ss**/ - private String entranceTime=""; - /*计费结束时间 格式:yyyy-MM-dd HH:mm:ss**/ - private String exitTime=""; - /*停车费**/ - private String remainingFee=""; - /*跳转的停车费支付小程序appId**/ - private String appId=""; - /*支付小程序页面路径**/ - private String payPath=""; - /*给支付小程序的额外数据**/ - private Map extraData=new HashMap(); - /*备注**/ - private String remark=""; - private String sysNotice="";//系统提示,非车厂提示; - - - public ParkStopFee(String orderId,Date startTime,Date endTime,String fee,String appId,String payPath,Map extraData,String remark,String sysNotice) { - if (!StringUtils.isBlank(orderId)) { - this.orderId = orderId; - } - if (null != startTime) { - this.entranceTime = getLocalDate(startTime); - } - if (null != endTime) { - this.exitTime = getLocalDate(endTime); - } - if (!StringUtils.isBlank(fee)) { - this.remainingFee = fee; - } - if (!StringUtils.isBlank(appId)) { - this.appId = appId; - } - if (!StringUtils.isBlank(payPath)) { - this.payPath = payPath; - } - if (null != extraData) { - this.extraData = extraData; - } - if (!StringUtils.isBlank(remark)) { - this.remark = remark; - } - if (!StringUtils.isBlank(sysNotice)) { - this.sysNotice = sysNotice; - } - } - - - private String getLocalDate(Date date){ - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - return sdf.format(date); - } - - public String getOrderId() { - return orderId; - } - public void setOrderId(String orderId) { - this.orderId = orderId; - } - public String getEntranceTime() { - return entranceTime; - } - public void setEntranceTime(String entranceTime) { - this.entranceTime = entranceTime; - } - public String getExitTime() { - return exitTime; - } - public void setExitTime(String exitTime) { - this.exitTime = exitTime; - } - public String getRemainingFee() { - return remainingFee; - } - public void setRemainingFee(String remainingFee) { - this.remainingFee = remainingFee; - } - public String getAppId() { - return appId; - } - public void setAppId(String appId) { - this.appId = appId; - } - public String getPayPath() { - return payPath; - } - public void setPayPath(String payPath) { - this.payPath = payPath; - } - public Map getExtraData() { - return extraData; - } - public void setExtraData(Map extraData) { - this.extraData = extraData; - } - public String getRemark() { - return remark; - } - public void setRemark(String remark) { - this.remark = remark; - } - public String getSysNotice() { - return sysNotice; - } -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/BaseParkService.java b/suimangService/src/main/java/com/iformall/service/park/impl/BaseParkService.java deleted file mode 100644 index b374729..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/BaseParkService.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iformall.service.park.impl; - -import java.util.HashMap; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxPark; -import com.iformall.service.park.impl.util.ParkHelper; - -@Service -public class BaseParkService { - - @Autowired - ParkHelper parkHelper; - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java b/suimangService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java deleted file mode 100644 index 993c86b..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.iformall.service.park.impl.bolink; - -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCouponOrderCarCVo; -import com.iformall.enums.EnumCouponUnit; -import com.iformall.service.park.ParkAdapterService; -import com.iformall.service.park.impl.BaseParkService; - -@Service -public class BoLinkParkService extends BaseParkService implements ParkAdapterService { - - @Override - public ResultData parkInitConfig(WxPark park) throws Exception { - // TODO Auto-generated method stub - return null; - } - - @Override - public String initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { - return null; - } - - @Override - public String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { - return member.getId().toString(); - } - - @Override - public void unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { - } - - @Override - public ResultData carStopFee(Map paramMap, WxPark park) { - return bolinkCarStopFee(paramMap, park); - } - - private ResultData bolinkCarStopFee(Map paramMap, WxPark park) { - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString(BoLinkUtil.BOLINK_URL); - String comid = objParams.getString(BoLinkUtil.BOLINK_COMID); - String unionId = objParams.getString(BoLinkUtil.BOLINK_UNION_ID); - String key = objParams.getString(BoLinkUtil.BOLINK_KEY); - String ret = BoLinkUtil.getStopFee(url, comid, unionId, key, carNumber); - if (ret != null) { - JSONObject retObj = JSON.parseObject(ret); - JSONObject dataObj = retObj.getJSONObject(BoLinkUtil.BOLINK_DATA); - if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) { - return new ResultData(dataObj); - } else { - return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL); - } - } else { - return new ResultData(ErrorCode.BOLINK_STOP_FEE_FAIL); - } - } - - @Override - public ResultData useCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) { - String orderId = paramMap.get("orderId"); - if (StringUtils.isBlank(orderId)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString(BoLinkUtil.BOLINK_URL); - String comid = objParams.getString(BoLinkUtil.BOLINK_COMID); - String unionId = objParams.getString(BoLinkUtil.BOLINK_UNION_ID); - String key = objParams.getString(BoLinkUtil.BOLINK_KEY); - - String amount = ""; - if (coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) { - amount = coupon.getPriceStr(); - } else { - amount = String.valueOf(coupon.getPrice()* 60); - } - - String ret = BoLinkUtil.couponSend(url, comid, unionId, key, - carNumber, - orderId, - coupon.getUnit().toString(), amount); - JSONObject retObj = JSON.parseObject(ret); - JSONObject dataObj = retObj.getJSONObject(BoLinkUtil.BOLINK_DATA); - if (dataObj.getIntValue(BoLinkUtil.BOLINK_STATE) == BoLinkUtil.BOLINK_SUCCESS) { - return new ResultData(dataObj); - } else { - return new ResultData(ErrorCode.CAR_DEDUCE_FEE_FAIL); - } - } - - @Override - public ResultData getParkStatus(WxPark park) { - return null; - } - - @Override - public boolean ignoreUseCouponCache() { - return false; - } - - - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkUtil.java b/suimangService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkUtil.java deleted file mode 100644 index 912c2aa..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkUtil.java +++ /dev/null @@ -1,258 +0,0 @@ -package com.iformall.service.park.impl.bolink; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.enums.EnumCouponUnit; -import com.iformall.exception.MallinkException; -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicHeader; -import org.apache.http.protocol.HTTP; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Base64; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -/** - * 尚安停车 - */ -public class BoLinkUtil { - private final static Logger logger = LoggerFactory.getLogger(BoLinkUtil.class); - - public static final String BOLINK_URL = "url"; - public static final String BOLINK_COMID = "comid"; - public static final String BOLINK_UNION_ID = "union_id"; - public static final String BOLINK_KEY = "key"; - public static final String BOLINK_CAR_NUMBER = "car_number"; - public static final String BOLINK_ORDER_ID = "order_id"; - public static final String BOLINK_PAY_TIME = "pay_time"; - public static final String BOLINK_ACT_TOTAL = "act_total"; - public static final String BOLINK_DEDUCTION_TIME = "deduction_time"; - public static final String BOLINK_DEDUCTION_MONEY = "deduction_money"; - - public static final String URL = "https://yun.bolink.club"; - public static final String COMID = "30536"; - public static final String UNION_ID = "200389"; - public static final String KEY = "Y29PZH9KDT1V7Y1E"; - public static final String PARK_NUM = "京88888"; - - public static final String BOLINK_DATA = "data"; - public static final String BOLINK_STATE = "state"; - public static final int BOLINK_SUCCESS = 1; - public static final int BOLINK_FAIL = 0; - public static final String BOLINK_ERROR = "errmsg"; - - - public static void main(String[] args) throws Exception { - String carNumber = "京88888"; - - String result = getStopFee(URL, COMID, UNION_ID, KEY, carNumber); - - - } - - /** - * md5算法 - * @param data - * @return - * @throws NoSuchAlgorithmException - */ - - public static String md5(String data) throws NoSuchAlgorithmException { - MessageDigest md = MessageDigest.getInstance("MD5"); - md.update(data.getBytes()); - StringBuilder buf = new StringBuilder(); - byte[] bits = md.digest(); - for(int i=0;i") || resp.startsWith("")) { - return true; - } - return false; - } - - public static String getStopFee(String baseUrl, String comid, String unionId, String key, String carNumber) { - String stopFeeUrl = "/zld/queryorderprice"; - String url = baseUrl + stopFeeUrl; - Map params = new HashMap<>(); - params.put(BOLINK_COMID, comid); - params.put(BOLINK_UNION_ID, unionId); - params.put(BOLINK_CAR_NUMBER, carNumber); - try { - String sign = getSign(key, JSON.toJSONString(params)); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - try { - String result = Proc(url, key, params); - if(result == null) { - throw new MallinkException(ErrorCode.CAR_CMD_FAIL); - } - if(checkRespFailed(result)) { - throw new MallinkException(ErrorCode.CAR_CMD_FAIL); - } - return result; - } catch (Exception e) { - return null; - } - } - - public static String couponSend(String baseUrl, String comid, String unionId, String key, - String carNumber, - String orderId, - String unit, String amount) { - String couponUrl = "/zld/openservice/paynoticetopark"; - String url = baseUrl + couponUrl; - Map params = new HashMap<>(); - params.put(BOLINK_COMID, comid); - params.put(BOLINK_UNION_ID, unionId); - params.put(BOLINK_CAR_NUMBER, carNumber); - params.put(BOLINK_ORDER_ID, orderId); - params.put(BOLINK_PAY_TIME, new Date().getTime()); - params.put(BOLINK_ACT_TOTAL, "0"); - if (unit.equals(EnumCouponUnit.MONEY.getCode())) { - // 金额 - params.put(BOLINK_DEDUCTION_MONEY, amount); - } else { - // 小时 - params.put(BOLINK_DEDUCTION_TIME, amount); - } - try { - String sign = getSign(key, JSON.toJSONString(params)); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - try { - String result = Proc(url, key, params); - if(result == null) { - throw new MallinkException(ErrorCode.CAR_CMD_FAIL); - } - if(checkRespFailed(result)) { - throw new MallinkException(ErrorCode.CAR_CMD_FAIL); - } - return result; - } catch (Exception e) { - return null; - } - } - - private static String Proc(String url, String key, Map paramMap) { - CloseableHttpClient httpClient = HttpClients.createDefault(); - - HttpPost httpPost = new HttpPost(url); - httpPost.addHeader("Accept-Encoding", "UTF-8"); - - StringBuilder sb = new StringBuilder(); - String sign = null; - try{ - String dataStr = JSON.toJSONString(paramMap); - sb.append("{\"data\":").append(dataStr); - sign = getSign(key, dataStr); - sb.append(",\"sign\":\"").append(sign).append("\"}"); - }catch(NoSuchAlgorithmException e) { - logger.error(e.getLocalizedMessage()); - } - - String bodyStr = sb.toString(); - logger.info(bodyStr); - - final Base64.Encoder encoder = Base64.getEncoder(); - final Base64.Decoder decoder = Base64.getDecoder(); - - try { - byte[] bodyByte = bodyStr.getBytes("UTF-8"); - String encodeStr = encoder.encodeToString(bodyByte); - StringEntity se = new StringEntity(encodeStr, Consts.UTF_8); - se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"UTF-8")); - httpPost.setEntity(se); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - HttpResponse response = null; - try { - response = httpClient.execute(httpPost); - } catch (Exception e) { - logger.error(e.getLocalizedMessage()); - } - - String result = null; - - //打印StatusLine - logger.debug("StatusLine: " + response.getStatusLine()); - if (response.getStatusLine().getStatusCode() != 200) { - logger.error("status error: " + response.getStatusLine().getReasonPhrase()); - throw new MallinkException(ErrorCode.CAR_CMD_FAIL); - } - try{ - //获取实体 - HttpEntity httpEntity= response.getEntity(); - String encodeResStr = EntityUtils.toString(httpEntity, "UTF-8"); - result = new String(decoder.decode(encodeResStr), "UTF-8"); - logger.debug(result); - // {"data":{"errmsg":"查询价格返回超时,请联系车场管理员","state":0,"plate_number":"京88888"},"sign":"DE81DCA41E6C1ACA978906F998A7BC1D"} - - } catch (Exception e) { - logger.error(e.getLocalizedMessage()); - } - - try { //关闭流并释放资源 - httpClient.close(); - } catch (IOException e) { - logger.error(e.getLocalizedMessage()); - } - - JSONObject resultObj = JSON.parseObject(result); - String resSign = resultObj.getString("sign"); - if (!resSign.equals(sign)) { - logger.error("data sign: " + resSign); - throw new MallinkException(ErrorCode.BOLINK_SIGN_ERR); - } - - return result; - } - - - - -} - diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkCallbackService.java b/suimangService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkCallbackService.java deleted file mode 100644 index f28d9fc..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkCallbackService.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.iformall.service.park.impl.cyf; - -import java.text.ParseException; -import java.util.Date; -import java.util.Map; - -import org.springframework.stereotype.Service; - -import com.iformall.domain.vo.WxCarCYFVo; -import com.iformall.service.park.ParkCallBackAdapterService; -import com.iformall.service.park.entity.ParkNotifyParam; -import com.iformall.service.park.impl.BaseParkService; -import com.iformall.service.park.impl.tjd.TJDUtil; - -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@Service -public class CYFParkCallbackService extends BaseParkService implements ParkCallBackAdapterService { - - @Override - public ParkNotifyParam parseInNoticyParam(Object param) { - Map paramMap = (Map) param; - String carNumber = paramMap.get(CYFUtil.CYF_CAR_NUMBER).toString(); - String cyfParkId = paramMap.get(CYFUtil.CYF_PARK_ID).toString(); - String parkName = paramMap.get(CYFUtil.CYF_PARK_NAME).toString(); - String synId = paramMap.get(CYFUtil.CYF_SYN_ID).toString(); - String entranceTime = paramMap.get(CYFUtil.CYF_ENTRANCE_TIME).toString(); - - ParkNotifyParam p = new ParkNotifyParam(); - p.setCarNumber(carNumber); - p.setParkId(cyfParkId); - p.setParkName(parkName); - p.setSynId(synId); - try { - p.setEntranceTime(CYFUtil.utcToLocal(entranceTime)); - } catch (ParseException e) { - log.error("cyf entranceTime format error",e); - return null; - } - return p; - } - - @Override - public ParkNotifyParam parseOutNoticyParam(Object param) { - WxCarCYFVo vo = (WxCarCYFVo) param; - ParkNotifyParam p = new ParkNotifyParam(); - p.setCarNumber(vo.getPlate()); - p.setParkId(String.valueOf(vo.getParkingId())); - p.setParkName(vo.getRecordOrderId()); - p.setSynId(vo.getRecordOrderId()); - try { - p.setEntranceTime(TJDUtil.dateOutFormat.parse(vo.getInInfo().getTime())); - } catch (ParseException e) { - log.error("cyf entranceTime format error",e); - return null; - } - try { - p.setOutTime(TJDUtil.dateOutFormat.parse(vo.getOutInfo().getTime())); - } catch (ParseException e) { - log.error("cyf outTime format error",e); - return null; - } - p.setFee(String.valueOf(vo.getPayInfoList().getActualFee())); - return p; - } - - @Override - public ParkNotifyParam parseUnbindNoticyParam(Object param) { - return null; - } - - @Override - public ParkNotifyParam parsePaidNoticyParam(Object param) { - Map vo = (Map) param; - ParkNotifyParam p = new ParkNotifyParam(); - p.setCarNumber((String) vo.get("plate")); - p.setParkId(String.valueOf(vo.get("parkId"))); - p.setParkOrderId((String) vo.get("orderNo")); - p.setSynId((String) vo.get("orderNo")); - p.setFee(vo.get("fee").toString()); - p.setPayTime((Date) vo.get("payTime")); - return p; - } - - - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java b/suimangService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java deleted file mode 100644 index 7c47f75..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java +++ /dev/null @@ -1,203 +0,0 @@ -package com.iformall.service.park.impl.cyf; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCUserCar; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCouponOrderCarCVo; -import com.iformall.enums.EnumCarVendor; -import com.iformall.enums.EnumCouponUnit; -import com.iformall.exception.MallinkException; -import com.iformall.service.park.ParkAdapterService; -import com.iformall.service.park.entity.ParkStopFee; -import com.iformall.service.park.impl.BaseParkService; -import com.iformall.service.park.impl.util.ParkHelper; - -@Service -public class CYFParkService extends BaseParkService implements ParkAdapterService { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired - ParkHelper parkHelper; - - CYFUtil cyf = new CYFUtil(); - - @Override - public ResultData parkInitConfig(WxPark park) throws Exception { - // TODO Auto-generated method stub - return null; - } - - @Override - public String initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - logger.error("carNumber为空"); - throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - WxCUserCar car = parkHelper.getOne(park, member.getId(), carNumber, EnumCarVendor.CAE_CYF); - if (null != car) { - return car.getVendorPersonId(); - } - return null; - } - - @Override - public String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ - return cyfBindCar(paramMap,park,member); - } - - /** - * @description 车易付会员车辆信息注册 - * @Params [paramMap, park, wxCUser] - * @return com.iformall.common.ResultData - * @Author furunxin - * @Date 2020/7/8 下午10:23 - **/ - private String cyfBindCar(Map paramMap, WxPark park,WxCUserBasicInfo member) throws Exception { - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - logger.error("carNumber为空"); - throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String token = objParams.getString("token"); - int feeGroupId = objParams.getIntValue("feeGroupId"); - String ret = cyf.registerCar(token,park.getNumber(),feeGroupId,park.getParkingId(),carNumber,null,member.getNickName()); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("result") == 1){ - return retObj.get("localPersonId").toString(); - }else { - logger.error("cyfBindCar error. paramMap: {} . cyfResult: {}",JSON.toJSONString(paramMap),ret); - String msg = retObj.getString("strError"); - throw new MallinkException(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败:"+msg); - //return new ResultData(, "绑车牌失败", retObj); - } - } - - - @Override - public void unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - logger.error("carNumber为空"); - throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - String vendorPersonId = paramMap.get("vendorPersonId"); - if (StringUtils.isBlank(vendorPersonId)) { - logger.error("vendorPersonId为空"); - throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "vendorPersonId为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String token = objParams.getString("token"); - String ret = cyf.unbindCar(token, park.getParkingId(), vendorPersonId); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("result") == 1){ - }else { - logger.error("cyfUnbindCar error. paramMap: {} . cyfResult: {}",JSON.toJSONString(paramMap),ret); - String msg = retObj.getString("strError"); - throw new MallinkException(ErrorCode.CAR_BIND_FAIL.getCode(), "解绑车牌失败:"+msg); - //return new ResultData(, "绑车牌失败", retObj); - } - } - - - @Override - public ResultData carStopFee(Map paramMap, WxPark park) throws Exception{ - return cyfCarStopFee(paramMap, park); - } - - private ResultData cyfCarStopFee(Map paramMap, WxPark park) throws Exception{ - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String token = objParams.getString("token"); - String ret = cyf.getCarStopFee(token,park.getParkingId(),carNumber); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("result") == 1){ - Integer createTime = retObj.getInteger("inTime");//计费时间 - Integer endTime = retObj.getInteger("endTime");//离场时间 - String msg = retObj.getString("warmPrompt"); - String appId = ""; - String payPath = "http://wechat.cheyifu2016.com/fm-pay/#/transit?encodeURIComponent('orderNo=123&couponFee=2&actualFee=20')"; - return new ResultData(new ParkStopFee(retObj.getString("orderId"), cyf.utcToLocal(String.valueOf(createTime)), - cyf.utcToLocal(String.valueOf(endTime)), String.valueOf(retObj.getDouble("fee")),appId,payPath,null,msg,null)); - }else { - logger.error("cyfCarStopFee error. paramMap: {} . cyfResult: {}",JSON.toJSONString(paramMap),ret); - String msg = retObj.getString("strError"); - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:"+msg); - } - } - - /** - * 优惠券支付流程:(1):调取openapi/getFee路径获取当前停车费,入参:plate,parkingId,token - (2):调用地址:http://wechat.cheyifu2016.com/fm-pay/#/transit?encodeURIComponent('orderNo=123&couponFee=2&actualFee=20') - 注: 详细参考接口文档参数 - * @param token - * @param orderNo - * @param couponFee - * @param actualFee - * @return - */ - @Override - public ResultData useCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) throws Exception{ - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String token = objParams.getString("token"); - //先获取停车费,然后再提交停车费 - String ret = cyf.getCarStopFee(token,park.getParkingId(),carNumber); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("result") == 1){ - String orderId = retObj.getString("orderId"); - if (StringUtils.isBlank(orderId)) { - logger.error("cyfCarStopFee error. paramMap: {} . cyfResult: {}",JSON.toJSONString(paramMap),ret); - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "车易付停车费查询未返回订单编号:"+orderId); - } - if (!coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "车易付只能支持金额券,不能使用小时券:"+orderId); - } - int fee = retObj.getInteger("fee"); - int amount = Integer.parseInt(coupon.getPriceStr()); - Map retmap = new HashMap(); - retmap.put("orderNo", orderId); - retmap.put("couponFee", amount); - retmap.put("actualFee", fee-amount); - return new ResultData(); - }else { - logger.error("cyfCarStopFee error. paramMap: {} . cyfResult: {}",JSON.toJSONString(paramMap),ret); - String msg = retObj.getString("strError"); - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:"+msg); - } - } - - @Override - public ResultData getParkStatus(WxPark park) throws Exception{ - return new ResultData(); - } - - @Override - public boolean ignoreUseCouponCache() { - return false; - } - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/cyf/CYFUtil.java b/suimangService/src/main/java/com/iformall/service/park/impl/cyf/CYFUtil.java deleted file mode 100644 index 72f5921..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/cyf/CYFUtil.java +++ /dev/null @@ -1,190 +0,0 @@ -package com.iformall.service.park.impl.cyf; - -import com.alibaba.fastjson.JSON; -import lombok.extern.slf4j.Slf4j; -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicHeader; -import org.apache.http.protocol.HTTP; -import org.apache.http.util.EntityUtils; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.TimeZone; - - -/** - * @author: furunxin - * @Date: 2020/7/1 17:16 - * @Description: 车易付接口对接参数类 - */ - -@Slf4j -public class CYFUtil { - - public static final String CYF_PARK_ID = "parkingId"; - public static final String CYF_CAR_NUMBER = "plate"; - public static final String CYF_PARK_NAME = "parking"; - public static final String CYF_SYN_ID = "recordOrderId"; - public static final String CYF_ENTRANCE_TIME = "inTime"; - - public static final String CYF_IS_RESULT = "result"; - public static final String CYF_ERR_MSG = "strError"; - public static final int CYF_SUC = 1; - public static final int CYF_ERR = 0; - - - //会员车辆信息注册接口地址 - public static final String REGISTER_CAR_URL = "http://open.cheyifu2016.com:8892/openapi/personCar"; - - //获取停车费 - public static final String GET_CAR_STOPFEE = "http://open.cheyifu2016.com:8892/openapi/getFee"; - - //解绑车辆 - public static final String UNBIND_CAR = "http://oepn.cheyifu2016.com:8892/openapi/personCar/delete"; - - //优惠券缴费接口 - public static final String COUPON_FEE = "http://oepn.cheyifu2016.com:8892/openapi/couponFee"; - - - - /** - * @description UTC时间转化为本地时间 - * @Params [utcTime] - * @return java.util.Date - * @Author furunxin - * @Date 2020/7/8 下午12:45 - **/ - public static Date utcToLocal(String seconds) throws ParseException { - String format = "yyyy-MM-dd HH:mm:ss"; - SimpleDateFormat sdf = new SimpleDateFormat(format); - String d = sdf.format(new Date(Long.valueOf(seconds+"000"))); - Date date=sdf.parse(d); - return date; - } - - public static String getLocalDate(){ - LocalDateTime ldt = LocalDateTime.now(); - DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - String nowDate = ldt.format(dtf); - return nowDate; - } - - - - /** - * @description 会员车辆信息注册 - * @Params [token, carport, feeGroupId, parkingId, plates, personId, personName] - * @return java.lang.String - * @Author furunxin - * @Date 2020/7/8 下午10:12 - **/ - public String registerCar(String token,int carport,int feeGroupId,String parkingId,String plates,Long personId,String personName){ - String[] plate = new String[1]; - plate[0] = plates; - Map paramMap = new HashMap<>(); - paramMap.put("token",token); - paramMap.put("parkingId",Integer.valueOf(parkingId)); - paramMap.put("beginTime",getLocalDate()); - paramMap.put("endTime",getLocalDate()); - paramMap.put("feeGroupId",feeGroupId); - paramMap.put("lotNumber",carport); - //paramMap.put("personId",personId); - paramMap.put("personName",personName); - paramMap.put("plates",plate); - String result = Proc(REGISTER_CAR_URL, paramMap); - return result; - } - - /** - * @description 根据车牌号获取停车费 - * @Params [token, parkingId, plates] - * @return java.lang.String - * @Author furunxin - * @Date 2020/7/12 下午3:51 - **/ - public String getCarStopFee(String token,String parkingId,String plates){ - Map paramMap = new HashMap<>(); - paramMap.put("token",token); - paramMap.put("parkingId",Integer.valueOf(parkingId)); - paramMap.put("plate",plates); - paramMap.put("carOutTime",0); - String result = Proc(GET_CAR_STOPFEE, paramMap); - return result; - } - - /** - * @description 解绑车辆 - * @param token - * @param parkingId - * @param personId - * @return - */ - public String unbindCar(String token,String parkingId,String vendorPersonId) { - Map paramMap = new HashMap<>(); - paramMap.put("token",token); - paramMap.put("parkingId",Integer.valueOf(parkingId)); - paramMap.put("personId",Integer.valueOf(vendorPersonId)); - String result = Proc(UNBIND_CAR, paramMap); - return result; - } - - private static String Proc(String url, Map paramMap) { - CloseableHttpClient httpClient = HttpClients.createDefault(); - - HttpPost httpPost = new HttpPost(url); - httpPost.addHeader(HTTP.CONTENT_TYPE,"application/json"); - httpPost.addHeader("Accept", "application/json"); - httpPost.addHeader("Accept-Encoding", "UTF-8"); - - String jsonstr = JSON.toJSONString(paramMap); - log.info("请求报文:"+jsonstr); - - try { - StringEntity se = new StringEntity(jsonstr, Consts.UTF_8); - se.setContentType("application/json"); - se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"UTF-8")); - httpPost.setEntity(se); - } catch (Exception e) { - log.error(e.getMessage()); - } - - HttpResponse response = null; - try { - response = httpClient.execute(httpPost); - } catch (Exception e) { - log.error(e.getLocalizedMessage()); - } - - String result = null; - - //打印StatusLine - log.debug("StatusLine: " + response.getStatusLine()); - try{ - //获取实体 - HttpEntity httpEntity= response.getEntity(); - result = EntityUtils.toString(httpEntity, "UTF-8"); - log.debug(result); - } catch (Exception e) { - log.error(e.getLocalizedMessage()); - } - - try { //关闭流并释放资源 - httpClient.close(); - } catch (IOException e) { - log.error(e.getLocalizedMessage()); - } - return result; - } -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java b/suimangService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java deleted file mode 100644 index 13796e4..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.iformall.service.park.impl.dahua; - -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCouponOrderCarCVo; -import com.iformall.service.park.ParkAdapterService; -import com.iformall.service.park.impl.BaseParkService; - -@Service -public class DaHuaParkService extends BaseParkService implements ParkAdapterService { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Override - public ResultData parkInitConfig(WxPark park) throws Exception { - // TODO Auto-generated method stub - return null; - } - - @Override - public String initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { - return null; - } - - - @Override - public String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { - return member.getId().toString(); - } - - @Override - public void unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { - - } - - @Override - public ResultData carStopFee(Map paramMap, WxPark park) { - return dahuaCarStopFee(paramMap, park); - } - - private ResultData dahuaCarStopFee(Map paramMap, WxPark park) { - String carNumber = paramMap.get("carNumber"); - String result = DaHuaUtil.plateCharge(carNumber, park.getParkId()); - logger.info("大华查询车辆费用接口返回值:{}", result); - JSONObject jsonObject = JSONObject.parseObject(result); - String code = jsonObject.getString("code"); - if (!code.equals(DaHuaUtil.SUCCESS_CODE)) { - return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费获取失败"); - } - Object data = jsonObject.get("data"); - return new ResultData(data); - } - - @Override - public ResultData useCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) { - return new ResultData(); - } - - - @Override - public ResultData getParkStatus(WxPark park) { - return new ResultData(); - } - - @Override - public boolean ignoreUseCouponCache() { - return false; - } - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaUtil.java b/suimangService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaUtil.java deleted file mode 100644 index 0c293ac..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaUtil.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.iformall.service.park.impl.dahua; - -import com.alibaba.fastjson.JSONObject; -import com.iformall.utils.AesUtils; -import com.iformall.utils.HttpUtil; - -import java.util.HashMap; -import java.util.Map; - -/** - * 大华 停车管理 - */ -public class DaHuaUtil { - - public static final String KEY = "8G5M4Ff9hel6fUA7"; - - public static final String IV = "g8v90drvOmIx1PuR"; - - public static final String URL = "http://47.106.104.196:8025/external/common"; - - public static final String SUCCESS_CODE = "0000"; - - public static String parkInfo(String appId) { - Map requestParams = new HashMap<>(); - requestParams.put("method", "parkInfo"); - return request(requestParams, appId); - } - - public static String plateCharge(String carNum, String appId) { - Map requestParams = new HashMap<>(); - Map data = new HashMap<>(); - data.put("carNum", carNum); - requestParams.put("data", data); - requestParams.put("method", "plateCharge"); - return request(requestParams, appId); - } - - public static String request(Map requestParams, String appId) { - String cipher = AesUtils.encryptCtrMode(JSONObject.toJSONString(requestParams), KEY, IV); - Map params = new HashMap<>(); - params.put("appId", appId); - params.put("cipher", cipher); - params.put("timestamp", System.currentTimeMillis()); - try { - //return HttpUtil.doPost(URL, JSONObject.toJSONString(params)); - return null; - } catch (Exception e) { - return null; - } - } - - -} - diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/etcp/ETCPUtil.java b/suimangService/src/main/java/com/iformall/service/park/impl/etcp/ETCPUtil.java deleted file mode 100644 index f25398a..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/etcp/ETCPUtil.java +++ /dev/null @@ -1,987 +0,0 @@ -package com.iformall.service.park.impl.etcp; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.exception.MallinkException; -import okhttp3.*; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.math.BigDecimal; -import java.security.MessageDigest; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -/** - * @Title: OpenapiCaller - * @Package: cn.etcp.openplatform.service - * @Description: ETCP开放平台接口调用示例 - * @author: zhiyong.fan - * @date: 2018/3/8 17:41 - * @version: V1.0 - */ -public class ETCPUtil { - - public static final String ETCP_PARK_ID = "parkId"; - public static final String ETCP_CAR_NUMBER = "plateNumber"; - public static final String ETCP_SYN_ID = "synId"; - public static final String ETCP_PARK_NAME = "parkName"; - public static final String ETCP_USER_TYPE = "userType"; - public static final String ETCP_ENTRANCE_TIME = "entranceTime"; - public static final String ETCP_FIX_PARKING_ID = "fixParkingId"; - public static final String ETCP_REMAINING_DAYS = "remainingDays"; - public static final String ETCP_EXIT_TIME = "exitTime"; - public static final String ETCP_STAYED_TIME = "stayedTime"; - public static final String ETCP_ORDER_ID = "orderId"; - public static final String ETCP_PAID_SERVICE_FEE = "paidServiceFee"; - public static final String ETCP_TIME = "time"; - public static final String ETCP_FEE = "fee"; - - private static final Logger logger = LoggerFactory.getLogger(ETCPUtil.class); - - /** - * 域名地址 - */ -// private static final String domain = "http://mapi.test.etcp.cn"; - private static final String domain = "http://mapi.etcp.cn"; - - // - private static final String appId = "FMLK"; - - private static final int payType = 5; - - /** - * 商户号 测试时请换成ETCP开放平台为商户平台分配的商户号 - */ -// private static final String merchantNo = "C7AEAF80BA8C44ADB42F3DB3CBC7D18A"; - private static final String merchantNo = "24E6DD2767F44F75A4AD916ECBFE4FA1"; - - /** - * 商户密钥 测试时请换成ETCP开放平台为商户平台分配的商户密钥 - */ -// private static final String merchantKey = "C292FFC7DCFB46AFB02792CD43F6DCC7"; - private static final String merchantKey = "B6751C6B37254C4390031F098738B5D9"; - - - /** - * 接口服务版本号 - */ - private static final String version = "1.0.0"; - - /** - * 6.1. 联合登录 - */ - private static final String userSigninUrl = "/merchant/open/{version}/openapi/usersigin"; - - /** - * 7.1. 车牌绑定 - */ - private static final String bindCarUrl = "/merchant/open/{version}/openapi/bindcar"; - - /** - * 7.2. 车牌解绑 - */ - private static final String unbindCarUrl = "/merchant/open/{version}/openapi/unbindcar"; - - /** - * 7.3. 车牌认证 - */ - private static final String carAuthUrl = "/merchant/open/{version}/openapi/carauth"; - - /** - * 7.4. 车牌找回 - */ - private static final String carRetrieveUrl = "/merchant/open/{version}/openapi/carretrieve"; - - /** - * 7.5. 已绑车辆信息查询 - */ - private static final String carNumUrl = "/merchant/open/{version}/openapi/carnum"; - - /** - * 8.1. 停车费查询 - */ - private static final String orderUnpayUrl = "/merchant/open/{version}/openapi/orderunpay"; - - /** - * 8.2. 优惠券查询 - */ - private static final String couponListUrl = "/merchant/open/{version}/openapi/couponlist"; - - /** - * 8.3. 历史停车查询 - */ - private static final String orderHistoryUrl = "/merchant/open/{version}/openapi/orderhistory"; - - /** - * 9.1. 主动支付(ETCP 收款) - */ - private static final String orderpayUrl = "/merchant/open/{version}/openapi/orderpay"; - - /** - * 9.2. 主动支付(商户平台收款) - */ - private static final String orderPaidUrl = "/merchant/open/{version}/openapi/orderpaid"; - - /** - * 10.1. 签约地址获取 - */ - private static final String signUrl = "/merchant/open/{version}/withhold/sign"; - - /** - * 10.2. 签约状态查询 - */ - private static final String statusUrl = "/merchant/open/{version}/withhold/status"; - - /** - * 11.1. 车场信息查询 - */ - private static final String parkingInfoUrl = "/merchant/open/{version}/openapi/surroundingparking"; - - /** - * 11.2. 车场状态查询 - */ - private static final String parkingStatusUrl = "/merchant/open/{version}/openapi/parkingstatus"; - - /** - * 12.1. 坏账查询 - */ - private static final String getDebtUrl = "/merchant/open/{version}/openapi/getdebt"; - - /** - * 12.2. 坏账清缴 - */ - private static final String repayDebtUrl = "/merchant/open/{version}/openapi/repaydebt"; - - /** - * 13.1. 商家优免券模板查询 - */ - private static final String bCouponListUrl = "/merchant/open/{version}/openapi/b/coupon/list"; - - /** - * 13.2. 商家优免券发放 - */ - private static final String bCouponRecordUrl = "/merchant/open/{version}/openapi/b/coupon/record"; - - /** - * 14.1. 车辆进出场模拟接口 - */ - private static final String bCarSimulationUrl = "/merchant/open/{version}/openapi/car/simulation"; - - private final OkHttpClient client = new OkHttpClient(); - - private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); - - /** 错误码 - * 0 成功 - * 1 失败 - * 2 服务器异常 - * 3 时间戳超时 - * 4 签名校验非法 - * 5 没有找到商户密钥 - * 6 参数错误 - * 7 更新订单失败 - * 8 生产订单失败 - * 20100 操作失败 - * 20101 无效 token - * 20102 缺少必要参数 - * 20106 参数错误 - * 20201 手机号错误 - * 20202 获取验证码失败 - * 20203 手机验证码错误 - * 20206 支付金额与应付金额不匹配 - * 20207 60s 内只能发送一次验证码 - * 20208 APP 未有该权限 - * 20209 优惠金额与应付金额不匹配 - * 20301 签约失败 - * 20302 签约成功 - * 20401 无效车架号 - * 20407 车辆信息不匹配 - * 20408 操作失败,请稍后重试 - * 20501 操作失败,请稍后重试 - * 20602 returnUrl 为空 - * 20603 未查询到费用 - * 20604 请先清偿坏账 - * 20605 synId 错误 - * 20606 待支付费用为 0,无需支付 - * 20607 支付链接失效 - * 20608 查费失败 - * 20701 appId 错误 - * 20801 未绑定该车辆 - * 20802 该车辆已被他人绑定 - * 20803 绑定数量超限 - * 20804 30 天内最多绑定 4 辆不同的车 - * 20805 在场车辆不可解绑 - * 20901 车辆不在场 - * 20902 车场不支持电子支付 - * 20903 没有车场查费权限 - * 20904 用户未绑定该查费车牌 - * 20905 查询费用异常 - * 20906 用户不存在 - * 20907 商户未配置查费车场 - * 20908 长租车,费用为 0 - * 20909 车牌错误 - * 21001 查询失败 - * 21002 请稍后再试 - * 21003 未查询到坏账 - * 21004 错误支付类型 - * 21101 签约号已存在 - */ - - public static void main(String[] args) { - ETCPUtil caller = new ETCPUtil(); - String ret = ""; - JSONObject objret = null; - String etcpToken = "899e94d7-a3a5-46d4-87a3-288b18d0b189"; - String carNumber = "京D12345"; - String parkId = "Wj7YdvqyiYM="; - String businessId = "IgWGUtpAX68="; - String couponFreeId = "5627"; - - //caller.carSimulation(domain, appId, merchantNo, merchantKey, version, carNumber); - /* {"code":0,"message":"ok","data":{"isInPark":0}} */ - - //caller.getBCouponList(domain, merchantNo, merchantKey, version, parkId, businessId); - // {"code":0,"message":"查询成功","data":{"count":1,"couponPlatformModels":[{"id":5627,"parkId":"Wj7YdvqyiYM=","businessId":"IgWGUtpAX68=","businessName":"fmtest5678","name":"优免现金1元","category":"2","categoryValue":"1.00","amount":100,"status":"1","effectiveStart":"2018-08-20","effectiveEnd":"2018-08-25","couponType":"0","avaliavleNum":100}]}} - //caller.bCouponRecord(domain, merchantNo, merchantKey, version, etcpToken, parkId, businessId, carNumber, couponFreeId); - // 联合登录测试 - - //etcp 登陆 - ret = caller.userSignin(domain, appId, merchantNo, merchantKey, version, "13597837191"); - System.out.println(ret); - - objret = JSON.parseObject(ret); - if (objret.getIntValue("code") != 0) - return; - - etcpToken = objret.getJSONObject("data").getString("token"); - System.out.println(etcpToken); - - // 绑定的车牌查询 - ret = caller.carNum(domain, merchantNo, merchantKey, version, etcpToken); - System.out.println(ret); -// objret = JSON.parseObject(ret); -// if (objret.getIntValue("code") != 0) -// return; -// JSONObject data = objret.getJSONObject("data"); -// if (data.getIntValue("number") <= 0) { -// // 车牌绑定测试 -// ret = caller.bindCar(domain, etcpToken, carNumber, null, merchantNo, merchantKey, version); -// objret = JSON.parseObject(ret); -// if (objret.getIntValue("code") != 0) -// return; -// } -// JSONArray carArry = data.getJSONArray("carList"); -// carNumber = JSON.toJSONString(carArry.get(0)); -// carNumber = carNumber.substring(1, carNumber.length() -1); -// System.out.println(carNumber); -// // 停车费查询 -// ret = caller.orderUnpay(domain, appId, merchantNo, merchantKey, version, etcpToken, carNumber); -// System.out.println(ret); -// objret = JSON.parseObject(ret); -// if (objret.getIntValue("code") != 0) -// return; -// JSONArray payArr = objret.getJSONArray("data"); -// JSONObject payObj = payArr.getJSONObject(0); -// String orderId = payObj.getString("orderId"); -// // 微信h5支付 -// ret = caller.orderPay(domain, merchantNo, merchantKey, version, etcpToken, orderId, "http://test.cn", null); -// System.out.println(ret); - - // 车牌解绑测试 - //caller.unbindCar(merchantNo, merchantKey, version, etcpToken, carNumber); - - - //String orderId = "867C6F2F-4F3A-4767-890E-BA7F53F9C601"; - //caller.orderPay(etcpToken, 5, orderId, "test.cn", null); - - // 支付完成通知测试 - /*caller.orderPaid(etcpToken, "51C3E00A-4F87-43FB-A71B-C1287ED956CB", - "201803120000001", BigDecimal.valueOf(8.85), "2018-03-12 11:58:31", - "FSED9JvxgAU6XJUd8YRF5f7OuzyQ/lGJch0h8dVVkNaHUpPISCLBshnn0AIoEdIdi2aQMOrrcmdVz2Smy+UbQ8pXl95Mv50aPNnUgaDlxSDqHQ8iOD6FT5XV7ikozZ0800CJKDkvQrmCZS2O21G+xg==", - "ETCP");*/ - } - - public static int getPayType() { - return payType; - } - - private boolean checkRespFailed(String resp) { - if(resp.startsWith("") || resp.startsWith("")) { - return true; - } - return false; - } - - /** - * 6.1. 联合登录 - * - * @param appId appId(非空) - * @param merchantNo merchantNo(非空) - * @param merchantKey merchantKey(非空) - * @param version version(非空) - * @param mobilePhone 手机号(非空) - * @return 联合登录响应信息 - * { - * "code": 0, - * "data": { - * "token": "0b59582d-ea6f-4bf1-a570-e803cc24ebe0" - * }, - * "message": "ok" - * } - */ - public String userSignin(String baseUrl, String appId, String merchantNo, String merchantKey, String version, - String mobilePhone) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("appId", appId); - jsonObject.put("mobilePhone", mobilePhone); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + userSigninUrl.replaceAll("\\{version}", version), data, sign, - timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 7.1. 车牌绑定 - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空) - * @param plateNumber 车牌号(非空) - * @param plateColor 车牌颜色(可空) - * @return 绑牌响应信息 - * { - * "code": 0, - * "message": "ok" - * } - */ - public String bindCar(String baseUrl, String merchantNo, String merchantKey, String version, - String etcpToken, - String plateNumber, String plateColor) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("plateNumber", plateNumber); - if ("1".equals(plateColor) || "2".equals(plateColor) || "3".equals(plateColor) - || "4".equals(plateColor)) { - jsonObject.put("plateColor", plateColor); - } - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + bindCarUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 7.2. 车牌解绑 - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空) - * @param plateNumber 车牌号(非空) - * @return 车牌解绑响应信息 - * { - * "code": 0, - * "message": "ok" - * } - */ - public String unbindCar(String baseUrl, String merchantNo, String merchantKey, String version, - String etcpToken, - String plateNumber) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("plateNumber", plateNumber); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + unbindCarUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 7.3. 车牌认证 - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空) - * @param carFrameNum 车架号(非空) - * @param plateNumber 车牌号(非空) - * @param carEngineNum 发动机号(非空) - * @return 车牌解绑响应信息 - * { - * "code": 0, - * "message": "ok" - * } - */ - public String carAuth(String baseUrl, String merchantNo, String merchantKey, String version, - String etcpToken, - String carFrameNum, String plateNumber, String carEngineNum - ) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("carFrameNum", carFrameNum); - jsonObject.put("plateNumber", plateNumber); - jsonObject.put("carEngineNum", carEngineNum); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + carAuthUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 7.4. 车牌找回 - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空) - * @param carFrameNum 车架号(非空) - * @param plateNumber 车牌号(非空) - * @param carEngineNum 发机号(非空) - * @param plateColor 车牌颜色(1 蓝 2 黑 3 黄 4 白) - * @return 车牌找回响应信息 - * { - * "code": 0, - * "message": "ok" - * } - */ - public String carRetrieve(String baseUrl, String merchantNo, String merchantKey, String version, - String etcpToken, - String carFrameNum, String plateNumber, String carEngineNum, String plateColor ) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("carFrameNum", carFrameNum); - jsonObject.put("plateNumber", plateNumber); - jsonObject.put("carEngineNum", carEngineNum); - if (!StringUtils.isBlank(plateColor)) - jsonObject.put("plateColor", plateColor); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + carRetrieveUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 7.5. 已绑车辆信息查询 - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空) - * @return 已绑车辆信息查询响应信息 - * { - * "code": 0, - * "msg": "ok", - * "data": { - * "number": 3, - * "carList": [ - * "晋 BMZ105", - * "云 C12345" - * ] - * } - * } - */ - public String carNum(String baseUrl, String merchantNo, String merchantKey, String version, - String etcpToken) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doGet(baseUrl + carNumUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 8.1. 停车费查询 - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空) - * @param plateNumber 车牌号(非空) - * @param appId appId(可空) - * @return 停车费查询响应信息 - */ - public String orderUnpay(String baseUrl, - String appId, String merchantNo, String merchantKey, String version, - String etcpToken, - String plateNumber) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("plateNumber", plateNumber); - if (appId != null && appId.length() > 0) { - jsonObject.put("appId", appId); - } - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doGet(baseUrl + orderUnpayUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 8.2. 优惠券查询 - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空) - * @param lastCode 上一分页代码(可空) - * @param pageSize 1-200 之间的分页每页数量(非空) - * @return 停车费查询响应信息 - */ - public String couponList(String baseUrl, - String merchantNo, String merchantKey, String version, - String etcpToken, - String lastCode, String pageSize) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - if (!StringUtils.isBlank(lastCode)) - jsonObject.put("lastCode", lastCode); - jsonObject.put("pageSize", pageSize); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doGet(baseUrl + couponListUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 8.3.历史停车查询 - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空) - * @return 停车费查询响应信息 - */ - public String orderHistory(String baseUrl, - String merchantNo, String merchantKey, String version, - String etcpToken) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doGet(baseUrl + orderHistoryUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 9.1. 主动支付(ETCP 收款) - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin})(非空) - * @param orderId 停车记录ID ({@link ETCPUtil#orderUnpay})(非空) - * @param returnUrl 外部支付流水号(商户平台生成)(非空) - * @param couponCode 支付金额 ({@link ETCPUtil#orderUnpay})(非空) - * @return - */ - public String orderPay(String baseUrl, - String merchantNo, String merchantKey, String version, - String etcpToken, String orderId, - String returnUrl, String couponCode) throws MallinkException { - // payType 支付方式(1 微信公众号内支付 2 支付宝 H5 支付 3 微信二维码 4 支付宝二维码 5 微信 H5)(非空) - int payType = 1; - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("payType", payType); - jsonObject.put("synId", orderId); - jsonObject.put("returnUrl", returnUrl); - if (couponCode != null && couponCode.length() > 0) { - jsonObject.put("couponCode", couponCode); - } - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + orderpayUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 9.2. 主动支付(商户平台收款) - * - * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin})(非空) - * @param orderId 停车记录ID ({@link ETCPUtil#orderUnpay})(非空) - * @param externalOrderId 外部支付流水号(商户平台生成)(非空) - * @param payment 支付金额 ({@link ETCPUtil#orderUnpay})(非空) - * @param payTime 支付时间, 格式:yyyy-MM-dd HH:mm:ss(非空) - * @param verificationInfo 验证信息串 ({@link ETCPUtil#orderUnpay})(非空) - * @param appId appId(可空) - * @return - */ - public String orderPaid(String baseUrl, - String appId, String merchantNo, String merchantKey, String version, - String etcpToken, - String orderId, String externalOrderId, - BigDecimal payment, String payTime, String verificationInfo) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("orderId", orderId); - jsonObject.put("externalOrderId", externalOrderId); - jsonObject.put("payment", payment); - jsonObject.put("payTime", payTime); - jsonObject.put("verificationInfo", verificationInfo); - if (appId != null && appId.length() > 0) { - jsonObject.put("appId", appId); - } - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + orderPaidUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 11.1. 车场信息查询 - * - * @param lat, lon, radius - * @return 车场信息查询 - */ - public String parkingInfo(String baseUrl, - String merchantNo, String merchantKey, String version, - String lat, String lon, String radius) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("lat", lat); - jsonObject.put("lon", lon); - jsonObject.put("radius", radius); - jsonObject.put("payType", "1"); // 1:电子支付 - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + parkingInfoUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 11.2. 车场状态查询 - * - * @param parkingId 车场ID(非空) - * @return 车场状态查询响应信息 - */ - public String parkingStatus(String baseUrl, - String merchantNo, String merchantKey, String version, - String parkingId) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("parkingId", parkingId); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)){ - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 12.1. 坏账查询 - * - * @param etcpToken - * @return 车场状态查询响应信息 - */ - public String getDebt(String baseUrl, - String appId, String merchantNo, String merchantKey, String version, - String etcpToken, String carNumber) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("appId", appId); - jsonObject.put("plateNumber", carNumber); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 12.2. 坏账清缴 - * - * @param etcpToken - * @param - * @param returnUrl - * @return 车场状态查询响应信息 - */ - public String repayDebt(String baseUrl, - String merchantNo, String merchantKey, String version, - String etcpToken, String returnUrl) throws MallinkException { - // payType(1:支付宝 2:微信H5) - int payType = 2; - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("payType", payType); - jsonObject.put("returnUrl", returnUrl); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 13.1. 商家优免券模板查询 - * - * @return 商家优免券模板查询结果 - */ - public String getBCouponList(String baseUrl, - String merchantNo, String merchantKey, String version, - String parkId, String businessId) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("parkId", parkId); - jsonObject.put("businessId", businessId); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + bCouponListUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 13.2. 商家优免券发放 - * - * @param etcpToken - * @return 商家优免券发放结果 - */ - public String bCouponRecord(String baseUrl, - String merchantNo, String merchantKey, String version, - String etcpToken, - String parkId, String businessId, String carNumber, String couponFreeId) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", etcpToken); - jsonObject.put("parkId", parkId); - jsonObject.put("businessId", businessId); - jsonObject.put("vehicleNo", carNumber); - jsonObject.put("couponFreeId", couponFreeId); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + bCouponRecordUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - /** - * 14.1. 车辆进出场模拟接口 - * - * @param appId, plateNumber - * @return 车场状态查询响应信息 - */ - public String carSimulation(String baseUrl, - String appId, String merchantNo, String merchantKey, String version, - String plateNumber) throws MallinkException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("appId", appId); - jsonObject.put("plateNumber", plateNumber); - - String data = jsonObject.toJSONString(); - String timeStamp = dateTimeFormatter.format(LocalDateTime.now()); - String sign = genSign(data, merchantKey, timeStamp); - - String respStr = doPost(baseUrl + bCarSimulationUrl.replaceAll("\\{version}", version), - data, sign, timeStamp, merchantNo); - if(respStr == null) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - if(checkRespFailed(respStr)) { - throw new MallinkException(ErrorCode.ETCP_CMD_FAIL); - } - return respStr; - } - - private String doPost(String url, String data, String sign, String timeStamp, String merchantNo) { - logger.info("请求url地址:{}, 请求参数为:data={}, sign={}, time_stamp={}, merchant_no={}", url, data, - sign, timeStamp, merchantNo); - RequestBody body = new FormBody.Builder().add("data", data).add("sign", sign) - .add("time_stamp", timeStamp).add("merchant_no", merchantNo).build(); - Request request = new Request.Builder().url(url).post(body).build(); - try (Response response = client.newCall(request).execute()) { - String responseStr = response.body().string(); - logger.info("post接口响应信息为:{}", responseStr); - return responseStr; - } catch (IOException e) { - logger.error(e.getMessage(),e); - } - return null; - } - - private String doGet(String sourceUrl, String data, String sign, String timeStamp, String merchantNo) { - logger.info("请求url地址:{}, 请求参数为:data={}, sign={}, time_stamp={}, merchant_no={}", sourceUrl, - data, sign, timeStamp, merchantNo); - HttpUrl url = HttpUrl.parse(sourceUrl).newBuilder().addQueryParameter("data", data) - .addQueryParameter("sign", sign).addQueryParameter("time_stamp", timeStamp) - .addQueryParameter("merchant_no", merchantNo).build(); - Request request = new Request.Builder().url(url).build(); - try (Response response = client.newCall(request).execute()) { - String responseStr = response.body().string(); - logger.info("get请求接口响应信息为:{}", responseStr); - return responseStr; - } catch (IOException e) { - logger.error(e.getMessage(),e); - } - return null; - } - - // 签名 - private String genSign(String param, String merchantKey, String time) { - String preparedString = new StringBuilder(param).append(merchantKey).append(time).toString(); - return md5Encode(preparedString.replaceAll("[ \r\t\n]", "")); - } - - private String md5Encode(String content) { - StringBuilder sb = new StringBuilder(); - try { - if (content == null || content.length() == 0) { - return null; - } - MessageDigest digestInstance = MessageDigest.getInstance("MD5"); - digestInstance.update(content.getBytes("UTF-8")); - byte[] md = digestInstance.digest(); - for (int i = 0; i < md.length; ++i) { - int val = md[i] & 0xff; - if (val < 16) { - sb.append("0"); - } - sb.append(Integer.toHexString(val)); - } - } catch (Exception ex) { - logger.error(ex.getMessage(),ex); - } - return sb.toString().toUpperCase(); - } - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/etcp/EtcpHelper.java b/suimangService/src/main/java/com/iformall/service/park/impl/etcp/EtcpHelper.java deleted file mode 100644 index c326a17..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/etcp/EtcpHelper.java +++ /dev/null @@ -1,488 +0,0 @@ -package com.iformall.service.park.impl.etcp; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.Result; -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCUserCar; -import com.iformall.domain.po.WxCouponOrder; -import com.iformall.domain.po.WxMerchant; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.po.base.TenantEntity; -import com.iformall.domain.vo.WxCouponOrderCarCVo; -import com.iformall.domain.vo.WxMerchantVo; -import com.iformall.enums.EnumCarVendor; -import com.iformall.enums.EnumCouponOrderStatus; -import com.iformall.enums.EnumETCPCode; -import com.iformall.exception.MallinkException; -import com.iformall.service.WxCUserBasicInfoService; -import com.iformall.service.WxCUserCarService; -import com.iformall.service.WxCouponOrderService; -import com.iformall.service.WxMerchantService; -import com.iformall.service.park.impl.util.ParkHelper; - -@Service -public class EtcpHelper { - - private final Logger logger = LoggerFactory.getLogger(EtcpHelper.class); - - private ETCPUtil etcp = new ETCPUtil(); - - @Autowired - WxCUserBasicInfoService wxCUserBasicInfoService; - - @Autowired - WxCUserCarService wxCUserCarService; - - @Autowired - WxMerchantService wxMerchantService; - - @Autowired - WxCouponOrderService wxCouponOrderService; - - @Autowired - ParkHelper parkHelper; - - public ResultData initForEtcp(Map paramMap, Long userId, WxPark park) { - String phone = paramMap.get("phone"); - WxCUserBasicInfo user = wxCUserBasicInfoService.getById(userId,park.getFinalTenantId()); - if (null == user) { - logger.error("暂未成为会员,请授权手机号"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "暂未成为会员,请授权手机号"); - } - if (StringUtils.isBlank(phone) && StringUtils.isBlank(user.getPhone())) { - logger.error("暂未成为会员,请授权手机号"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "暂未成为会员,请授权手机号"); - } - if (!StringUtils.isBlank(user.getPhone()) && !user.getPhone().contains("*")) { - phone = user.getPhone(); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString("url"); - String appId = objParams.getString("appId"); - String merchantNo = objParams.getString("merchantNo"); - String merchantKey = objParams.getString("merchantKey"); - String version = objParams.getString("version"); - - String ret = ""; - try { - ret = etcp.userSignin(url, appId, merchantNo, merchantKey, version, phone); - } catch (MallinkException e) { - logger.error("ETCP failed: " + e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) { - // 获取绑定的车牌 - JSONObject dataObj = retObj.getJSONObject("data"); - dataObj.put("vendor", EnumCarVendor.CAR_ETCP.getCode()); - String etcpToken = dataObj.getString("token"); - try { - JSONObject dataObj1 = etcpSyncCarNumbers(park, user.getId(), park.getVendorType(), - url, merchantNo, merchantKey, version, - etcpToken); - } catch (MallinkException e) { - logger.error("ETCP cmd error: " + e.getMessage()); - } - // c端必须保存此token - return new ResultData(dataObj); - } else { - logger.error("共同登录失败: " + phone); - return new ResultData(ErrorCode.ETCP_LOGIN_FAIL.getCode(), "共同登录失败"); - } - } - - /** - * ETCP同步 - * - * @param tenantEntity - * @param cUserId - * @param iVendorType - * @param url - * @param merchantNo - * @param merchantKey - * @param version - * @param etcpToken - * @return - */ - private JSONObject etcpSyncCarNumbers(TenantEntity tenantEntity, Long cUserId, int iVendorType, - String url, String merchantNo, String merchantKey, String version, - String etcpToken) { - String ret; - JSONObject retObj; - /*{"code": 0,"msg": "ok","data": {"number": 3,"carList": ["晋 BMZ105","云 C12345"]}} */ - try { - ret = etcp.carNum(url, merchantNo, merchantKey, version, etcpToken); - } catch (MallinkException e) { - logger.error("ETCP failed: " + e.getMessage()); - throw new MallinkException(e.getErrorCode(), e.getMessage()); - } - retObj = JSON.parseObject(ret); - JSONObject dataObj1 = retObj.getJSONObject("data"); - dataObj1.put("vendor", iVendorType); - JSONArray arr = dataObj1.getJSONArray("carList"); - WxCUserCar queryUserCar = new WxCUserCar(); - queryUserCar.setCUserId(cUserId); - List uclist = wxCUserCarService.getList(queryUserCar); - if(null != uclist ) { - List ucclist = new ArrayList(); - ucclist.addAll(uclist); - // 删除ETCP不存在 - for (WxCUserCar userCar : uclist) { - boolean bExist = isExistInArray(arr, userCar.getCarNumber()); - if (!bExist) { - wxCUserCarService.deleteById(userCar.getId()); - ucclist.remove(userCar); - } - } - // 添加ETCP的 - for (int i = 0; i < arr.size(); i++) { - String _carNum = arr.getString(i); - boolean bExist = isExistInList(ucclist, _carNum); - if (!bExist) { - Date curr = new Date(); - WxCUserCar userCar = new WxCUserCar(); - userCar.setCUserId(cUserId); - userCar.updateTenantInfo(tenantEntity); - userCar.setCarNumber(_carNum); - userCar.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - userCar.setCreateDate(curr); - userCar.setUpdateDate(curr); - wxCUserCarService.saveOrUpdate(userCar); - } - } - } - return dataObj1; - } - - private boolean isExistInArray(JSONArray arr, String carNumber) { - boolean bExist = false; - for (int i = 0; i < arr.size(); i++) { - // check carNum+cUserId是否存在, 不存在新建 - String _carNum = arr.getString(i); - - if (carNumber.equals(_carNum)) { - bExist = true; - break; - } - } - return bExist; - } - - private boolean isExistInList(List list, String carNumber) { - boolean bExist = false; - for (WxCUserCar userCar : list) { - if (carNumber.equals(userCar.getCarNumber())) { - bExist = true; - break; - } - } - return bExist; - } - - - public ResultData etcpBindCar(Map paramMap, WxPark park, Long cuUserId) { - String etcpToken = paramMap.get("etcpToken"); - if (StringUtils.isBlank(etcpToken)) { - logger.error("etcpToken为空"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空"); - } - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - logger.error("carNumber为空"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString("url"); - String merchantNo = objParams.getString("merchantNo"); - String merchantKey = objParams.getString("merchantKey"); - String version = objParams.getString("version"); - - String ret = ""; - try { - ret = etcp.bindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber, null); - } catch (MallinkException e) { - logger.error("ETCP failed: " + e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("code") == 0) { - parkHelper.addCarInfoToDB(carNumber, EnumCarVendor.CAR_ETCP, park, cuUserId,"etcpUser"); - JSONObject dataObj = retObj.getJSONObject("data"); - return new ResultData(dataObj); - } else { - String message = retObj.getString("message"); - logger.error("绑车牌失败: " + carNumber); - return new ResultData(ErrorCode.ETCP_BIND_FAIL.getCode(), message, retObj); - } - } - - - public ResultData etcpUnbindCar(Map paramMap, WxPark park, Long cuUserId) { - String etcpToken = paramMap.get("etcpToken"); - if (StringUtils.isBlank(etcpToken)) { - logger.error("etcpToken为空"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空"); - } - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - logger.error("carNumber为空"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString("url"); - String merchantNo = objParams.getString("merchantNo"); - String merchantKey = objParams.getString("merchantKey"); - String version = objParams.getString("version"); - - String ret = ""; - try { - ret = etcp.unbindCar(url, merchantNo, merchantKey, version, etcpToken, carNumber); - } catch (MallinkException e) { - logger.error("ETCP failed: " + e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } - - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("code") == 0) { - try { - WxCUserCar userCar = new WxCUserCar(); - userCar.setCUserId(cuUserId); - userCar.updateTenantInfo(park); - userCar.setCarNumber(carNumber); - wxCUserCarService.deleteByObj(userCar); - } catch (Exception e) { - logger.error(e.getMessage()); - return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage()); - } - - return new ResultData(); - } else { - String message = retObj.getString("message"); - logger.error("解绑车牌失败"); - return new ResultData(ErrorCode.ETCP_UNBIND_FAIL.getCode(), message, retObj); - } - } - - public ResultData etcpCarStopFee(@RequestBody Map paramMap, WxPark park) { - String etcpToken = paramMap.get("etcpToken"); - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(etcpToken)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空"); - } - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString("url"); - String appId = objParams.getString("appId"); - String merchantNo = objParams.getString("merchantNo"); - String merchantKey = objParams.getString("merchantKey"); - String version = objParams.getString("version"); - - String ret = ""; - try { - ret = etcp.orderUnpay(url, appId, merchantNo, merchantKey, version, etcpToken, carNumber); - } catch (MallinkException e) { - logger.error("ETCP failed: " + e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } - - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("code") == 0) { - JSONObject feeObj = retObj.getJSONArray("data").getJSONObject(0); - /* - Date currentDate = new Date(); - WxCarCmdLog wxCarCmdLog = new WxCarCmdLog(); - wxCarCmdLog.setTenantId(user.getTenantId()); - wxCarCmdLog.setVendorType(EnumCarVendor.CAR_ETCP.getCode()); - wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_UNPAY.getCode()); - String feeStr = JSON.toJSONString(feeObj); - wxCarCmdLog.setCmdJson(feeStr); - wxCarCmdLog.setCreateDate(currentDate); - wxCarCmdLog.setUpdateDate(currentDate); - try { - wxCarCmdLogService.saveOrUpdate(wxCarCmdLog); - } catch (Exception e) { - logger.error("etcpOrderUnpay: 入库错误:" + feeStr); - return new ResultData(ErrorCode.DB_FAIL.getCode(), "入库错误", feeStr); - } - */ - return new ResultData(Result.SUCCESS, "停车费获取成功", feeObj); - } else { - String message = retObj.getString("message"); - return new ResultData(ErrorCode.ETCP_STOP_FEE_FAIL.getCode(), message, retObj); - } - } - - - private String getETCPBusinessID(Long merchantId) { - String businessId; - WxMerchant wxMerchant = wxMerchantService.getById(merchantId); - String carParams = wxMerchant.getCarParams(); - JSONObject objParams1 = JSON.parseObject(carParams); - businessId = objParams1.getString("businessId"); - return businessId; - } - - public ResultData getCoupon(Map paramMap,WxPark park,WxCouponOrderCarCVo userCar,String carNumber) { - String etcpToken = paramMap.get("etcpToken"); - if (StringUtils.isBlank(etcpToken)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "etcpToken为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString("url"); - String merchantNo = objParams.getString("merchantNo"); - String merchantKey = objParams.getString("merchantKey"); - String version = objParams.getString("version"); - String businessId = ""; - // 获取merchantId - WxMerchantVo merchantVo = null; - if (null != userCar.getMerchantVoList() && userCar.getMerchantVoList().size() > 0) { - merchantVo = userCar.getMerchantVoList().get(0); - } - - // 优先从从商户表里取 - businessId = getETCPBusinessID(merchantVo.getId()); - if (StringUtils.isBlank(businessId)) { - // 1期只有一个虚拟商户,可以写在商场配置里 - businessId = objParams.getString("businessId"); - } - - String ret = ""; - try { - - String couponFreeId = couponFreeIdFromJson(userCar.getVendorParams()); - if (StringUtils.isBlank(couponFreeId)) { - return new ResultData(ErrorCode.DB_FAIL.getCode(), "vendorParams解析错误"); - } - ret = etcp.bCouponRecord(url, merchantNo, merchantKey, version, - etcpToken, park.getParkId(), businessId, carNumber, couponFreeId); - } catch (MallinkException e) { - logger.error("ETCP failed: " + e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) { - - try { - updateWxCouponOrderUsed(userCar, park); - return new ResultData(); - } catch (Exception e) { - return new ResultData(ErrorCode.DB_FAIL.getCode(), "券包状态更新失败"); - } - - } else { - return new ResultData(ErrorCode.ETCP_QUAN_SEND_FAIL.getCode(), retObj.getString("message")); - } - } - - private String couponFreeIdFromJson(String json) { - if (StringUtils.isBlank(json)) { - return null; - } - JSONObject object = JSON.parseObject(json); - if (null != object) { - Integer id = object.getInteger("id"); - if (null != id) { - return String.valueOf(id); - } - } - return null; - } - - public void updateWxCouponOrderUsed(WxCouponOrderCarCVo userCar,WxPark park) throws Exception { - // 券状态设为已使用 - WxCouponOrder couponOrder = new WxCouponOrder(); - couponOrder.setId(userCar.getId()); - couponOrder.updateTenantInfo(park); - couponOrder.setUpdateDate(new Date()); - couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); - try { - wxCouponOrderService.saveOrUpdate(couponOrder); - } catch (Exception e) { - logger.error("券包状态更新失败:" + couponOrder.getId(),e); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "券包状态更新失败"); - } - } - - - public ResultData etcpParkStatus(WxPark park) { - String params = park.getVendorParams(); - if (params == null) { - return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "车场不支持"); - } - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString("url"); - String merchantNo = objParams.getString("merchantNo"); - String merchantKey = objParams.getString("merchantKey"); - String version = objParams.getString("version"); - if (park.getParkingId() == null) { - // those code is not supported - /* - String lat = objParams.getString("lat"); - String lon = objParams.getString("lon"); - String radius = objParams.getString("radius"); - String ret = etcp.parkingInfo(url, merchantNo, merchantKey, version, lat, lon, radius); - logger.info(ret); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) { - JSONObject retData = retObj.getJSONObject("data"); - if (retData != null) { - JSONArray retDataList = retData.getJSONArray("list"); - if (retDataList != null) { - JSONObject parkData = retDataList.getJSONObject(0); - if (parkData != null) { - String parkId = parkData.getString("id"); - objParams.put("parkId", parkId); - params = JSON.toJSONString(objParams); - park.setVendorParams(params); - park.setParkingId(parkId); - wxParkService.saveOrUpdate(park); - } - } - } - } - */ - } - - if (park.getParkingId() != null) { - String ret = ""; - try { - ret = etcp.parkingStatus(url, merchantNo, merchantKey, version, park.getParkingId()); - } catch (MallinkException e) { - logger.error("ETCP failed: " + e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } - - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("code") == EnumETCPCode.SUCCESS.getCode()) { - if (retObj.get("data") != null) { - return new ResultData(retObj.getJSONObject("data")); - } - } - } - return null; - } - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkCallbackService.java b/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkCallbackService.java deleted file mode 100644 index 731f13a..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkCallbackService.java +++ /dev/null @@ -1,235 +0,0 @@ -package com.iformall.service.park.impl.haikangweishi; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.IdWorker; -import com.iformall.domain.po.WxCarJSOrder; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCarCYFVo; -import com.iformall.enums.EnumCarVendor; -import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxCarJSOrderMapper; -import com.iformall.service.WxParkService; -import com.iformall.service.park.ParkBatchCallBackAdapterService; -import com.iformall.service.park.ParkCallBackAdapterService; -import com.iformall.service.park.entity.ParkNotifyParam; -import com.iformall.service.park.impl.BaseParkService; - -import lombok.extern.slf4j.Slf4j; - - -/** - * 海康文档 3.1.8 - * @author alascor - * - */ -@Slf4j -@Service -public class HaiKangWeiShiParkCallbackService extends BaseParkService implements ParkBatchCallBackAdapterService { - - - @Autowired - HaiKangWeiShiParkService haiKangWeiShiParkService; - - @Autowired - WxParkService wxParkService; - - - /** - *{ - "method":"OnEventNotify", - "params":{ - "ability":"vehicle_pass_in_event", - "eventType":771760131, - "events":[ - { - "crossTime":"2021-07-01T17:29:27+08:00", - "crossType":1, - "eventIndexCode":"74b64514-4888-4f42-8cf7-22fed37d5dc8", - "eventType":3, - "resource":{ - "deviceId":"3715149265421676", - "deviceSerial":"R20150664", - "direction":0, - "entranceId":"2063867554789264", - "entranceName":"前门1", - "parkId":"2064637172217744", - "parkName":"车库", - "resType":"roadway", - "roadWayId":"2064272439342992", - "roadWayName":"前门入口" - }, - "stopType":11, - "vehicle":{ - "plateColor":12, - "plateNo":"苏A23658", - "plateType":8, - "vehicleColor":12, - "vehicleType":12 - } - } - ], - "sendTime":"2021-07-01T17:29:29.315+08:00" - } -} - */ - @Override - public List parseInNoticyParam(Object param) { - Map paramm = (Map) param; - Map params = (Map) paramm.get("params"); - if (null != params) { - List list = (List)params.get("events"); - if (null != list && list.size() > 0 ) { - List retList = new ArrayList(); - for (int i = 0 ; i < list.size() ; i ++) { - Map map = (Map) list.get(i); - ParkNotifyParam ret = parseInNoticyParamSingle(map); - if (null != ret ) { - retList.add(ret); - } - } - return retList; - } - } - return null; - } - - private ParkNotifyParam parseInNoticyParamSingle(Map paramMap) { - Map vehicle = (Map)paramMap.get("vehicle"); - Map resource = (Map)paramMap.get("resource"); - - String carNumber = vehicle.get("plateNo").toString(); - String parkCode = resource.get("parkId").toString(); - String parkName = resource.get("parkName").toString(); - - String synId = paramMap.get("eventIndexCode").toString(); - String entranceTime = paramMap.get("crossTime").toString(); - - ParkNotifyParam p = new ParkNotifyParam(); - p.setCarNumber(carNumber); - p.setParkId(parkCode); - p.setParkName(parkName); - p.setSynId(synId); -// try { -// p.setEntranceTime(JieShunUtil.utcToLocal(entranceTime)); -// } catch (ParseException e) { -// log.error("jieshun entranceTime format error",e); -// return null; -// } - return p; - } - - - /** - * { - "method":"OnEventNotify", - "params":{ - "ability":"vehicle_pass_out_event", - "eventType":771760134, - "events":[ - { - "crossTime":"2021-07-01T17:31:17+08:00", - "crossType":1, - "eventIndexCode":"a5464f46-ba7b-4059-b657-5ebc2f3774a9", - "eventType":4, - "resource":{ - "deviceId":"370573791833424", - "deviceSerial":"9b1037b5-8a95-4657-81f0-edf27f71d92f", - "direction":1, - "entranceId":"2063867554789264", - "entranceName":"前门1", - "parkId":"2064637172217744", - "parkName":"车库", - "resType":"roadway", - "roadWayId":"2064664422217616", - "roadWayName":"前门出口test" - }, - "stopType":11, - "vehicle":{ - "plateColor":12, - "plateNo":"苏A23658", - "plateType":8, - "vehicleColor":12, - "vehicleType":12 - } - } - ], - "sendTime":"2021-07-01T17:31:17.337+08:00" - } -} - */ - @Override - public List parseOutNoticyParam(Object param) { - Map paramm = (Map) param; - Map params = (Map) paramm.get("params"); - if (null != params) { - List list = (List)params.get("events"); - if (null != list && list.size() > 0 ) { - List retList = new ArrayList(); - for (int i = 0 ; i < list.size() ; i ++) { - Map map = (Map) list.get(i); - ParkNotifyParam ret = parseOutNoticyParamSingle(map); - if (null != ret ) { - retList.add(ret); - } - } - return retList; - } - } - return null; - } - - - private ParkNotifyParam parseOutNoticyParamSingle(Map paramMap) { - Map vehicle = (Map)paramMap.get("vehicle"); - Map resource = (Map)paramMap.get("resource"); - - String carNumber = vehicle.get("plateNo").toString(); - String parkCode = resource.get("parkId").toString(); - String parkName = resource.get("parkName").toString(); - - String synId = paramMap.get("eventIndexCode").toString(); - String entranceTime = paramMap.get("crossTime").toString(); - - ParkNotifyParam p = new ParkNotifyParam(); - p.setCarNumber(carNumber); - p.setParkId(parkCode); - p.setParkName(parkName); - p.setSynId(synId); -// try { -// p.setEntranceTime(JieShunUtil.utcToLocal(entranceTime)); -// } catch (ParseException e) { -// log.error("cyf entranceTime format error",e); -// return null; -// } -// try { -// p.setOutTime(JieShunUtil.utcToLocal(entranceTime)); -// } catch (ParseException e) { -// log.error("cyf outTime format error",e); -// return null; -// } - return p; - } - - @Override - public List parseUnbindNoticyParam(Object param) { - return null; - } - - @Override - public List parsePaidNoticyParam(Object param) { - return null; - } -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java b/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java deleted file mode 100644 index f335371..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiParkService.java +++ /dev/null @@ -1,250 +0,0 @@ -package com.iformall.service.park.impl.haikangweishi; - -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.IdWorker; -import com.iformall.common.Result; -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCarJSOrder; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCouponOrderCarCVo; -import com.iformall.domain.vo.WxParkCouponConfig; -import com.iformall.enums.EnumCarVendor; -import com.iformall.enums.EnumCouponUnit; -import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxCarJSOrderMapper; -import com.iformall.service.WxParkService; -import com.iformall.service.park.ParkAdapterService; -import com.iformall.service.park.entity.ParkStopFee; -import com.iformall.service.park.impl.BaseParkService; -import com.iformall.service.park.impl.util.ParkHelper; -import com.iformall.service.park.utils.ParkCacheUtils; -import com.iformall.utils.RedisCacheUtils; -import com.iformall.utils.RedisLock; - -/** - * 认证平台 https://www.hikyun.com 武汉富茂链客/zfy151431113 - * - * pms.hikyun.com 停车场管理云平台 账号sdw1112131,密码mcgc123456 - * https://open.hikyun.com/1/document/0 - - - @配置说明 - clientId,clientSecret 停车场管理系统控制台的。 - productCode: 停车场管理系统产品在云耀注册的id,固定。 - pmsName,pmsPassword : 停车场管理系统pms.hikyun.com 的账号密码 - projectId,ak : 停车场管理系统在云曜推送接口上创建的一个认证标识,联系 超云(开发)给提供 - * @author alascor - * - */ -@Service -public class HaiKangWeiShiParkService extends BaseParkService implements ParkAdapterService { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired - ParkHelper parkHelper; - - @Autowired - @Qualifier("objectCommonRedisTemplate") - RedisTemplate redisTemplate; - - @Autowired - RedisLock redisLock; - - HaiKangWeiShiUtil haikang = new HaiKangWeiShiUtil(); - - - private String getCacheToken(WxPark park) { - String token = RedisCacheUtils.getCacheString(redisTemplate, "carStop:haikangtoken:"+park.getId()); - if (StringUtils.isBlank(token)) { - String lockKey = "carStop:haikangtokenlock:"+park.getTenantId(); - long time = System.currentTimeMillis() + 2000; - String timeStr = String.valueOf(time); - if (redisLock.lock2(lockKey, timeStr)) { - token = haikang.getToken(park); - if (!StringUtils.isBlank(token)) { - setCacheToken(park, token); - } - redisLock.unlock(lockKey, timeStr); - } else { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - }finally { - redisLock.unlock(lockKey, timeStr); - } - } - } - return RedisCacheUtils.getCacheString(redisTemplate, "carStop:haikangtoken:"+park.getId()); - } - - private void setCacheToken(WxPark park,String token) { - RedisCacheUtils.cache(redisTemplate, "carStop:haikangtoken:"+park.getId(), token, 36000); - } - - - @Override - public ResultData parkInitConfig(WxPark park) throws Exception { - Map retMap = new HashMap(); - try { - JSONObject retObj = haikang.subscription(park, getCacheToken(park),haikang.getAuthorization(park,getCacheToken(park))); - if (retObj.getString("code").equals("0")){ - return new ResultData(); - }else { - logger.error("haikangweishi parkInitConfig error. haikangResult: {}",retObj); - String msg = retObj.getString("msg"); - return new ResultData(retObj.getIntValue("code"), "当前海康威视停车场初始化配置失败:"+msg); - } - }catch(Exception e) { - return new ResultData(Result.ERROR, "当前海康威视停车场初始化配置失败:"+e.getMessage()); - } - } - - @Override - public String initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ - return null; - } - - - @Override - public String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ - return "haikaiweishi"; - } - - - @Override - public void unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ - } - - - /** - * 每一次查询都会产生订单,然后根据订单号查询 - */ - @Override - public ResultData carStopFee(Map paramMap, WxPark park) throws Exception{ - return haiKangWeiShiCarStopFee(paramMap, park); - } - - private ResultData haiKangWeiShiCarStopFee(Map paramMap, WxPark park) throws Exception{ - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - - //如果车牌号是鄂AAAAAA, 为测试车牌 - if (carNumber.equals("鄂AAAAAA")) { - return new ResultData(new ParkStopFee("-111",haikang.utcToLocal("2020-12-16 00:00:00"),haikang.utcToLocal("2020-12-17 00:00:00"), - "0.01","","payPath",null,"测试车牌,仅测试用",null)); - }else if(carNumber.equals("鄂AAAAAB")) { - return new ResultData(21000,"车辆未入场"); - } - - JSONObject attribute = haikang.getFee(park, carNumber, getCacheToken(park),haikang.getAuthorization(park,getCacheToken(park))); - - String appId = ""; - String parkOrderId = attribute.getString("id"); - String _createTime = attribute.getString("entranceTime");//计费时间,格式为“yyyy-MM-dd HH:mi:ss” - String _endTime = attribute.getString("costTime");//离场时间,格式为“yyyy-MM-dd HH:mi:ss” - String payPath = ""; - return new ResultData(new ParkStopFee(parkOrderId,haikang.utcToLocal(_createTime),haikang.utcToLocal(_endTime), - String.valueOf(attribute.getDouble("shouldCost")),appId,payPath,null,null,"0元请勿使用优惠券,无法退回。支付后15分钟内离场")); - } - - /** - * 使用3.5.9.1接口进行车牌和优惠信息绑定优惠券后,车辆出场时我们会自动抵扣。 - * @return - */ - @Override - public ResultData useCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) throws Exception{ - if (null == userCar) { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(),"当前用户未查询到优惠券!"); - } - - if (StringUtils.isBlank(userCar.getCUserPhone())) { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(),"当前用户未查询到手机号!"+userCar.getcUserId()); - } - - Map valueMap = WxParkCouponConfig.parseValue(userCar.getVendorParams()); - if (null == valueMap) { - return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置。"+coupon.getTitle()); - } - - String orderNo = paramMap.get("parkOrderId"); - String planNo = valueMap.get("couponNo"); - if (StringUtils.isBlank(planNo)) { - return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置[ruleId]。"+coupon.getTitle()); - } - - //查询临停信息,判断缓存是否已经存在 - String inRecordSyscode = ""; - JSONObject stopInfo = haikang.getCarStopInfo(park, getCacheToken(park), haikang.getAuthorization(park,getCacheToken(park)), carNumber); - if (stopInfo.getString("code").equals("0")){ - JSONObject dataobject = stopInfo.getJSONObject("data"); - if (null == dataobject) { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前未查询海康威视临停信息["+carNumber+"]"); - } - JSONArray listobject = dataobject.getJSONArray("list"); - if (null == listobject || listobject.size() <= 0 ) { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前未查询海康威视临停信息["+carNumber+"]"); - } - JSONObject currentStopInfo = listobject.getJSONObject(0); - inRecordSyscode = currentStopInfo.getString("inRecordSyscode"); - if (StringUtils.isBlank(inRecordSyscode)) { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前未查询海康威视临停信息["+carNumber+"]"); - } - - Integer used = RedisCacheUtils.getCacheInteger(redisTemplate, "carStop:haikangStopInfoUseCoupon:"+carNumber+":"+inRecordSyscode); - if (null == used || (null != used && used.intValue() < 1) ) { - //do nothing - }else { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "已经使用过优惠券, 不能重复使用."); - } - - }else { - logger.error("haikangweishi stopInfo error. paramMap: {} . haikangResult: {}",JSON.toJSONString(paramMap),stopInfo); - String msg = stopInfo.getString("msg"); - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前查询海康威视临停信息失败:["+stopInfo.getString("code")+"]"+msg); - } - - - JSONObject retObj = haikang.useCoupon(park,planNo,carNumber,orderNo, getCacheToken(park),haikang.getAuthorization(park,getCacheToken(park))); - if (retObj.getString("code").equals("0")){ - RedisCacheUtils.cache(redisTemplate, "carStop:haikangStopInfoUseCoupon:"+carNumber+":"+inRecordSyscode, 1, 24*3600); - return new ResultData(); - }else { - logger.error("haikangweishi useCoupon error. paramMap: {} . haikangResult: {}",JSON.toJSONString(paramMap),retObj); - String msg = retObj.getString("msg"); - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "当前用户领用到海康威视停车券失败:["+retObj.getString("code")+"]"+msg); - } - } - - @Override - public ResultData getParkStatus(WxPark park) throws Exception{ - return new ResultData(); - } - - @Override - public boolean ignoreUseCouponCache() { - return true; - } - - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java b/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java deleted file mode 100644 index d836176..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/HaiKangWeiShiUtil.java +++ /dev/null @@ -1,464 +0,0 @@ -package com.iformall.service.park.impl.haikangweishi; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.domain.po.WxPark; -import com.iformall.exception.MallinkException; -import com.iformall.service.park.impl.haikangweishi.entity.ChallengeCode; -import com.iformall.utils.HashUtil; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.entity.mime.HttpMultipartMode; -import org.apache.http.entity.mime.MultipartEntity; -import org.apache.http.entity.mime.MultipartEntityBuilder; -import org.apache.http.entity.mime.content.StringBody; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.protocol.HTTP; -import org.apache.http.util.EntityUtils; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -/** - * @author: furunxin - * @Date: 2020/7/1 17:16 - * @Description: 车易付接口对接参数类 - */ - -@Slf4j -public class HaiKangWeiShiUtil { - - public static final String TOKEN_URL = "https://open.hikyun.com/artemis/oauth/token"; - public static final String CHALLENGE_CODE = "https://open.hikyun.com/artemis/api/eits/v1/challengeCode"; - public static final String AUTHROZITAION = "https://open.hikyun.com/artemis/api/eits/v1/login"; - public static final String GET_FEE = "https://pmsopen.hikyun.com/artemis/api/pmsc/v1/pay/quickGetVehicleBill"; - public static final String COUPON_USE = "https://pmsopen.hikyun.com/artemis/api/pmsc/v1/coupon/addition"; - public static final String SUBSCRIPTION = "https://pmsopen.hikyun.com/artemis/api/pmsc/v1/sub/subscription"; - public static final String CAR_STOP_INFO = "https://pmsopen.hikyun.com/artemis/api/pmsc/v1/tempCarInRecords/page"; - - - /** - * @description UTC时间转化为本地时间 - * @Params [utcTime] - * @return java.util.Date - * @Author furunxin - * @Date 2020/7/8 下午12:45 - **/ - public static Date utcToLocal(String seconds) throws ParseException { - String format = "yyyy-MM-dd HH:mm:ss"; - SimpleDateFormat sdf = new SimpleDateFormat(format); - Date date=sdf.parse(seconds); - return date; - } - - public static String getLocalDate(){ - LocalDateTime ldt = LocalDateTime.now(); - DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - String nowDate = ldt.format(dtf); - return nowDate; - } - - public String getToken(WxPark wxPark) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - String clientId = vp.getString("clientId"); - String clientSecret = vp.getString("clientSecret"); - return getToken(clientId,clientSecret); - } - - private ChallengeCode getChallengeCode(WxPark wxPark,String accessToken) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map params = new HashMap(); - params.put("name", vp.getString("pmsName"));//pms.hikyun.com 的账号 - params.put("productCode", vp.getString("productCode")); - params.put("type", "1"); - String retCode = ProcBussiness(CHALLENGE_CODE, params,accessToken,null); - if (StringUtils.isBlank(retCode)) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getChallengeCode error. has no result"); - } - JSONObject result = JSON.parseObject(retCode); - - Integer errStatus = result.getInteger("status"); - if (null != errStatus) { - throw new MallinkException(errStatus,"haikang getChallengeCode error.["+result.getString("error")+"]"+result.getString("message")); - } - - if (!result.getString("code").equals("200") ) { - String message = result.getString("msg"); - throw new MallinkException(result.getInteger("code"), "haikang getChallengeCode error."+message); - } - JSONObject attribute = result.getJSONObject("data"); - if (null == attribute) { - throw new MallinkException(result.getInteger("code"), "haikang getChallengeCode error. no result"); - } - return new ChallengeCode(attribute.getString("pwdStatus"),attribute.getString("codeId"),attribute.getString("salt"),attribute.getString("vCode")); - } - - private static String entryPmsPassword(String password,String salt,String vCode) { - return HashUtil.sha256(HashUtil.sha256(password+salt)+vCode); - } - - //使用后不能再次使用,并且有很短的过期时间 - public String getAuthorization(WxPark wxPark,String accessToken) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - ChallengeCode challengeCode = getChallengeCode(wxPark,accessToken); - Map params = new HashMap(); - params.put("name", vp.getString("pmsName"));//pms.hikyun.com 的账号 - params.put("productCode", vp.getString("productCode")); - params.put("type", "1"); - params.put("codeId", challengeCode.getCodeId()); - params.put("password", entryPmsPassword(vp.getString("pmsPassword"),challengeCode.getSalt(),challengeCode.getVCode())); - String retCode = ProcBussiness(AUTHROZITAION, params,accessToken,null); - if (StringUtils.isBlank(retCode)) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getAuthorization error. has no result"); - } - JSONObject result = JSON.parseObject(retCode); - - Integer errStatus = result.getInteger("status"); - if (null != errStatus) { - throw new MallinkException(errStatus,"haikang getAuthorization error.["+result.getString("error")+"]"+result.getString("message")); - } - - if (!result.getString("code").equals("200") ) { - String message = result.getString("msg"); - throw new MallinkException(result.getInteger("code"), "haikang getAuthorization error."+message); - } - JSONObject attribute = result.getJSONObject("data"); - if (null == attribute) { - throw new MallinkException(result.getInteger("code"), "haikang getAuthorization error. no result"); - } - return attribute.getString("Authorization"); - - } - - private String getToken(String clientId,String clientSecret) { - String result = ProcLogin(clientId, clientSecret); - if (StringUtils.isBlank(result)) { - return null; - } - JSONObject res = JSON.parseObject(result); - Integer errStatus = res.getInteger("status"); - if (null != errStatus) { - throw new MallinkException(errStatus,"haikang access_token error.["+res.getString("error")+"]"+res.getString("message")); - } - - String accessToken = res.getString("access_token"); - if (null != accessToken ) { - return accessToken; - }else { - throw new MallinkException(500,"haikang access_token error.["+res.getString("error")+"]"+res.getString("error_description")); - } - } - - /** - * 查询停车费 3.5.5 快速获取账单接口 - * @return - */ - public JSONObject getFee(WxPark wxPark,String carNumber,String token,String Authrozitaion) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map params = new HashMap(); - params.put("chargeSource", "THIRD");//商户编号 - params.put("parkId", wxPark.getParkingId()); - params.put("plateNo", carNumber); - String retCode= ProcBussiness(GET_FEE, params, token,Authrozitaion); - if (StringUtils.isBlank(retCode)) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getFee error. has no result"); - } - JSONObject result = JSON.parseObject(retCode); - - Integer errStatus = result.getInteger("status"); - if (null != errStatus) { - throw new MallinkException(errStatus,"haikang getFee error.["+result.getString("error")+"]"+result.getString("message")); - } - - if (!result.getString("code").equals("0") ) { - String message = result.getString("msg"); - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getFee error.["+result.getString("code")+"]"+message); - } - JSONObject attribute = result.getJSONObject("data"); - if (null == attribute) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getFee error. no result ["+result.getInteger("code")+"]"+carNumber); - } - return attribute; - } - - - /** - * 3.5.7 查询停车信息 - * - * "inRecordSyscode": "h45h45h45ghhn45tg245g45r", - "parkId": "6534543543554", - "parkName": "停车库 1", - "plateNo": "浙 A12345", - "plateNoPicId": "hj53h4h45t45t45t3t234t2t2t45t45t", - "vehiclePicId": "u65h45g45yh56y54y34y34y345y3" - "inTime": "2018-07-26T15:00:00+08:00", - "parkTime": "3 小时 10 分钟" - */ - public JSONObject getCarStopInfo(WxPark wxPark,String token,String Authrozitaion,String carNumber) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map params = new HashMap(); - params.put("pageNo", 1); - params.put("pageSize", 1); - params.put("parkId", wxPark.getParkingId());//商户编号 - params.put("plateNo", carNumber); - String retCode = ProcBussiness(CAR_STOP_INFO, params,token,Authrozitaion); - if (StringUtils.isBlank(retCode)) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang getCarStopInfo error. has no result"); - } - JSONObject result = JSON.parseObject(retCode); - - Integer errStatus = result.getInteger("status"); - if (null != errStatus) { - throw new MallinkException(errStatus,"haikang getCarStopInfo error.["+result.getString("error")+"]"+result.getString("message")); - } - - if (!result.getString("code").equals("0") ) { - String message = result.getString("msg"); - throw new MallinkException(result.getInteger("code"), "haikang getCarStopInfo error."+message); - } - return result; - } - - /** - * 2、有优惠券方式 - 发优惠券的时候是会返回一个优惠券id(3.5.9.1), - 在用户出场的时候,获取停车账单(3.5.3), - 使用停车账单和优惠券id获取优惠账单(3.5.4), - 调用账单支付确认接口(3.5.6); - 完成一次优惠缴费 - * 使用优惠券 3.5.9.1接口进行车牌和优惠信息绑定优惠券后,车辆出场时会自动抵扣 - **/ - public JSONObject useCoupon(WxPark wxPark,String couponNo,String carNumber,String orderNo,String token,String Authrozitaion){ - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - - Map params = new HashMap(); - Map couponmap = new HashMap(); - couponmap.put("plateNo", carNumber); - couponmap.put("ruleId", couponNo); - List coupons = new ArrayList(); - coupons.add(couponmap); - params.put("coupons", coupons);//商户编号 - String retCode = ProcBussiness(COUPON_USE, params,token,Authrozitaion); - if (StringUtils.isBlank(retCode)) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang useCoupon error. has no result"); - } - JSONObject result = JSON.parseObject(retCode); - - Integer errStatus = result.getInteger("status"); - if (null != errStatus) { - throw new MallinkException(errStatus,"haikang useCoupon error.["+result.getString("error")+"]"+result.getString("message")); - } - - if (!result.getString("code").equals("0") ) { - String message = result.getString("msg"); - throw new MallinkException(result.getInteger("code"), "haikang useCoupon error."+message); - } - return result; - } - - /** - * 消息订阅 3.1.8 - * * 这个接口需要你们实现的时候规定下: -1、POST格式, -2、接口返回参数JSON格式:{errcode:0, errmsg: "success",data:null} -3、接口建议接收到过车事件,立即返回接收成功 - -我这边根据这个 0 状态来判断你们是否接收成功,如果没成功,我这边会重发3次的 - * - * @param clientId - * @param clientSecret - * @return - */ - public JSONObject subscription(WxPark wxPark,String token,String Authrozitaion){ - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map params = new HashMap(); - params.put("partnerAppKey", vp.getString("ak"));//商户编号 - params.put("projectId", vp.getString("projectId")); - params.put("eventTypes", new Integer[] {771760131,771760134}); - params.put("subUrl", vp.getString("subUrl")); - String retCode = ProcBussiness(SUBSCRIPTION, params,token,Authrozitaion); - if (StringUtils.isBlank(retCode)) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "haikang subscription error. has no result"); - } - JSONObject result = JSON.parseObject(retCode); - - Integer errStatus = result.getInteger("status"); - if (null != errStatus) { - throw new MallinkException(errStatus,"haikang subscription error.["+result.getString("error")+"]"+result.getString("message")); - } - - if (!result.getString("code").equals("0") ) { - String message = result.getString("msg"); - throw new MallinkException(result.getInteger("code"), "haikang subscription error."+message); - } - return result; - } - - /*token认证登陆**/ - private static String ProcLogin(String clientId,String clientSecret) { - ArrayList list = new ArrayList(); - list.add(new BasicNameValuePair("client_id", clientId)); - list.add(new BasicNameValuePair("client_secret", clientSecret)); - return formData(TOKEN_URL,list,null,null); - } - - - - private static String ProcBussiness(String url,Map list,String token,String authorization) { - try { - return Proc(url,list,token,authorization); - } catch (Exception e) { - log.error("haikang request error.",e); - } - return null; - } - - private static String Proc(String url, Map pairs,String token,String authorization) { - CloseableHttpClient httpClient = HttpClients.createDefault(); - HttpPost httpPost = new HttpPost(url); - httpPost.addHeader(HTTP.CONTENT_TYPE,"application/json"); - if (!StringUtils.isBlank(token)) { - httpPost.addHeader("access_token",token); - } - if (!StringUtils.isBlank(authorization)) { - httpPost.addHeader("Authorization",authorization); - } - - if (null != pairs) { - try { - StringEntity entity = new StringEntity(JSON.toJSONString(pairs),"UTF-8"); - entity.setContentType("application/json"); - httpPost.setEntity(entity); - } catch (Exception e) { - log.error(e.getLocalizedMessage(),e); - } - } - - long currentTime = System.currentTimeMillis(); - StringBuffer requestlog = new StringBuffer(); - if (null != pairs) { - log.info("haikangweishi httpRequest:[url]"+url+"[params]"+JSON.toJSONString(pairs)); - requestlog.append("haikangweishi httpRequest:[url]").append(url).append("[params]").append(JSON.toJSONString(pairs)); - }else { - log.info("haikangweishi httpRequest:[url]"+url); - requestlog.append("haikangweishi httpRequest:[url]").append(url); - } - HttpResponse response = null; - try { - response = httpClient.execute(httpPost); - } catch (Exception e) { - log.error(e.getLocalizedMessage(),e); - } - long responseCostTime = System.currentTimeMillis()-currentTime; - String result = null; - - //打印StatusLine - log.debug("StatusLine: " + response.getStatusLine()); - try{ - //获取实体 - HttpEntity httpEntity= response.getEntity(); - result = EntityUtils.toString(httpEntity, "UTF-8"); - requestlog.append("[response]").append(result).append("[costTime(ms)]").append(responseCostTime); - log.debug(requestlog.toString()); - } catch (Exception e) { - log.error(e.getLocalizedMessage(),e); - } - - try { //关闭流并释放资源 - httpClient.close(); - } catch (IOException e) { - log.error(e.getLocalizedMessage()); - } - return result; - } - - private static String formData(String url,List pairs,String token,String authorization) { - CloseableHttpClient httpClient = HttpClients.createDefault(); - HttpPost httpPost = new HttpPost(url); - if (!StringUtils.isBlank(token)) { - httpPost.addHeader("access_token",token); - } - if (!StringUtils.isBlank(authorization)) { - httpPost.addHeader("Authorization",authorization); - } - MultipartEntityBuilder builder = MultipartEntityBuilder.create(); - if (null != pairs) { - for (NameValuePair nvp : pairs) { - builder.addPart(nvp.getName(), new StringBody(nvp.getValue(),ContentType.TEXT_PLAIN)); - } - } - HttpEntity entity = builder.build(); - httpPost.setEntity(entity); - long currentTime = System.currentTimeMillis(); - StringBuffer requestlog = new StringBuffer(); - if (null != pairs) { - log.info("haikangweishi httpRequest start :[url]"+url+"[params]"+JSON.toJSONString(pairs)); - requestlog.append("haikangweishi httpRequest:[url]").append(url).append("[params]").append(JSON.toJSONString(pairs)); - }else { - log.info("haikangweishi httpRequest start :[url]"+url); - requestlog.append("haikangweishi httpRequest:[url]").append(url); - } - HttpResponse response = null; - try { - response = httpClient.execute(httpPost); - } catch (Exception e) { - log.error(e.getLocalizedMessage(),e); - } - long responseCostTime = System.currentTimeMillis()-currentTime; - String result = null; - - //打印StatusLine - log.debug("StatusLine: " + response.getStatusLine()); - try{ - //获取实体 - HttpEntity httpEntity= response.getEntity(); - result = EntityUtils.toString(httpEntity, "UTF-8"); - requestlog.append("[response]").append(result).append("[costTime(ms)]").append(responseCostTime); - log.debug(requestlog.toString()); - } catch (Exception e) { - log.error(e.getLocalizedMessage(),e); - } - - try { //关闭流并释放资源 - httpClient.close(); - } catch (IOException e) { - log.error(e.getLocalizedMessage()); - } - - return result; - } -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/entity/ChallengeCode.java b/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/entity/ChallengeCode.java deleted file mode 100644 index a36022e..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/haikangweishi/entity/ChallengeCode.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.iformall.service.park.impl.haikangweishi.entity; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class ChallengeCode { - - private String pwdStatus; - private String codeId; - private String salt; - private String vCode; - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java b/suimangService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java deleted file mode 100644 index ab53e3c..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkCallbackService.java +++ /dev/null @@ -1,190 +0,0 @@ -package com.iformall.service.park.impl.jieshun; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.IdWorker; -import com.iformall.domain.po.WxCarJSOrder; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCarCYFVo; -import com.iformall.enums.EnumCarVendor; -import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxCarJSOrderMapper; -import com.iformall.service.WxParkService; -import com.iformall.service.park.ParkBatchCallBackAdapterService; -import com.iformall.service.park.ParkCallBackAdapterService; -import com.iformall.service.park.entity.ParkNotifyParam; -import com.iformall.service.park.impl.BaseParkService; - -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@Service -public class JieShunParkCallbackService extends BaseParkService implements ParkBatchCallBackAdapterService { - - - @Autowired - JieShunParkService jieshunParkService; - - @Autowired - WxParkService wxParkService; - - @Autowired - WxCarJSOrderMapper wxCarJSOrderMapper; - - private String handleCarNumber(String carNumber) { - if (StringUtils.isBlank(carNumber)) { - return "空车牌"; - } - if (carNumber.contains("-")) { - carNumber = carNumber.replaceAll("-", ""); - } - return carNumber; - } - - /** - * {dataItems=[{"inTime":"2020-12-09 11:21:15","carNumber":"浙-AF81797","inCarPhoto":"p201127315/NISSP_IMG_PARK_IN/20201209/a9f1130651b9493f8eab64f14afbdd47","isReal":0,"itemId":"a9f1130651b9493f8eab64f14afbdd47","inOperator":"超级管理员","equipName":"东门入口","parkName":"杭州东站西子国际","vehicleInfo":"{\"plateNo\":\"浙-AF81797\",\"plateColor\":\"GREEN\",\"plateBackColor\":0,\"plateWordColor\":0,\"vehicleColor\":null,\"vehicleLogo\":null,\"vehicleModel\":null,\"mainModel\":0,\"subModel\":0,\"vehicleModelTrust\":0,\"mainModelTrust\":0,\"subModelTrust\":0,\"plateNoTrust\":1,\"vehicleLogoTrust\":0,\"vehicleColorTrust\":0}","equipCode":"208202496","parkCode":"p201127315"}], pno=dzxzgj, sn=6C958D99D2769AA16F3A3F06E962263F, tn=-2, ts=20201209112118886, ve=1.0} - */ - @Override - public List parseInNoticyParam(Object param) { - Map paramm = (Map) param; - String liststr = (String) paramm.get("dataItems"); - JSONArray list = JSONArray.parseArray(liststr); - if (null != list && list.size() > 0 ) { - List retList = new ArrayList(); - for (int i = 0 ; i < list.size() ; i ++) { - Map map = (Map) list.get(i); - ParkNotifyParam ret = parseInNoticyParamSingle(map); - if (null != ret ) { - retList.add(ret); - } - } - return retList; - } - return null; - } - - private ParkNotifyParam parseInNoticyParamSingle(Map paramMap) { - String carNumber = paramMap.get("carNumber").toString(); - String parkCode = paramMap.get("parkCode").toString(); - String parkName = paramMap.get("parkName").toString(); - - String synId = paramMap.get("itemId").toString(); - String entranceTime = paramMap.get("inTime").toString(); - - ParkNotifyParam p = new ParkNotifyParam(); - String realCarNumber = handleCarNumber(carNumber); - p.setCarNumber(realCarNumber); - p.setParkId(parkCode); - p.setParkName(parkName); - p.setSynId(synId); - try { - p.setEntranceTime(JieShunUtil.utcToLocal(entranceTime)); - } catch (ParseException e) { - log.error("jieshun entranceTime format error",e); - return null; - } - return p; - } - - @Override - public List parseOutNoticyParam(Object param) { - Map paramm = (Map) param; - String liststr = (String) paramm.get("dataItems"); - JSONArray list = JSONArray.parseArray(liststr); - if (null != list && list.size() > 0 ) { - List retList = new ArrayList(); - for (int i = 0 ; i < list.size() ; i ++) { - Map map = (Map) list.get(i); - ParkNotifyParam ret = parseOutNoticyParamSingle(map); - if (null != ret ) { - retList.add(ret); - } - } - return retList; - } - return null; - } - - - private ParkNotifyParam parseOutNoticyParamSingle(Map paramMap) { - String carNumber = paramMap.get("carNumber").toString(); - String parkCode = paramMap.get("parkCode").toString(); - String parkName = paramMap.get("parkName").toString(); - - String synId = paramMap.get("itemId").toString(); - String entranceTime = paramMap.get("outTime").toString(); - - String realCarNumber = handleCarNumber(carNumber); - ParkNotifyParam p = new ParkNotifyParam(); - p.setCarNumber(realCarNumber); - p.setParkId(parkCode); - p.setParkName(parkName); - p.setSynId(synId); - try { - p.setEntranceTime(JieShunUtil.utcToLocal(entranceTime)); - } catch (ParseException e) { - log.error("cyf entranceTime format error",e); - return null; - } - try { - p.setOutTime(JieShunUtil.utcToLocal(entranceTime)); - } catch (ParseException e) { - log.error("cyf outTime format error",e); - return null; - } - p.setFee(String.valueOf(paramMap.get("ssMoney"))); - return p; - } - - @Override - public List parseUnbindNoticyParam(Object param) { - return null; - } - - @Override - public List parsePaidNoticyParam(Object param) { - Map paramm = (Map) param; - String liststr = (String) paramm.get("dataItems"); - JSONArray list = JSONArray.parseArray(liststr); - if (null != list && list.size() > 0 ) { - List retList = new ArrayList(); - for (int i = 0 ; i < list.size() ; i ++) { - Map map = (Map) list.get(i); - ParkNotifyParam ret = parsePaidNoticyParamSingle(map); - if (null != ret ) { - retList.add(ret); - } - } - return retList; - } - return null; - } - - JieShunUtil jieshun = new JieShunUtil(); - private ParkNotifyParam parsePaidNoticyParamSingle(Map vo) { - ParkNotifyParam p = new ParkNotifyParam(); - p.setCarNumber(handleCarNumber((String) vo.get("carNumber"))); - p.setParkId(String.valueOf(vo.get("parkCode"))); - p.setParkOrderId((String) vo.get("itemId")); - p.setSynId((String) vo.get("itemId")); - p.setFee(vo.get("ssMoney").toString()); - try { - p.setPayTime(jieshun.utcToLocal((String)vo.get("feesTime"))); - } catch (ParseException e) { - e.printStackTrace(); - } - return p; - } -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java b/suimangService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java deleted file mode 100644 index 9e38e40..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunParkService.java +++ /dev/null @@ -1,359 +0,0 @@ -package com.iformall.service.park.impl.jieshun; - -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.IdWorker; -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCarJSOrder; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCouponOrderCarCVo; -import com.iformall.domain.vo.WxParkCouponConfig; -import com.iformall.enums.EnumCarVendor; -import com.iformall.enums.EnumCouponUnit; -import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxCarJSOrderMapper; -import com.iformall.service.WxParkService; -import com.iformall.service.park.ParkAdapterService; -import com.iformall.service.park.entity.ParkStopFee; -import com.iformall.service.park.impl.BaseParkService; -import com.iformall.service.park.impl.util.ParkHelper; -import com.iformall.service.park.utils.ParkCacheUtils; -import com.iformall.utils.RedisCacheUtils; -import com.iformall.utils.RedisLock; - -/** - * 跳转捷停车小程序参数:(生产环境) - appid:wx24b70f0ad2a9a89a - - 1>小程序首页 - path:pages/index/index - - 2>小程序订单页(车牌+车场编号 ) path: pages/thirdPayOrder/payOrder?carNo=车牌&parkCode=车场编号 - - 3>小程序订单页(订单编号) path: pages/thirdPayOrderByNo/payOrder?orderNo=订单编号 - -* 捷顺商户平台:http://merchant.jslife.com.cn/merchant/index.html#/auth/login -* 捷顺门店平台:http://merchant.jslife.com.cn/store/index.html#/auth/login - * wxParK配置: - * { - * "cid": "000000008032172", //获取token cid. [http://www.jslife.com.cn/jsaims/login] - * "psw": "000000008032172", //获取token pwd. [http://www.jslife.com.cn/jsaims/login] - * "usr": "000000008032172", //获取token usr. [http://www.jslife.com.cn/jsaims/login] - * "signkey": "71f1a4ab8c544379a192e1bf1b7e7d9e", //加密key - * "version": "2", //加密version - * "parkCode": "p201127315", //停车场编号 - * "loginUser": "000000008032172000003", //捷顺门店平台登录账号 - * "loginPassword": "ycHqp61Acudxz", //捷顺门店平台登录密码 - * "businesserCode": "000000008032172" //捷顺商户编号 - * } - - * @author alascor - * - */ -@Service -public class JieShunParkService extends BaseParkService implements ParkAdapterService { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired - ParkHelper parkHelper; - - @Autowired - @Qualifier("objectCommonRedisTemplate") - RedisTemplate redisTemplate; - - @Autowired - RedisLock redisLock; - - @Autowired - WxCarJSOrderMapper wxCarJSOrderMapper; - - - JieShunUtil jieshun = new JieShunUtil(); - - - private String getCacheToken(WxPark park) { - String token = RedisCacheUtils.getCacheString(redisTemplate, "carStop:jieshuntoken:"+park.getId()); - if (StringUtils.isBlank(token)) { - String lockKey = "carStop:jieshuntokenlock:"+park.getTenantId(); - long time = System.currentTimeMillis() + 2000; - String timeStr = String.valueOf(time); - if (redisLock.lock2(lockKey, timeStr)) { - token = jieshun.getToken(park); - if (!StringUtils.isBlank(token)) { - setCacheToken(park, token); - } - redisLock.unlock(lockKey, timeStr); - } else { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - }finally { - redisLock.unlock(lockKey, timeStr); - } - } - } - return RedisCacheUtils.getCacheString(redisTemplate, "carStop:jieshuntoken:"+park.getId()); - } - - private void setCacheToken(WxPark park,String token) { - RedisCacheUtils.cache(redisTemplate, "carStop:jieshuntoken:"+park.getId(), token, 3600); - } - - /** - * 先去捷顺注册,调用登陆获取令牌,然后根据令牌调用别的接口 - * http://ap.jieshun.cn:9088/apply/ 注册信息地址 fumao/iformall2020 - * - * 捷顺商户平台:http://merchant.jslife.com.cn/merchant/index.html#/auth/login - * 捷顺门店平台:http://merchant.jslife.com.cn/store/index.html#/auth/login - * 门店商户号 000000008032172000003 密码 ycHqp61Acudxz - * - * - * API对接注意事项: - 1、token有效期两个小时,每两小时内登录一次获取token,调业务接口不需要频繁登录用,建议获取一次token存本地缓存,之后从本地获取,两小时内刷新一次, - 为避免调业务接口时刚好token被刷新,导致token失效(无效的令牌或令牌已过期),可以做下容错,重新登录获取token或用最新token重新调业务接口。 - 2、token是和ip是一对一绑定,新的ip服务器调捷顺的接口会出现ip不合法,需把ip提供捷顺方,添加白名单。多个服务调捷顺接口共用一个ip情况下,只能共用一套登录获取token机制,各自登录会冲突。 - 3、所有接口要带车牌的一律带横杠。格式如:粤-B12345。 - 4、无效的数据签名是指sn加密方式不对。sn加密方式是对p+signkey进行Md5加密,加密后的字符串大写。 - */ - - @Override - public ResultData parkInitConfig(WxPark park) throws Exception { - // TODO Auto-generated method stub - return null; - } - - @Override - public String initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ - return null; - } - - - @Override - public String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ - return "jieshun"; - } - - - @Override - public void unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) throws Exception{ - } - - - /** - * 每一次查询都会产生订单,然后根据订单号查询 - */ - @Override - public ResultData carStopFee(Map paramMap, WxPark park) throws Exception{ - return jieshunCarStopFee(paramMap, park); - } - - private ResultData jieshunCarStopFee(Map paramMap, WxPark park) throws Exception{ - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - - //如果车牌号是鄂AAAAAA, 为测试车牌 - if (carNumber.equals("鄂AAAAAA")) { - return new ResultData(new ParkStopFee("-111",jieshun.utcToLocal("2020-12-16 00:00:00"),jieshun.utcToLocal("2020-12-17 00:00:00"), - "0.01","wx24b70f0ad2a9a89a","payPath",null,"测试车牌,仅测试用",null)); - }else if(carNumber.equals("鄂AAAAAB")) { - return new ResultData(21000,"车辆未入场"); - } - - //下订单; - String retCode = jieshun.createOrder(park, carNumber, getCacheToken(park)); - if (StringUtils.isBlank(retCode)) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(), "jieshun createOrder error. has no result"); - } - JSONObject result = JSON.parseObject(retCode); - if (result.getInteger("resultCode") != 0 ) { - String message = result.getString("message"); - throw new MallinkException(result.getInteger("resultCode"), "jieshun createOrder error."+message); - } - JSONArray arrays = result.getJSONArray("dataItems"); - if (null == arrays || arrays.size() == 0) { - throw new MallinkException(result.getInteger("resultCode"), "jieshun createOrder error. no order result"+carNumber); - } - JSONObject attribute = arrays.getJSONObject(0).getJSONObject("attributes"); - Double totalFee = attribute.getDouble("totalFee"); - String appId = "wx24b70f0ad2a9a89a"; - String parkOrderId = attribute.getString("orderNo"); - if (totalFee <= 0 ) { - String _createTime = attribute.getString("startTime");//计费时间,格式为“yyyy-MM-dd HH:mi:ss” - String _endTime = attribute.getString("endTime");//离场时间,格式为“yyyy-MM-dd HH:mi:ss” - String msg = attribute.getString("retmsg"); - if (!StringUtils.isBlank(msg)) { - if (msg.contains("未入场")) { - return new ResultData(new ParkStopFee(null,jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), - "0.00",appId,"payPath",null,msg,null)); - }else { - //0元订单结清,查询是否用过打折方案,如果用过,则需要调用接口结清订单 - Integer used = ParkCacheUtils.getCarCouponUseCacheLock(redisTemplate, EnumCarVendor.CAR_JIESHUN.getMessage(), carNumber); - if (null == used || (null != used && used.intValue() < 1)) { - //未使用停车券 - return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), - "0.00",appId,"payPath",null,msg,null)); - }else { - return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), - "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,获得15分钟免费出场时间")); -// String notifyResult = jieshun.notifyOrderResult(park, parkOrderId, getCacheToken(park)); -// JSONObject notiryRetObj = JSON.parseObject(notifyResult); -// String noticeErrorMsg = notiryRetObj.getString("message"); -// if (notiryRetObj.getIntValue("resultCode") == 0){ -// JSONArray notiryRetArrays = notiryRetObj.getJSONArray("dataItems"); -// if (null != notiryRetArrays && notiryRetArrays.size() == 0 ) { -// JSONObject notifyRetObject = notiryRetArrays.getJSONObject(0).getJSONObject("attributes"); -// if(notifyRetObject.getIntValue("retCode") == 0) { -// return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), -// "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,获得15分钟免费出场时间")); -// }else { -// return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), -// "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,但是结清订单失败["+noticeErrorMsg+"],无免费出场时间,请下拉刷新")); -// } -// }else { -// return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), -// "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,但是结清订单失败["+noticeErrorMsg+"],无免费出场时间,请下拉刷新")); -// } -// }else { -// return new ResultData(new ParkStopFee("-999",jieshun.utcToLocal(_createTime),jieshun.utcToLocal(_endTime), -// "0.00",appId,"payPath",null,msg,"用券抵扣后账单为0,但是结清订单失败["+noticeErrorMsg+"],无免费出场时间,请下拉刷新")); -// } - } - } - } - } - - - String ret = jieshun.getCarStopFee(park, parkOrderId, getCacheToken(park)); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("resultCode") == 0){ - JSONArray retArrays = retObj.getJSONArray("dataItems"); - if (null == retArrays || retArrays.size() == 0 ) { - throw new MallinkException(result.getInteger("resultCode"), "jieshun getCarStopFee error. no order result"+carNumber); - } - - JSONObject retObject = retArrays.getJSONObject(0).getJSONObject("attributes"); - String createTime = retObject.getString("startTime");//计费时间,格式为“yyyy-MM-dd HH:mi:ss” - String endTime = retObject.getString("endTime");//离场时间,格式为“yyyy-MM-dd HH:mi:ss” - String payPath = "pages/thirdPayOrder/payOrder?carNo="+jieshun.handleCarNumber(carNumber)+"&parkCode="+park.getParkingId(); - return new ResultData(new ParkStopFee(parkOrderId,jieshun.utcToLocal(createTime),jieshun.utcToLocal(endTime), - String.valueOf(retObject.getDouble("totalFee")),appId,payPath,null,null,"请支付后15分钟内离场")); - }else { - logger.error("jieshunCarStopFee error. paramMap: {} . jieshunResult: {}",JSON.toJSONString(paramMap),ret); - String msg = retObj.getString("message"); - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败:"+msg); - } - } - - /** - * 使用3.8打折方案,3.9有限制如果领券了之后未使用,不能再次领券。导致出现异常之后,用户永远无法使用优惠券。 - * @return - */ - @Override - public ResultData useCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) throws Exception{ - if (null == userCar) { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(),"当前用户未查询到优惠券!"); - } - - if (StringUtils.isBlank(userCar.getCUserPhone())) { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(),"当前用户未查询到手机号!"+userCar.getcUserId()); - } - - Map valueMap = WxParkCouponConfig.parseValue(userCar.getVendorParams()); - if (null == valueMap) { - return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置。"+coupon.getTitle()); - } - //String orderNo = paramMap.get("parkOrderId"); - String planNo = valueMap.get("couponNo"); - if (StringUtils.isBlank(planNo)) { - return new ResultData(ErrorCode.COUPON_IS_EMPTY.getCode(),"当前停车券没有关联停车场优惠券配置[planNo]。"+coupon.getTitle()); - } - //String ret = jieshun.getCoupon(park, planNo,userCar.getCUserPhone(), getCacheToken(park)); - //打折登陆验证 - String ret = jieshun.verifyuser(park, getCacheToken(park)); - logger.info("jieshun verifyuser result:"+ret); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("resultCode") == 0){ - JSONArray verfyArrays = retObj.getJSONArray("dataItems"); - if (null != verfyArrays && verfyArrays.size() > 0 ) { - JSONObject verfy = verfyArrays.getJSONObject(0).getJSONObject("attributes"); - String userId = verfy.getString("userId"); - //查询门店下打折方案 - String queryPlanRet = jieshun.querySalePlan(park, getCacheToken(park), userId); - logger.info("jieshun querySalePlan result:"+queryPlanRet); - JSONObject queryPlantRetObj = JSON.parseObject(queryPlanRet); - if (queryPlantRetObj.getIntValue("resultCode") == 0){ - JSONArray planArrays = queryPlantRetObj.getJSONArray("dataItems"); - if (null != planArrays && planArrays.size() > 0 ) { - boolean hasPlan = false; - for (int i = 0 ; i < planArrays.size(); i++) { - JSONObject plan = planArrays.getJSONObject(i); - String planId = plan.getJSONObject("attributes").getString("planId"); - if (planNo.equals(planId)) { - hasPlan = true; - break; - } - } - if (!hasPlan) { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(),"当前优惠券配置的捷顺编号无效,请联系管理员。"+coupon.getTitle()); - } - //使用打折方案 - String executeRet = jieshun.executediscount(park, planNo, userId, carNumber, getCacheToken(park)); - logger.info("jieshun executediscount result:"+executeRet); - JSONObject executeRetObj = JSON.parseObject(executeRet); - if (executeRetObj.getIntValue("resultCode") == 0){ - return new ResultData(); - }else { - return new ResultData(executeRetObj.getIntValue("resultCode"),"当前用户使用捷顺停打折方案失败。"+executeRetObj.getString("message")); - } - - }else { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(),"捷顺查询门店未查询到打折信息,请联系管理员。"+userCar.getcUserId()); - } - - }else { - logger.error("jieshun querySalePlan error. paramMap: {} . jieshunResult: {}",JSON.toJSONString(paramMap),queryPlanRet); - String msg = queryPlantRetObj.getString("message"); - return new ResultData(queryPlantRetObj.getIntValue("resultCode"), "捷顺查询门店打折方案失败:"+msg); - } - }else { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(),"捷顺门店账号登陆失败,请联系管理员。"+userCar.getcUserId()); - } - - }else { - logger.error("jieshun verifyuser error. paramMap: {} . jieshunResult: {}",JSON.toJSONString(paramMap),ret); - String msg = retObj.getString("message"); - return new ResultData(retObj.getIntValue("resultCode"), "当前用户领用到捷顺停车券失败:"+msg); - } - } - - @Override - public ResultData getParkStatus(WxPark park) throws Exception{ - return new ResultData(); - } - - @Override - public boolean ignoreUseCouponCache() { - return false; - } - -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunUtil.java b/suimangService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunUtil.java deleted file mode 100644 index 8c4b9e4..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/jieshun/JieShunUtil.java +++ /dev/null @@ -1,378 +0,0 @@ -package com.iformall.service.park.impl.jieshun; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.domain.po.WxPark; -import com.iformall.exception.MallinkException; - -import lombok.extern.slf4j.Slf4j; - -import org.apache.commons.lang3.StringUtils; -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicHeader; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.protocol.HTTP; -import org.apache.http.util.EntityUtils; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TimeZone; - - -/** - * @author: furunxin - * @Date: 2020/7/1 17:16 - * @Description: 车易付接口对接参数类 - */ - -@Slf4j -public class JieShunUtil { - - public static final String CYF_PARK_ID = "parkingId"; - public static final String CYF_CAR_NUMBER = "plate"; - public static final String CYF_PARK_NAME = "parking"; - public static final String CYF_SYN_ID = "recordOrderId"; - public static final String CYF_ENTRANCE_TIME = "inTime"; - - public static final String CYF_IS_RESULT = "result"; - public static final String CYF_ERR_MSG = "strError"; - public static final int CYF_SUC = 1; - public static final int CYF_ERR = 0; - - - public static final String TOKEN_URL = "http://www.jslife.com.cn/jsaims/login"; - - public static final String CREATE_ORDER = "http://www.jslife.com.cn/jsaims/as"; - - public static final String QUERY_ORDER = "http://www.jslife.com.cn/jsaims/as"; - - public static final String GET_COUPON = "http://www.jslife.com.cn/jsaims/as"; - public static final String COUPON_USE = "http://www.jslife.com.cn/jsaims/as"; - - public static final String VERIFY_USER = "http://www.jslife.com.cn/jsaims/as"; - public static final String QUERY_PLAN = "http://www.jslife.com.cn/jsaims/as"; - public static final String PLAN_EXECUTE = "http://www.jslife.com.cn/jsaims/as"; - - /** - * @description UTC时间转化为本地时间 - * @Params [utcTime] - * @return java.util.Date - * @Author furunxin - * @Date 2020/7/8 下午12:45 - **/ - public static Date utcToLocal(String seconds) throws ParseException { - String format = "yyyy-MM-dd HH:mm:ss"; - SimpleDateFormat sdf = new SimpleDateFormat(format); - Date date=sdf.parse(seconds); - return date; - } - - public static String getLocalDate(){ - LocalDateTime ldt = LocalDateTime.now(); - DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - String nowDate = ldt.format(dtf); - return nowDate; - } - - public String getToken(WxPark wxPark) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - String cid = wxPark.getParkId(); - String userName = vp.getString("usr"); - String password = vp.getString("psw"); - return getToken(cid,userName,password); - } - - private String getToken(String cid,String userName,String password) { - String result = ProcLogin(cid, userName,password); - log.info("jieshun token cid:"+cid+" userName:"+userName+" password:"+password+" result: "+result); - if (StringUtils.isBlank(result)) { - return null; - } - JSONObject res = JSON.parseObject(result); - Integer code = res.getInteger("resultCode"); - if (null == code || code.intValue() != 0) { - String msg = res.getString("message"); - throw new MallinkException(code,msg); - } - return res.getString("token"); - } - - private Map generateMap(String serviceId,Map param) { - Map map = new HashMap(); - map.put("serviceId", serviceId); - map.put("requestType", "DATA"); - map.put("attributes", param); - return map; - } - - public String handleCarNumber(String carNumber) { - if (carNumber.contains("-")) { - return carNumber; - }else { - carNumber = carNumber.substring(0,1)+"-"+carNumber.substring(1, carNumber.length()); - return carNumber; - } - } - /** - * 创建订单 - * @return - */ - public String createOrder(WxPark wxPark,String cardNumber,String token) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map param = new HashMap(); - param.put("businesserCode", vp.get("businesserCode"));//商户编号 - param.put("parkCode", wxPark.getParkingId()); - param.put("orderType", "VNP"); - param.put("carNo", handleCarNumber(cardNumber)); - Map map = generateMap("3c.pay.createorderbycarno",param); - log.info("jieshun create order :" + JSON.toJSONString(map)); - return ProcBussiness(CREATE_ORDER, wxPark.getParkId(), map, token,vp.getString("version"),vp.getString("signkey")); - } - - /** - * 查询停车费 - **/ - public String getCarStopFee(WxPark wxPark,String orderNo,String token){ - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map param = new HashMap(); - param.put("orderNo", orderNo);//商户编号 - Map map = generateMap("3c.pay.queryorder",param); - log.info("jieshun getCarStopFee :" + JSON.toJSONString(map)); - return ProcBussiness(QUERY_ORDER, wxPark.getParkId(), map, token,vp.getString("version"),vp.getString("signkey")); - } - - /** - * 打折登陆验证 - */ - public String verifyuser(WxPark wxPark,String token) { - try { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map param = new HashMap(); - param.put("userCode", vp.get("loginUser"));//商户编号 - - MessageDigest md5Tool = MessageDigest.getInstance("MD5"); - byte[] md5Data = md5Tool.digest((vp.getString("loginPassword")).getBytes("UTF-8")); - String sn = toHexString(md5Data); - param.put("password", sn.toLowerCase());//优惠券编号 - Map map = generateMap("3c.discount.verifyuser",param); - log.info("jieshun verifyuser :" + JSON.toJSONString(map)); - return ProcBussiness(VERIFY_USER, wxPark.getParkId(), map, token,vp.getString("version"),vp.getString("signkey")); - } catch (NoSuchAlgorithmException e) { - log.error("jieshun verifyuser error.park:"+wxPark.getId(),e); - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"jieshun verifyuser error.park:"+wxPark.getId()+".error"+e.getMessage()); - } catch (UnsupportedEncodingException e) { - log.error("jieshun verifyuser error.park:"+wxPark.getId(),e); - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"jieshun verifyuser error.park:"+wxPark.getId()+".error"+e.getMessage()); - } - } - - /** - * 查询门店打折方案 - */ - public String querySalePlan(WxPark wxPark,String token,String userId) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map param = new HashMap(); - param.put("userId", userId);//商户编号 - Map map = generateMap("3c.discount.querysaleplan",param); - log.info("jieshun querySalePlan :" + JSON.toJSONString(map)); - return ProcBussiness(QUERY_PLAN, wxPark.getParkId(), map, token,vp.getString("version"),vp.getString("signkey")); - } - - /** - * 使用打折方案 - */ - public String executediscount(WxPark wxPark,String planId,String userId,String carNumber,String token) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map param = new HashMap(); - param.put("planId", planId);//商户编号 - param.put("userId", userId);//优惠券编号 - param.put("carOrCardNo", handleCarNumber(carNumber));//优惠券编号 - Map map = generateMap("3c.discount.executediscount",param); - log.info("jieshun executediscount :" + JSON.toJSONString(map)); - return ProcBussiness(PLAN_EXECUTE, wxPark.getParkId(), map, token,vp.getString("version"),vp.getString("signkey")); - } - - - /** - * 获取优惠券 - **/ - public String getCoupon(WxPark wxPark,String planNo,String phone,String token){ - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map param = new HashMap(); - param.put("businesserCode", vp.get("businesserCode"));//商户编号 - param.put("planNo", planNo);//优惠券编号 - param.put("tel", phone);//商户编号 - Map map = generateMap("3c.coupons.receive.coupons",param); - log.info("jieshun getCoupon :" + JSON.toJSONString(map)); - return ProcBussiness(GET_COUPON, wxPark.getParkId(), map, token,vp.getString("version"),vp.getString("signkey")); - } - - - /** - * 使用优惠券 - **/ - public String useCoupon(WxPark wxPark,String couponNo,String orderNo,String token){ - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - - Map param = new HashMap(); - param.put("businesserCode", vp.get("businesserCode"));//商户编号 - param.put("couponsNo", couponNo);//优惠券编号 - param.put("orderNo", orderNo);//商户编号 - param.put("parkCode", wxPark.getParkingId()); - Map map = generateMap("3c.coupons.use.coupons",param); - log.info("jieshun useCoupon :" + JSON.toJSONString(map)); - return ProcBussiness(COUPON_USE, wxPark.getParkId(), map, token,vp.getString("version"),vp.getString("signkey")); - } - - /*token认证登陆**/ - private static String ProcLogin(String cid,String user,String password) { - String url = TOKEN_URL +"?cid="+cid+"&usr="+user+"&psw="+password; -// ArrayList list = new ArrayList(); -// list.add(new BasicNameValuePair("cid", cid)); -// list.add(new BasicNameValuePair("usr", user)); -// list.add(new BasicNameValuePair("psw",password)); - return Proc(url,null); - } - - /** - * 优惠券使用完毕,0元停车费需调用次接口结清订单 - * @param wxPark - * @param planId - * @param userId - * @param carNumber - * @param token - * @return - */ - public String notifyOrderResult(WxPark wxPark,String orderNo,String token) { - String vendroParams = wxPark.getVendorParams(); - JSONObject vp = JSON.parseObject(vendroParams); - Map param = new HashMap(); - param.put("orderNo", orderNo);//商户编号 - param.put("tradeStatus", 0);//优惠券编号 - param.put("isCallBack", 0);//优惠券编号 - Map map = generateMap("3c.pay.notifyorderresult",param); - log.info("jieshun notifyOrderResult :" + JSON.toJSONString(map)); - return ProcBussiness(PLAN_EXECUTE, wxPark.getParkId(), map, token,vp.getString("version"),vp.getString("signkey")); - } - - private static String ProcBussiness(String url,String cid,Map param,String token,String version,String signKey) { - try { - MessageDigest md5Tool = MessageDigest.getInstance("MD5"); - String p = JSON.toJSONString(param); - byte[] md5Data = md5Tool.digest((p+signKey).getBytes("UTF-8")); - String sn = toHexString(md5Data); - if (url.contains("?")) { - url = url + "&"; - }else { - url = url + "?"; - } - - url = url+"cid="+cid+"&tn="+token+"&sn="+sn+"&v="+version+"&p="+URLEncoder.encode(p, "UTF-8"); -// -// ArrayList list = new ArrayList(); -// list.add(new BasicNameValuePair("cid", cid)); -// list.add(new BasicNameValuePair("v", version));//版本号 -// list.add(new BasicNameValuePair("p",p)); -// list.add(new BasicNameValuePair("sn",sn)); -// if (!StringUtils.isBlank(token)) { -// list.add(new BasicNameValuePair("tn",token)); -// } - return Proc(url,null); - } catch (NoSuchAlgorithmException e) { - log.error("jieshun request error.",e); - } catch (UnsupportedEncodingException e) { - log.error("jieshun request error.",e); - } - return null; - } - - private static String toHexString(byte[] bytes) { - StringBuffer buffer = new StringBuffer(); - for (int i = 0; i < bytes.length; i++) { - buffer.append(String.format("%02X", bytes[i])); - } - return buffer.toString(); - } - - private static String Proc(String url, List pairs) { - CloseableHttpClient httpClient = HttpClients.createDefault(); - - HttpPost httpPost = new HttpPost(url); - httpPost.addHeader(HTTP.CONTENT_TYPE,"application/json"); - httpPost.addHeader("Accept", "application/json"); - httpPost.addHeader("Accept-Encoding", "UTF-8"); - - if (null != pairs) { - HttpEntity en; - try { - en = new UrlEncodedFormEntity(pairs, HTTP.UTF_8); - httpPost.setEntity(en); - } catch (UnsupportedEncodingException e) { - log.error(e.getLocalizedMessage(),e); - return null; - } - - } - - if (null != pairs) { - log.info("jieshun httpRequest:[url]"+url+"[params]"+JSON.toJSONString(pairs)); - }else { - log.info("jieshun httpRequest:[url]"+url); - } - HttpResponse response = null; - try { - response = httpClient.execute(httpPost); - } catch (Exception e) { - log.error(e.getLocalizedMessage(),e); - } - - String result = null; - - //打印StatusLine - log.debug("StatusLine: " + response.getStatusLine()); - try{ - //获取实体 - HttpEntity httpEntity= response.getEntity(); - result = EntityUtils.toString(httpEntity, "UTF-8"); - log.debug(result); - } catch (Exception e) { - log.error(e.getLocalizedMessage(),e); - } - - try { //关闭流并释放资源 - httpClient.close(); - } catch (IOException e) { - log.error(e.getLocalizedMessage()); - } - return result; - } -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java b/suimangService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java deleted file mode 100644 index 713aed2..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.iformall.service.park.impl.shangan; - -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCouponOrderCarCVo; -import com.iformall.enums.EnumCouponUnit; -import com.iformall.service.WxCouponOrderService; -import com.iformall.service.WxCouponService; -import com.iformall.service.park.ParkAdapterService; -import com.iformall.service.park.impl.BaseParkService; - -@Service -public class ShangAnParkService extends BaseParkService implements ParkAdapterService{ - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired - WxCouponOrderService wxCouponOrderService; - - @Override - public ResultData parkInitConfig(WxPark park) throws Exception { - // TODO Auto-generated method stub - return null; - } - - @Override - public String initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { - return null; - } - - @Override - public String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { - return member.getId().toString(); - } - - @Override - public void unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { - - } - - @Override - public ResultData carStopFee(Map paramMap, WxPark park) { - return new ResultData(); - } - - @Override - public ResultData useCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) { - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString(ShangAnUtil.SHANGAN_URL); - String key = objParams.getString(ShangAnUtil.SHANGAN_KEY); - String parkNumber = objParams.getString(ShangAnUtil.SHANGAN_PARK_NUMBER); - - String couponModelId = coupon.getUnit().toString(); - String position = ""; - if (coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) { - position = coupon.getPrice().toString(); - } else { - position = String.valueOf(coupon.getPrice()* 60); - } - - String ret = ShangAnUtil.couponSend(url, key, parkNumber, couponModelId, userCar.getExpiredTime(), carNumber, position); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getString(ShangAnUtil.SHANGAN_STATUS).equalsIgnoreCase(ShangAnUtil.SHANGAN_SUCCESS)) { - // 停车券-核销 - try { - wxCouponOrderService.shangAnVerify(userCar.getId(),park); - } catch (Exception e) { - logger.error(e.getMessage()); - } - return new ResultData(); - } else { - return new ResultData(ErrorCode.SHANGAN_COUPON_FAIL.getCode(), retObj.getString(ShangAnUtil.SHANGAN_ERROR_CODE)); - } - } - - @Override - public ResultData getParkStatus(WxPark park) { - return null; - } - - @Override - public boolean ignoreUseCouponCache() { - return false; - } -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnUtil.java b/suimangService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnUtil.java deleted file mode 100644 index 10eb20a..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnUtil.java +++ /dev/null @@ -1,186 +0,0 @@ -package com.iformall.service.park.impl.shangan; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.exception.MallinkException; -import com.iformall.utils.DateUtils; -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicHeader; -import org.apache.http.protocol.HTTP; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -/** - * 尚安停车 - */ -public class ShangAnUtil { - private final static Logger logger = LoggerFactory.getLogger(ShangAnUtil.class); - - public static final String SHANGAN_URL = "url"; - public static final String SHANGAN_KEY = "key"; - public static final String SHANGAN_PARK_NUMBER = "parkNumber"; - - public static final String KEY = "NzMFFDDJDIFACACCM2zAezDz"; - - public static final String PARK_NUMBER = "p190829183435"; - - public static final String URL = "http://www.p-share.com/shangan-yhq/web/api/outcoupon"; - - public static final String SHANGAN_STATUS = "status"; - public static final String SHANGAN_SUCCESS = "success"; - public static final String SHANGAN_FAIL = "fail"; - public static final String SHANGAN_ERROR_CODE = "errorCode"; - - - public static final SimpleDateFormat dateInFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - - public static void main(String[] args) throws Exception { - String carNumber = "京XAZMF1"; - Date myDate = DateUtils.getHourTimeAfter(1, new Date()); - - String result = couponSend(URL, KEY, PARK_NUMBER, "1", myDate, carNumber, "1500"); - - JSONObject obj = JSON.parseObject(result); - } - - /** - * md5算法 - * @param data - * @return - * @throws NoSuchAlgorithmException - */ - - public static String md5(String data) throws NoSuchAlgorithmException { - MessageDigest md = MessageDigest.getInstance("MD5"); - md.update(data.getBytes()); - StringBuilder buf = new StringBuilder(); - byte[] bits = md.digest(); - for(int i=0;i") || resp.startsWith("")) { - return true; - } - return false; - } - - public static String couponSend(String url, String key, String parkNumber, String couponModelId, Date expireTime, String plate, String position) { - Map params = new HashMap<>(); - params.put("parkNum", parkNumber); - params.put("couponModeId", couponModelId); - params.put("endTime", dateInFormat.format(expireTime)); - params.put("plate", plate); - params.put("position", position); - try { - String result = Proc(url, key, parkNumber, params); - if(result == null) { - throw new MallinkException(ErrorCode.CAR_CMD_FAIL); - } - if(checkRespFailed(result)) { - throw new MallinkException(ErrorCode.CAR_CMD_FAIL); - } - return result; - } catch (Exception e) { - return null; - } - } - - private static String Proc(String url, String key, String parkNumber, Map paramMap) { - CloseableHttpClient httpClient = HttpClients.createDefault(); - - HttpPost httpPost = new HttpPost(url); - httpPost.addHeader(HTTP.CONTENT_TYPE,"application/json"); - httpPost.addHeader("Accept", "application/json"); - httpPost.addHeader("Accept-Encoding", "UTF-8"); - - String sign = null; - try{ - sign = getSign(key, parkNumber); - httpPost.addHeader("sign", sign); - }catch(NoSuchAlgorithmException e) { - logger.error(e.getLocalizedMessage()); - } - - String jsonstr = JSON.toJSONString(paramMap); - logger.info(jsonstr); - - try { - StringEntity se = new StringEntity(jsonstr, Consts.UTF_8); - se.setContentType("application/json"); - se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"UTF-8")); - httpPost.setEntity(se); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - HttpResponse response = null; - try { - response = httpClient.execute(httpPost); - } catch (Exception e) { - logger.error(e.getLocalizedMessage()); - } - - String result = null; - - //打印StatusLine - logger.debug("StatusLine: " + response.getStatusLine()); - try{ - //获取实体 - HttpEntity httpEntity= response.getEntity(); - result = EntityUtils.toString(httpEntity, "UTF-8"); - logger.debug(result); - } catch (Exception e) { - logger.error(e.getLocalizedMessage()); - } - - try { //关闭流并释放资源 - httpClient.close(); - } catch (IOException e) { - logger.error(e.getLocalizedMessage()); - } - - return result; - } - - - - -} - diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java b/suimangService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java deleted file mode 100644 index 71f3459..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java +++ /dev/null @@ -1,262 +0,0 @@ -package com.iformall.service.park.impl.tjd; - -import java.util.Date; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.iformall.common.ErrorCode; -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCUserCar; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxPark; -import com.iformall.domain.vo.WxCouponOrderCarCVo; -import com.iformall.enums.EnumAssignTagsTrigger; -import com.iformall.enums.EnumCarVendor; -import com.iformall.enums.EnumCouponUnit; -import com.iformall.enums.EnumScoreType; -import com.iformall.enums.EnumTJDCode; -import com.iformall.exception.MallinkException; -import com.iformall.service.WxCUserCarService; -import com.iformall.service.WxCUserTagsService; -import com.iformall.service.WxCouponService; -import com.iformall.service.WxScoreRulesService; -import com.iformall.service.park.ParkAdapterService; -import com.iformall.service.park.impl.BaseParkService; -import com.iformall.service.park.impl.util.ParkHelper; - -@Service -public class TJDParkService extends BaseParkService implements ParkAdapterService { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired - ParkHelper parkHelper; - - TJDUtil tjd = new TJDUtil(); - - @Autowired - WxCUserCarService wxCUserCarService; - - @Autowired - WxScoreRulesService wxScoreRulesService; - - @Autowired - WxCUserTagsService wxCUserTagsService; - - @Autowired - WxCouponService couponService; - - @Override - public ResultData parkInitConfig(WxPark park) throws Exception { - // TODO Auto-generated method stub - return null; - } - - @Override - public String initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { - return null; - } - - @Override - public String bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { - return tjdBindCar(paramMap,park,member.getId()); - } - - - private String tjdBindCar(Map paramMap, WxPark park, Long cuUserId) { - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - logger.error("carNumber为空"); - //return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - String carNumColor = paramMap.get("carNumColor"); - //if (StringUtils.isBlank(carNumColor)) { - // logger.error("carNumColor为空"); - // return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumColor为空"); - //} - Long newCarId = 0L; - String outCarId = paramMap.get("outCarId"); - if (StringUtils.isBlank(outCarId)) { - logger.warn("outCarId为空"); - newCarId = wxCUserCarService.getNewCarID(); - outCarId = String.valueOf(newCarId); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString("url"); - String partner = objParams.getString("partner"); - String key = objParams.getString("key"); - String version = objParams.getString("version"); - String ret = tjd.registerCar(url, partner, key, version, - carNumber, carNumColor, null, outCarId); - JSONObject retObj = JSON.parseObject(ret); - retObj.put("vendor", park.getVendorType()); - if (retObj.getString("returnCode").equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) { - return String.valueOf(newCarId); - }else { - throw new MallinkException(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败"); - } -// if (retObj.getString("returnCode").equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) { -// ResultData e = tjdInsertToDB(carNumber, newCarId, retObj, park, cuUserId); -// if (e != null) return e; -// return new ResultData(retObj); -// } else { -// return new ResultData(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败", retObj); -// } - } - - -// private ResultData tjdInsertToDB(String carNumber, Long newCarId, JSONObject retObj, WxPark park, Long cuUserId) { -// String carId = retObj.getString("carId"); -// // 插入车牌 -// Date curr = new Date(); -// WxCUserCar userCar = new WxCUserCar(); -// userCar.setId(newCarId); -// userCar.setCUserId(cuUserId); -// userCar.updateTenantInfo(park); -// userCar.setCarNumber(carNumber); -// userCar.setVendorType(EnumCarVendor.CAR_TJD.getCode()); -// JSONObject jo = new JSONObject(); -// jo.put("carId", carId); -// userCar.setVendorParams(JSON.toJSONString(jo)); -// userCar.setCreateDate(curr); -// userCar.setUpdateDate(curr); -// try { -// wxCUserCarService.save(userCar); -// wxScoreRulesService.addScore(userCar,EnumScoreType.BIND_CAR, userCar); -// //增加积分 -// parkHelper.addCredit(park, cuUserId); -// } catch (Exception e) { -// logger.error(e.getMessage()); -// return new ResultData(ErrorCode.DB_FAIL.getCode(), "TJD保存车牌失败, e:" + e.getMessage()); -// } -// -// wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_CAR, cuUserId); -// return new ResultData(); -// } - - - @Override - public void unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { - tjdUnbindCar(paramMap,park,member.getId()); - } - - private ResultData tjdUnbindCar(Map paramMap, WxPark park, Long userId) { - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - WxCUserCar queryOne = new WxCUserCar(); - queryOne.setCarNumber(carNumber); - queryOne.updateTenantInfo(park); - queryOne.setCUserId(userId); - WxCUserCar userCar = wxCUserCarService.getOne(queryOne); - if (userCar != null) { - String params = userCar.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String carId = objParams.getString("carId"); - - params = park.getVendorParams(); - String url = objParams.getString("url"); - String partner = objParams.getString("partner"); - String key = objParams.getString("key"); - String version = objParams.getString("version"); - String ret = tjd.writeOffCar(url, partner, key, version, carId); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getString("returnCode").equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) { -// try { -// wxCUserCarService.deleteByObj(userCar); -// } catch (Exception e) { -// logger.error("解绑车牌数据库错误, e:" + e.getMessage()); -// return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage()); -// } - - return new ResultData(); - } else { - return new ResultData(ErrorCode.CAR_UNBIND_FAIL, "解绑车牌失败"); - } - } - return new ResultData(); - } - - - @Override - public ResultData carStopFee(Map paramMap, WxPark park) { - return tjdCarStopFee(paramMap, park); - } - - private ResultData tjdCarStopFee(@RequestBody Map paramMap, WxPark park) { - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString(TJDUtil.TJD_URL); - String partner = objParams.getString(TJDUtil.TJD_ACCOUNT); - String key = objParams.getString(TJDUtil.TJD_ACCOUNT_KEY); - String version = objParams.getString(TJDUtil.TJD_VERSION); - String ret = tjd.infoForFreeMins(url, partner, key, version, carNumber); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) { - return new ResultData(retObj); - } else { - return new ResultData(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败"); - } - } - - - @Override - public ResultData useCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) { - String tradeId = paramMap.get("tradeId"); - String accountId = paramMap.get("accountId"); - if (StringUtils.isBlank(tradeId)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "tradeId为空"); - } - if (StringUtils.isBlank(accountId)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "accountId为空"); - } - String params = park.getVendorParams(); - JSONObject objParams = JSON.parseObject(params); - String url = objParams.getString(TJDUtil.TJD_URL); - String partner = objParams.getString(TJDUtil.TJD_ACCOUNT); - String key = objParams.getString(TJDUtil.TJD_ACCOUNT_KEY); - String version = objParams.getString(TJDUtil.TJD_VERSION); - - String amount = ""; - if (coupon.getUnit().equals(EnumCouponUnit.MONEY.getCode())) { - amount = coupon.getPriceStr(); - } else { - amount = String.valueOf(coupon.getPrice()* 60); - } - - String ret = tjd.deductionForDetail(url, partner, key, version, - tradeId, accountId, String.valueOf(userCar.getId()), - coupon.getUnit().toString(), amount); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getString(TJDUtil.TJD_RETURN_CODE).equalsIgnoreCase(EnumTJDCode.SUCCESS.getMessage())) { - return new ResultData(); - } else { - return new ResultData(ErrorCode.CAR_DEDUCE_FEE_FAIL.getCode(), "停车费抵扣失败"); - } - } - - @Override - public ResultData getParkStatus(WxPark park) { - return null; - } - - @Override - public boolean ignoreUseCouponCache() { - return false; - } -} diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/tjd/TJDUtil.java b/suimangService/src/main/java/com/iformall/service/park/impl/tjd/TJDUtil.java deleted file mode 100644 index 6284f44..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/tjd/TJDUtil.java +++ /dev/null @@ -1,687 +0,0 @@ -package com.iformall.service.park.impl.tjd; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.iformall.enums.EnumCouponUnit; -import com.iformall.utils.MapUtil; -import org.apache.commons.lang3.StringUtils; -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicHeader; -import org.apache.http.protocol.HTTP; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Map; - -/** - * 停简单 停车管理 - */ -@Component -public class TJDUtil { - - public static final String TJD_URL = "url"; - public static final String TJD_ACCOUNT = "partner"; - public static final String TJD_ACCOUNT_KEY = "key"; - public static final String TJD_VERSION = "version"; - - public static final String TJD_CHARSET = "charset"; - public static final String TJD_UTF_8 = "utf-8"; - - public static final String TJD_RETURN_CODE = "returnCode"; - public static final String TJD_RETURN_SUCC = "T"; - public static final String TJD_RETURN_FAIL = "F"; - - public static final String TJD_IS_SUC = "isSuccess"; - public static final String TJD_ERR_MSG = "errorMSG"; - public static final String TJD_SUC = "0"; - public static final String TJD_ERR_1 = "1"; // 业务级失败(不进行重发) - public static final String TJD_ERR_2 = "2"; // 系统级失败(有重发机制) - public static final String TJD_PARK_ID = "parkId"; - public static final String TJD_PARK_NAME = "parkName"; - public static final String TJD_CAR_NUMBER = "carNum"; - public static final String TJD_TRADE_ID = "tradeId"; - public static final String TJD_IN_DT = "inDt"; - public static final String TJD_OUT_DT = "outDt"; - public static final String TJD_PARK_AMT = "parkAmount"; - public static final String TJD_PAY_AMT = "payAmount"; - public static final String TJD_PAY_DT = "payDt"; - public static final String TJD_FREE_MINS = "freeMins"; - public static final String TJD_ACCOUNT_ID = "accountId"; - public static final String TJD_PREPAY_TYPE = "prePayType"; - public static final String TJD_PREPAY_TYPE_3 = "3"; // 三方合作方支付 - public static final String TJD_PREPAY_TYPE_20 = "20"; // 手机场内支付 - public static final String TJD_DETAIL_LIST = "detailList"; - public static final String TJD_OUT_TRADE_NO = "outTradeNo"; - public static final String TJD_TYPE = "type"; - public static final String TJD_TYPE_DISCOUNT = "0"; - public static final String TJD_TYPE_COUPON = "1"; - public static final String TJD_COUPON_TYPE = "couponType"; - public static final String TJD_CHANNEL = "channel"; - public static final String TJD_AMOUNT = "amount"; - public static final String TJD_MINUTES = "minutes"; - public static final String TJD_CREDIT = "integral"; - public static final String TJD_MEMO = "memo"; - - public static final SimpleDateFormat dateInFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - public static final SimpleDateFormat dateOutFormat = new SimpleDateFormat("yyyyMMddHHmmss"); - - - private final static Logger logger = LoggerFactory.getLogger(TJDUtil.class); - - private static String baseurl = "http://prep.tingjiandan.com/openapi/gateway"; - - private static String partner = "fb21a5b2f7064ff5afb8288d5bb48ca8"; - private static String key = "bc2f09be8f5b4227898346cf6fe451c2"; - private static String version = "1.0"; - - // - // {"url":"http://prep.tingjiandan.com/openapi/gateway","partnerId":"fb21a5b2f7064ff5afb8288d5bb48ca8","key":"bc2f09be8f5b4227898346cf6fe451c2","parkId":"7715622dff834b34a44448b801c27607", "version":"1.0.0"} - // - - public static void main(String[] args) throws Exception { - String carNumber = "京XAZMF1"; - - String result = infoForFreeMins(baseurl, partner, key, version, carNumber); - - JSONObject obj = JSON.parseObject(result); - /* - - Map paramMap1 = MapUtil.getOrderMap(); - paramMap1.put("tradeId", obj.getString("tradeId")); - paramMap1.put("deductionAmount", obj.getString("totalAmount")); - paramMap1.put("outTradeNo", "utf-8"); - paramMap1.put("accountId", obj.getString("accountId")); - paramMap1.put(TJD_CHARSET, "utf-8"); - paramMap1.put(TJD_ACCOUNT, partner); - paramMap1.put(TJD_VERSION, version); - - deductionNotSettle(baseurl, key, paramMap1); - */ - } - - /** - * md5算法 - * @param data - * @return - * @throws NoSuchAlgorithmException - */ - - public static String md5(String data) throws NoSuchAlgorithmException { - MessageDigest md = MessageDigest.getInstance("MD5"); - md.update(data.getBytes()); - StringBuilder buf = new StringBuilder(); - byte[] bits = md.digest(); - for(int i=0;i map, String keysign) throws NoSuchAlgorithmException { - StringBuilder sb = new StringBuilder(); - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() != null || entry.getValue() != "") { - sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); - } - } - if(StringUtils.isNotBlank(sb)){ - sb.deleteCharAt(sb.length()-1);// ? - } - sb.append(keysign); - logger.debug("签名前的字符串输出:"+sb.toString()); - String signValue = md5(sb.toString()).toUpperCase(); - logger.debug("sign: " + signValue); - return signValue; - } - - /** - * 注册车牌 - * @param url - * @param partner - * @param key // 密钥 - * @param version - * - * { - * "carNum": "京A45781", - * "carNumColor": "blue", - * "phone": "15210501514", - * "outCarId": "45454545454", - * "partner": "5836b8b52ada463ebc6199579f029566", - * "timestamp": "2016-05-26 11:30:10", - * "version": "1.0" - * } - * @throws Exception - */ - public static String registerCar(String url, String partner, String key, String version, - String carNum, String carNumColor, String phone, String outCarId) { - String service = "parkhub.car.register"; - - Map paramMap = MapUtil.getOrderMap(); - paramMap.put(TJD_CAR_NUMBER, carNum); - paramMap.put("carNumColor", carNumColor); - if (phone != null) { - paramMap.put("phone", phone); - } - if (outCarId != null) { - paramMap.put("outCardId", outCarId); - } - paramMap.put(TJD_CHARSET, TJD_UTF_8); - paramMap.put(TJD_ACCOUNT, partner); - paramMap.put(TJD_VERSION, version); - - String result = Proc(url, key, service, paramMap); - - /* - { - "timestamp": "1464235239561", - "returnCode": "T", - "errorMsg": "", - "returnMsg": "OK", - "isSuccess": "0", - "carId": "5836b8b52ada463ebc6199579f029561" - }*/ - return result; - } - - /** - * 注销车牌 - * @param url - * @param partner - * @param key // 密钥 - * @param version - * - * { - * "service": "parkhub.car.writeOff", - * "version":"1.0", - * "sign":"3347b109a1e44f3fd5baa78b74a84948", - * "partner":"5836b8b52ada463ebc6199579f029566", - * "carId":"3347b109a1e44f3fd5baa78b74a84948", - * "timestamp":"2016-05-26 11:30:10", - * "charset":"utf-8", - * "signType":"md5" - * } - * @throws Exception - */ - public static String writeOffCar(String url, String partner, String key, String version, - String carId) { - String service = "parkhub.car.writeOff"; - - Map paramMap = MapUtil.getOrderMap(); - paramMap.put("carId", carId); - paramMap.put(TJD_CHARSET, TJD_UTF_8); - paramMap.put(TJD_ACCOUNT, partner); - paramMap.put(TJD_VERSION, version); - - String result = Proc(url, key, service, paramMap); - - /* - { - "timestamp": "1464235239561", - "returnCode": "T", - "errorMsg": "", - "returnMsg": "OK", - "isSuccess": "0", - }*/ - return result; - } - - - /** - * 在场订单查询 - * @param url - * @param partner - * @param key // 密钥 - * @param version - * - * { - * "carNum": "京A45781", - * "freeMins": "0", - * "partner": "5836b8b52ada463ebc6199579f029566", - * "pmParkId": "5836b8b52ada463ebc6199579f029565", - * "timestamp": "2016-05-26 11:30:10", - * "tradeId": "5836b8b52ada463ebc6199579f029565", - * "version": "1.0" - * } - * @throws Exception - */ - public static String infoForFreeMins(String url, String partner, String key, String version, String carNum) { - String service = "parkhub.order.infoForFreeMins"; - - String freeMins = "0"; - - Map paramMap = MapUtil.getOrderMap(); - paramMap.put(TJD_CAR_NUMBER, carNum); - //paramMap.put("carNumColor", ""); - //paramMap.put("pmParkId", ""); - paramMap.put(TJD_FREE_MINS, freeMins); - //paramMap.put("tradeId", ""); - paramMap.put(TJD_CHARSET, TJD_UTF_8); - paramMap.put(TJD_ACCOUNT, partner); - paramMap.put(TJD_VERSION, version); - - String result = Proc(url, key, service, paramMap); - - /* - { - "wLon":"116.310335", - "returnCode":"T", - "lon":"116.316813", - "accountId":"818a6ac865e841119ec9aab21c5e5a24", - "freeThroughTime":"10", - "customerServicePhone":"400-001-0606", - "tradeId":"2ae003431584495081014428c90173ab", - "returnMsg":"OK", - "outDt":"20190920110443", - "isSuccess":"0", - "miniProgram":"{\"path\": \"pages/pre_pay/index/main\",\"extraData\": {\"prePayType\": \"16\",\"channel\": \"30166\",\"isShowDetail\": \"true\",\"partnerId\": \"956ca31ac8464cf7b6a876e8887912f3\",\"orderId\": \"2ae003431584495081014428c90173ab\"}}","pmParkId":"7715622dff834b34a44448b801c27607","unPayAmount":"88.12","timestamp":"1568948681580","errorMSG":"","parkTime":"81629","wLat":"39.93609","totalAmount":"88.12","paidAmount":"0.00","freeMinsAmount":"0.00","payUrl":"https://prep.tingjiandan.com/tcweixin/letter/prePay/pagePayInPark?prePayType=16&channel=30166&isShowDetail=true&partnerId=&orderId=2ae003431584495081014428c90173ab&returnUrl=", - "lat":"39.942078", - "inDt":"20190919122414"} - */ - return result; - } - - //// TODO - /** - * deductionNotSettle 停车费批量抵扣接口 - * @param url - * @param partner - * @param key // 密钥 - * @param version - * type 可选值:0=抵扣、1=优惠券 - * couponType type=1时必填,可选值:0=金额、1=时长、2=全免、3=时间区间 - * channel 可选值: type=0时:5013=微信、5014=支付宝、5015=抵扣其他 - * type=1时:2202=会员等级、2203=会员积分、2204=会员卡券、2205=会员补贴、2206=会员其他 - * amount: type=0时、couponType=0必填,单位(元),保留小数点后两位,金额类型使用 - * minutes: couponType=1时必填,单位(分钟),时长类型使用 - * integral: 大于等于0的整数值,积分类型使用,如果使用了积分兑换,可填写积分值 - * expireDt: type=1时选填,格式:yyyyMMddHHmmss,如果不填,则永不过期,若填写,则出场时间在此 时间之后,认为此记录已经过期,不再使用 - * membershipGrade: 调用方系统会员等级标识,如:LV1、VIP2、金卡等,长度不超过64位 - * identityType: identityId非空时,此值必填,可选值:01=手机号、02=会员卡号、03=车牌号、04=身份证号 - * identityId: identityType非空时,此值必填,对应身份标识类型的唯一值,长度不超过100位 - * { - "service": "parkhub.order.deductionForDetail", - "partner": "120a565de377427184de35ca0f320764", - "sign": "3347b109a1e44f3fd5baa78b74a84948", - "signType": "md5", - "charset": "utf-8", - "version": "1.0", - "timestamp": "2016-05-26 11:30:10", - "tradeId": "c39d3aac49d04e12a187681e6189f841", - "accountId": "a9b2963c98344bb292e0fa3f7dd70946", - "prePayType": "3", - "giveFreeTimeOut": "false", - "detailList":"[{ - \"outTradeNo\":\"PLDKY01\", - \"identityType\":\"01\", - \"identityId\":\"17710111111\", - \"membershipGrade\":\"LV1\", - \"amount\":\"12.50\", - \"type\":\"0\", - \"channel\":\"5013\", - \"memo\":\"批量抵扣-金额-微信\" - },{ - \"outTradeNo\":\"PLDKY02\", - \"identityType\":\"01\", - \"identityId\":\"17710111111\", - \"membershipGrade\":\"LV1\", - \"couponType\":\"1\", - \"minutes\":\"60\", - \"type\":\"1\", - \"channel\":\"2204\", - \"memo\":\"批量抵扣-时长-会员卡券\" - },{ - \"outTradeNo\":\"PLDKY03\", - \"identityType\":\"01\", - \"identityId\":\"17710111111\", - \"membershipGrade\":\"LV1\", - \"couponType\":\"3\", - \"startDt\":\"20180901110000\", - \"endDt\":\"20180901170000\", - \"integral\":\"500\", - \"type\":\"1\", - \"channel\":\"2205\", \"memo\":\"批量抵扣-区间-积分-会员补贴\" - }]" - } - * @throws Exception - */ - public static String deductionForDetail( - String url, String partner, String key, String version, - String tradeId, String accountId, - String couponOrderId, String couponType, String reduceAmount) { - // 为指定订单抵扣停车费,如果此时车辆已经出场,返回isSuccess错误码为3,停简单系统不再接收此笔抵扣信息,对方系统 需要给用户发起退款。 - String service = "parkhub.order.deductionForDetail"; - Map paramMap = MapUtil.getOrderMap(); - paramMap.put(TJD_TRADE_ID, tradeId); - paramMap.put(TJD_ACCOUNT_ID, accountId); - paramMap.put(TJD_PREPAY_TYPE, TJD_PREPAY_TYPE_3); - - JSONArray detailArr = new JSONArray(); - JSONObject detailObj = new JSONObject(); - detailObj.put(TJD_OUT_TRADE_NO, couponOrderId); - detailObj.put(TJD_TYPE, TJD_TYPE_COUPON); - detailObj.put(TJD_CHANNEL, "2204"); - String memo = "会员优惠券"; - detailObj.put(TJD_COUPON_TYPE, couponType); - if (couponType.equals(String.valueOf(EnumCouponUnit.MONEY.getCode()))) { - detailObj.put(TJD_AMOUNT, reduceAmount); - memo += "-金额"; - } else { - detailObj.put(TJD_MINUTES, reduceAmount); - memo += "-时长"; - } - detailObj.put(TJD_MEMO, memo); - detailArr.add(detailObj); - paramMap.put(TJD_DETAIL_LIST, JSON.toJSONString(detailArr)); - - paramMap.put(TJD_CHARSET, TJD_UTF_8); - paramMap.put(TJD_ACCOUNT, partner); - paramMap.put(TJD_VERSION, version); - - String result = Proc(url, key, service, paramMap); - /* - "{\"timestamp\":\"1528534986636\", - \"returnCode\":\"T\", - \"prePayId\":\"7a1d52aa77ca487db4e61130394285bd\", - \"errorMSG\":\"\", - \"returnMsg\":\"OK\", - \"isSuccess\":\"0\"}[\\r][\\n]" - */ - return result; - } - - /** - * deductionNotSettle 停车费无结算抵扣 - * @param url - * @param partner - * @param key // 密钥 - * @param version - * { - "service": "", - "version":"1.0", - "sign":"3347b109a1e44f3fd5baa78b74a84948", - "partner":"5836b8b52ada463ebc6199579f029566", - "timestamp":"2016-05-26 11:30:10", - "charset":"utf-8", - "signType":"md5", - "tradeId": "224478781859452794f2a68a756fe461", - "deductionAmount": "0.1", - "outTradeNo":"4738473847834378", - "accountId":"3347b109a1e44f3fd5baa78b74a84941", - } - * @throws Exception - */ - public static String deductionNotSettle(String url, String partner, String key, String version, - String tradeId, String outTradeNo, String accountId, String deductionAmount) { - // TODO - // 为指定订单抵扣停车费,如果此时车辆已经出场,返回isSuccess错误码为3, - // 停简单系统不再接收此笔抵扣信息,对方系统需要给用户发起退款(后续业务中无结算) - String service = "parkhub.order.deductionNotSettle"; - Map paramMap = MapUtil.getOrderMap(); - paramMap.put("tradeId", tradeId); - paramMap.put("deductionAmount", deductionAmount); - paramMap.put("outTradeNo", outTradeNo); - paramMap.put("accountId", accountId); - paramMap.put(TJD_CHARSET, TJD_UTF_8); - paramMap.put(TJD_ACCOUNT, partner); - paramMap.put(TJD_VERSION, version); - - String result = Proc(url, key, service, paramMap); - /* - "{\"timestamp\":\"1528534986636\", - \"returnCode\":\"T\", - \"prePayId\":\"7a1d52aa77ca487db4e61130394285bd\", - \"errorMSG\":\"\", - \"returnMsg\":\"OK\", - \"isSuccess\":\"0\"}[\\r][\\n]" - */ - return result; - } - - /** - * bindTime 绑定时长优惠券 - * @param url - * @param partner // - * @param key // 密钥 - * @param version // 1.0 - * - * { - * "service": "parkhub.ticket.bindTime", - * "version":"1.0", - * "sign":"3347b109a1e44f3fd5baa78b74a84948", - * "partner":"5836b8b52ada463ebc6199579f029566", - * "timestamp":"2016-05-26 11:30:10", - * "charset":"utf-8", - * "signType":"md5", - * "tradeId": "224478781859452794f2a68a756fe461", - * "outTicketNo": "224478781859452794f2a68a756fe461", - * "accountId":"3347b109a1e44f3fd5baa78b74a84941", - * "prePayType": "3", - * "minutes": "30", - * "memo": "测试绑定时长优惠券" - * } - * @throws Exception - */ - public static String bindTime(String url, String partner, String key, String version, - String tradeId, String outTicketNo, String accountId, String prePayType, String minutes, String memo) throws Exception { - String service = "parkhub.ticket.bindTime"; - - Map paramMap = MapUtil.getOrderMap(); - paramMap.put("tradeId", tradeId); - paramMap.put("outTicketNo", outTicketNo); - paramMap.put("accountId", accountId); - paramMap.put("prePayType", prePayType); - paramMap.put("minutes", minutes); - paramMap.put("memo", memo); - paramMap.put(TJD_CHARSET, TJD_UTF_8); - paramMap.put(TJD_ACCOUNT, partner); - paramMap.put(TJD_VERSION, version); - - String result = Proc(url, key, service, paramMap); - /*{ - "timestamp": "1464247094636", - "returnCode": "T", - "errorMsg": "", - "returnMsg": "OK", - "isSuccess": "0", - "ticketId": "224478781859452794f2a68a756fe441" - }*/ - return result; - } - - /** - * 绑定区间优惠券 - * @param url - * @param partner - * @param key // 密钥 - * @param version - * - * { - * "service": "parkhub.ticket.bindPeriod", - * "version": "1.0", - * "sign": "3347b109a1e44f3fd5baa78b74a84948", - * "partner": "5836b8b52ada463ebc6199579f029566", - * "timestamp": "2016-05-26 11:30:10", - * "charset": "utf-8", - * "signType": "md5", - * "tradeId": "224478781859452794f2a68a756fe461", - * "outTicketNo": "224478781859452794f2a68a756fe461", - * "accountId": "3347b109a1e44f3fd5baa78b74a84941", - * "prePayType": "3", - * "startDt": "20160526113010", - * "endDt": "20160526123010", - * "expireDt": "20160527113010", - * "memo": "测试绑定时长优惠券" - * } - * @throws Exception - */ - public static String bindPeriod(String url, String partner, String key, String version, - String tradeId, String outTicketNo, String accountId, String prePayType, - String startDt, String EndDt, String expireDt, String memo) throws Exception { - String service = "parkhub.ticket.bindPeriod"; - - Map paramMap = MapUtil.getOrderMap(); - paramMap.put("tradeId", tradeId); - paramMap.put("outTicketNo", outTicketNo); - paramMap.put("accountId", accountId); - paramMap.put("prePayType", prePayType); - paramMap.put("startDt", startDt); - paramMap.put("EndDt", EndDt); - paramMap.put("expireDt", expireDt); - paramMap.put("memo", memo); - paramMap.put(TJD_CHARSET, TJD_UTF_8); - paramMap.put(TJD_ACCOUNT, partner); - paramMap.put(TJD_VERSION, version); - - String result = Proc(url, key, service, paramMap); - /*{ - "timestamp": "1464247094636", - "returnCode": "T", - "errorMsg": "", - "returnMsg": "OK", - "isSuccess": "0", - "ticketId": "224478781859452794f2a68a756fe441" - }*/ - return result; - } - - /** - * 绑定区间优惠券 - * @param url - * @param partner // 密钥 - * @param key // 密钥 - * @param version - * - * { - * "service": "parkhub.ticket.unbind", - * "version": "1.0", - * "sign": "3347b109a1e44f3fd5baa78b74a84948", - * "partner": "5836b8b52ada463ebc6199579f029566", - * "timestamp": "2016-05-26 11:30:10", - * "charset": "utf-8", - * "signType": "md5", - * "tradeId ": "3347b109a1e44f3fd5baa78b74a84948", - * "ticketId": "224478781859452794f2a68a756fe461" - * } - * @throws Exception - */ - public static String unbind(String url, String partner, String key, String version, - String tradeId, String ticketid) throws Exception { - String service = "parkhub.ticket.unbind"; - - Map paramMap = MapUtil.getOrderMap(); - paramMap.put("tradeId", tradeId); - paramMap.put("ticketid", ticketid); - paramMap.put(TJD_CHARSET, TJD_UTF_8); - paramMap.put(TJD_ACCOUNT, partner); - paramMap.put(TJD_VERSION, version); - - String result = Proc(url, key, service, paramMap); - /*{ - "timestamp": "1464247094636", - "returnCode": "T", - "errorMsg": "", - "returnMsg": "OK", - "isSuccess": "0", - }*/ - return result; - } - - private static String Proc(String url, String key, String service, Map paramMap) { - CloseableHttpClient httpClient = HttpClients.createDefault(); - - HttpPost httpPost = new HttpPost(url); - httpPost.addHeader(HTTP.CONTENT_TYPE,"application/json"); - httpPost.addHeader("Accept", "application/json"); - httpPost.addHeader("Accept-Encoding", "UTF-8"); - - String timestamp = getCurrentDate(); - paramMap.put("timestamp", timestamp); - - paramMap.put("service", service); - - String sign = null; - try{ - sign = getSign(paramMap, key); - }catch(NoSuchAlgorithmException e) { - logger.error(e.getLocalizedMessage()); - } - - paramMap.put("sign", sign); - paramMap.put("signType", "md5"); - - String jsonstr = JSON.toJSONString(paramMap); - logger.info(jsonstr); - - try { - StringEntity se = new StringEntity(jsonstr, Consts.UTF_8); - se.setContentType("application/json"); - se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"UTF-8")); - httpPost.setEntity(se); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - HttpResponse response = null; - try { - response = httpClient.execute(httpPost); - } catch (Exception e) { - logger.error(e.getLocalizedMessage()); - } - - String result = null; - - //打印StatusLine - logger.debug("StatusLine: " + response.getStatusLine()); - try{ - //获取实体 - HttpEntity httpEntity= response.getEntity(); - result = EntityUtils.toString(httpEntity, "UTF-8"); - logger.debug(result); - } catch (Exception e) { - logger.error(e.getLocalizedMessage()); - } - - try { //关闭流并释放资源 - httpClient.close(); - } catch (IOException e) { - logger.error(e.getLocalizedMessage()); - } - - return result; - } - -} - diff --git a/suimangService/src/main/java/com/iformall/service/park/impl/util/ParkHelper.java b/suimangService/src/main/java/com/iformall/service/park/impl/util/ParkHelper.java deleted file mode 100644 index a4d64b7..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/impl/util/ParkHelper.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.iformall.service.park.impl.util; - -import java.util.Date; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.iformall.common.ErrorCode; -import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserCar; -import com.iformall.domain.po.WxCreditHistory; -import com.iformall.domain.po.WxPark; -import com.iformall.enums.EnumAssignTagsTrigger; -import com.iformall.enums.EnumCarVendor; -import com.iformall.enums.EnumScoreType; -import com.iformall.enums.EnumUserType; -import com.iformall.exception.MallinkException; -import com.iformall.service.WxCUserCarService; -import com.iformall.service.WxCUserTagsService; -import com.iformall.service.WxCreditHistoryService; -import com.iformall.service.WxScoreRulesService; - -@Service -public class ParkHelper { - private final Logger logger = LoggerFactory.getLogger(ParkHelper.class); - - @Autowired - WxCUserCarService wxCUserCarService; - - @Autowired - WxScoreRulesService wxScoreRulesService; - - @Autowired - WxCUserTagsService wxCUserTagsService; - - @Autowired - WxCreditHistoryService wxCreditHistoryService; - - public WxCUserCar getOne(WxPark park, Long cuUserId,String carNumber,EnumCarVendor carVendor) { - WxCUserCar userCar = new WxCUserCar(); - userCar.updateTenantInfo(park); - userCar.setCUserId(cuUserId); - userCar.setCarNumber(carNumber); - userCar.setVendorType(carVendor.getCode()); - return wxCUserCarService.getOne(userCar); - } - - public ResultData bindCar(Map paramMap, WxPark park, Long cuUserId,String vendorPersonId) { - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - logger.error("carNumber为空"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - try { - addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()), park, cuUserId,vendorPersonId); - } catch (MallinkException e) { - return new ResultData(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return new ResultData(500, e.getMessage()); - } - return new ResultData(vendorPersonId); - } - - public void addCarInfoToDB(String carNumber, EnumCarVendor carVendor, WxPark park, Long cuUserId,String vendorPersonId) { - // 插入车牌 - Date curr = new Date(); - WxCUserCar userCar = new WxCUserCar(); - userCar.setCUserId(cuUserId); - userCar.updateTenantInfo(park); - userCar.setCarNumber(carNumber); - userCar.setVendorType(carVendor.getCode()); - userCar.setCreateDate(curr); - userCar.setUpdateDate(curr); - userCar.setVendorPersonId(vendorPersonId); - wxCUserCarService.saveOrUpdate(userCar); - - // 成长值 - wxScoreRulesService.addScore(userCar,EnumScoreType.BIND_CAR, userCar); - //增加积分 - addCredit(park, cuUserId); - wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_CAR,userCar,park,null); - } - - //-----增加积分start----- - public void addCredit(WxPark park, Long cuUserId){ - WxCreditHistory wxCreditHistory = new WxCreditHistory(); - wxCreditHistory.setCUserId(cuUserId); -// wxCreditHistory.updateTenantInfo(park); - wxCreditHistory.setTenantId(park.getFinalTenantId()); - wxCreditHistory.setFinalTenantId(park.getFinalTenantId()); -// wxCreditHistory.setCreateDate(new Date()); - wxCreditHistory.setCreditType(EnumScoreType.BIND_CAR.getCode()); - wxCreditHistory.setChangePurpose(EnumScoreType.BIND_CAR.getMessage()); - wxCreditHistory.setOperatorType(EnumUserType.CUSERBASIC.getCode()); - wxCreditHistory.setOperatorId(cuUserId); - wxCreditHistoryService.saveOrUpdate(wxCreditHistory,park.getTenantId()); - } - - public ResultData unbindCar(Map paramMap, WxPark park, Long cuUserId) { - String carNumber = paramMap.get("carNumber"); - if (StringUtils.isBlank(carNumber)) { - logger.error("carNumber为空"); - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "carNumber为空"); - } - try { - WxCUserCar userCar = new WxCUserCar(); - userCar.updateTenantInfo(park); - userCar.setCUserId(cuUserId); - userCar.setCarNumber(carNumber); - wxCUserCarService.deleteByObj(userCar); - } catch (Exception e) { - logger.error(e.getMessage()); - return new ResultData(ErrorCode.DB_FAIL.getCode(), "解绑车牌数据库错误, e:" + e.getMessage()); - } - - return new ResultData(); - } -} diff --git a/suimangService/src/main/java/com/iformall/service/park/utils/ParkCacheUtils.java b/suimangService/src/main/java/com/iformall/service/park/utils/ParkCacheUtils.java deleted file mode 100644 index 4302f6b..0000000 --- a/suimangService/src/main/java/com/iformall/service/park/utils/ParkCacheUtils.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.iformall.service.park.utils; - -import org.springframework.data.redis.core.RedisTemplate; - -import com.iformall.utils.RedisCacheUtils; - -public class ParkCacheUtils { - - public static void removeCache(RedisTemplate template,String parkVendor,String carNumber) { - String key = "carStop:"+parkVendor+":"+carNumber; - RedisCacheUtils.removeCache(template, key); - } - - public static void setCarCouponUnUseCacheLock(RedisTemplate template,String parkVendor,String carNumber) { - String key = "carStop:"+parkVendor+":"+carNumber; - RedisCacheUtils.cache(template, key, 0, 12*3600); - } - - public static void setCarCouponUsedCacheLock(RedisTemplate template,String parkVendor,String carNumber) { - String key = "carStop:"+parkVendor+":"+carNumber; - RedisCacheUtils.cache(template, key, 1, 12*3600); - } - - public static Integer getCarCouponUseCacheLock(RedisTemplate template,String parkVendor,String carNumber) { - String key = "carStop:"+parkVendor+":"+carNumber; - return RedisCacheUtils.getCacheInteger(template, key); - } - -} diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/ServiceInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/ServiceInfoServiceImpl.java index f6deac5..860d6f1 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/ServiceInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/ServiceInfoServiceImpl.java @@ -3,7 +3,7 @@ package com.iformall.service.sm.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import com.iformall.common.CommonConstant; +import com.iformall.common.CommonConstants; import com.iformall.common.ErrorCode; import com.iformall.domain.dto.neuver.SaveServiceInfoDTO; import com.iformall.domain.po.sm.ServiceInfo; @@ -26,7 +26,7 @@ public class ServiceInfoServiceImpl implements ServiceInfoService { public void saveServiceInfo(SaveServiceInfoDTO dto) { // 校验 ServiceInfo serviceInfo = serviceInfoMapper.selectOne(new LambdaQueryWrapper() - .eq(ServiceInfo::getDelFlag, CommonConstant.DEL_FLAG_NORMAL) + .eq(ServiceInfo::getDelFlag, CommonConstants.DEL_FLAG_NORMAL) .eq(ServiceInfo::getCode, dto.getCode())); Optional.ofNullable(serviceInfo).orElseThrow(() -> new BizException(ErrorCode.CODE_ALREADY_EXISTS)); diff --git a/suimangService/src/main/java/com/iformall/utils/MaUtil.java b/suimangService/src/main/java/com/iformall/utils/MaUtil.java index 1a3f376..d0b3c01 100644 --- a/suimangService/src/main/java/com/iformall/utils/MaUtil.java +++ b/suimangService/src/main/java/com/iformall/utils/MaUtil.java @@ -3,10 +3,13 @@ package com.iformall.utils; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; +import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.alipay.api.response.AlipayTradePagePayResponse; import com.github.binarywang.wxpay.config.WxPayConfig; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; @@ -31,6 +34,7 @@ import com.iformall.douyin.web.enums.TtWebApiBeginEnum; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxAppinfoMapper; import com.iformall.service.WxAppinfoService; +import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import lombok.extern.flogger.Flogger; import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; @@ -331,4 +335,50 @@ public class MaUtil { } return alipayClient; } + + public static void main(String[] args) { + AlipayConfig alipayConfig = new AlipayConfig(); + + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("2021004122675328"); + alipayConfig.setPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCjYOqonp3RZMFCdh+rEdVKzVzEjk1ACXguNX2p6V1wN39hrkU1zR57PKKjU227p5jRy3MzeRupvvvt7aOLZM/9nDWh0OvqU3KBIRfKY1F46vqHE+GM06FWvhCDCSnSz98cCZN5GAWGDuV7zKQC6LekahiQH2HOEK+wJEkU9a/Y1RlZX3kmuCADhkywpLk4iUvQDP9QCgei9Vu4wHibGJZhJtbOgvap3k6nWrogAHZeuJ0O9HU3aizpcJFPn+OffA7U6zaBkP268AzclI1EgkH2lnosRJieLdcRskRB5AI5h8HF+SEzDwtytDwh1y7KBziR1j7H+oScDLcfhnvQwnw9AgMBAAECggEAHmQl4o3273+dj55nj6v2"); + alipayConfig.setFormat("json"); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxdq6ugtmAv1jGX/bMbxPQRgc5Muz8uzfr5d77yV7Z760NZcETVFZXfX3FMN/DwF/9sL4UZEx5Bd8yg46R8kgVFPKmfJf6kK7I/Cw9DtniZ9X+KSJzZerzkvttFgrKOGb5AhHupswrWmYgSopuPeYixUetuutCT6hFOx9rv9U9xS+eRoSW1JIGxioTXJ+tVS6fXh5lJVrC+Lj+5TMVZIu/WXrY6Ph+IgHMMVtwj7laiuVuefjVl9TbdPH7PRkAmdFcWcNDqPyBRsy5eLhC1LRPkOm2W5ydqVQ9yTI4rMq8wuAueX3Rcpgh/b+xZgJYv+Zlpb9/37TQHVDi5YnOlLlNQIDAQAB"); + alipayConfig.setSignType("RSA2"); + + try { + AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + //异步接收地址,仅支持http/https,公网可访问 + request.setNotifyUrl("https://mtest.metavatar.cc/C/payCallBack/aliNotify"); + //同步跳转地址,仅支持http/https + // request.setReturnUrl(""); + /******必传参数******/ + JSONObject bizContent = new JSONObject(); + //商户订单号,商家自定义,保持唯一性 + bizContent.put("out_trade_no", "test00000000000001"); + //支付金额,最小值0.01元 + bizContent.put("total_amount", "0.01"); + //订单标题,不可使用特殊符号 + bizContent.put("subject", "test"); + //电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY + bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY"); + + bizContent.put("qr_pay_mode",1); + + String after15 = DateUtils.date2String(DateUtils.getSecondsTimeAfter(15 * 60, new Date())); + + bizContent.put("time_expire", after15); + + request.setBizContent(bizContent.toString()); + + AlipayTradePagePayResponse response = alipayClient.pageExecute(request); + System.out.println(response.toString()); + + } catch (AlipayApiException e) { + e.printStackTrace(); + } + + } }