| @@ -15,6 +15,9 @@ import com.iformall.domain.vo.WxMerchantVo; | |||||
| import com.iformall.enums.*; | import com.iformall.enums.*; | ||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| import com.iformall.service.*; | 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 com.iformall.utils.car.*; | ||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | import io.swagger.annotations.ApiImplicitParam; | ||||
| @@ -37,12 +40,6 @@ import java.util.Map; | |||||
| public class WxCarController extends BaseController { | public class WxCarController extends BaseController { | ||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | private final Logger logger = LoggerFactory.getLogger(this.getClass()); | ||||
| ETCPUtil etcp = new ETCPUtil(); | |||||
| TJDUtil tjd = new TJDUtil(); | |||||
| CYFUtil cyf = new CYFUtil(); | |||||
| @Autowired | @Autowired | ||||
| WxParkService wxParkService; | WxParkService wxParkService; | ||||
| @@ -72,15 +69,20 @@ public class WxCarController extends BaseController { | |||||
| @Autowired | @Autowired | ||||
| WxCUserBasicInfoService wxCUserBasicInfoService; | WxCUserBasicInfoService wxCUserBasicInfoService; | ||||
| @Autowired | |||||
| ParkFactory parkFactory; | |||||
| @Autowired | |||||
| ParkHelper parkHelper; | |||||
| @Autowired | |||||
| EtcpHelper etcpHelper; | |||||
| private WxPark getCurrentPark(TenantEntity tenantEntity) { | private WxPark getCurrentPark(TenantEntity tenantEntity) { | ||||
| WxPark parkQ = new WxPark(); | WxPark parkQ = new WxPark(); | ||||
| //parkQ.updateTenantInfo(tenantEntity); | |||||
| parkQ.setTenantId("789"); | |||||
| parkQ.setParentTenantId("788"); | |||||
| parkQ.updateTenantInfo(tenantEntity); | |||||
| WxPark wxPark = wxParkService.getByObj(parkQ); | WxPark wxPark = wxParkService.getByObj(parkQ); | ||||
| // 1, get mall's park | |||||
| // future use redis to optimize | |||||
| return wxPark; | return wxPark; | ||||
| } | } | ||||
| @@ -107,146 +109,11 @@ public class WxCarController extends BaseController { | |||||
| WxPark park = getCurrentPark(getTenantInfo()); | WxPark park = getCurrentPark(getTenantInfo()); | ||||
| // 2. get vendor params | // 2. get vendor params | ||||
| if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { | 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()); | WxPark park = getCurrentPark(getTenantInfo()); | ||||
| // 2. get vendor params | // 2. get vendor params | ||||
| if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) { | 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 { | } 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 | // 1, get mall's park | ||||
| WxPark park = getCurrentPark(getTenantInfo()); | WxPark park = getCurrentPark(getTenantInfo()); | ||||
| if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { | if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { | ||||
| return etcpUnbindCar(paramMap, park, getMemberId()); | |||||
| return etcpHelper.etcpUnbindCar(paramMap, park, getMemberId()); | |||||
| } else { | } 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 | // 1, get mall's park | ||||
| WxPark park = getCurrentPark(getTenantInfo()); | WxPark park = getCurrentPark(getTenantInfo()); | ||||
| if (park.getVendorType().equals(EnumCarVendor.CAR_ETCP.getCode())) { | 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 { | } 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())) { | 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()); | WxCoupon coupon = couponService.getById(userCar.getCouponId()); | ||||
| if (coupon == null) { | if (coupon == null) { | ||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "券为空"); | 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("券包分页列表接口") | @ApiOperation("券包分页列表接口") | ||||
| @@ -1000,72 +292,10 @@ public class WxCarController extends BaseController { | |||||
| /// 1, get mall's park | /// 1, get mall's park | ||||
| WxPark park = getCurrentPark(getTenantInfo()); | WxPark park = getCurrentPark(getTenantInfo()); | ||||
| if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) { | if (park.getVendorType() == EnumCarVendor.CAR_ETCP.getCode()) { | ||||
| ResultData e = etcpParkStatus(park); | |||||
| ResultData e = etcpHelper.etcpParkStatus(park); | |||||
| if (e != null) return e; | if (e != null) return e; | ||||
| } | } | ||||
| return new ResultData(ErrorCode.CAR_VENDOR_NOT_SUPPORT.getCode(), "车场不支持"); | 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(); | |||||
| } | |||||
| } | |||||