diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 95794826c..51b62dbc7 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -15,6 +15,9 @@ import com.iformall.domain.vo.WxMerchantVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.*; +import com.iformall.service.park.ParkFactory; +import com.iformall.service.park.impl.etcp.EtcpHelper; +import com.iformall.service.park.impl.util.ParkHelper; import com.iformall.utils.car.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -37,12 +40,6 @@ import java.util.Map; public class WxCarController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - ETCPUtil etcp = new ETCPUtil(); - - TJDUtil tjd = new TJDUtil(); - - CYFUtil cyf = new CYFUtil(); - @Autowired WxParkService wxParkService; @@ -72,15 +69,20 @@ public class WxCarController extends BaseController { @Autowired WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + ParkFactory parkFactory; + + @Autowired + ParkHelper parkHelper; + + @Autowired + EtcpHelper etcpHelper; private WxPark getCurrentPark(TenantEntity tenantEntity) { WxPark parkQ = new WxPark(); - //parkQ.updateTenantInfo(tenantEntity); - parkQ.setTenantId("789"); - parkQ.setParentTenantId("788"); + parkQ.updateTenantInfo(tenantEntity); WxPark wxPark = wxParkService.getByObj(parkQ); - // 1, get mall's park - // future use redis to optimize return wxPark; } @@ -107,146 +109,11 @@ public class WxCarController extends BaseController { WxPark park = getCurrentPark(getTenantInfo()); // 2. get vendor params if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { - return initForEtcp(paramMap, getMemberId(), park); - } else if (park.getVendorType().equals(EnumCarVendor.CAR_TJD.getCode()) || - park.getVendorType().equals(EnumCarVendor.CAR_DAHUA.getCode()) || - park.getVendorType().equals(EnumCarVendor.CAR_SHANGAN.getCode()) || - park.getVendorType().equals(EnumCarVendor.CAR_BOLINK.getCode())) { - Map resultMap = new HashMap(); - resultMap.put("vendor", park.getVendorType()); - return new ResultData(resultMap); - } - return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "登录失败"); - } - - private ResultData initForEtcp(Map paramMap, Long userId, WxPark park) { - String phone = paramMap.get("phone"); - WxCUserBasicInfo user = wxCUserBasicInfoService.getById(userId); - 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); - // 删除ETCP不存在 - for (WxCUserCar userCar : uclist) { - boolean bExist = isExistInArray(arr, userCar.getCarNumber()); - if (!bExist) { - wxCUserCarService.deleteById(userCar.getId()); - uclist.remove(userCar); - } - } - // 添加ETCP的 - for (int i = 0; i < arr.size(); i++) { - String _carNum = arr.getString(i); - boolean bExist = isExistInList(uclist, _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 etcpHelper.initForEtcp(paramMap, getMemberId(), park); + }else { + return parkFactory.getParkService(park.getVendorType()).initLogin(paramMap, park, getMember()); } - return bExist; + //return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "登录失败"); } /** @@ -263,192 +130,12 @@ public class WxCarController extends BaseController { WxPark park = getCurrentPark(getTenantInfo()); // 2. get vendor params if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) { - return etcpBindCar(paramMap, park, member.getId()); - } else if (park.getVendorType() == EnumCarVendor.CAE_CYF.getCode()){ - return cyfBindCar(paramMap,park,member); - } else { - // 内部操作 - return bindCar(paramMap, park, member.getId()); - } - } - - private 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) { - addCarInfoToDB(carNumber, EnumCarVendor.CAR_ETCP, park, cuUserId); - 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); - } - } - - - private ResultData bindCar(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 { - addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()), park, cuUserId); - } catch (MallinkException e) { - return new ResultData(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return new ResultData(500, e.getMessage()); - } - return new ResultData(); - } - - private void addCarInfoToDB(String carNumber, EnumCarVendor carVendor, WxPark park, Long cuUserId) { - // 插入车牌 - 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); - wxCUserCarService.saveOrUpdate(userCar); - - // 成长值 - wxScoreRulesService.addScore(userCar,EnumScoreType.BIND_CAR, userCar); - //增加积分 - addCredit(park, cuUserId); - wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_CAR,cuUserId); - } - - private ResultData tjdBindCar(@RequestBody 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())) { - ResultData e = tjdInsertToDB(carNumber, newCarId, retObj, park, cuUserId); - if (e != null) return e; - return new ResultData(retObj); + return etcpHelper.etcpBindCar(paramMap, park, member.getId()); } else { - return new ResultData(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败", retObj); - } - } - - /** - * @description 车易付会员车辆信息注册 - * @Params [paramMap, park, wxCUser] - * @return com.iformall.common.ResultData - * @Author furunxin - * @Date 2020/7/8 下午10:23 - **/ - private ResultData cyfBindCar(@RequestBody Map paramMap, WxPark park,WxCUserBasicInfo member) { - 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 token = objParams.getString("token"); - int feeGroupId = objParams.getIntValue("feeGroupId"); - String ret = cyf.registerCar(token,park.getNumber(),feeGroupId,park.getParkingId(),carNumber,member.getId(),member.getNickName()); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("result") == 1){ - addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()), park, member.getId()); - }else { - return new ResultData(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败", retObj); + return parkFactory.getParkService(park.getVendorType()).bindCar(paramMap, park, member); } - return null; - } - - 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); - //增加积分 - 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 null; } - //-----增加积分start----- - private void addCredit(WxPark park, Long cuUserId){ - WxCreditHistory wxCreditHistory = new WxCreditHistory(); - wxCreditHistory.setCUserId(cuUserId); - wxCreditHistory.updateTenantInfo(park); - wxCreditHistory.setCreateDate(new Date()); - wxCreditHistory.setCreditType(EnumScoreType.BIND_CAR.getCode()); - wxCreditHistory.setOperatorType(EnumUserType.CUSER.getCode()); - wxCreditHistory.setOperatorId(cuUserId); - wxCreditHistoryService.saveOrUpdate(wxCreditHistory); - } /** * 解绑车牌 @@ -467,117 +154,12 @@ public class WxCarController extends BaseController { // 1, get mall's park WxPark park = getCurrentPark(getTenantInfo()); if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { - return etcpUnbindCar(paramMap, park, getMemberId()); + return etcpHelper.etcpUnbindCar(paramMap, park, getMemberId()); } else { - return unbindCar(paramMap, park, getMemberId()); + return parkFactory.getParkService(park.getVendorType()).unbindCar(paramMap, park, getMember()); } } - private 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); - } - } - - private 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(); - } - - private ResultData tjdUnbindCar(@RequestBody 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 null; - } - /** * 停车费 * @@ -624,152 +206,9 @@ public class WxCarController extends BaseController { // 1, get mall's park WxPark park = getCurrentPark(getTenantInfo()); if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { - return etcpCarStopFee(paramMap, park); - } else if (park.getVendorType().equals(EnumCarVendor.CAR_TJD.getCode())) { - return tjdCarStopFee(paramMap, park); - } else if (park.getVendorType().equals(EnumCarVendor.CAR_DAHUA.getCode())) { - return dahuaCarStopFee(paramMap, park); - } else if (park.getVendorType().equals(EnumCarVendor.CAR_BOLINK.getCode())) { - return bolinkCarStopFee(paramMap, park); - }else if (park.getVendorType().equals(EnumCarVendor.CAE_CYF.getCode())){ - return cyfCarStopFee(paramMap,park); - } - return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "停车费获取失败"); - } - - 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); - } - - private 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 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); + return etcpHelper.etcpCarStopFee(paramMap, park); } else { - return new ResultData(ErrorCode.TJD_STOP_FEE_FAIL.getCode(), "停车费获取失败"); - } - } - - private ResultData cyfCarStopFee(@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 token = objParams.getString("token"); - String ret = cyf.getCarStopFee(token,park.getParkingId(),carNumber); - JSONObject retObj = JSON.parseObject(ret); - if (retObj.getIntValue("result") == 1){ - return new ResultData(retObj); - }else { - return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败"); - } - } - - 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; - } - - private ResultData bolinkCarStopFee(@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(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); + return parkFactory.getParkService(park.getVendorType()).carStopFee(paramMap, park); } } @@ -815,161 +254,14 @@ public class WxCarController extends BaseController { } if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { - 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 (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 { - ret = etcp.bCouponRecord(url, merchantNo, merchantKey, version, - etcpToken, park.getParkId(), businessId, carNumber, String.valueOf(userCar.getCouponFreeId())); - } 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()) { - - // 券状态设为已使用 - 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("券包状态更新失败:" + couponOrderIdStr); - return new ResultData(ErrorCode.DB_FAIL.getCode(), "券包状态更新失败"); - } - return new ResultData(); - } else { - return new ResultData(ErrorCode.ETCP_QUAN_SEND_FAIL.getCode(), retObj.getString("message")); - } - } else if (park.getVendorType().equals(EnumCarVendor.CAR_TJD.getCode())) { - 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为空"); - } - WxCoupon coupon = couponService.getById(userCar.getCouponId()); - if (coupon == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券为空"); - } - 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(), "停车费抵扣失败"); - } - } else if (park.getVendorType().equals(EnumCarVendor.CAR_SHANGAN.getCode())) { - WxCoupon coupon = couponService.getById(userCar.getCouponId()); - if (coupon == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券为空"); - } - 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()); - } 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)); - } - } else if (park.getVendorType().equals(EnumCarVendor.CAR_BOLINK.getCode())) { - String orderId = paramMap.get("orderId"); - if (StringUtils.isBlank(orderId)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId为空"); - } + return etcpHelper.getCoupon(paramMap, park, userCar,carNumber); + } else { WxCoupon coupon = couponService.getById(userCar.getCouponId()); if (coupon == null) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券为空"); } - 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); - } - } - return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "优免券领取失败"); + return parkFactory.getParkService(park.getVendorType()).getCoupon(paramMap, park, userCar, coupon, carNumber); + } } @ApiOperation("券包分页列表接口") @@ -1000,72 +292,10 @@ public class WxCarController extends BaseController { /// 1, get mall's park WxPark park = getCurrentPark(getTenantInfo()); if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) { - ResultData e = etcpParkStatus(park); + ResultData e = etcpHelper.etcpParkStatus(park); if (e != null) return e; } return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "车场不支持"); } - private 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/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java new file mode 100644 index 000000000..857e7e674 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkAdapterService.java @@ -0,0 +1,50 @@ +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; + +public interface ParkAdapterService { + + /** + * 停车场初始化登陆 + * @param paramMap + * @param park + * @param member + * @return + */ + ResultData initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member); + + /** + * 绑定车牌 + * @param paramMap + * @param park + * @param cuUserId + * @return + */ + ResultData bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member); + + /** + * 解绑车牌 + */ + ResultData unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member); + + /** + * 获取停车费 + */ + ResultData carStopFee(Map paramMap, WxPark park); + + /** + * 获取停车优免券 + */ + ResultData getCoupon(Map paramMap,WxPark park,WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber); + + /** + * 查询停车场状态 + */ + ResultData getParkStatus(WxPark park); +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java b/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java new file mode 100644 index 000000000..2754632b7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/ParkFactory.java @@ -0,0 +1,69 @@ +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.CYFParkService; +import com.iformall.service.park.impl.dahua.DaHuaParkService; +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; + + private Map parkServiceMap ; + private Map enumMap ; + + 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); + 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; + } + + public ParkAdapterService getParkService(Integer code) { + EnumCarVendor vendor = getEnumMap().get(code); + if (null == vendor) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), code+"没有对应的ParkService"); + } + return getServiceMap().get(vendor.getCode()); + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/BaseParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/BaseParkService.java new file mode 100644 index 000000000..7e3655c00 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/BaseParkService.java @@ -0,0 +1,33 @@ +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; + + protected ResultData defaultInitLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { + Map resultMap = new HashMap(); + resultMap.put("vendor", park.getVendorType()); + return new ResultData(resultMap); + } + + protected ResultData defaultBindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return parkHelper.bindCar(paramMap, park, member.getId()); + } + + protected ResultData defaultUnbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return parkHelper.unbindCar(paramMap, park, member.getId()); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java new file mode 100644 index 000000000..6f3fcf839 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/bolink/BoLinkParkService.java @@ -0,0 +1,108 @@ +package com.iformall.service.park.impl.bolink; + +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +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; +import com.iformall.utils.car.BoLinkUtil; + +public class BoLinkParkService extends BaseParkService implements ParkAdapterService { + + @Override + public ResultData initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultInitLogin(paramMap, park, member); + } + + @Override + public ResultData bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultBindCar(paramMap, park, member); + } + + @Override + public ResultData unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultUnbindCar(paramMap, park, 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 getCoupon(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; + } + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java new file mode 100644 index 000000000..d7d47d1e0 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/cyf/CYFParkService.java @@ -0,0 +1,114 @@ +package com.iformall.service.park.impl.cyf; + +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.WxCoupon; +import com.iformall.domain.po.WxPark; +import com.iformall.domain.vo.WxCouponOrderCarCVo; +import com.iformall.enums.EnumCarVendor; +import com.iformall.service.park.ParkAdapterService; +import com.iformall.service.park.impl.BaseParkService; +import com.iformall.service.park.impl.util.ParkHelper; +import com.iformall.utils.car.CYFUtil; + +@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 initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultInitLogin(paramMap, park, member); + } + + @Override + public ResultData bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return cyfBindCar(paramMap,park,member); + } + + + /** + * @description 车易付会员车辆信息注册 + * @Params [paramMap, park, wxCUser] + * @return com.iformall.common.ResultData + * @Author furunxin + * @Date 2020/7/8 下午10:23 + **/ + private ResultData cyfBindCar(@RequestBody Map paramMap, WxPark park,WxCUserBasicInfo member) { + 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 token = objParams.getString("token"); + int feeGroupId = objParams.getIntValue("feeGroupId"); + String ret = cyf.registerCar(token,park.getNumber(),feeGroupId,park.getParkingId(),carNumber,member.getId(),member.getNickName()); + JSONObject retObj = JSON.parseObject(ret); + if (retObj.getIntValue("result") == 1){ + parkHelper.addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()), park, member.getId()); + }else { + return new ResultData(ErrorCode.CAR_BIND_FAIL.getCode(), "绑车牌失败", retObj); + } + return new ResultData(); + } + + + @Override + public ResultData unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultUnbindCar(paramMap, park, member); + } + + + @Override + public ResultData carStopFee(Map paramMap, WxPark park) { + return cyfCarStopFee(paramMap, park); + } + + private ResultData cyfCarStopFee(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 token = objParams.getString("token"); + String ret = cyf.getCarStopFee(token,park.getParkingId(),carNumber); + JSONObject retObj = JSON.parseObject(ret); + if (retObj.getIntValue("result") == 1){ + return new ResultData(retObj); + }else { + return new ResultData(ErrorCode.CYF_STOP_FEE_FAIL.getCode(), "停车费获取失败"); + } + } + + @Override + public ResultData getCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) { + return null; + } + + @Override + public ResultData getParkStatus(WxPark park) { + return null; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java new file mode 100644 index 000000000..8cc149a20 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/dahua/DaHuaParkService.java @@ -0,0 +1,68 @@ +package com.iformall.service.park.impl.dahua; + +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +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; +import com.iformall.utils.car.DaHuaUtil; + +public class DaHuaParkService extends BaseParkService implements ParkAdapterService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public ResultData initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultInitLogin(paramMap, park, member); + } + + + @Override + public ResultData bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultBindCar(paramMap, park, member); + } + + @Override + public ResultData unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultUnbindCar(paramMap, park, 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 getCoupon(Map paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) { + return null; + } + + + @Override + public ResultData getParkStatus(WxPark park) { + return null; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/etcp/EtcpHelper.java b/mallinkService/src/main/java/com/iformall/service/park/impl/etcp/EtcpHelper.java new file mode 100644 index 000000000..8e9a069be --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/etcp/EtcpHelper.java @@ -0,0 +1,451 @@ +package com.iformall.service.park.impl.etcp; + +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; +import com.iformall.utils.car.ETCPUtil; + +@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); + 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); + // 删除ETCP不存在 + for (WxCUserCar userCar : uclist) { + boolean bExist = isExistInArray(arr, userCar.getCarNumber()); + if (!bExist) { + wxCUserCarService.deleteById(userCar.getId()); + uclist.remove(userCar); + } + } + // 添加ETCP的 + for (int i = 0; i < arr.size(); i++) { + String _carNum = arr.getString(i); + boolean bExist = isExistInList(uclist, _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); + 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 (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 { + ret = etcp.bCouponRecord(url, merchantNo, merchantKey, version, + etcpToken, park.getParkId(), businessId, carNumber, String.valueOf(userCar.getCouponFreeId())); + } 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()) { + + // 券状态设为已使用 + 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()); + return new ResultData(ErrorCode.DB_FAIL.getCode(), "券包状态更新失败"); + } + return new ResultData(); + } else { + return new ResultData(ErrorCode.ETCP_QUAN_SEND_FAIL.getCode(), retObj.getString("message")); + } + } + + 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/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java new file mode 100644 index 000000000..424ba140c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/shangan/ShangAnParkService.java @@ -0,0 +1,88 @@ +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 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; +import com.iformall.utils.car.ShangAnUtil; + +public class ShangAnParkService extends BaseParkService implements ParkAdapterService{ + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxCouponOrderService wxCouponOrderService; + + + @Override + public ResultData initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultInitLogin(paramMap, park, member); + } + + @Override + public ResultData bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultBindCar(paramMap, park, member); + } + + @Override + public ResultData unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultUnbindCar(paramMap, park, member); + } + + @Override + public ResultData carStopFee(Map paramMap, WxPark park) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ResultData getCoupon(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()); + } 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; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java new file mode 100644 index 000000000..072b231f6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/tjd/TJDParkService.java @@ -0,0 +1,246 @@ +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.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.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; +import com.iformall.utils.car.TJDUtil; + +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 initLogin(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return super.defaultInitLogin(paramMap, park, member); + } + + @Override + public ResultData bindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return tjdBindCar(paramMap,park,member.getId()); + } + + + private ResultData 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())) { + 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 ResultData unbindCar(Map paramMap, WxPark park, WxCUserBasicInfo member) { + return 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 getCoupon(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; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/park/impl/util/ParkHelper.java b/mallinkService/src/main/java/com/iformall/service/park/impl/util/ParkHelper.java new file mode 100644 index 000000000..e5541add7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/park/impl/util/ParkHelper.java @@ -0,0 +1,109 @@ +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 ResultData bindCar(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 { + addCarInfoToDB(carNumber, EnumCarVendor.getEnum(park.getVendorType()), park, cuUserId); + } catch (MallinkException e) { + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return new ResultData(500, e.getMessage()); + } + return new ResultData(); + } + + public void addCarInfoToDB(String carNumber, EnumCarVendor carVendor, WxPark park, Long cuUserId) { + // 插入车牌 + 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); + wxCUserCarService.saveOrUpdate(userCar); + + // 成长值 + wxScoreRulesService.addScore(userCar,EnumScoreType.BIND_CAR, userCar); + //增加积分 + addCredit(park, cuUserId); + wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_CAR,cuUserId); + } + + //-----增加积分start----- + public void addCredit(WxPark park, Long cuUserId){ + WxCreditHistory wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setCUserId(cuUserId); + wxCreditHistory.updateTenantInfo(park); + wxCreditHistory.setCreateDate(new Date()); + wxCreditHistory.setCreditType(EnumScoreType.BIND_CAR.getCode()); + wxCreditHistory.setOperatorType(EnumUserType.CUSER.getCode()); + wxCreditHistory.setOperatorId(cuUserId); + wxCreditHistoryService.saveOrUpdate(wxCreditHistory); + } + + 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(); + } +}