| @@ -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<String, String> 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<WxCUserCar> 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<WxCUserCar> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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; | |||
| } | |||
| } | |||
| @@ -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<String, String> paramMap, WxPark park, WxCUserBasicInfo member); | |||
| /** | |||
| * 绑定车牌 | |||
| * @param paramMap | |||
| * @param park | |||
| * @param cuUserId | |||
| * @return | |||
| */ | |||
| ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member); | |||
| /** | |||
| * 解绑车牌 | |||
| */ | |||
| ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member); | |||
| /** | |||
| * 获取停车费 | |||
| */ | |||
| ResultData carStopFee(Map<String, String> paramMap, WxPark park); | |||
| /** | |||
| * 获取停车优免券 | |||
| */ | |||
| ResultData getCoupon(Map<String, String> paramMap,WxPark park,WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber); | |||
| /** | |||
| * 查询停车场状态 | |||
| */ | |||
| ResultData getParkStatus(WxPark park); | |||
| } | |||
| @@ -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<Integer,ParkAdapterService> parkServiceMap ; | |||
| private Map<Integer,EnumCarVendor> enumMap ; | |||
| private Map<Integer,ParkAdapterService> getServiceMap() { | |||
| if (null != parkServiceMap ) { | |||
| return parkServiceMap; | |||
| } | |||
| parkServiceMap = new ConcurrentHashMap<Integer,ParkAdapterService>(); | |||
| //车易付 | |||
| 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<Integer,EnumCarVendor> getEnumMap() { | |||
| if (null != enumMap) { | |||
| return enumMap; | |||
| } | |||
| enumMap = new ConcurrentHashMap<Integer,EnumCarVendor>(); | |||
| 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()); | |||
| } | |||
| } | |||
| @@ -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<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| Map resultMap = new HashMap(); | |||
| resultMap.put("vendor", park.getVendorType()); | |||
| return new ResultData(resultMap); | |||
| } | |||
| protected ResultData defaultBindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return parkHelper.bindCar(paramMap, park, member.getId()); | |||
| } | |||
| protected ResultData defaultUnbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return parkHelper.unbindCar(paramMap, park, member.getId()); | |||
| } | |||
| } | |||
| @@ -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<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultInitLogin(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultBindCar(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultUnbindCar(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData carStopFee(Map<String, String> paramMap, WxPark park) { | |||
| return bolinkCarStopFee(paramMap, park); | |||
| } | |||
| private ResultData bolinkCarStopFee(Map<String, String> 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<String, String> 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; | |||
| } | |||
| } | |||
| @@ -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<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultInitLogin(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData bindCar(Map<String, String> 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<String, String> 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<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultUnbindCar(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData carStopFee(Map<String, String> paramMap, WxPark park) { | |||
| return cyfCarStopFee(paramMap, park); | |||
| } | |||
| private ResultData cyfCarStopFee(Map<String, String> 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<String, String> paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) { | |||
| return null; | |||
| } | |||
| @Override | |||
| public ResultData getParkStatus(WxPark park) { | |||
| return null; | |||
| } | |||
| } | |||
| @@ -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<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultInitLogin(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultBindCar(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultUnbindCar(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData carStopFee(Map<String, String> paramMap, WxPark park) { | |||
| return dahuaCarStopFee(paramMap, park); | |||
| } | |||
| private ResultData dahuaCarStopFee(Map<String, String> 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<String, String> paramMap, WxPark park, WxCouponOrderCarCVo userCar,WxCoupon coupon,String carNumber) { | |||
| return null; | |||
| } | |||
| @Override | |||
| public ResultData getParkStatus(WxPark park) { | |||
| return null; | |||
| } | |||
| } | |||
| @@ -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<String, String> 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<WxCUserCar> 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<WxCUserCar> list, String carNumber) { | |||
| boolean bExist = false; | |||
| for (WxCUserCar userCar : list) { | |||
| if (carNumber.equals(userCar.getCarNumber())) { | |||
| bExist = true; | |||
| break; | |||
| } | |||
| } | |||
| return bExist; | |||
| } | |||
| public ResultData etcpBindCar(Map<String, String> 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<String, String> 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<String, String> 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<String, String> 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; | |||
| } | |||
| } | |||
| @@ -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<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultInitLogin(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultBindCar(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData unbindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultUnbindCar(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData carStopFee(Map<String, String> paramMap, WxPark park) { | |||
| // TODO Auto-generated method stub | |||
| return null; | |||
| } | |||
| @Override | |||
| public ResultData getCoupon(Map<String, String> 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; | |||
| } | |||
| } | |||
| @@ -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<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return super.defaultInitLogin(paramMap, park, member); | |||
| } | |||
| @Override | |||
| public ResultData bindCar(Map<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return tjdBindCar(paramMap,park,member.getId()); | |||
| } | |||
| private ResultData tjdBindCar(Map<String, String> 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<String, String> paramMap, WxPark park, WxCUserBasicInfo member) { | |||
| return tjdUnbindCar(paramMap,park,member.getId()); | |||
| } | |||
| private ResultData tjdUnbindCar(Map<String, String> 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<String, String> paramMap, WxPark park) { | |||
| return tjdCarStopFee(paramMap, park); | |||
| } | |||
| private ResultData tjdCarStopFee(@RequestBody Map<String, String> 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<String, String> 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; | |||
| } | |||
| } | |||
| @@ -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<String, String> 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<String, String> 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(); | |||
| } | |||
| } | |||