Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile
| | |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-seata</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | package com.ruoyi.account.api.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.account.api.model.TAppUserCar; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | |
| | | @ApiModelProperty("最低会员价格") |
| | | private BigDecimal minPrice; |
| | | @ApiModelProperty("vip结束时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private LocalDateTime vipExpireTime; |
| | | @ApiModelProperty("当天是否签到") |
| | | private Integer isSign; |
| | |
| | | public class UserListQueryDto extends BasePage { |
| | | @ApiModelProperty(value = "用户手机号") |
| | | String userPhone; |
| | | @ApiModelProperty(value = "所在省code") |
| | | String provinceCode; |
| | | @ApiModelProperty(value = "所在地code") |
| | | String cityCode; |
| | | @ApiModelProperty(value = "状态 1正常2冻结 3注销") |
| | |
| | | import com.ruoyi.account.api.model.TAppUserAddress; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.dto.PointChangeDto; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R<TAppUser> getUserById(Long id) { |
| | | throw new RuntimeException("根据id查询用户失败:"+throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("根据id查询用户失败:"+throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | import com.ruoyi.account.api.model.TAppUserVipDetail; |
| | | import com.ruoyi.account.api.vo.GetAppUserVipDetail; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R<TAppUserVipDetail> getAppUserVipDetail(GetAppUserVipDetail getAppUserVipDetail) { |
| | | throw new RuntimeException("获取用户当前有效的VIP明细调用失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("获取用户当前有效的VIP明细调用失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public void updateAppUserVipDetail(TAppUserVipDetail appUserVipDetail) { |
| | | throw new RuntimeException(throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | R.fail(throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.web.domain.BasePojo; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | |
| | | private Integer vipId; |
| | | |
| | | @ApiModelProperty(value = "会员到期时间") |
| | | |
| | | @TableField("vip_end_time") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime vipEndTime; |
| | | |
| | | @ApiModelProperty(value = "单位id") |
| | |
| | | @ApiModelProperty(value = "标签名称") |
| | | @TableField(exist = false) |
| | | private String tagName; |
| | | |
| | | @ApiModelProperty(value = "单位名称") |
| | | @TableField(exist = false) |
| | | private String companyName; |
| | | @ApiModelProperty(value = "vip名称") |
| | | @TableField(exist = false) |
| | | private String vipName; |
| | |
| | | @ApiModelProperty("剩余天数") |
| | | @TableField(exist = false) |
| | | private Long lastDays; |
| | | @ApiModelProperty(value = "单位名称") |
| | | @TableField(exist = false) |
| | | private String companyName; |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | @TableField("vip_id") |
| | | private Integer vipId; |
| | | |
| | | @ApiModelProperty(value = "1月卡2季卡3年卡") |
| | | @TableField("vip_type") |
| | | private Integer vipType; |
| | | |
| | | @ApiModelProperty(value = "会员开始时间") |
| | | @TableField("start_time") |
| | | @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
| | |
| | | @TableField("send_month") |
| | | private Integer sendMonth; |
| | | |
| | | |
| | | @ApiModelProperty(value = "当时购买的vipJson") |
| | | @TableField("vip_json") |
| | | private String vipJson; |
| | | @ApiModelProperty(value = "要赠送的优惠卷") |
| | | @TableField("coupon_ids") |
| | | private String couponIds; |
| | |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-seata</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; |
| | | import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(Integer id) { |
| | | throw new RuntimeException("根据计费策略主表id策略明细失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("根据计费策略主表id策略明细失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyClient; |
| | | import com.ruoyi.chargingPile.api.model.TAccountingStrategy; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R<TAccountingStrategy> getAccountingStrategyById(Integer id) { |
| | | throw new RuntimeException("根据id查询计费策略失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("根据id查询计费策略失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | |
| | | import com.ruoyi.chargingPile.api.model.TFaultMessage; |
| | | import com.ruoyi.chargingPile.api.vo.SiteNameVO; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R<TChargingGun> getChargingGunById(Integer id) { |
| | | throw new RuntimeException("根据id获取充电枪失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("根据id获取充电枪失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | public class GunStatusStatisticsVO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "充电桩类型统计 key:充电模式(1=超级快充,2=快充,3=慢充)") |
| | | private Map<Integer,Integer> modeStatistics; |
| | | private List<Map<Integer,Integer>> modeStatistics; |
| | | @ApiModelProperty(value = "状态统计 key:充电模式(1=离线,2=故障,3=充电中)") |
| | | private Map<Integer,Integer> statusStatistics; |
| | | @ApiModelProperty(value = "状态统计根据类型分组") |
| | |
| | | public class SiteInfoVO { |
| | | @ApiModelProperty(value = "电站名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "桩id") |
| | | private Integer chargingPileId; |
| | | @ApiModelProperty(value = "桩编号") |
| | | private String number; |
| | | @ApiModelProperty(value = "充电枪id") |
| | |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-seata</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | import com.ruoyi.integration.api.model.ChargingHandshake; |
| | | import com.ruoyi.integration.api.model.PlatformStartCharging; |
| | | import com.ruoyi.integration.api.model.PlatformStopCharging; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public String platformStartCharging(PlatformStartCharging platformStartCharging) { |
| | | throw new RuntimeException("远程启机失败" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return "远程启机失败"; |
| | | } |
| | | |
| | | @Override |
| | | public String platformStopCharging(PlatformStopCharging platformStopCharging) { |
| | | throw new RuntimeException("远程停机失败" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return "远程停机失败"; |
| | | } |
| | | }; |
| | | } |
| | |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-other</artifactId> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-seata</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | @TableName("t_accounting_strategy_order") |
| | | public class AccountingStrategyOrder extends BasePojo { |
| | | |
| | | @ApiModelProperty(value = "主键") |
| | | @TableField(value = "id") |
| | | private Integer id; |
| | | |
| | | @ApiModelProperty(value = "站点id") |
| | | @TableField("site_id") |
| | | private Integer siteId; |
| | |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-account</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-seata</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | import com.ruoyi.other.api.domain.TGoods; |
| | | import com.ruoyi.other.api.feignClient.CouponClient; |
| | | import com.ruoyi.other.api.feignClient.GoodsClient; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R updateCoupon(TCoupon coupon) { |
| | | throw new RuntimeException("修改优惠券失败"); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("修改优惠券失败"); |
| | | } |
| | | }; |
| | | } |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.other.api.domain.TGoods; |
| | | import com.ruoyi.other.api.feignClient.GoodsClient; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R updateGoods(TGoods goods) { |
| | | throw new RuntimeException("修改商品异常"); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("修改商品异常"); |
| | | } |
| | | }; |
| | | } |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.other.api.domain.TInvoiceType; |
| | | import com.ruoyi.other.api.feignClient.InvoiceTypeClient; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R<TInvoiceType> getInvoiceType(Integer id) { |
| | | throw new RuntimeException(throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail(throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.other.api.domain.TCompany; |
| | | import com.ruoyi.other.api.domain.TCoupon; |
| | | import com.ruoyi.other.api.domain.TEnterpriseUserApplication; |
| | | import com.ruoyi.other.api.domain.TUserTag; |
| | | import com.ruoyi.other.api.dto.TagListQueryDto; |
| | | import com.ruoyi.other.api.dto.UnitListQueryDto; |
| | |
| | | public R<TCoupon> getCouponById(Integer id) { |
| | | return R.fail("查询优惠卷:"+throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TEnterpriseUserApplication>> getTnterPrise() { |
| | | return R.fail("查询:"+throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.other.api.domain.TUserSite; |
| | | import com.ruoyi.other.api.feignClient.UserSiteClient; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R addUserSite(List<TUserSite> userSite) { |
| | | throw new RuntimeException("添加用户站点失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("添加用户站点失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R delUserSite(Long userId) { |
| | | throw new RuntimeException("删除用户站点失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("删除用户站点失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.other.api.domain.TCompany; |
| | | import com.ruoyi.other.api.domain.TCoupon; |
| | | import com.ruoyi.other.api.domain.TInvoiceType; |
| | | import com.ruoyi.other.api.domain.TUserTag; |
| | | import com.ruoyi.other.api.domain.*; |
| | | import com.ruoyi.other.api.dto.TagListQueryDto; |
| | | import com.ruoyi.other.api.dto.UnitListQueryDto; |
| | | import com.ruoyi.other.api.factory.OtherFallbackFactory; |
| | | import com.ruoyi.other.api.vo.CouponListVOVO; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | |
| | | @PostMapping(value = "/t-coupon/getCouponById") |
| | | R<TCoupon> getCouponById(@RequestParam("id") Integer id); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @PutMapping(value = "/t-enterprise-user-application/export") |
| | | R<List<TEnterpriseUserApplication>> getTnterPrise(); |
| | | } |
| | |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-seata</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | import com.ruoyi.payment.api.vo.AliPaymentReq; |
| | | import com.ruoyi.payment.api.vo.AliPaymentResp; |
| | | import com.ruoyi.payment.api.vo.AliQueryOrder; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R<AliPaymentResp> payment(AliPaymentReq req) { |
| | | throw new RuntimeException("调起支付宝小程序支付失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("调起支付宝小程序支付失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<AliQueryOrder> query(String outTradeNo) { |
| | | throw new RuntimeException("查询支付订单失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("查询支付订单失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public void close(String outTradeNo) { |
| | | throw new RuntimeException("关闭支付订单失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | R.fail("关闭支付订单失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<RefundResp> refund(RefundReq dto) { |
| | | throw new RuntimeException("支付宝退款失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("支付宝退款失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | |
| | | import com.ruoyi.payment.api.vo.NotifyV3PayDecodeRespBody; |
| | | import com.ruoyi.payment.api.vo.PaymentOrder; |
| | | import com.ruoyi.payment.api.vo.WxRefundNotifyResp; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | |
| | | |
| | | @Override |
| | | public R<NotifyV3PayDecodeRespBody> queryOrderInfo(String orderId) { |
| | | throw new RuntimeException("查询支付订单信息失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("查询支付订单信息失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Map<String, Object>> orderPay(PaymentOrder paymentOrder) { |
| | | throw new RuntimeException("调起微信支付失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("调起微信支付失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public void close(String outTradeNo) { |
| | | throw new RuntimeException("关闭支付订单失败:" + throwable.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | R.fail("关闭支付订单失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<String> refundOrderR(WxPaymentRefundModel model) { |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("微信退款失败:" + throwable.getMessage()); |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-seata</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | private String avatar; |
| | | |
| | | /** 密码 */ |
| | | @NotBlank(message = "密码不能为空") |
| | | private String password; |
| | | |
| | | /** 帐号状态(0正常 1停用) */ |
| | |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import com.ruoyi.system.api.model.*; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | |
| | | @Override |
| | | public R<Boolean> updateSysUser(SysUser sysUser) { |
| | | throw new RuntimeException("更新用户失败:" + cause.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("更新用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public R addSysUser(SysUser user) { |
| | | throw new RuntimeException("添加用户失败:" + cause.getMessage()); |
| | | return R.fail("添加用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R resetPassword(SysUser user) { |
| | | throw new RuntimeException("重置用户密码失败:" + cause.getMessage()); |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return R.fail("重置用户密码失败:" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | |
| | | server: |
| | | port: 9100 |
| | | tomcat: |
| | | basedir: /data/tomcat |
| | | # Spring |
| | | spring: |
| | | profiles: |
| | |
| | | name: ruoyi-auth |
| | | main: |
| | | allow-bean-definition-overriding: true |
| | | allow-circular-references: true |
| | | --- |
| | | spring: |
| | | config: |
| | |
| | | # 共享配置 |
| | | shared-configs: |
| | | - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} |
| | | |
| | | --- |
| | | |
| | | seata: |
| | | enabled: true |
| | | application-id: ${spring.application.name} |
| | |
| | | config: |
| | | type: nacos |
| | | nacos: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | data-id: seata-server.properties |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # data-id: seata-server.properties |
| | | # username: nacos |
| | | # password: nacos |
| | | registry: |
| | | type: nacos |
| | | nacos: |
| | | application: seata-server |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # username: nacos |
| | | # password: nacos |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 # nacos注册中心地址 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 |
| | | group: DEFAULT_GROUP |
| | | application: seata-server #Nacos 中 Seata 名称 |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # application: seata-server #Nacos 中 Seata 名称 |
| | | # username: nacos |
| | | # password: nacos |
| | | sentinel: |
| | | transport: |
| | | dashboard: 127.0.0.1:8080 # Sentinel控制台地址 |
| | | eager: true |
| | | |
| | | |
| | | --- |
| | | spring: |
| | | config: |
| | |
| | | nacos: |
| | | discovery: |
| | | # 服务注册地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | service: ${spring.application.name} |
| | | group: DEFAULT_GROUP |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | config: |
| | | # 配置中心地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | group: DEFAULT_GROUP |
| | | name: ${spring.application.name} |
| | | # 配置文件格式 |
| | |
| | | * @author ruoyi |
| | | */ |
| | | @RestControllerAdvice |
| | | public class GlobalExceptionHandler |
| | | { |
| | | public class GlobalExceptionHandler { |
| | | private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); |
| | | |
| | | @Value("${spring.servlet.multipart.max-file-size:4MB}") |
| | | @Value("${spring.servlet.multipart.max-file-size:50MB}") |
| | | private String maxFileSize; |
| | | @Value("${spring.servlet.multipart.max-request-size:100MB}") |
| | | private String maxRequestSize; |
| | |
| | | * 权限码异常 |
| | | */ |
| | | @ExceptionHandler(NotPermissionException.class) |
| | | public AjaxResult handleNotPermissionException(NotPermissionException e, HttpServletRequest request) |
| | | { |
| | | public AjaxResult handleNotPermissionException(NotPermissionException e, HttpServletRequest request) { |
| | | String requestURI = request.getRequestURI(); |
| | | log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage()); |
| | | return AjaxResult.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权"); |
| | |
| | | * 角色权限异常 |
| | | */ |
| | | @ExceptionHandler(NotRoleException.class) |
| | | public AjaxResult handleNotRoleException(NotRoleException e, HttpServletRequest request) |
| | | { |
| | | public AjaxResult handleNotRoleException(NotRoleException e, HttpServletRequest request) { |
| | | String requestURI = request.getRequestURI(); |
| | | log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage()); |
| | | return AjaxResult.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权"); |
| | |
| | | */ |
| | | @ExceptionHandler(HttpRequestMethodNotSupportedException.class) |
| | | public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, |
| | | HttpServletRequest request) |
| | | { |
| | | HttpServletRequest request) { |
| | | String requestURI = request.getRequestURI(); |
| | | log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); |
| | | return AjaxResult.error(e.getMessage()); |
| | |
| | | * 业务异常 |
| | | */ |
| | | @ExceptionHandler(ServiceException.class) |
| | | public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) |
| | | { |
| | | public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) { |
| | | log.error(e.getMessage(), e); |
| | | Integer code = e.getCode(); |
| | | return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage()); |
| | |
| | | * 拦截未知的运行时异常 |
| | | */ |
| | | @ExceptionHandler(RuntimeException.class) |
| | | public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) |
| | | { |
| | | public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) { |
| | | String requestURI = request.getRequestURI(); |
| | | log.error("请求地址'{}',发生未知异常.", requestURI, e); |
| | | return AjaxResult.error(e.getMessage()); |
| | | throw new RuntimeException(e.getMessage()); |
| | | } |
| | | |
| | | /** |
| | | * 系统异常 |
| | | */ |
| | | @ExceptionHandler(Exception.class) |
| | | public AjaxResult handleException(Exception e, HttpServletRequest request) |
| | | { |
| | | public AjaxResult handleException(Exception e, HttpServletRequest request) { |
| | | String requestURI = request.getRequestURI(); |
| | | log.error("请求地址'{}',发生系统异常.", requestURI, e); |
| | | return AjaxResult.error(e.getMessage()); |
| | |
| | | * 自定义验证异常 |
| | | */ |
| | | @ExceptionHandler(BindException.class) |
| | | public AjaxResult handleBindException(BindException e) |
| | | { |
| | | public AjaxResult handleBindException(BindException e) { |
| | | log.error(e.getMessage(), e); |
| | | String message = e.getAllErrors().get(0).getDefaultMessage(); |
| | | return AjaxResult.error(message); |
| | |
| | | * 自定义验证异常 |
| | | */ |
| | | @ExceptionHandler(MethodArgumentNotValidException.class) |
| | | public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) |
| | | { |
| | | public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { |
| | | log.error(e.getMessage(), e); |
| | | String message = e.getBindingResult().getFieldError().getDefaultMessage(); |
| | | return AjaxResult.error(message); |
| | |
| | | * 内部认证异常 |
| | | */ |
| | | @ExceptionHandler(InnerAuthException.class) |
| | | public AjaxResult handleInnerAuthException(InnerAuthException e) |
| | | { |
| | | public AjaxResult handleInnerAuthException(InnerAuthException e) { |
| | | return AjaxResult.error(e.getMessage()); |
| | | } |
| | | |
| | |
| | | * 演示模式异常 |
| | | */ |
| | | @ExceptionHandler(DemoModeException.class) |
| | | public AjaxResult handleDemoModeException(DemoModeException e) |
| | | { |
| | | public AjaxResult handleDemoModeException(DemoModeException e) { |
| | | return AjaxResult.error("演示模式,不允许操作"); |
| | | } |
| | | |
| | |
| | | <groupId>mysql</groupId> |
| | | <artifactId>mysql-connector-java</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-account</artifactId> |
| | | <version>3.6.2</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-system</artifactId> |
| | | <version>3.6.2</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
New file |
| | |
| | | package com.ruoyi.gateway.config.properties; |
| | | |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.cloud.context.config.annotation.RefreshScope; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * @author ruoyi |
| | | */ |
| | | @Configuration |
| | | @RefreshScope |
| | | @ConfigurationProperties(prefix = "security.anti-shake") |
| | | public class AntiShakeProperties { |
| | | |
| | | private Boolean enable; |
| | | |
| | | private Long interval; |
| | | |
| | | public Boolean getEnable() { |
| | | return enable; |
| | | } |
| | | |
| | | public void setEnable(Boolean enable) { |
| | | this.enable = enable; |
| | | } |
| | | |
| | | public Long getInterval() { |
| | | return interval; |
| | | } |
| | | |
| | | public void setInterval(Long interval) { |
| | | this.interval = interval; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.gateway.config.properties; |
| | | |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.cloud.context.config.annotation.RefreshScope; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author ruoyi |
| | | */ |
| | | @Configuration |
| | | @RefreshScope |
| | | @ConfigurationProperties(prefix = "security.sign") |
| | | public class SignProperties { |
| | | |
| | | private Boolean enable; |
| | | |
| | | public Boolean getEnable() { |
| | | return enable; |
| | | } |
| | | |
| | | public void setEnable(Boolean enable) { |
| | | this.enable = enable; |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.gateway.filter; |
| | | |
| | | import com.ruoyi.gateway.config.properties.AntiShakeProperties; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | // 排除过滤的 uri 地址,nacos自行添加 |
| | | @Autowired |
| | | private IgnoreWhiteProperties ignoreWhite; |
| | | @Autowired |
| | | private AntiShakeProperties antiShakeProperties; |
| | | |
| | | @Autowired |
| | | private RedisService redisService; |
| | | |
| | | |
| | | |
| | | |
| | |
| | | try { |
| | | antiShake(request); |
| | | }catch (Exception e){ |
| | | log.error("[重复提交]请求路径:{}", exchange.getRequest().getPath()); |
| | | log.error(e.getMessage()); |
| | | return ServletUtils.webFluxResponseWriter(exchange.getResponse(), e.getMessage(), HttpStatus.SUCCESS); |
| | | } |
| | | |
| | |
| | | */ |
| | | public void antiShake(ServerHttpRequest request) throws Exception{ |
| | | HttpMethod method = request.getMethod(); |
| | | if(HttpMethod.OPTIONS == method){ |
| | | if(HttpMethod.OPTIONS == method || !antiShakeProperties.getEnable()){ |
| | | return; |
| | | } |
| | | HttpHeaders headers = request.getHeaders(); |
| | |
| | | Long old_timestamp = Long.valueOf(o.toString()); |
| | | Long new_timestamp = Long.valueOf(timestamp); |
| | | //两个请求时间差小于1秒,判定为重复提交 |
| | | if((new_timestamp - old_timestamp) <= 500){ |
| | | throw new RuntimeException("重复提交"); |
| | | if((new_timestamp - old_timestamp) <= antiShakeProperties.getInterval()){ |
| | | throw new RuntimeException(url + "----->重复提交"); |
| | | }else{ |
| | | cacheMap.put(url, timestamp); |
| | | } |
| | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.ruoyi.common.core.constant.CacheConstants; |
| | | import com.ruoyi.common.core.constant.HttpStatus; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.constant.TokenConstants; |
| | | import com.ruoyi.common.core.utils.JwtUtils; |
| | | import com.ruoyi.common.core.utils.ServletUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.gateway.config.properties.IgnoreWhiteProperties; |
| | | import io.jsonwebtoken.Claims; |
| | | import com.ruoyi.gateway.config.properties.SignProperties; |
| | | import org.apache.commons.codec.binary.Base64; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.cloud.gateway.filter.GatewayFilterChain; |
| | | import org.springframework.cloud.gateway.filter.GlobalFilter; |
| | | import org.springframework.core.Ordered; |
| | | import org.springframework.core.io.buffer.DataBuffer; |
| | | import org.springframework.core.io.buffer.DataBufferUtils; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpMethod; |
| | | import org.springframework.http.server.reactive.ServerHttpRequest; |
| | | import org.springframework.http.server.reactive.ServerHttpRequestDecorator; |
| | |
| | | import java.util.Collections; |
| | | import java.util.Comparator; |
| | | import java.util.List; |
| | | import java.util.concurrent.atomic.AtomicReference; |
| | | |
| | | /** |
| | | * 网关鉴权 |
| | |
| | | public class SignFilter implements GlobalFilter, Ordered { |
| | | private static final Logger log = LoggerFactory.getLogger(SignFilter.class); |
| | | |
| | | @Value("${security.sign}") |
| | | private boolean parameter_signature; |
| | | |
| | | @Autowired |
| | | private IgnoreWhiteProperties ignoreWhite; |
| | | |
| | | @Autowired |
| | | private SignProperties signProperties; |
| | | |
| | | |
| | | @Override |
| | |
| | | } |
| | | String sign = request.getHeaders().getFirst(TokenConstants.SIGN); |
| | | String nonce_str = request.getHeaders().getFirst(TokenConstants.NONCE_STR); |
| | | if (parameter_signature && StringUtils.isEmpty(sign)) { |
| | | if (signProperties.getEnable() && StringUtils.isEmpty(sign)) { |
| | | return unauthorizedResponse(exchange, "签名不能为空!"); |
| | | } |
| | | if (parameter_signature && StringUtils.isEmpty(nonce_str)) { |
| | | if (signProperties.getEnable() && StringUtils.isEmpty(nonce_str)) { |
| | | return unauthorizedResponse(exchange, "签名不能为空!"); |
| | | } |
| | | if(parameter_signature){ |
| | | if(signProperties.getEnable()){ |
| | | return authSign(exchange, chain, sign, nonce_str); |
| | | } |
| | | return chain.filter(exchange.mutate().request(mutate.build()).build()); |
| | |
| | | server: |
| | | port: 9000 |
| | | tomcat: |
| | | basedir: /data/tomcat |
| | | max-swallow-size: 100MB |
| | | # Spring |
| | | spring: |
| | | application: |
| | |
| | | server-addr: 192.168.110.169:8848 |
| | | dataId: sentinel-ruoyi-gateway |
| | | groupId: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | data-type: json |
| | | rule-type: gw-flow |
| | | --- |
| | |
| | | nacos: |
| | | discovery: |
| | | # 服务注册地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | service: ${spring.application.name} |
| | | group: DEFAULT_GROUP |
| | | namespace: c2f47d1c-6355-4a68-b357-7523d73b2d13 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | config: |
| | | # 配置中心地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | namespace: c2f47d1c-6355-4a68-b357-7523d73b2d13 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | group: DEFAULT_GROUP |
| | | name: ${spring.application.name} |
| | | # 配置文件格式 |
| | |
| | | eager: true |
| | | transport: |
| | | # 控制台地址 |
| | | dashboard: 122.9.150.46:8718 |
| | | dashboard: 192.168.0.137:8718 |
| | | # nacos配置持久化 |
| | | datasource: |
| | | ds1: |
| | | nacos: |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | dataId: sentinel-ruoyi-gateway |
| | | groupId: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | data-type: json |
| | | rule-type: gw-flow |
| | | --- |
| | |
| | | import com.ruoyi.common.security.annotation.EnableCustomConfig; |
| | | import com.ruoyi.common.security.annotation.EnableRyFeignClients; |
| | | import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; |
| | | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; |
| | | import org.springframework.transaction.annotation.EnableTransactionManagement; |
| | | |
| | | /** |
| | |
| | | @EnableTransactionManagement |
| | | public class RuoYiSystemApplication |
| | | { |
| | | public static void main(String[] args) |
| | | { |
| | | public static void main(String[] args) { |
| | | SpringApplication.run(RuoYiSystemApplication.class, args); |
| | | System.out.println("(♥◠‿◠)ノ゙ 系统模块启动成功 ლ(´ڡ`ლ)゙ \n" + |
| | | " .-------. ____ __ \n" + |
| | |
| | | import com.ruoyi.system.query.GetSysUserList; |
| | | import com.ruoyi.system.query.ShopUserStart; |
| | | import com.ruoyi.system.service.*; |
| | | import io.seata.core.context.RootContext; |
| | | import io.seata.spring.annotation.GlobalTransactional; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | |
| | | @PostMapping("/addSysUser") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R addSysUser(@RequestBody SysUser user){ |
| | | System.err.println("事务ID:" + RootContext.getXID()); |
| | | if(StringUtils.isEmpty(user.getUserName())){ |
| | | user.setUserName(user.getPhonenumber()); |
| | | } |
| | |
| | | import org.apache.logging.log4j.core.config.Order; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpStatus; |
| | |
| | | server: |
| | | port: 9800 |
| | | tomcat: |
| | | basedir: /data/tomcat |
| | | # Spring |
| | | spring: |
| | | application: |
| | |
| | | # 共享配置 |
| | | shared-configs: |
| | | - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} |
| | | |
| | | |
| | | --- |
| | | |
| | | seata: |
| | | enabled: true |
| | | application-id: ${spring.application.name} |
| | | tx-service-group: seata_tx_group #此处配置自定义的seata事务分组名称 |
| | | enable-auto-data-source-proxy: false #关闭数据库代理 |
| | | enable-auto-data-source-proxy: false |
| | | service: |
| | | vgroup-mapping: |
| | | seata_tx_group: default |
| | |
| | | config: |
| | | type: nacos |
| | | nacos: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | data-id: seata-server.properties |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # data-id: seata-server.properties |
| | | # username: nacos |
| | | # password: nacos |
| | | registry: |
| | | type: nacos |
| | | nacos: |
| | | application: seata-server |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # username: nacos |
| | | # password: nacos |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 # nacos注册中心地址 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 |
| | | group: DEFAULT_GROUP |
| | | application: seata-server #Nacos 中 Seata 名称 |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # application: seata-server #Nacos 中 Seata 名称 |
| | | # username: nacos |
| | | # password: nacos |
| | | sentinel: |
| | | transport: |
| | | dashboard: 127.0.0.1:8080 # Sentinel控制台地址 |
| | | eager: true |
| | | |
| | | |
| | | --- |
| | | spring: |
| | | config: |
| | |
| | | nacos: |
| | | discovery: |
| | | # 服务注册地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | service: ${spring.application.name} |
| | | group: DEFAULT_GROUP |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | config: |
| | | # 配置中心地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | group: DEFAULT_GROUP |
| | | name: ${spring.application.name} |
| | | # 配置文件格式 |
| | |
| | | <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult"> |
| | | select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1 |
| | | </select> |
| | | <select id="getList" resultType="com.ruoyi.system.api.domain.SysUser"> |
| | | select *,nick_name nickName,login_date loginDate,create_time createTime,user_id userId from sys_user where 1=1 |
| | | <select id="getList" resultMap="SysUserResult"> |
| | | select * from sys_user where 1=1 |
| | | <if test="req.search !=null and req.search !=''"> |
| | | and (phonenumber like concat("%", #{phonenumber},"%") or nick_name like concat("%", #{phonenumber},"%")) |
| | | and (phonenumber like concat("%", #{req.search},"%") or nick_name like concat("%", #{req.search},"%")) |
| | | </if> |
| | | <if test="null != req.siteId"> |
| | | and user_id in (select user_id from t_user_site where site_id = #{req.siteId}) |
| | |
| | | <version>1.0.4</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.huaweicloud.apigateway</groupId> |
| | | <artifactId>apigateway</artifactId> |
| | | <version>3.2.5</version> |
| | | <scope>system</scope> |
| | | <systemPath>${project.basedir}/lib/java-sdk-core-3.2.5.jar</systemPath> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | <build> |
| | |
| | | <directory>src/main/resources</directory> |
| | | </resource> |
| | | <resource> |
| | | <directory>lib</directory> |
| | | <targetPath>/BOOT-INF/lib/</targetPath> |
| | | <includes> |
| | | <include>**/*.jar</include> |
| | | </includes> |
| | | </resource> |
| | | <resource> |
| | | <directory>src/main/java</directory> |
| | | <includes> |
| | | <include>**/*.xml</include> |
| | |
| | | Page<TAppUser> page = appUserService.lambdaQuery() |
| | | .like(userListQueryDto.getUserPhone() != null && !"".equals(userListQueryDto.getUserPhone()), TAppUser::getPhone, userListQueryDto.getUserPhone()) |
| | | .eq(userListQueryDto.getCompanyId() != null, TAppUser::getCompanyId, userListQueryDto.getCompanyId()) |
| | | .like(userListQueryDto.getProvinceCode() != null && !"".equals(userListQueryDto.getProvinceCode()), TAppUser::getProvinceCode, userListQueryDto.getProvinceCode()) |
| | | .eq(userListQueryDto.getCityCode() != null && !"".equals(userListQueryDto.getCityCode()), TAppUser::getCityCode, userListQueryDto.getCityCode()) |
| | | .eq(userListQueryDto.getStatus() != null, TAppUser::getStatus, userListQueryDto.getStatus()) |
| | | .eq(userListQueryDto.getVipTypeId() != null, TAppUser::getVipId, userListQueryDto.getVipTypeId()) |
| | |
| | | pointsQueryDto.setUserId(tokenService.getLoginUserApplet().getUserId()); |
| | | } |
| | | List<Integer> types = new ArrayList<>(); |
| | | if (pointsQueryDto.getType()!=null){ |
| | | if (pointsQueryDto.getType()==null){ |
| | | types.add(1); |
| | | types.add(2); |
| | | types.add(3); |
| | | types.add(4); |
| | | types.add(5); |
| | | types.add(6); |
| | | }else if (pointsQueryDto.getType()==1){ |
| | | types.add(1); |
| | | types.add(2); |
| | | types.add(3); |
| | | types.add(4); |
| | | types.add(5); |
| | | }else if (pointsQueryDto.getType()==2){ |
| | | types.add(6); |
| | | } |
| | | Page<TAppUserIntegralChange> page = integralChangeService.lambdaQuery() |
| | | .eq(TAppUserIntegralChange::getAppUserId, pointsQueryDto.getUserId()) |
| | |
| | | plusDay = 12; |
| | | } |
| | | //增加vipDetail |
| | | giveVipUtil.sendVip(nowUser, giveVipDto.getVipId(),plusDay); |
| | | giveVipUtil.sendVip(nowUser, giveVipDto.getVipId(),plusDay,giveVipDto.getType()); |
| | | appUserService.updateById(nowUser); |
| | | } |
| | | return R.ok(); |
| | |
| | | if (signService.lambdaQuery().eq(TAppUserSign::getSignDay, LocalDate.now()).eq(TAppUserSign::getAppUserId, userId).count()>0){ |
| | | return R.fail("今日已签到"); |
| | | } |
| | | |
| | | //判断当前生效的vipDetail |
| | | TAppUserVipDetail one = tAppUserVipDetailService.lambdaQuery().le(TAppUserVipDetail::getStartTime, LocalDateTime.now()).ge(TAppUserVipDetail::getEndTime, LocalDateTime.now()).eq(TAppUserVipDetail::getAppUserId, userId).last("limit 1").one(); |
| | | boolean doubleVip = false; |
| | | if (one!=null){ |
| | | TVip tVip = JSONObject.parseObject(one.getVipJson(), TVip.class); |
| | | if (tVip.getDoubleIntegration()==1){ |
| | | doubleVip = true; |
| | | } |
| | | } |
| | | |
| | | //签到业务 |
| | | TAppUserSign appUserSign = new TAppUserSign(); |
| | | appUserSign.setSignDay(LocalDate.now()); |
| | |
| | | Integer points = 0; |
| | | Integer point = jsonObject.getInteger("num1"); |
| | | points= points+point; |
| | | if (doubleVip){ |
| | | points= points+point; |
| | | } |
| | | JSONArray num2 = jsonObject.getJSONArray("num2"); |
| | | if (num2!=null) { |
| | | //获取连续签到的规则放入map |
| | |
| | | Integer i = map.get(days); |
| | | if (i!=null){ |
| | | points= points+i; |
| | | if (doubleVip){ |
| | | points= points+i; |
| | | } |
| | | appUserSign.setIsGift(1); |
| | | signService.updateById(appUserSign); |
| | | } |
| | |
| | | appUserService.updateById(byId); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | //已签到日期 |
| | | @ApiOperation(value = "本月已签到日期", tags = {"小程序-个人中心-签到"}) |
| | | @GetMapping(value = "/user/has/sign") |
| | |
| | | TAppUser byId = appUserService.getById(userId); |
| | | appUserCar.setAppUserId(userId); |
| | | |
| | | //判断当前生效的vipDetail |
| | | TAppUserVipDetail one = tAppUserVipDetailService.lambdaQuery().le(TAppUserVipDetail::getStartTime, LocalDateTime.now()).ge(TAppUserVipDetail::getEndTime, LocalDateTime.now()).eq(TAppUserVipDetail::getAppUserId, userId).last("limit 1").one(); |
| | | boolean doubleVip = false; |
| | | if (one!=null){ |
| | | TVip tVip = JSONObject.parseObject(one.getVipJson(), TVip.class); |
| | | if (tVip.getDoubleIntegration()==1){ |
| | | doubleVip = true; |
| | | } |
| | | } |
| | | |
| | | //如果是第一次添加车辆,增加积分 |
| | | Long count = appUserCarService.lambdaQuery().eq(TAppUserCar::getAppUserId, userId).count(); |
| | | |
| | |
| | | Integer point = 0; |
| | | //增加车牌50分,必填 |
| | | point = point+jsonObject.getInteger("num1"); |
| | | if (doubleVip){ |
| | | point = point+jsonObject.getInteger("num1"); |
| | | } |
| | | //增加车型分 |
| | | if (StringUtils.isNotEmpty(appUserCar.getVehicleModel())){ |
| | | point = point+jsonObject.getInteger("num2"); |
| | | if (doubleVip){ |
| | | point = point+jsonObject.getInteger("num2"); |
| | | } |
| | | } |
| | | //增加车辆用途分 |
| | | if (StringUtils.isNotEmpty(appUserCar.getVehicleUse())){ |
| | | point = point+jsonObject.getInteger("num3"); |
| | | if (doubleVip){ |
| | | point = point+jsonObject.getInteger("num3"); |
| | | } |
| | | } |
| | | //增加续航分 |
| | | if (StringUtils.isNotEmpty(appUserCar.getEndurance())){ |
| | | point = point+jsonObject.getInteger("num4"); |
| | | if (doubleVip){ |
| | | point = point+jsonObject.getInteger("num4"); |
| | | } |
| | | } |
| | | |
| | | //增加积分记录 |
| | | pointDetailUtil.addDetail(byId.getPoints(),byId.getPoints()+point,5,userId,appUserCar.getLicensePlate(),""); |
| | | byId.setPoints(byId.getPoints()+point); |
| | | byId.setFirstAdd(1); |
| | | appUserService.updateById(byId); |
| | | |
| | | |
| | | } |
| | | CarNumDto carNumDto = CarUtil.carNum(appUserCar.getLicensePlate()); |
| | | if (carNumDto==null){ |
| | | return R.fail("请输入正确的车牌"); |
| | | } |
| | | |
| | | byId.setCityCode(carNumDto.getAreaCode()); |
| | | byId.setProvinceCode(carNumDto.getAreaCode().substring(0,2)+"0000"); |
| | | appUserService.updateById(byId); |
| | | |
| | | // |
| | | appUserCarService.saveOrUpdate(appUserCar); |
| | |
| | | public AjaxResult editInvoiceInformation(@RequestBody TInvoiceInformation invoiceInformation){ |
| | | Long userId = tokenService.getLoginUserApplet().getUserId(); |
| | | //如果当前是默认抬头,则需要去除其他的默认配置 |
| | | if(1 == invoiceInformation.getIsDefault()){ |
| | | if(null != invoiceInformation.getIsDefault() && 1 == invoiceInformation.getIsDefault()){ |
| | | TInvoiceInformation one = invoiceInformationService.getOne(new LambdaQueryWrapper<TInvoiceInformation>().eq(TInvoiceInformation::getDelFlag, 0) |
| | | .eq(TInvoiceInformation::getIsDefault, 1).eq(TInvoiceInformation::getAppUserId, userId)); |
| | | if(null != one && !one.getId().equals(invoiceInformation.getId())){ |
| | |
| | | appletUserDecodeData.setOpenId(openid); |
| | | return AjaxResult.success(appUserService.wxLogin(appletUserDecodeData,data.getInviteUserId())); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 测试用 |
| | | * @param appletUserDecodeData |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "通过code获得openid,获取用户信息",tags = {"微信小程序登录"}) |
| | | @PostMapping("/openIdByJsCodeTest") |
| | | public AjaxResult<Map<String, Object>> openIdByJsCode(@RequestBody AppletUserDecodeData appletUserDecodeData) { |
| | | return AjaxResult.success(appUserService.wxLogin(appletUserDecodeData, null)); |
| | | } |
| | | } |
| | |
| | | import org.apache.logging.log4j.core.config.Order; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpStatus; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | |
| | |
| | | |
| | | @Scheduled(fixedRate = 1000 * 60) |
| | | public void changeVipId(){ |
| | | LocalDate currentDate = LocalDate.now(); |
| | | LocalDateTime currentDate = LocalDateTime.now(); |
| | | List<TAppUserVipDetail> recentDetails = tAppUserVipDetailService.lambdaQuery() |
| | | .le(TAppUserVipDetail::getStartTime, currentDate) |
| | | .ge(TAppUserVipDetail::getEndTime, currentDate) |
| | |
| | | private String pcode; |
| | | private String province; |
| | | private String city; |
| | | private String code; |
| | | private String Hp; |
| | | private String AreaCode; |
| | | } |
| | |
| | | public class CarUtil { |
| | | |
| | | public static CarNumDto carNum(String num) { |
| | | String jsonStr = "{\"date\":[\n" + |
| | | String jsonStr ="{\n" + |
| | | " \"codeInfo\": [\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀A\",\n" + |
| | | " \"Hp\": \"冀A\",\n" + |
| | | "\"city\":\"石家庄\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀B\",\n" + |
| | | " \"Hp\": \"冀B\",\n" + |
| | | "\"city\":\"唐山\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀C\",\n" + |
| | | " \"Hp\": \"冀C\",\n" + |
| | | "\"city\":\"秦皇岛\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀D\",\n" + |
| | | " \"Hp\": \"冀D\",\n" + |
| | | "\"city\":\"邯郸\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130421\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀E\",\n" + |
| | | " \"Hp\": \"冀E\",\n" + |
| | | "\"city\":\"邢台\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130521\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀F\",\n" + |
| | | " \"Hp\": \"冀F\",\n" + |
| | | "\"city\":\"保定\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀G\",\n" + |
| | | " \"Hp\": \"冀G\",\n" + |
| | | "\"city\":\"张家口\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀H\",\n" + |
| | | " \"Hp\": \"冀H\",\n" + |
| | | "\"city\":\"承德\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130821\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀J\",\n" + |
| | | " \"Hp\": \"冀J\",\n" + |
| | | "\"city\":\"沧州\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀R\",\n" + |
| | | " \"Hp\": \"冀R\",\n" + |
| | | "\"city\":\"廊坊\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"131000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀S\",\n" + |
| | | " \"Hp\": \"冀S\",\n" + |
| | | "\"city\":\"沧州\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"130900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"冀T\",\n" + |
| | | " \"Hp\": \"冀T\",\n" + |
| | | "\"city\":\"衡水\",\n" + |
| | | "\"province\":\"河北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"131100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽A\",\n" + |
| | | " \"Hp\": \"辽A\",\n" + |
| | | "\"city\":\"沈阳\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"210100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽B\",\n" + |
| | | " \"Hp\": \"辽B\",\n" + |
| | | "\"city\":\"大连\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"231182\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽C\",\n" + |
| | | " \"Hp\": \"辽C\",\n" + |
| | | "\"city\":\"鞍山\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"340500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽D\",\n" + |
| | | " \"Hp\": \"辽D\",\n" + |
| | | "\"city\":\"抚顺\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"210421\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽E\",\n" + |
| | | " \"Hp\": \"辽E\",\n" + |
| | | "\"city\":\"本溪\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"210521\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽F\",\n" + |
| | | " \"Hp\": \"辽F\",\n" + |
| | | "\"city\":\"丹东\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"210600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽G\",\n" + |
| | | " \"Hp\": \"辽G\",\n" + |
| | | "\"city\":\"锦州\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"210700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽H\",\n" + |
| | | " \"Hp\": \"辽H\",\n" + |
| | | "\"city\":\"营口\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"210800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽J\",\n" + |
| | | " \"Hp\": \"辽J\",\n" + |
| | | "\"city\":\"阜新\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"210921\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽K\",\n" + |
| | | " \"Hp\": \"辽K\",\n" + |
| | | "\"city\":\"辽阳\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"211021\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽L\",\n" + |
| | | " \"Hp\": \"辽L\",\n" + |
| | | "\"city\":\"盘锦\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"211100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽M\",\n" + |
| | | " \"Hp\": \"辽M\",\n" + |
| | | "\"city\":\"铁岭\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"211221\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽N\",\n" + |
| | | " \"Hp\": \"辽N\",\n" + |
| | | "\"city\":\"朝阳\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"220104\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"辽p\",\n" + |
| | | " \"Hp\": \"辽P\",\n" + |
| | | "\"city\":\"葫芦岛\",\n" + |
| | | "\"province\":\"辽宁\",\n" + |
| | | "\"pcode\":\"LN\"\n" + |
| | | " \"Pcode\": \"LN\",\n" + |
| | | " \"AreaCode\": \"211400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖A\",\n" + |
| | | " \"Hp\": \"皖A\",\n" + |
| | | "\"city\":\"合肥\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"340100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖B\",\n" + |
| | | " \"Hp\": \"皖B\",\n" + |
| | | "\"city\":\"芜湖\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"340221\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖C\",\n" + |
| | | " \"Hp\": \"皖C\",\n" + |
| | | "\"city\":\"蚌埠\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"340300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖D\",\n" + |
| | | " \"Hp\": \"皖D\",\n" + |
| | | "\"city\":\"淮南\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"340400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖E\",\n" + |
| | | " \"Hp\": \"皖E\",\n" + |
| | | "\"city\":\"马鞍山\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"340500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖F\",\n" + |
| | | " \"Hp\": \"皖F\",\n" + |
| | | "\"city\":\"淮北\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"340600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖G\",\n" + |
| | | " \"Hp\": \"皖G\",\n" + |
| | | "\"city\":\"铜陵\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"340700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖H\",\n" + |
| | | " \"Hp\": \"皖H\",\n" + |
| | | "\"city\":\"安庆\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"340800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖J\",\n" + |
| | | " \"Hp\": \"皖J\",\n" + |
| | | "\"city\":\"黄山\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"341003\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖K\",\n" + |
| | | " \"Hp\": \"皖K\",\n" + |
| | | "\"city\":\"阜阳\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"341200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖L\",\n" + |
| | | " \"Hp\": \"皖L\",\n" + |
| | | "\"city\":\"宿州\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"341300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖M\",\n" + |
| | | " \"Hp\": \"皖M\",\n" + |
| | | "\"city\":\"滁州\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"341100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖N\",\n" + |
| | | " \"Hp\": \"皖N\",\n" + |
| | | "\"city\":\"六安\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"341500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖p\",\n" + |
| | | " \"Hp\": \"皖P\",\n" + |
| | | "\"city\":\"宣城\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"341800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖Q\",\n" + |
| | | " \"Hp\": \"皖Q\",\n" + |
| | | "\"city\":\"巢湖\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"340181\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖R\",\n" + |
| | | " \"Hp\": \"皖R\",\n" + |
| | | "\"city\":\"池州\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"341700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"皖S\",\n" + |
| | | " \"Hp\": \"皖S\",\n" + |
| | | "\"city\":\"亳州\",\n" + |
| | | "\"province\":\"安徽\",\n" + |
| | | "\"pcode\":\"AH\"\n" + |
| | | " \"Pcode\": \"AH\",\n" + |
| | | " \"AreaCode\": \"341600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏A\",\n" + |
| | | " \"Hp\": \"苏A\",\n" + |
| | | "\"city\":\"南京\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"320100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏B\",\n" + |
| | | " \"Hp\": \"苏B\",\n" + |
| | | "\"city\":\"无锡\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"320200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏C\",\n" + |
| | | " \"Hp\": \"苏C\",\n" + |
| | | "\"city\":\"徐州\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"320300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏D\",\n" + |
| | | " \"Hp\": \"苏D\",\n" + |
| | | "\"city\":\"常州\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"320400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏E\",\n" + |
| | | " \"Hp\": \"苏E\",\n" + |
| | | "\"city\":\"苏州\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"320500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏F\",\n" + |
| | | " \"Hp\": \"苏F\",\n" + |
| | | "\"city\":\"南通\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"320600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏G\",\n" + |
| | | " \"Hp\": \"苏G\",\n" + |
| | | "\"city\":\"连云港\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"320700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏H\",\n" + |
| | | " \"Hp\": \"苏H\",\n" + |
| | | "\"city\":\"淮安\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"320803\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏J\",\n" + |
| | | " \"Hp\": \"苏J\",\n" + |
| | | "\"city\":\"盐城\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"320900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏K\",\n" + |
| | | " \"Hp\": \"苏K\",\n" + |
| | | "\"city\":\"扬州\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"321000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏L\",\n" + |
| | | " \"Hp\": \"苏L\",\n" + |
| | | "\"city\":\"镇江\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"321100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏M\",\n" + |
| | | " \"Hp\": \"苏M\",\n" + |
| | | "\"city\":\"泰州\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"321200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"苏N\",\n" + |
| | | " \"Hp\": \"苏N\",\n" + |
| | | "\"city\":\"宿迁\",\n" + |
| | | "\"province\":\"江苏\",\n" + |
| | | "\"pcode\":\"JS\"\n" + |
| | | " \"Pcode\": \"JS\",\n" + |
| | | " \"AreaCode\": \"321300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂A\",\n" + |
| | | " \"Hp\": \"鄂A\",\n" + |
| | | "\"city\":\"武汉\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"420100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂B\",\n" + |
| | | " \"Hp\": \"鄂B\",\n" + |
| | | "\"city\":\"黄石\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"420202\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂C\",\n" + |
| | | " \"Hp\": \"鄂C\",\n" + |
| | | "\"city\":\"十堰\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"420300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂D\",\n" + |
| | | " \"Hp\": \"鄂D\",\n" + |
| | | "\"city\":\"荆州\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"421003\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂E\",\n" + |
| | | " \"Hp\": \"鄂E\",\n" + |
| | | "\"city\":\"宜昌\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"420500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂F\",\n" + |
| | | "\"city\":\"襄樊\",\n" + |
| | | " \"Hp\": \"鄂F\",\n" + |
| | | " \"city\": \"襄阳\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"420600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂G\",\n" + |
| | | " \"Hp\": \"鄂G\",\n" + |
| | | "\"city\":\"鄂州\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"420700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂H\",\n" + |
| | | " \"Hp\": \"鄂H\",\n" + |
| | | "\"city\":\"荆门 \",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"420800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂J\",\n" + |
| | | " \"Hp\": \"鄂J\",\n" + |
| | | "\"city\":\"黄冈\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"421100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂K\",\n" + |
| | | " \"Hp\": \"鄂K\",\n" + |
| | | "\"city\":\"孝感\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"420900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂L\",\n" + |
| | | " \"Hp\": \"鄂L\",\n" + |
| | | "\"city\":\"咸宁\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"421200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂M\",\n" + |
| | | " \"Hp\": \"鄂M\",\n" + |
| | | "\"city\":\"仙桃\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"429004\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂N\",\n" + |
| | | " \"Hp\": \"鄂N\",\n" + |
| | | "\"city\":\"潜江\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"429005\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂p\",\n" + |
| | | " \"Hp\": \"鄂P\",\n" + |
| | | "\"city\":\"神农架林区\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"429021\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂Q\",\n" + |
| | | " \"Hp\": \"鄂Q\",\n" + |
| | | "\"city\":\"恩施土家族苗族自治州\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"422800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂R\",\n" + |
| | | " \"Hp\": \"鄂R\",\n" + |
| | | "\"city\":\"天门\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"429006\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鄂S\",\n" + |
| | | " \"Hp\": \"鄂S\",\n" + |
| | | "\"city\":\"随州\",\n" + |
| | | "\"province\":\"湖北\",\n" + |
| | | "\"pcode\":\"HB\"\n" + |
| | | " \"Pcode\": \"HB\",\n" + |
| | | " \"AreaCode\": \"421300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋A\",\n" + |
| | | " \"Hp\": \"晋A\",\n" + |
| | | "\"city\":\"太原\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"140100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋B\",\n" + |
| | | " \"Hp\": \"晋B\",\n" + |
| | | "\"city\":\"大同\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"230606\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋C\",\n" + |
| | | " \"Hp\": \"晋C\",\n" + |
| | | "\"city\":\"阳泉\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"140300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋D\",\n" + |
| | | " \"Hp\": \"晋D\",\n" + |
| | | "\"city\":\"长治\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"140421\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋E\",\n" + |
| | | " \"Hp\": \"晋E\",\n" + |
| | | "\"city\":\"晋城\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"140500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋F\",\n" + |
| | | " \"Hp\": \"晋F\",\n" + |
| | | "\"city\":\"朔州\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"140600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋H\",\n" + |
| | | " \"Hp\": \"晋H\",\n" + |
| | | "\"city\":\"忻州\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"140900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋J\",\n" + |
| | | "\"city\":\"吕梁地区\",\n" + |
| | | " \"Hp\": \"晋J\",\n" + |
| | | " \"city\": \"吕梁\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"141100 \"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋K\",\n" + |
| | | " \"Hp\": \"晋K\",\n" + |
| | | "\"city\":\"晋中\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"140700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋L\",\n" + |
| | | " \"Hp\": \"晋L\",\n" + |
| | | "\"city\":\"临汾\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"141000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"晋M\",\n" + |
| | | " \"Hp\": \"晋M\",\n" + |
| | | "\"city\":\"运城\",\n" + |
| | | "\"province\":\"山西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"140800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉A\",\n" + |
| | | " \"Hp\": \"吉A\",\n" + |
| | | "\"city\":\"长春\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": \"220100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉B\",\n" + |
| | | " \"Hp\": \"吉B\",\n" + |
| | | "\"city\":\"吉林\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": \"220200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉C\",\n" + |
| | | " \"Hp\": \"吉C\",\n" + |
| | | "\"city\":\"四平\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": \"220300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉D\",\n" + |
| | | " \"Hp\": \"吉D\",\n" + |
| | | "\"city\":\"辽源\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": \"220400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉E\",\n" + |
| | | " \"Hp\": \"吉E\",\n" + |
| | | "\"city\":\"通化\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": \"220521\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉F\",\n" + |
| | | " \"Hp\": \"吉F\",\n" + |
| | | "\"city\":\"白山\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": \"220600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉G\",\n" + |
| | | " \"Hp\": \"吉G\",\n" + |
| | | "\"city\":\"白城\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": \"220800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉H\",\n" + |
| | | " \"Hp\": \"吉H\",\n" + |
| | | "\"city\":\"延边朝鲜族自治州\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": \"222400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉J\",\n" + |
| | | " \"Hp\": \"吉J\",\n" + |
| | | "\"city\":\"松原\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": \"220700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"吉K\",\n" + |
| | | " \"Hp\": \"吉K\",\n" + |
| | | "\"city\":\"长白山\",\n" + |
| | | "\"province\":\"吉林\",\n" + |
| | | "\"pcode\":\"JL\"\n" + |
| | | " \"Pcode\": \"JL\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤A\",\n" + |
| | | " \"Hp\": \"粤A\",\n" + |
| | | "\"city\":\"广州\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤B\",\n" + |
| | | " \"Hp\": \"粤B\",\n" + |
| | | "\"city\":\"深圳\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤C\",\n" + |
| | | " \"Hp\": \"粤C\",\n" + |
| | | "\"city\":\"珠海\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤D\",\n" + |
| | | " \"Hp\": \"粤D\",\n" + |
| | | "\"city\":\"汕头\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤E\",\n" + |
| | | " \"Hp\": \"粤E\",\n" + |
| | | "\"city\":\"佛山\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤F\",\n" + |
| | | " \"Hp\": \"粤F\",\n" + |
| | | "\"city\":\"韶关\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤G\",\n" + |
| | | " \"Hp\": \"粤G\",\n" + |
| | | "\"city\":\"湛江\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤H\",\n" + |
| | | " \"Hp\": \"粤H\",\n" + |
| | | "\"city\":\"肇庆\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"441200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤J\",\n" + |
| | | " \"Hp\": \"粤J\",\n" + |
| | | "\"city\":\"江门\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤K\",\n" + |
| | | " \"Hp\": \"粤K\",\n" + |
| | | "\"city\":\"茂名\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤L\",\n" + |
| | | " \"Hp\": \"粤L\",\n" + |
| | | "\"city\":\"惠州\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"441300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤M\",\n" + |
| | | " \"Hp\": \"粤M\",\n" + |
| | | "\"city\":\"梅州\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"441400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤N\",\n" + |
| | | " \"Hp\": \"粤N\",\n" + |
| | | "\"city\":\"汕尾\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"441500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤p\",\n" + |
| | | " \"Hp\": \"粤P\",\n" + |
| | | "\"city\":\"河源\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"441600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤Q\",\n" + |
| | | " \"Hp\": \"粤Q\",\n" + |
| | | "\"city\":\"阳江\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"441700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤R\",\n" + |
| | | " \"Hp\": \"粤R\",\n" + |
| | | "\"city\":\"清远\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"441800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤S\",\n" + |
| | | " \"Hp\": \"粤S\",\n" + |
| | | "\"city\":\"东莞\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"441900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤T\",\n" + |
| | | " \"Hp\": \"粤T\",\n" + |
| | | "\"city\":\"中山\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"442000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤U\",\n" + |
| | | " \"Hp\": \"粤U\",\n" + |
| | | "\"city\":\"潮州\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"445100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤V\",\n" + |
| | | " \"Hp\": \"粤V\",\n" + |
| | | "\"city\":\"揭阳\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"445200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤W\",\n" + |
| | | " \"Hp\": \"粤W\",\n" + |
| | | "\"city\":\"云浮\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"445300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤X\",\n" + |
| | | " \"Hp\": \"粤X\",\n" + |
| | | "\"city\":\"顺德区\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440606\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤Y\",\n" + |
| | | " \"Hp\": \"粤Y\",\n" + |
| | | "\"city\":\"南海区\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": \"440605\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"粤Z\",\n" + |
| | | " \"Hp\": \"粤Z\",\n" + |
| | | "\"city\":\"港澳进入内地车辆\",\n" + |
| | | "\"province\":\"广东\",\n" + |
| | | "\"pcode\":\"GD\"\n" + |
| | | " \"Pcode\": \"GD\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"宁A\",\n" + |
| | | " \"Hp\": \"宁A\",\n" + |
| | | "\"city\":\"银川\",\n" + |
| | | "\"province\":\"宁夏\",\n" + |
| | | "\"pcode\":\"NX\"\n" + |
| | | " \"Pcode\": \"NX\",\n" + |
| | | " \"AreaCode\": \"640100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"宁B\",\n" + |
| | | " \"Hp\": \"宁B\",\n" + |
| | | "\"city\":\"石嘴山\",\n" + |
| | | "\"province\":\"宁夏\",\n" + |
| | | "\"pcode\":\"NX\"\n" + |
| | | " \"Pcode\": \"NX\",\n" + |
| | | " \"AreaCode\": \"640200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"宁C\",\n" + |
| | | " \"Hp\": \"宁C\",\n" + |
| | | "\"city\":\"银南\",\n" + |
| | | "\"province\":\"宁夏\",\n" + |
| | | "\"pcode\":\"NX\"\n" + |
| | | " \"Pcode\": \"NX\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"宁D\",\n" + |
| | | " \"Hp\": \"宁D\",\n" + |
| | | "\"city\":\"固原\",\n" + |
| | | "\"province\":\"宁夏\",\n" + |
| | | "\"pcode\":\"NX\"\n" + |
| | | " \"Pcode\": \"NX\",\n" + |
| | | " \"AreaCode\": \"640400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"宁E\",\n" + |
| | | " \"Hp\": \"宁E\",\n" + |
| | | "\"city\":\"中卫\",\n" + |
| | | "\"province\":\"宁夏\",\n" + |
| | | "\"pcode\":\"NX\"\n" + |
| | | " \"Pcode\": \"NX\",\n" + |
| | | " \"AreaCode\": \"640500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京A\",\n" + |
| | | " \"Hp\": \"京A\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京B\",\n" + |
| | | " \"Hp\": \"京B\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京C\",\n" + |
| | | " \"Hp\": \"京C\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京D\",\n" + |
| | | " \"Hp\": \"京D\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京E\",\n" + |
| | | " \"Hp\": \"京E\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京F\",\n" + |
| | | " \"Hp\": \"京F\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京G\",\n" + |
| | | " \"Hp\": \"京G\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京H\",\n" + |
| | | " \"Hp\": \"京H\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京J\",\n" + |
| | | " \"Hp\": \"京J\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京K\",\n" + |
| | | " \"Hp\": \"京K\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京L\",\n" + |
| | | " \"Hp\": \"京L\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京M\",\n" + |
| | | " \"Hp\": \"京M\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"京Y\",\n" + |
| | | " \"Hp\": \"京Y\",\n" + |
| | | "\"city\":\"北京\",\n" + |
| | | "\"province\":\"北京\",\n" + |
| | | "\"pcode\":\"BJ\"\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫A\",\n" + |
| | | " \"Hp\": \"豫A\",\n" + |
| | | "\"city\":\"郑州\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"410100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫B\",\n" + |
| | | " \"Hp\": \"豫B\",\n" + |
| | | "\"city\":\"开封\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"410200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫C\",\n" + |
| | | " \"Hp\": \"豫C\",\n" + |
| | | "\"city\":\"洛阳\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"410300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫D\",\n" + |
| | | " \"Hp\": \"豫D\",\n" + |
| | | "\"city\":\"平顶山\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"410400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫E\",\n" + |
| | | " \"Hp\": \"豫E\",\n" + |
| | | "\"city\":\"安阳\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"410522\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫F\",\n" + |
| | | " \"Hp\": \"豫F\",\n" + |
| | | "\"city\":\"鹤壁\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"410600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫G\",\n" + |
| | | " \"Hp\": \"豫G\",\n" + |
| | | "\"city\":\"新乡\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"410721\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫H\",\n" + |
| | | " \"Hp\": \"豫H\",\n" + |
| | | "\"city\":\"焦作\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"410800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫J\",\n" + |
| | | " \"Hp\": \"豫J\",\n" + |
| | | "\"city\":\"濮阳\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"410928\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫K\",\n" + |
| | | " \"Hp\": \"豫K\",\n" + |
| | | "\"city\":\"许昌\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"411023\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫L\",\n" + |
| | | " \"Hp\": \"豫L\",\n" + |
| | | "\"city\":\"漯河\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"411100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫M\",\n" + |
| | | " \"Hp\": \"豫M\",\n" + |
| | | "\"city\":\"三门峡\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"411200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫N\",\n" + |
| | | " \"Hp\": \"豫N\",\n" + |
| | | "\"city\":\"商丘\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"411400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫p\",\n" + |
| | | " \"Hp\": \"豫P\",\n" + |
| | | "\"city\":\"周口\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"411600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫Q\",\n" + |
| | | " \"Hp\": \"豫Q\",\n" + |
| | | "\"city\":\"驻马店\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"411700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫R\",\n" + |
| | | " \"Hp\": \"豫R\",\n" + |
| | | "\"city\":\"南阳\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"411300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫S\",\n" + |
| | | " \"Hp\": \"豫S\",\n" + |
| | | "\"city\":\"信阳\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"411500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"豫U\",\n" + |
| | | " \"Hp\": \"豫U\",\n" + |
| | | "\"city\":\"济源\",\n" + |
| | | "\"province\":\"河南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"419001\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑A\",\n" + |
| | | " \"Hp\": \"黑A\",\n" + |
| | | "\"city\":\"哈尔滨\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"230100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑B\",\n" + |
| | | " \"Hp\": \"黑B\",\n" + |
| | | "\"city\":\"齐齐哈尔\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"230200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑C\",\n" + |
| | | " \"Hp\": \"黑C\",\n" + |
| | | "\"city\":\"牡丹江\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"231000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑D\",\n" + |
| | | " \"Hp\": \"黑D\",\n" + |
| | | "\"city\":\"佳木斯\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"230800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑E\",\n" + |
| | | " \"Hp\": \"黑E\",\n" + |
| | | "\"city\":\"大庆\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"230600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑F\",\n" + |
| | | " \"Hp\": \"黑F\",\n" + |
| | | "\"city\":\"伊春\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"230702\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑G\",\n" + |
| | | " \"Hp\": \"黑G\",\n" + |
| | | "\"city\":\"鸡西\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"230300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑H\",\n" + |
| | | " \"Hp\": \"黑H\",\n" + |
| | | "\"city\":\"鹤岗\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"230400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑J\",\n" + |
| | | " \"Hp\": \"黑J\",\n" + |
| | | "\"city\":\"双鸭山\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"230500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑K\",\n" + |
| | | " \"Hp\": \"黑K\",\n" + |
| | | "\"city\":\"七台河\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"230900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑L\",\n" + |
| | | " \"Hp\": \"黑L\",\n" + |
| | | "\"city\":\"松花江地区\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑M\",\n" + |
| | | " \"Hp\": \"黑M\",\n" + |
| | | "\"city\":\"绥化\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"231200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑N\",\n" + |
| | | " \"Hp\": \"黑N\",\n" + |
| | | "\"city\":\"黑河\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"231100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑p\",\n" + |
| | | " \"Hp\": \"黑P\",\n" + |
| | | "\"city\":\"大兴安岭地区\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": \"232700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"黑R\",\n" + |
| | | " \"Hp\": \"黑R\",\n" + |
| | | "\"city\":\"农垦系统\",\n" + |
| | | "\"province\":\"黑龙江\",\n" + |
| | | "\"pcode\":\"HLJ\"\n" + |
| | | " \"Pcode\": \"HLJ\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁A \",\n" + |
| | | " \"Hp\": \"鲁A\",\n" + |
| | | "\"city\":\"济南\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁B\",\n" + |
| | | " \"Hp\": \"鲁B\",\n" + |
| | | "\"city\":\"青岛\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁C\",\n" + |
| | | " \"Hp\": \"鲁C\",\n" + |
| | | "\"city\":\"淄博\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁D\",\n" + |
| | | " \"Hp\": \"鲁D\",\n" + |
| | | "\"city\":\"枣庄\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁E\",\n" + |
| | | " \"Hp\": \"鲁E\",\n" + |
| | | "\"city\":\"东营\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370502\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁F\",\n" + |
| | | " \"Hp\": \"鲁F\",\n" + |
| | | "\"city\":\"烟台\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁G\",\n" + |
| | | " \"Hp\": \"鲁G\",\n" + |
| | | "\"city\":\"潍坊\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁H\",\n" + |
| | | " \"Hp\": \"鲁H\",\n" + |
| | | "\"city\":\"济宁\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁J\",\n" + |
| | | " \"Hp\": \"鲁J\",\n" + |
| | | "\"city\":\"泰安\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁K\",\n" + |
| | | " \"Hp\": \"鲁K\",\n" + |
| | | "\"city\":\"威海\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"371000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁L\",\n" + |
| | | " \"Hp\": \"鲁L\",\n" + |
| | | "\"city\":\"日照\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"371100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁M\",\n" + |
| | | " \"Hp\": \"鲁M\",\n" + |
| | | "\"city\":\"滨州\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"371600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁N\",\n" + |
| | | " \"Hp\": \"鲁N\",\n" + |
| | | "\"city\":\"德州\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"371400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁p\",\n" + |
| | | " \"Hp\": \"鲁P\",\n" + |
| | | "\"city\":\"聊城\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"371500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁Q\",\n" + |
| | | " \"Hp\": \"鲁Q\",\n" + |
| | | "\"city\":\"临沂\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"371300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁R\",\n" + |
| | | " \"Hp\": \"鲁R\",\n" + |
| | | "\"city\":\"菏泽\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"371700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁S\",\n" + |
| | | " \"Hp\": \"鲁S\",\n" + |
| | | "\"city\":\"莱芜\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"371200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁U\",\n" + |
| | | "\"city\":\"青岛增补\",\n" + |
| | | " \"Hp\": \"鲁U\",\n" + |
| | | " \"city\": \"青岛\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁V\",\n" + |
| | | "\"city\":\"潍坊增补\",\n" + |
| | | " \"Hp\": \"鲁V\",\n" + |
| | | " \"city\": \"潍坊\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"鲁Y\",\n" + |
| | | " \"Hp\": \"鲁Y\",\n" + |
| | | "\"city\":\"烟台\",\n" + |
| | | "\"province\":\"山东\",\n" + |
| | | "\"pcode\":\"SD\"\n" + |
| | | " \"Pcode\": \"SD\",\n" + |
| | | " \"AreaCode\": \"370600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙A\",\n" + |
| | | " \"Hp\": \"浙A\",\n" + |
| | | "\"city\":\"杭州\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"330100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙B\",\n" + |
| | | " \"Hp\": \"浙B\",\n" + |
| | | "\"city\":\"宁波\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"330200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙C\",\n" + |
| | | " \"Hp\": \"浙C\",\n" + |
| | | "\"city\":\"温州\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"330300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙D\",\n" + |
| | | " \"Hp\": \"浙D\",\n" + |
| | | "\"city\":\"绍兴\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"330600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙E\",\n" + |
| | | " \"Hp\": \"浙E\",\n" + |
| | | "\"city\":\"湖州\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"330500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙F\",\n" + |
| | | " \"Hp\": \"浙F\",\n" + |
| | | "\"city\":\"嘉兴\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"330400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙G\",\n" + |
| | | " \"Hp\": \"浙G\",\n" + |
| | | "\"city\":\"金华\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"330700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙H\",\n" + |
| | | " \"Hp\": \"浙H\",\n" + |
| | | "\"city\":\"衢州\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"330800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙J\",\n" + |
| | | " \"Hp\": \"浙J\",\n" + |
| | | "\"city\":\"台州\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"331000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙K\",\n" + |
| | | " \"Hp\": \"浙K\",\n" + |
| | | "\"city\":\"丽水\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"331100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"浙L\",\n" + |
| | | " \"Hp\": \"浙L\",\n" + |
| | | "\"city\":\"舟山\",\n" + |
| | | "\"province\":\"浙江\",\n" + |
| | | "\"pcode\":\"ZJ\"\n" + |
| | | " \"Pcode\": \"ZJ\",\n" + |
| | | " \"AreaCode\": \"330900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂A\",\n" + |
| | | " \"Hp\": \"桂A\",\n" + |
| | | "\"city\":\"南宁\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"450100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂B\",\n" + |
| | | " \"Hp\": \"桂B\",\n" + |
| | | "\"city\":\"柳州\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"450200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂C\",\n" + |
| | | " \"Hp\": \"桂C\",\n" + |
| | | "\"city\":\"桂林\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"450300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂D\",\n" + |
| | | " \"Hp\": \"桂D\",\n" + |
| | | "\"city\":\"梧州\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"450400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂E\",\n" + |
| | | " \"Hp\": \"桂E\",\n" + |
| | | "\"city\":\"北海\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"450500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂F\",\n" + |
| | | " \"Hp\": \"桂F\",\n" + |
| | | "\"city\":\"崇左\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"451400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂G\",\n" + |
| | | " \"Hp\": \"桂G\",\n" + |
| | | "\"city\":\"来宾\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"451300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂H\",\n" + |
| | | " \"Hp\": \"桂H\",\n" + |
| | | "\"city\":\"桂林地区\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂J\",\n" + |
| | | " \"Hp\": \"桂J\",\n" + |
| | | "\"city\":\"贺州\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"451100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂K\",\n" + |
| | | " \"Hp\": \"桂K\",\n" + |
| | | "\"city\":\"玉林\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"450900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂L\",\n" + |
| | | " \"Hp\": \"桂L\",\n" + |
| | | "\"city\":\"百色\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"451000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂M\",\n" + |
| | | " \"Hp\": \"桂M\",\n" + |
| | | "\"city\":\"河池\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"451200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂N\",\n" + |
| | | " \"Hp\": \"桂N\",\n" + |
| | | "\"city\":\"钦州\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"450700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂p\",\n" + |
| | | " \"Hp\": \"桂P\",\n" + |
| | | "\"city\":\"防城港\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"450600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"桂R\",\n" + |
| | | " \"Hp\": \"桂R\",\n" + |
| | | "\"city\":\"贵港\",\n" + |
| | | "\"province\":\"广西\",\n" + |
| | | "\"pcode\":\"GX\"\n" + |
| | | " \"Pcode\": \"GX\",\n" + |
| | | " \"AreaCode\": \"450800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙A\",\n" + |
| | | " \"Hp\": \"蒙A\",\n" + |
| | | "\"city\":\"呼和浩特\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"150100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙B\",\n" + |
| | | " \"Hp\": \"蒙B\",\n" + |
| | | "\"city\":\"包头\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"150200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙C\",\n" + |
| | | " \"Hp\": \"蒙C\",\n" + |
| | | "\"city\":\"乌海\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"150300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙D\",\n" + |
| | | " \"Hp\": \"蒙D\",\n" + |
| | | "\"city\":\"赤峰\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"150400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙E\",\n" + |
| | | " \"Hp\": \"蒙E\",\n" + |
| | | "\"city\":\"呼伦贝尔 \",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"150700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙F\",\n" + |
| | | " \"Hp\": \"蒙F\",\n" + |
| | | "\"city\":\"兴安盟\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"152200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙G\",\n" + |
| | | " \"Hp\": \"蒙G\",\n" + |
| | | "\"city\":\"通辽\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"150500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙H\",\n" + |
| | | " \"Hp\": \"蒙H\",\n" + |
| | | "\"city\":\"锡林郭勒盟\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"152500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙J\",\n" + |
| | | " \"Hp\": \"蒙J\",\n" + |
| | | "\"city\":\"乌兰察布盟\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"150900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙K\",\n" + |
| | | " \"Hp\": \"蒙K\",\n" + |
| | | "\"city\":\"鄂尔多斯 \",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"150600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙L\",\n" + |
| | | " \"Hp\": \"蒙L\",\n" + |
| | | "\"city\":\"巴彦淖尔盟\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"150800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"蒙M \",\n" + |
| | | "\"city\":\" 阿拉善盟\",\n" + |
| | | " \"Hp\": \"蒙M \",\n" + |
| | | " \"city\": \" 阿拉善盟\",\n" + |
| | | "\"province\":\"内蒙古\",\n" + |
| | | "\"pcode\":\"NMG\"\n" + |
| | | " \"Pcode\": \"NMG\",\n" + |
| | | " \"AreaCode\": \"152900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽A\",\n" + |
| | | " \"Hp\": \"闽A\",\n" + |
| | | "\"city\":\"福州\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": \"350100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽B\",\n" + |
| | | " \"Hp\": \"闽B\",\n" + |
| | | "\"city\":\"莆田\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": \"350300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽C\",\n" + |
| | | " \"Hp\": \"闽C\",\n" + |
| | | "\"city\":\"泉州\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": \"350500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽D\",\n" + |
| | | " \"Hp\": \"闽D\",\n" + |
| | | "\"city\":\"厦门\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": \"350200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽E\",\n" + |
| | | " \"Hp\": \"闽E\",\n" + |
| | | "\"city\":\"漳州\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": \"350600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽F\",\n" + |
| | | " \"Hp\": \"闽F\",\n" + |
| | | "\"city\":\"龙岩\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": \"350800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽G\",\n" + |
| | | " \"Hp\": \"闽G\",\n" + |
| | | "\"city\":\"三明\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": \"350400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽H\",\n" + |
| | | " \"Hp\": \"闽H\",\n" + |
| | | "\"city\":\"南平\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": \"350700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽J\",\n" + |
| | | " \"Hp\": \"闽J\",\n" + |
| | | "\"city\":\"宁德\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": \"350900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"闽K\",\n" + |
| | | " \"Hp\": \"闽K\",\n" + |
| | | "\"city\":\"直系统\",\n" + |
| | | "\"province\":\"福建\",\n" + |
| | | "\"pcode\":\"FJ\"\n" + |
| | | " \"Pcode\": \"FJ\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川A\",\n" + |
| | | " \"Hp\": \"川A\",\n" + |
| | | "\"city\":\"成都\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"510100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川B\",\n" + |
| | | " \"Hp\": \"川B\",\n" + |
| | | "\"city\":\"绵阳\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"510700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川C\",\n" + |
| | | " \"Hp\": \"川C\",\n" + |
| | | "\"city\":\"自贡\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"510300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川D\",\n" + |
| | | " \"Hp\": \"川D\",\n" + |
| | | "\"city\":\"攀枝花\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"510400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川E\",\n" + |
| | | " \"Hp\": \"川E\",\n" + |
| | | "\"city\":\"泸州\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"510500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川F\",\n" + |
| | | " \"Hp\": \"川F\",\n" + |
| | | "\"city\":\"德阳\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"510600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川H\",\n" + |
| | | " \"Hp\": \"川H\",\n" + |
| | | "\"city\":\"广元\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"510800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川J\",\n" + |
| | | " \"Hp\": \"川J\",\n" + |
| | | "\"city\":\"遂宁\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"510900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川K\",\n" + |
| | | " \"Hp\": \"川K\",\n" + |
| | | "\"city\":\"内江\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"511000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川L\",\n" + |
| | | " \"Hp\": \"川L\",\n" + |
| | | "\"city\":\"乐山\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"511100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川M\",\n" + |
| | | " \"Hp\": \"川M\",\n" + |
| | | "\"city\":\"资阳\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"512000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川Q\",\n" + |
| | | " \"Hp\": \"川Q\",\n" + |
| | | "\"city\":\"宜宾\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"511521\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川R\",\n" + |
| | | " \"Hp\": \"川R\",\n" + |
| | | "\"city\":\"南充\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"511300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川S\",\n" + |
| | | " \"Hp\": \"川S\",\n" + |
| | | "\"city\":\"达州\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"511700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川T\",\n" + |
| | | " \"Hp\": \"川T\",\n" + |
| | | "\"city\":\"雅安\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"511800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川U\",\n" + |
| | | " \"Hp\": \"川U\",\n" + |
| | | "\"city\":\"阿坝藏族羌族自治州\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"513200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川V\",\n" + |
| | | " \"Hp\": \"川V\",\n" + |
| | | "\"city\":\"甘孜藏族自治州\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"513300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川W\",\n" + |
| | | " \"Hp\": \"川W\",\n" + |
| | | "\"city\":\"凉山彝族自治州\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"513400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川X\",\n" + |
| | | " \"Hp\": \"川X\",\n" + |
| | | "\"city\":\"广安\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"511602\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川Y\",\n" + |
| | | " \"Hp\": \"川Y\",\n" + |
| | | "\"city\":\"巴中\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"511900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"川Z\",\n" + |
| | | " \"Hp\": \"川Z\",\n" + |
| | | "\"city\":\"眉山\",\n" + |
| | | "\"province\":\"四川\",\n" + |
| | | "\"pcode\":\"SC\"\n" + |
| | | " \"Pcode\": \"SC\",\n" + |
| | | " \"AreaCode\": \"511400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"渝A\",\n" + |
| | | " \"Hp\": \"渝A\",\n" + |
| | | "\"city\":\"重庆区(江南)\",\n" + |
| | | "\"province\":\"重庆\",\n" + |
| | | "\"pcode\":\"ZQ\"\n" + |
| | | " \"Pcode\": \"ZQ\",\n" + |
| | | " \"AreaCode\": \"500100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"渝B\",\n" + |
| | | " \"Hp\": \"渝B\",\n" + |
| | | "\"city\":\"重庆区(江北)\",\n" + |
| | | "\"province\":\"重庆\",\n" + |
| | | "\"pcode\":\"ZQ\"\n" + |
| | | " \"Pcode\": \"ZQ\",\n" + |
| | | " \"AreaCode\": \"500100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"渝C\",\n" + |
| | | " \"Hp\": \"渝C\",\n" + |
| | | "\"city\":\"永川区\",\n" + |
| | | "\"province\":\"重庆\",\n" + |
| | | "\"pcode\":\"ZQ\"\n" + |
| | | " \"Pcode\": \"ZQ\",\n" + |
| | | " \"AreaCode\": \"500118\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"渝F\",\n" + |
| | | " \"Hp\": \"渝F\",\n" + |
| | | "\"city\":\"万州区\",\n" + |
| | | "\"province\":\"重庆\",\n" + |
| | | "\"pcode\":\"ZQ\"\n" + |
| | | " \"Pcode\": \"ZQ\",\n" + |
| | | " \"AreaCode\": \"500101\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"渝G\",\n" + |
| | | " \"Hp\": \"渝G\",\n" + |
| | | "\"city\":\"涪陵区\",\n" + |
| | | "\"province\":\"重庆\",\n" + |
| | | "\"pcode\":\"ZQ\"\n" + |
| | | " \"Pcode\": \"ZQ\",\n" + |
| | | " \"AreaCode\": \"500102\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"渝H\",\n" + |
| | | " \"Hp\": \"渝H\",\n" + |
| | | "\"city\":\"黔江区\",\n" + |
| | | "\"province\":\"重庆\",\n" + |
| | | "\"pcode\":\"ZQ\"\n" + |
| | | " \"Pcode\": \"ZQ\",\n" + |
| | | " \"AreaCode\": \"500114\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"津A\",\n" + |
| | | " \"Hp\": \"津A\",\n" + |
| | | "\"city\":\"天津\",\n" + |
| | | "\"province\":\"天津\",\n" + |
| | | "\"pcode\":\"TJ\"\n" + |
| | | " \"Pcode\": \"TJ\",\n" + |
| | | " \"AreaCode\": \"120000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"津B\",\n" + |
| | | " \"Hp\": \"津B\",\n" + |
| | | "\"city\":\"天津\",\n" + |
| | | "\"province\":\"天津\",\n" + |
| | | "\"pcode\":\"TJ\"\n" + |
| | | " \"Pcode\": \"TJ\",\n" + |
| | | " \"AreaCode\": \"120000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"津C\",\n" + |
| | | " \"Hp\": \"津C\",\n" + |
| | | "\"city\":\"天津\",\n" + |
| | | "\"province\":\"天津\",\n" + |
| | | "\"pcode\":\"TJ\"\n" + |
| | | " \"Pcode\": \"TJ\",\n" + |
| | | " \"AreaCode\": \"120000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"津D\",\n" + |
| | | " \"Hp\": \"津D\",\n" + |
| | | "\"city\":\"天津\",\n" + |
| | | "\"province\":\"天津\",\n" + |
| | | "\"pcode\":\"TJ\"\n" + |
| | | " \"Pcode\": \"TJ\",\n" + |
| | | " \"AreaCode\": \"120000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"津E\",\n" + |
| | | " \"Hp\": \"津E\",\n" + |
| | | "\"city\":\"天津\",\n" + |
| | | "\"province\":\"天津\",\n" + |
| | | "\"pcode\":\"TJ\"\n" + |
| | | " \"Pcode\": \"TJ\",\n" + |
| | | " \"AreaCode\": \"120000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"津F\",\n" + |
| | | " \"Hp\": \"津F\",\n" + |
| | | "\"city\":\"天津\",\n" + |
| | | "\"province\":\"天津\",\n" + |
| | | "\"pcode\":\"TJ\"\n" + |
| | | " \"Pcode\": \"TJ\",\n" + |
| | | " \"AreaCode\": \"120000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"津G\",\n" + |
| | | " \"Hp\": \"津G\",\n" + |
| | | "\"city\":\"天津\",\n" + |
| | | "\"province\":\"天津\",\n" + |
| | | "\"pcode\":\"TJ\"\n" + |
| | | " \"Pcode\": \"TJ\",\n" + |
| | | " \"AreaCode\": \"120000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"津H\",\n" + |
| | | " \"Hp\": \"津H\",\n" + |
| | | "\"city\":\"天津\",\n" + |
| | | "\"province\":\"天津\",\n" + |
| | | "\"pcode\":\"TJ\"\n" + |
| | | " \"Pcode\": \"TJ\",\n" + |
| | | " \"AreaCode\": \"120000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云A\",\n" + |
| | | " \"Hp\": \"云A\",\n" + |
| | | "\"city\":\"昆明\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"530100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云A-V\",\n" + |
| | | " \"Hp\": \"云A-V\",\n" + |
| | | "\"city\":\"东川\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"530113\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云C\",\n" + |
| | | " \"Hp\": \"云C\",\n" + |
| | | "\"city\":\"昭通\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"530600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云D\",\n" + |
| | | " \"Hp\": \"云D\",\n" + |
| | | "\"city\":\"曲靖\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"530300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云E\",\n" + |
| | | " \"Hp\": \"云E\",\n" + |
| | | "\"city\":\"楚雄彝族自治州\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"532300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云F\",\n" + |
| | | " \"Hp\": \"云F\",\n" + |
| | | "\"city\":\"玉溪\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"530400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云G\",\n" + |
| | | " \"Hp\": \"云G\",\n" + |
| | | "\"city\":\"红河哈尼族彝族自治州\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"532500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云H\",\n" + |
| | | " \"Hp\": \"云H\",\n" + |
| | | "\"city\":\"文山壮族苗族自治州\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"532600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云J\",\n" + |
| | | " \"Hp\": \"云J\",\n" + |
| | | "\"city\":\"思茅\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"530802\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云K\",\n" + |
| | | " \"Hp\": \"云K\",\n" + |
| | | "\"city\":\"西双版纳傣族自治州\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"532800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云L\",\n" + |
| | | " \"Hp\": \"云L\",\n" + |
| | | "\"city\":\"大理白族自治州\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"532900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云M\",\n" + |
| | | " \"Hp\": \"云M\",\n" + |
| | | "\"city\":\"保山\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"530500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云N\",\n" + |
| | | " \"Hp\": \"云N\",\n" + |
| | | "\"city\":\"德宏傣族景颇族自治州\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"533100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云p\",\n" + |
| | | " \"Hp\": \"云P\",\n" + |
| | | "\"city\":\"丽江\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"530700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云Q\",\n" + |
| | | " \"Hp\": \"云Q\",\n" + |
| | | "\"city\":\"怒江傈僳族自治州\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"533300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云R\",\n" + |
| | | " \"Hp\": \"云R\",\n" + |
| | | "\"city\":\"迪庆藏族自治州\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"533400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"云S\",\n" + |
| | | " \"Hp\": \"云S\",\n" + |
| | | "\"city\":\"临沧地区\",\n" + |
| | | "\"province\":\"云南\",\n" + |
| | | "\"pcode\":\"YN\"\n" + |
| | | " \"Pcode\": \"YN\",\n" + |
| | | " \"AreaCode\": \"530900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘A \",\n" + |
| | | " \"Hp\": \"湘A \",\n" + |
| | | "\"city\":\"长沙\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"430121\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘B\",\n" + |
| | | " \"Hp\": \"湘B\",\n" + |
| | | "\"city\":\"株洲\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"430221\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘C\",\n" + |
| | | " \"Hp\": \"湘C\",\n" + |
| | | "\"city\":\"湘潭\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"430321\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘D\",\n" + |
| | | " \"Hp\": \"湘D\",\n" + |
| | | "\"city\":\"衡阳\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"430421\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘E\",\n" + |
| | | " \"Hp\": \"湘E\",\n" + |
| | | "\"city\":\"邵阳\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"430523\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘F\",\n" + |
| | | " \"Hp\": \"湘F\",\n" + |
| | | "\"city\":\"岳阳\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"430621\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘G\",\n" + |
| | | " \"Hp\": \"湘G\",\n" + |
| | | "\"city\":\"张家界\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"430800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘H\",\n" + |
| | | " \"Hp\": \"湘H\",\n" + |
| | | "\"city\":\"益阳\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"430900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘J\",\n" + |
| | | " \"Hp\": \"湘J\",\n" + |
| | | "\"city\":\"常德\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"430700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘K\",\n" + |
| | | " \"Hp\": \"湘K\",\n" + |
| | | "\"city\":\"娄底\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"431300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘L\",\n" + |
| | | " \"Hp\": \"湘L\",\n" + |
| | | "\"city\":\"郴州\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"431000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘M\",\n" + |
| | | " \"Hp\": \"湘M\",\n" + |
| | | "\"city\":\"永州\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"431100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘N\",\n" + |
| | | " \"Hp\": \"湘N\",\n" + |
| | | "\"city\":\"怀化\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"431200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"湘U\",\n" + |
| | | " \"Hp\": \"湘U\",\n" + |
| | | "\"city\":\"湘西土家族苗族自治州\",\n" + |
| | | "\"province\":\"湖南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"433100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新A\",\n" + |
| | | " \"Hp\": \"新A\",\n" + |
| | | "\"city\":\"乌鲁木齐\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"650121\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新B\",\n" + |
| | | " \"Hp\": \"新B\",\n" + |
| | | "\"city\":\"昌吉回族自治州\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"652300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新C\",\n" + |
| | | " \"Hp\": \"新C\",\n" + |
| | | "\"city\":\"石河子\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"659001\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新D\",\n" + |
| | | " \"Hp\": \"新D\",\n" + |
| | | "\"city\":\"奎屯\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"654003\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新E\",\n" + |
| | | " \"Hp\": \"新E\",\n" + |
| | | "\"city\":\"博尔塔拉蒙古自治州\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"652700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新F\",\n" + |
| | | " \"Hp\": \"新F\",\n" + |
| | | "\"city\":\"伊犁哈萨克自治州直辖县\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"654000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新G\",\n" + |
| | | " \"Hp\": \"新G\",\n" + |
| | | "\"city\":\"塔城\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"654201\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新H\",\n" + |
| | | " \"Hp\": \"新H\",\n" + |
| | | "\"city\":\"阿勒泰\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"654301\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新J\",\n" + |
| | | " \"Hp\": \"新J\",\n" + |
| | | "\"city\":\"克拉玛依\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"650203\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新K\",\n" + |
| | | " \"Hp\": \"新K\",\n" + |
| | | "\"city\":\"吐鲁番\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"650400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新L\",\n" + |
| | | " \"Hp\": \"新L\",\n" + |
| | | "\"city\":\"哈密\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"650500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新M\",\n" + |
| | | " \"Hp\": \"新M\",\n" + |
| | | "\"city\":\"巴音郭愣蒙古自治州\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"652800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新N\",\n" + |
| | | " \"Hp\": \"新N\",\n" + |
| | | "\"city\":\"阿克苏\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"652901\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新p\",\n" + |
| | | " \"Hp\": \"新P\",\n" + |
| | | "\"city\":\"克孜勒苏柯尔克孜自治州\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"653000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新Q\",\n" + |
| | | " \"Hp\": \"新Q\",\n" + |
| | | "\"city\":\"喀什\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"653101\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"新R\",\n" + |
| | | " \"Hp\": \"新R\",\n" + |
| | | "\"city\":\"和田\",\n" + |
| | | "\"province\":\"新疆\",\n" + |
| | | "\"pcode\":\"XJ\"\n" + |
| | | " \"Pcode\": \"XJ\",\n" + |
| | | " \"AreaCode\": \"653221\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣A\",\n" + |
| | | " \"Hp\": \"赣A\",\n" + |
| | | "\"city\":\"南昌\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"360121\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣B\",\n" + |
| | | " \"Hp\": \"赣B\",\n" + |
| | | "\"city\":\"赣州\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"360700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣C\",\n" + |
| | | " \"Hp\": \"赣C\",\n" + |
| | | "\"city\":\"宜春\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"360900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣D\",\n" + |
| | | " \"Hp\": \"赣D\",\n" + |
| | | "\"city\":\"吉安\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"360821\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣E\",\n" + |
| | | " \"Hp\": \"赣E\",\n" + |
| | | "\"city\":\"上饶\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"361121\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣F\",\n" + |
| | | " \"Hp\": \"赣F\",\n" + |
| | | "\"city\":\"抚州\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"361000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣G\",\n" + |
| | | " \"Hp\": \"赣G\",\n" + |
| | | "\"city\":\"九江\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"360421\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣H\",\n" + |
| | | " \"Hp\": \"赣H\",\n" + |
| | | "\"city\":\"景德镇\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"360200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣J\",\n" + |
| | | " \"Hp\": \"赣J\",\n" + |
| | | "\"city\":\"萍乡\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"360300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣K\",\n" + |
| | | " \"Hp\": \"赣K\",\n" + |
| | | "\"city\":\"新余\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"360500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣L\",\n" + |
| | | " \"Hp\": \"赣L\",\n" + |
| | | "\"city\":\"鹰潭\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": \"360600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"赣M\",\n" + |
| | | " \"Hp\": \"赣M\",\n" + |
| | | "\"city\":\"南昌,直系统\",\n" + |
| | | "\"province\":\"江西\",\n" + |
| | | "\"pcode\":\"JX\"\n" + |
| | | " \"Pcode\": \"JX\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘A\",\n" + |
| | | " \"Hp\": \"甘A\",\n" + |
| | | "\"city\":\"兰州\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"620100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘B\",\n" + |
| | | " \"Hp\": \"甘B\",\n" + |
| | | "\"city\":\"嘉峪关\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"620200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘C\",\n" + |
| | | " \"Hp\": \"甘C\",\n" + |
| | | "\"city\":\"金昌\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"620300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘D\",\n" + |
| | | " \"Hp\": \"甘D\",\n" + |
| | | "\"city\":\"白银\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"620402\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘E\",\n" + |
| | | " \"Hp\": \"甘E\",\n" + |
| | | "\"city\":\"天水\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"620500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘F\",\n" + |
| | | " \"Hp\": \"甘F\",\n" + |
| | | "\"city\":\"酒泉\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"620900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘G\",\n" + |
| | | " \"Hp\": \"甘G\",\n" + |
| | | "\"city\":\"张掖\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"620700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘H\",\n" + |
| | | " \"Hp\": \"甘H\",\n" + |
| | | "\"city\":\"武威\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"620600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘J\",\n" + |
| | | " \"Hp\": \"甘J\",\n" + |
| | | "\"city\":\"定西\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"621100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘K\",\n" + |
| | | " \"Hp\": \"甘K\",\n" + |
| | | "\"city\":\"陇南\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"621200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘L\",\n" + |
| | | " \"Hp\": \"甘L\",\n" + |
| | | "\"city\":\"平凉\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"620800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘M\",\n" + |
| | | " \"Hp\": \"甘M\",\n" + |
| | | "\"city\":\"庆阳\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"621000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘N\",\n" + |
| | | " \"Hp\": \"甘N\",\n" + |
| | | "\"city\":\"临夏回族自治州\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"622900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"甘p\",\n" + |
| | | " \"Hp\": \"甘P\",\n" + |
| | | "\"city\":\"甘南藏族自治州\",\n" + |
| | | "\"province\":\"甘肃\",\n" + |
| | | "\"pcode\":\"GS\"\n" + |
| | | " \"Pcode\": \"GS\",\n" + |
| | | " \"AreaCode\": \"623000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕A\",\n" + |
| | | " \"Hp\": \"陕A\",\n" + |
| | | "\"city\":\"西安\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕B\",\n" + |
| | | " \"Hp\": \"陕B\",\n" + |
| | | "\"city\":\"铜川\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕C\",\n" + |
| | | " \"Hp\": \"陕C\",\n" + |
| | | "\"city\":\"宝鸡\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕D\",\n" + |
| | | " \"Hp\": \"陕D\",\n" + |
| | | "\"city\":\"咸阳\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕E\",\n" + |
| | | " \"Hp\": \"陕E\",\n" + |
| | | "\"city\":\"渭南\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕F\",\n" + |
| | | " \"Hp\": \"陕F\",\n" + |
| | | "\"city\":\"汉中\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕G\",\n" + |
| | | " \"Hp\": \"陕G\",\n" + |
| | | "\"city\":\"安康\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610900\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕H\",\n" + |
| | | " \"Hp\": \"陕H\",\n" + |
| | | "\"city\":\"商洛\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"611000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕J\",\n" + |
| | | " \"Hp\": \"陕J\",\n" + |
| | | "\"city\":\"延安\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕K\",\n" + |
| | | " \"Hp\": \"陕K\",\n" + |
| | | "\"city\":\"榆林\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"陕V\",\n" + |
| | | " \"Hp\": \"陕V\",\n" + |
| | | "\"city\":\"杨凌高新农业示范区\",\n" + |
| | | "\"province\":\"陕西\",\n" + |
| | | "\"pcode\":\"SX\"\n" + |
| | | " \"Pcode\": \"SX\",\n" + |
| | | " \"AreaCode\": \"610403\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"贵A\",\n" + |
| | | " \"Hp\": \"贵A\",\n" + |
| | | "\"city\":\"贵阳\",\n" + |
| | | "\"province\":\"贵州\",\n" + |
| | | "\"pcode\":\"GZ\"\n" + |
| | | " \"Pcode\": \"GZ\",\n" + |
| | | " \"AreaCode\": \"520100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"贵B\",\n" + |
| | | " \"Hp\": \"贵B\",\n" + |
| | | "\"city\":\"六盘水\",\n" + |
| | | "\"province\":\"贵州\",\n" + |
| | | "\"pcode\":\"GZ\"\n" + |
| | | " \"Pcode\": \"GZ\",\n" + |
| | | " \"AreaCode\": \"520200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"贵C\",\n" + |
| | | " \"Hp\": \"贵C\",\n" + |
| | | "\"city\":\"遵义\",\n" + |
| | | "\"province\":\"贵州\",\n" + |
| | | "\"pcode\":\"GZ\"\n" + |
| | | " \"Pcode\": \"GZ\",\n" + |
| | | " \"AreaCode\": \"520300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"贵D\",\n" + |
| | | " \"Hp\": \"贵D\",\n" + |
| | | "\"city\":\"铜仁\",\n" + |
| | | "\"province\":\"贵州\",\n" + |
| | | "\"pcode\":\"GZ\"\n" + |
| | | " \"Pcode\": \"GZ\",\n" + |
| | | " \"AreaCode\": \"520600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"贵E\",\n" + |
| | | " \"Hp\": \"贵E\",\n" + |
| | | "\"city\":\"黔西南布依族苗族自治州\",\n" + |
| | | "\"province\":\"贵州\",\n" + |
| | | "\"pcode\":\"GZ\"\n" + |
| | | " \"Pcode\": \"GZ\",\n" + |
| | | " \"AreaCode\": \"522300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"贵F\",\n" + |
| | | " \"Hp\": \"贵F\",\n" + |
| | | "\"city\":\"毕节\",\n" + |
| | | "\"province\":\"贵州\",\n" + |
| | | "\"pcode\":\"GZ\"\n" + |
| | | " \"Pcode\": \"GZ\",\n" + |
| | | " \"AreaCode\": \"520500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"贵G\",\n" + |
| | | " \"Hp\": \"贵G\",\n" + |
| | | "\"city\":\"安顺\",\n" + |
| | | "\"province\":\"贵州\",\n" + |
| | | "\"pcode\":\"GZ\"\n" + |
| | | " \"Pcode\": \"GZ\",\n" + |
| | | " \"AreaCode\": \"520400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"贵H\",\n" + |
| | | " \"Hp\": \"贵H\",\n" + |
| | | "\"city\":\"黔东南苗族侗族自治州\",\n" + |
| | | "\"province\":\"贵州\",\n" + |
| | | "\"pcode\":\"GZ\"\n" + |
| | | " \"Pcode\": \"GZ\",\n" + |
| | | " \"AreaCode\": \"522600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"贵J\",\n" + |
| | | " \"Hp\": \"贵J\",\n" + |
| | | "\"city\":\"黔南布依族苗族自治州\",\n" + |
| | | "\"province\":\"贵州\",\n" + |
| | | "\"pcode\":\"GZ\"\n" + |
| | | " \"Pcode\": \"GZ\",\n" + |
| | | " \"AreaCode\": \"522700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"青A\",\n" + |
| | | " \"Hp\": \"青A\",\n" + |
| | | "\"city\":\"西宁\",\n" + |
| | | "\"province\":\"青海\",\n" + |
| | | "\"pcode\":\"QH\"\n" + |
| | | " \"Pcode\": \"QH\",\n" + |
| | | " \"AreaCode\": \"630100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"青B\",\n" + |
| | | " \"Hp\": \"青B\",\n" + |
| | | "\"city\":\"海东\",\n" + |
| | | "\"province\":\"青海\",\n" + |
| | | "\"pcode\":\"QH\"\n" + |
| | | " \"Pcode\": \"QH\",\n" + |
| | | " \"AreaCode\": \"630200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"青C\",\n" + |
| | | " \"Hp\": \"青C\",\n" + |
| | | "\"city\":\"海北藏族自治州\",\n" + |
| | | "\"province\":\"青海\",\n" + |
| | | "\"pcode\":\"QH\"\n" + |
| | | " \"Pcode\": \"QH\",\n" + |
| | | " \"AreaCode\": \"632200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"青D\",\n" + |
| | | " \"Hp\": \"青D\",\n" + |
| | | "\"city\":\"黄南藏族自治州\",\n" + |
| | | "\"province\":\"青海\",\n" + |
| | | "\"pcode\":\"QH\"\n" + |
| | | " \"Pcode\": \"QH\",\n" + |
| | | " \"AreaCode\": \"632300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"青E\",\n" + |
| | | " \"Hp\": \"青E\",\n" + |
| | | "\"city\":\"藏族自治州\",\n" + |
| | | "\"province\":\"青海\",\n" + |
| | | "\"pcode\":\"QH\"\n" + |
| | | " \"Pcode\": \"QH\",\n" + |
| | | " \"AreaCode\": \"632800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"青F\",\n" + |
| | | " \"Hp\": \"青F\",\n" + |
| | | "\"city\":\"果洛藏族自治州\",\n" + |
| | | "\"province\":\"青海\",\n" + |
| | | "\"pcode\":\"QH\"\n" + |
| | | " \"Pcode\": \"QH\",\n" + |
| | | " \"AreaCode\": \"632600\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"青G\",\n" + |
| | | " \"Hp\": \"青G\",\n" + |
| | | "\"city\":\"玉树藏族自治州\",\n" + |
| | | "\"province\":\"青海\",\n" + |
| | | "\"pcode\":\"QH\"\n" + |
| | | " \"Pcode\": \"QH\",\n" + |
| | | " \"AreaCode\": \"632700\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"青H\",\n" + |
| | | " \"Hp\": \"青H\",\n" + |
| | | "\"city\":\"海西蒙古族藏族自治州\",\n" + |
| | | "\"province\":\"青海\",\n" + |
| | | "\"pcode\":\"QH\"\n" + |
| | | " \"Pcode\": \"QH\",\n" + |
| | | " \"AreaCode\": \"632800\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"藏A\",\n" + |
| | | " \"Hp\": \"藏A\",\n" + |
| | | "\"city\":\"拉萨\",\n" + |
| | | "\"province\":\"西藏\",\n" + |
| | | "\"pcode\":\"XC\"\n" + |
| | | " \"Pcode\": \"XC\",\n" + |
| | | " \"AreaCode\": \"540100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"藏B\",\n" + |
| | | " \"Hp\": \"藏B\",\n" + |
| | | "\"city\":\"昌都地区\",\n" + |
| | | "\"province\":\"西藏\",\n" + |
| | | "\"pcode\":\"XC\"\n" + |
| | | " \"Pcode\": \"XC\",\n" + |
| | | " \"AreaCode\": \"540300\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"藏C\",\n" + |
| | | " \"Hp\": \"藏C\",\n" + |
| | | "\"city\":\"山南地区\",\n" + |
| | | "\"province\":\"西藏\",\n" + |
| | | "\"pcode\":\"XC\"\n" + |
| | | " \"Pcode\": \"XC\",\n" + |
| | | " \"AreaCode\": \"542200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"藏D\",\n" + |
| | | " \"Hp\": \"藏D\",\n" + |
| | | "\"city\":\"日喀则地区\",\n" + |
| | | "\"province\":\"西藏\",\n" + |
| | | "\"pcode\":\"XC\"\n" + |
| | | " \"Pcode\": \"XC\",\n" + |
| | | " \"AreaCode\": \"540200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"藏E\",\n" + |
| | | " \"Hp\": \"藏E\",\n" + |
| | | "\"city\":\"那曲地区\",\n" + |
| | | "\"province\":\"西藏\",\n" + |
| | | "\"pcode\":\"XC\"\n" + |
| | | " \"Pcode\": \"XC\",\n" + |
| | | " \"AreaCode\": \"542400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"藏F\",\n" + |
| | | " \"Hp\": \"藏F\",\n" + |
| | | "\"city\":\"阿里地区\",\n" + |
| | | "\"province\":\"西藏\",\n" + |
| | | "\"pcode\":\"XC\"\n" + |
| | | " \"Pcode\": \"XC\",\n" + |
| | | " \"AreaCode\": \"542500\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"藏G\",\n" + |
| | | " \"Hp\": \"藏G\",\n" + |
| | | "\"city\":\"林芝地区\",\n" + |
| | | "\"province\":\"西藏\",\n" + |
| | | "\"pcode\":\"XC\"\n" + |
| | | " \"Pcode\": \"XC\",\n" + |
| | | " \"AreaCode\": \"540400\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"藏H\",\n" + |
| | | " \"Hp\": \"藏H\",\n" + |
| | | "\"city\":\"天全县车辆管理所\",\n" + |
| | | "\"province\":\"西藏\",\n" + |
| | | "\"pcode\":\"XC\"\n" + |
| | | " \"Pcode\": \"XC\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"藏J\",\n" + |
| | | " \"Hp\": \"藏J\",\n" + |
| | | "\"city\":\"格尔木车辆管理所\",\n" + |
| | | "\"province\":\"西藏\",\n" + |
| | | "\"pcode\":\"XC\"\n" + |
| | | " \"Pcode\": \"XC\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"琼A\",\n" + |
| | | " \"Hp\": \"琼A\",\n" + |
| | | "\"city\":\"海口\",\n" + |
| | | "\"province\":\"海南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"460100\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"琼B\",\n" + |
| | | " \"Hp\": \"琼B\",\n" + |
| | | "\"city\":\"三亚\",\n" + |
| | | "\"province\":\"海南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"460200\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"琼C\",\n" + |
| | | " \"Hp\": \"琼C\",\n" + |
| | | "\"city\":\"琼海\",\n" + |
| | | "\"province\":\"海南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"469002\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"琼D\",\n" + |
| | | " \"Hp\": \"琼D\",\n" + |
| | | "\"city\":\"五指山\",\n" + |
| | | "\"province\":\"海南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": \"469001\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"琼E\",\n" + |
| | | " \"Hp\": \"琼E\",\n" + |
| | | "\"city\":\"洋浦开发区\",\n" + |
| | | "\"province\":\"海南\",\n" + |
| | | "\"pcode\":\"HN\"\n" + |
| | | " \"Pcode\": \"HN\",\n" + |
| | | " \"AreaCode\": null\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"沪A\",\n" + |
| | | " \"Hp\": \"沪A\",\n" + |
| | | "\"city\":\"上海\",\n" + |
| | | "\"province\":\"上海\",\n" + |
| | | "\"pcode\":\"SH\"\n" + |
| | | " \"Pcode\": \"SH\",\n" + |
| | | " \"AreaCode\": \"310000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"沪B\",\n" + |
| | | " \"Hp\": \"沪B\",\n" + |
| | | "\"city\":\"上海\",\n" + |
| | | "\"province\":\"上海\",\n" + |
| | | "\"pcode\":\"SH\"\n" + |
| | | " \"Pcode\": \"SH\",\n" + |
| | | " \"AreaCode\": \"310000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"沪C\",\n" + |
| | | " \"Hp\": \"沪C\",\n" + |
| | | "\"city\":\"上海\",\n" + |
| | | "\"province\":\"上海\",\n" + |
| | | "\"pcode\":\"SH\"\n" + |
| | | " \"Pcode\": \"SH\",\n" + |
| | | " \"AreaCode\": \"310000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"沪D\",\n" + |
| | | " \"Hp\": \"沪D\",\n" + |
| | | "\"city\":\"上海\",\n" + |
| | | "\"province\":\"上海\",\n" + |
| | | "\"pcode\":\"SH\"\n" + |
| | | " \"Pcode\": \"SH\",\n" + |
| | | " \"AreaCode\": \"310000\"\n" + |
| | | "},\n" + |
| | | "{\n" + |
| | | "\"code\":\"沪R\",\n" + |
| | | "\"city\":\"崇明、长兴、横沙\",\n" + |
| | | " \"Hp\": \"沪R\",\n" + |
| | | " \"city\": \"崇明\",\n" + |
| | | "\"province\":\"上海\",\n" + |
| | | "\"pcode\":\"SH\"\n" + |
| | | " \"Pcode\": \"SH\",\n" + |
| | | " \"AreaCode\": \"310151\"\n" + |
| | | "}\n" + |
| | | "]}"; |
| | | " ]\n" + |
| | | "}\n" + |
| | | "\n"; |
| | | String hp = num.substring(0, 2);// |
| | | JSONObject jsonObject = JSONObject.parseObject(jsonStr); |
| | | JSONArray data = jsonObject.getJSONArray("date"); |
| | | JSONArray data = jsonObject.getJSONArray("codeInfo"); |
| | | List<CarNumDto> carNumDtos = JSONObject.parseArray(data.toJSONString(), CarNumDto.class); |
| | | CarNumDto carNumDto = new CarNumDto(); |
| | | for (CarNumDto carNumDtoTemp : carNumDtos) { |
| | | if (carNumDtoTemp.getCode().equals(hp)) { |
| | | if (carNumDtoTemp.getHp().equals(hp)) { |
| | | carNumDto.setCity(carNumDtoTemp.getCity()); |
| | | carNumDto.setCode(carNumDtoTemp.getCode()); |
| | | carNumDto.setHp(carNumDtoTemp.getHp()); |
| | | carNumDto.setProvince(carNumDtoTemp.getProvince()); |
| | | carNumDto.setAreaCode(carNumDtoTemp.getAreaCode()); |
| | | break; |
| | | } |
| | | } |
| | |
| | | private OtherClient otherClient; |
| | | @Resource |
| | | private TAppCouponService appCouponService; |
| | | public void sendVip(TAppUser nowUser,Integer vipId,Integer plusDay){ |
| | | public void sendVip(TAppUser nowUser,Integer vipId,Integer plusDay,Integer type){ |
| | | if (nowUser.getVipEndTime()==null||nowUser.getVipEndTime().isBefore(LocalDateTime.now())) { |
| | | |
| | | nowUser.setVipEndTime(LocalDateTime.now().plusMonths(plusDay)); |
| | | |
| | | nowUser.setVipEndTime(LocalDateTime.now().plusMonths(plusDay).minusDays(1)); |
| | | nowUser.setVipId(vipId); |
| | | //直接再detail里新增数据,因为不是续费 |
| | | TAppUserVipDetail tAppUserVipDetail = new TAppUserVipDetail(); |
| | | tAppUserVipDetail.setAppUserId(nowUser.getId()); |
| | |
| | | tAppUserVipDetail.setChargeNum(vip.getDiscountTimes()); |
| | | tAppUserVipDetail.setDiscountMoney(vip.getMaximumDeduction()); |
| | | tAppUserVipDetail.setSendMonth(1); |
| | | tAppUserVipDetail.setVipJson(JSON.toJSONString(info.getData())); |
| | | tAppUserVipDetail.setVipType(type); |
| | | tAppUserVipDetailService.save(tAppUserVipDetail); |
| | | //直接赠送优惠卷 |
| | | for (SendCouponDto sendCouponDto : javaList) { |
| | |
| | | |
| | | |
| | | }else { |
| | | nowUser.setVipEndTime(nowUser.getVipEndTime().plusDays(plusDay).minusDays(1)); |
| | | // nowUser.setVipEndTime(nowUser.getVipEndTime().plusDays(plusDay).minusDays(1)); |
| | | //获取detail里结束时间大于当前时间的数据,并将enttime延长 |
| | | TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getVipId,vipId).eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one(); |
| | | if (tAppUserVipDetail!=null) { |
| | | List<TAppUserVipDetail> list = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).ge(TAppUserVipDetail::getStartTime, tAppUserVipDetail.getEndTime()).list(); |
| | | for (TAppUserVipDetail appUserVipDetail : list) { |
| | | appUserVipDetail.setStartTime(appUserVipDetail.getStartTime().plusMonths(plusDay).minusDays(1)); |
| | | appUserVipDetail.setEndTime(appUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); |
| | | } |
| | | tAppUserVipDetailService.updateBatchById(list); |
| | | tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); |
| | | |
| | | tAppUserVipDetailService.updateById(tAppUserVipDetail); |
| | | }else { |
| | | // TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getVipId,vipId).eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one(); |
| | | // if (tAppUserVipDetail!=null) { |
| | | // List<TAppUserVipDetail> list = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).ge(TAppUserVipDetail::getStartTime, tAppUserVipDetail.getEndTime()).list(); |
| | | // for (TAppUserVipDetail appUserVipDetail : list) { |
| | | // appUserVipDetail.setStartTime(appUserVipDetail.getStartTime().plusMonths(plusDay).minusDays(1)); |
| | | // appUserVipDetail.setEndTime(appUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); |
| | | // } |
| | | // tAppUserVipDetailService.updateBatchById(list); |
| | | // tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1)); |
| | | // |
| | | // tAppUserVipDetailService.updateById(tAppUserVipDetail); |
| | | // }else |
| | | // { |
| | | TAppUserVipDetail tAppUserVipDetail2 = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one(); |
| | | |
| | | TAppUserVipDetail tAppUserVipDetail1 = new TAppUserVipDetail(); |
| | |
| | | |
| | | R<TVip> info = vipClient.getInfo1(vipId); |
| | | TVip vip = info.getData(); |
| | | List<SendCouponDto> javaList = new ArrayList<>(); |
| | | if (vip.getCoupon()!=null) { |
| | | javaList = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class); |
| | | } |
| | | |
| | | |
| | | tAppUserVipDetail1.setCouponIds(vip.getCoupon()); |
| | | tAppUserVipDetail1.setSendChargeNum(vip.getDiscountTimes()); |
| | | tAppUserVipDetail1.setChargeNum(vip.getDiscountTimes()); |
| | | tAppUserVipDetail1.setDiscountMoney(vip.getMaximumDeduction()); |
| | | tAppUserVipDetail1.setSendMonth(1); |
| | | tAppUserVipDetail1.setVipType(type); |
| | | tAppUserVipDetail1.setVipJson(JSON.toJSONString(info.getData())); |
| | | tAppUserVipDetailService.save(tAppUserVipDetail1); |
| | | |
| | | } |
| | | // } |
| | | |
| | | } |
| | | |
| | |
| | | server: |
| | | port: 9200 |
| | | tomcat: |
| | | basedir: /data/tomcat |
| | | # Spring |
| | | spring: |
| | | application: |
| | |
| | | shared-configs: |
| | | - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} |
| | | --- |
| | | |
| | | seata: |
| | | enabled: true |
| | | application-id: ${spring.application.name} |
| | |
| | | config: |
| | | type: nacos |
| | | nacos: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | data-id: seata-server.properties |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # data-id: seata-server.properties |
| | | # username: nacos |
| | | # password: nacos |
| | | registry: |
| | | type: nacos |
| | | nacos: |
| | | application: seata-server |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # username: nacos |
| | | # password: nacos |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 # nacos注册中心地址 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 |
| | | group: DEFAULT_GROUP |
| | | application: seata-server #Nacos 中 Seata 名称 |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # application: seata-server #Nacos 中 Seata 名称 |
| | | # username: nacos |
| | | # password: nacos |
| | | sentinel: |
| | | transport: |
| | | dashboard: 127.0.0.1:8080 # Sentinel控制台地址 |
| | | dashboard: 192.168.0.137:8080 # Sentinel控制台地址 |
| | | eager: true |
| | | |
| | | |
| | | --- |
| | | spring: |
| | | config: |
| | |
| | | nacos: |
| | | discovery: |
| | | # 服务注册地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | service: ${spring.application.name} |
| | | group: DEFAULT_GROUP |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | config: |
| | | # 配置中心地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | group: DEFAULT_GROUP |
| | | name: ${spring.application.name} |
| | | # 配置文件格式 |
| | |
| | | import org.mybatis.spring.annotation.MapperScan; |
| | | import org.springframework.boot.SpringApplication; |
| | | import org.springframework.boot.autoconfigure.SpringBootApplication; |
| | | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; |
| | | import org.springframework.boot.web.servlet.ServletComponentScan; |
| | | import org.springframework.scheduling.annotation.EnableScheduling; |
| | | import org.springframework.transaction.annotation.EnableTransactionManagement; |
| | |
| | | * @param number |
| | | * @return |
| | | */ |
| | | @PostMapping("/getSiteInfoByNumber") |
| | | @GetMapping("/getSiteInfoByNumber") |
| | | @ApiOperation(value = "扫一扫后通过桩编号获取电站信息", tags = {"小程序-扫一扫"}) |
| | | public R<SiteInfoVO> getSiteInfoByNumber(@RequestParam("number") String number){ |
| | | SiteInfoVO siteInfoVO = new SiteInfoVO(); |
| | | TChargingPile one = chargingPileService.lambdaQuery().eq(TChargingPile::getNumber, number).one(); |
| | | TChargingPile one = chargingPileService.lambdaQuery().eq(TChargingPile::getCode, number).one(); |
| | | Site byId = siteService.getById(one.getSiteId()); |
| | | TAccountingStrategy byId1 = accountingStrategyService.getById(byId.getAccountingStrategyId()); |
| | | List<TAccountingStrategyDetail> list = accountingStrategyDetailService.lambdaQuery().eq(TAccountingStrategyDetail::getAccountingStrategyId, byId1.getId()).list(); |
| | |
| | | siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().multiply(byId1.getDiscount()).setScale(4, BigDecimal.ROUND_HALF_UP)); |
| | | } |
| | | } |
| | | siteInfoVO.setChargingPileId(one.getId()); |
| | | siteInfoVO.setName(byId.getName()); |
| | | siteInfoVO.setNumber(one.getNumber().toString()); |
| | | siteInfoVO.setSpaceChargeExplain(byId.getSpaceChargeExplain()); |
| | | return R.ok(siteInfoVO); |
| | | } |
| | | |
| | | |
| | | @GetMapping("/getSiteList") |
| | | @ApiOperation(value = "获取站点列表", tags = {"管理后台-站点管理"}) |
| | | public AjaxResult<PageInfo<GetSiteListDTO>> getSiteList(GetSiteList siteList){ |
| | |
| | | package com.ruoyi.chargingPile.controller; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.account.api.feignClient.AppUserClient; |
| | | import com.ruoyi.chargingPile.api.dto.TAccountingStrategyDTO; |
| | | import com.ruoyi.chargingPile.api.model.*; |
| | | import com.ruoyi.chargingPile.api.query.TAccountingStrategyQuery; |
| | |
| | | import com.ruoyi.chargingPile.service.TChargingPileService; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.dto.SteategyPassDto; |
| | | import com.ruoyi.common.core.enums.AuditStateEnum; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.common.core.web.domain.BaseDelete; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.common.log.annotation.Log; |
| | | import com.ruoyi.common.log.enums.BusinessType; |
| | | import com.ruoyi.common.log.enums.OperatorType; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | private TChargingPileService chargingPileService; |
| | | @Autowired |
| | | private ISiteService siteService; |
| | | @Autowired |
| | | private SysUserClient sysUserClient; |
| | | @Resource |
| | | private TokenService tokenService; |
| | | private SysUserClient sysUserClient; |
| | | |
| | | @Autowired |
| | | public TAccountingStrategyController(TAccountingStrategyService accountingStrategyService, TAccountingStrategyDetailService accountingStrategyDetailService) { |
| | |
| | | return AjaxResult.error("同阶段费率值需一致"); |
| | | } |
| | | // 判断修改的计费策略是否为已通过 |
| | | if(dto.getAuditStatus() == 3 || dto.getAuditStatus() == 4){ |
| | | if(null != dto.getAuditStatus() && (dto.getAuditStatus() == 3 || dto.getAuditStatus() == 4)){ |
| | | // 查询是否有下级审核中的策略 |
| | | TAccountingStrategy children = accountingStrategyService.getOne(Wrappers.lambdaQuery(TAccountingStrategy.class) |
| | | .eq(TAccountingStrategy::getParentId, dto.getId()) |
| | |
| | | |
| | | } |
| | | }else { |
| | | if (byId.getAuditStatus()==1){ |
| | | |
| | | byId.setFirstRemark(steategyPassDto.getRemark()); |
| | | |
| | | }else if (byId.getAuditStatus()==2){ |
| | | byId.setTwoRemark(steategyPassDto.getRemark()); |
| | | } |
| | | |
| | | byId.setAuditStatus(4); |
| | | } |
| | | accountingStrategyService.updateById(byId); |
| | |
| | | |
| | | @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "列表") |
| | | @PostMapping(value = "/page") |
| | | public AjaxResult<Page<TApplyChargingPile>> page(ApplyChargingQuery applyChargingQuery) { |
| | | public AjaxResult<Page<TApplyChargingPile>> page(@RequestBody ApplyChargingQuery applyChargingQuery) { |
| | | Page<TApplyChargingPile> page = applyChargingPileService.lambdaQuery() |
| | | .like(applyChargingQuery.getLandlordPhone() != null && !applyChargingQuery.getLandlordPhone().equals(""), TApplyChargingPile::getLandlordPhone, applyChargingQuery.getLandlordPhone()) |
| | | .page(Page.of(applyChargingQuery.getPageCurr(), applyChargingQuery.getPageSize())); |
| | |
| | | package com.ruoyi.chargingPile.controller; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.ruoyi.chargingPile.api.model.TChargingGun; |
| | | import com.ruoyi.chargingPile.api.model.TChargingPile; |
| | |
| | | import com.ruoyi.chargingPile.dto.ChargingGunCountMonitoring; |
| | | import com.ruoyi.chargingPile.dto.ChargingGunMonitoring; |
| | | import com.ruoyi.chargingPile.dto.GetChargingGunMonitoring; |
| | | import com.ruoyi.chargingPile.service.TChargingGunService; |
| | | import com.ruoyi.chargingPile.service.TChargingPileService; |
| | | import com.ruoyi.chargingPile.service.*; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | |
| | | import com.ruoyi.common.log.annotation.Log; |
| | | import com.ruoyi.common.log.enums.BusinessType; |
| | | import com.ruoyi.common.log.enums.OperatorType; |
| | | import com.ruoyi.other.api.domain.TVip; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | |
| | | private final TChargingPileService chargingPileService; |
| | | private final TChargingGunService chargingGunService; |
| | | |
| | | @Resource |
| | | private TAccountingStrategyService accountingStrategyService; |
| | | |
| | | @Resource |
| | | private TAccountingStrategyDetailService accountingStrategyDetailService; |
| | | |
| | | |
| | | @Autowired |
| | |
| | | TChargingPile chargingPile = chargingPileService.getById(id); |
| | | return R.ok(chargingPile); |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | import org.apache.logging.log4j.core.config.Order; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpStatus; |
| | |
| | | return; |
| | | } |
| | | } |
| | | filterChain.doFilter(request, response); |
| | | filterChain.doFilter(servletRequest, servletResponse); |
| | | } |
| | | |
| | | |
| | |
| | | * @param siteIds |
| | | * @return |
| | | */ |
| | | Map<Integer, Integer> getModeStatistics(@Param("siteIds")List<Integer> siteIds); |
| | | List<Map<Integer, Integer>> getModeStatistics(@Param("siteIds")List<Integer> siteIds); |
| | | |
| | | /** |
| | | * 统计充电枪状态 |
| | |
| | | import com.ruoyi.system.api.feignClient.SysUserRoleClient; |
| | | import com.ruoyi.system.api.model.GetSysRoleByIds; |
| | | import com.ruoyi.system.api.model.SysUserRoleVo; |
| | | import io.seata.core.context.RootContext; |
| | | import io.seata.core.exception.TransactionException; |
| | | import io.seata.spring.annotation.GlobalTransactional; |
| | | import io.seata.tm.api.GlobalTransactionContext; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | @Override |
| | | @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 |
| | | public AjaxResult addPartner(Partner partner) { |
| | | System.err.println("事务ID:" + RootContext.getXID()); |
| | | //校验参数和重复数据 |
| | | AjaxResult ajaxResult = addPartnerParameterCheck(partner); |
| | | if(ajaxResult.isError()){ |
| | |
| | | user.setRoleId(partner.getRoleId().longValue()); |
| | | user.setRoleType(2); |
| | | user.setObjectId(partner.getId()); |
| | | sysUserClient.addSysUser(user); |
| | | R r = sysUserClient.addSysUser(user); |
| | | if(r.getCode() != 200){ |
| | | // 手动进行全局事务回滚 |
| | | try { |
| | | GlobalTransactionContext.getCurrent().rollback(); |
| | | } catch (TransactionException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return AjaxResult.error(r.getMsg()); |
| | | } |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | |
| | | List<TAccountingStrategyVO> list = this.baseMapper.pageList(query,pageInfo); |
| | | List<Integer> parentIds = list.stream().map(TAccountingStrategyVO::getId).collect(Collectors.toList()); |
| | | List<TAccountingStrategy> list1 = this.list(Wrappers.lambdaQuery(TAccountingStrategy.class) |
| | | .in(TAccountingStrategy::getParentId, parentIds) |
| | | .in(!parentIds.isEmpty(),TAccountingStrategy::getParentId, parentIds) |
| | | .in(TAccountingStrategy::getAuditStatus, Arrays.asList(1,2))); |
| | | for (TAccountingStrategyVO tAccountingStrategyVO : list) { |
| | | SysUser data = sysUserClient.getSysUser(tAccountingStrategyVO.getUserId()).getData(); |
| | |
| | | GunStatusStatisticsVO gunStatusStatisticsVO = new GunStatusStatisticsVO(); |
| | | |
| | | if(CollectionUtils.isEmpty(siteIds)){ |
| | | Map<Integer, Integer> modeStatisticsNull = new HashMap<>(); |
| | | modeStatisticsNull.put(1, 0); |
| | | modeStatisticsNull.put(2, 0); |
| | | modeStatisticsNull.put(3, 0); |
| | | List<Map<Integer, Integer>> modeStatisticsNull = new ArrayList<>(); |
| | | modeStatisticsNull.add(new HashMap<>(1,0)); |
| | | modeStatisticsNull.add(new HashMap<>(2,0)); |
| | | modeStatisticsNull.add(new HashMap<>(3,0)); |
| | | gunStatusStatisticsVO.setModeStatistics(modeStatisticsNull); |
| | | Map<Integer, Integer> statusStatisticsNull = new HashMap<>(); |
| | | statusStatisticsNull.put(1, 0); |
| | |
| | | gunStatusStatisticsVO.setStatusModeStatistics(statusModeStatistics); |
| | | } |
| | | |
| | | Map<Integer, Integer> modeStatistics = this.baseMapper.getModeStatistics(siteIds); |
| | | List<Map<Integer, Integer>> modeStatistics = this.baseMapper.getModeStatistics(siteIds); |
| | | if(CollectionUtils.isEmpty(modeStatistics)){ |
| | | Map<Integer, Integer> modeStatistics1 = new HashMap<>(3,0); |
| | | modeStatistics1.put(1, 0); |
| | | modeStatistics1.put(2, 0); |
| | | modeStatistics1.put(3, 0); |
| | | modeStatistics.add(modeStatistics1); |
| | | } |
| | | gunStatusStatisticsVO.setModeStatistics(modeStatistics); |
| | | |
| | | Map<Integer, Integer> statusStatistics = new HashMap<>(); |
| | | List<Map<Integer, Integer>> statusStatistics = new ArrayList<>(); |
| | | // 离线 |
| | | Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(TChargingGun.class) |
| | | .eq(TChargingGun::getStatus, 1)); |
| | | statusStatistics.put(1, count.intValue()); |
| | | statusStatistics.add(new HashMap<>(1,count.intValue())); |
| | | // statusStatistics.put(1, count.intValue()); |
| | | // 故障 |
| | | count = this.baseMapper.selectCount(Wrappers.lambdaQuery(TChargingGun.class) |
| | | .eq(TChargingGun::getStatus, 7)); |
| | | statusStatistics.put(2, count.intValue()); |
| | | statusStatistics.add(new HashMap<>(2,count.intValue())); |
| | | |
| | | // statusStatistics.put(2, count.intValue()); |
| | | // 充电中 |
| | | count = this.baseMapper.selectCount(Wrappers.lambdaQuery(TChargingGun.class) |
| | | .in(TChargingGun::getStatus, Arrays.asList(3,4,5,6))); |
| | | statusStatistics.put(3, count.intValue()); |
| | | statusStatistics.add(new HashMap<>(3,count.intValue())); |
| | | |
| | | // statusStatistics.put(3, count.intValue()); |
| | | gunStatusStatisticsVO.setModeStatistics(statusStatistics); |
| | | |
| | | List<StatusModeStatisticsVO> statusModeStatisticsVOS = new ArrayList<>(); |
| | |
| | | } |
| | | } |
| | | }else{ |
| | | siteIds = new HashSet<>(siteId); |
| | | siteIds = new HashSet<>(); |
| | | siteIds.add(siteId); |
| | | } |
| | | PageInfo<TChargingPileNotification> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize()); |
| | | List<TChargingPileNotification> list = this.baseMapper.chargingPileNotificationPageList(pageInfo, siteIds); |
| | |
| | | server: |
| | | port: 9300 |
| | | tomcat: |
| | | basedir: /data/tomcat |
| | | # Spring |
| | | spring: |
| | | application: |
| | |
| | | # 共享配置 |
| | | shared-configs: |
| | | - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} |
| | | |
| | | --- |
| | | |
| | | seata: |
| | | enabled: true |
| | | application-id: ${spring.application.name} |
| | | tx-service-group: seata_tx_group #此处配置自定义的seata事务分组名称 |
| | | enable-auto-data-source-proxy: false #关闭数据库代理 |
| | | enable-auto-data-source-proxy: false |
| | | service: |
| | | vgroup-mapping: |
| | | seata_tx_group: default |
| | |
| | | config: |
| | | type: nacos |
| | | nacos: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | data-id: seata-server.properties |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # data-id: seata-server.properties |
| | | # username: nacos |
| | | # password: nacos |
| | | registry: |
| | | type: nacos |
| | | nacos: |
| | | application: seata-server |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # username: nacos |
| | | # password: nacos |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 # nacos注册中心地址 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 |
| | | group: DEFAULT_GROUP |
| | | application: seata-server #Nacos 中 Seata 名称 |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # application: seata-server #Nacos 中 Seata 名称 |
| | | # username: nacos |
| | | # password: nacos |
| | | sentinel: |
| | | transport: |
| | | dashboard: 127.0.0.1:8080 # Sentinel控制台地址 |
| | |
| | | nacos: |
| | | discovery: |
| | | # 服务注册地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | service: ${spring.application.name} |
| | | group: DEFAULT_GROUP |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | config: |
| | | # 配置中心地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | group: DEFAULT_GROUP |
| | | name: ${spring.application.name} |
| | | # 配置文件格式 |
| | |
| | | <select id="getStatusModeStatistics" resultType="com.ruoyi.chargingPile.api.vo.StatusModeStatisticsVO"> |
| | | SELECT |
| | | charge_mode, |
| | | IFNULL((SELECT COUNT(*) FROM your_table WHERE status = 2),0) AS freeCount, |
| | | IFNULL((SELECT COUNT(*) FROM your_table WHERE status = 5),0) AS filledCount, |
| | | IFNULL((SELECT COUNT(*) FROM your_table WHERE status = 3),0) AS insertCount, |
| | | IFNULL((SELECT COUNT(*) FROM your_table WHERE status = 4),0) AS chargingCount |
| | | IFNULL((SELECT COUNT(*) FROM t_charging_gun WHERE status = 2),0) AS freeCount, |
| | | IFNULL((SELECT COUNT(*) FROM t_charging_gun WHERE status = 5),0) AS filledCount, |
| | | IFNULL((SELECT COUNT(*) FROM t_charging_gun WHERE status = 3),0) AS insertCount, |
| | | IFNULL((SELECT COUNT(*) FROM t_charging_gun WHERE status = 4),0) AS chargingCount |
| | | FROM t_charging_gun |
| | | WHERE del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} AND charge_mode = #{chargeMode} |
| | | <if test="siteIds != null and siteIds.size()>0"> |
| | |
| | | #{siteId} |
| | | </foreach> |
| | | </if> |
| | | GROUP BY charge_mode |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | /** |
| | | * 创建设备 |
| | | * @param productId 产品ID |
| | | * @param nodeId 设备标识码 通常使用IMEI、MAC地址或Serial No作为node_id |
| | | * @param deviceId 设备ID 使用设备标识码 |
| | | * @param nodeId 设备标识码 设备编号 |
| | | * @param deviceName 设备名称 |
| | | * @param description 设备描述 |
| | | * @return AddDeviceResponse |
| | | */ |
| | | public AddDeviceResponse addDeviceRequest(String productId,String nodeId,String deviceId,String deviceName,String description) { |
| | | public AddDeviceResponse addDeviceRequest(String productId,String nodeId,String deviceName,String description) { |
| | | AddDeviceRequest request = new AddDeviceRequest(); |
| | | AddDevice body = new AddDevice(); |
| | | body.withDeviceId(deviceId); |
| | | body.withDeviceId(nodeId); |
| | | body.withNodeId(nodeId); |
| | | body.withDeviceName(deviceName); |
| | | body.withProductId(productId); |
| | |
| | | import com.ruoyi.integration.iotda.utils.tools.StrategyUtil; |
| | | import com.ruoyi.integration.rocket.model.*; |
| | | import com.ruoyi.integration.rocket.produce.EnhanceProduce; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.rocketmq.client.producer.SendResult; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | |
| | | */ |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/iot") |
| | | public class IotMessageListener { |
| | | |
| | | @Autowired |
| | |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | @PostMapping(value = "/message/sendMessage") |
| | | public R sendMessage() { |
| | | |
| | | @ApiOperation(value = "运营平台远程控制启机",tags = {"硬件接口"}) |
| | | @GetMapping(value = "/platformStartCharging") |
| | | public R platformStartCharging(String orderNum,String deviceId,Long orderId,BigDecimal money) { |
| | | // 运营平台远程控制启机 |
| | | // PlatformStartCharging platformStartCharging = new PlatformStartCharging(); |
| | | // platformStartCharging.setTransaction_serial_number("4200002375202409185150427245"); |
| | | // platformStartCharging.setCharging_pile_code("3401231001200202"); |
| | | // platformStartCharging.setCharging_gun_code("1"); |
| | | // platformStartCharging.setCard_number("1833063878153543681"); |
| | | // platformStartCharging.setAccount_balance(new BigDecimal(50)); |
| | | // String message = iotMessageProduce.sendMessage(platformStartCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_START_CHARGING.getKey(), messageUtil.platformStartCharging(platformStartCharging)); |
| | | PlatformStartCharging platformStartCharging = new PlatformStartCharging(); |
| | | platformStartCharging.setTransaction_serial_number(orderNum); |
| | | platformStartCharging.setCharging_pile_code(deviceId); |
| | | platformStartCharging.setCharging_gun_code("1"); |
| | | platformStartCharging.setCard_number(orderId.toString()); |
| | | platformStartCharging.setAccount_balance(money); |
| | | String message = iotMessageProduce.sendMessage(platformStartCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_START_CHARGING.getKey(), messageUtil.platformStartCharging(platformStartCharging)); |
| | | return R.ok(message); |
| | | } |
| | | |
| | | @ApiOperation(value = "运营平台远程停机",tags = {"硬件接口"}) |
| | | @GetMapping(value = "/platformStopCharging") |
| | | public R platformStopCharging(String deviceId) { |
| | | // 运营平台远程停机 |
| | | // PlatformStopCharging platformStopCharging = new PlatformStopCharging(); |
| | | // platformStopCharging.setCharging_pile_code("3401231001200202"); |
| | | // platformStopCharging.setCharging_gun_code("1"); |
| | | // String message = iotMessageProduce.sendMessage(platformStopCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_STOP_CHARGING.getKey(),messageUtil.platformStopCharging(platformStopCharging)); |
| | | PlatformStopCharging platformStopCharging = new PlatformStopCharging(); |
| | | platformStopCharging.setCharging_pile_code(deviceId); |
| | | platformStopCharging.setCharging_gun_code("1"); |
| | | String message = iotMessageProduce.sendMessage(platformStopCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_STOP_CHARGING.getKey(),messageUtil.platformStopCharging(platformStopCharging)); |
| | | return R.ok(message); |
| | | } |
| | | |
| | | @ApiOperation(value = "修改余额",tags = {"硬件接口"}) |
| | | @GetMapping(value = "/updateBalance") |
| | | public R updateBalance(String deviceId,Long orderId) { |
| | | // 修改余额 |
| | | // UpdateBalance updateBalance = new UpdateBalance(); |
| | | // updateBalance.setCharging_pile_code("3401231001200202"); |
| | | // updateBalance.setCharging_gun_code("1"); |
| | | // updateBalance.setPhysical_card_number("1833063878153543681"); |
| | | // updateBalance.setAccount_balance(new BigDecimal(20)); |
| | | // String message = iotMessageProduce.sendMessage(updateBalance.getCharging_pile_code(), ServiceIdMenu.UPDATE_BALANCE.getKey(),messageUtil.updateBalance(updateBalance)); |
| | | UpdateBalance updateBalance = new UpdateBalance(); |
| | | updateBalance.setCharging_pile_code(deviceId); |
| | | updateBalance.setCharging_gun_code("1"); |
| | | updateBalance.setPhysical_card_number(orderId.toString()); |
| | | updateBalance.setAccount_balance(new BigDecimal(20)); |
| | | String message = iotMessageProduce.sendMessage(updateBalance.getCharging_pile_code(), ServiceIdMenu.UPDATE_BALANCE.getKey(),messageUtil.updateBalance(updateBalance)); |
| | | return R.ok(message); |
| | | } |
| | | |
| | | @ApiOperation(value = "充电桩工作参数设置",tags = {"硬件接口"}) |
| | | @GetMapping(value = "/workingParameterSetting") |
| | | public R workingParameterSetting(String deviceId) { |
| | | // 充电桩工作参数设置 |
| | | // WorkingParameterSetting workingParameterSetting = new WorkingParameterSetting(); |
| | | // workingParameterSetting.setCharging_pile_code("3401231001200202"); |
| | | // workingParameterSetting.setAllow_work(0); |
| | | // workingParameterSetting.setMaximum_output_power(220); |
| | | // String message = iotMessageProduce.sendMessage(workingParameterSetting.getCharging_pile_code(), ServiceIdMenu.WORKING_PARAMETER_SETTING.getKey(),messageUtil.workingParameterSetting(workingParameterSetting)); |
| | | WorkingParameterSetting workingParameterSetting = new WorkingParameterSetting(); |
| | | workingParameterSetting.setCharging_pile_code(deviceId); |
| | | workingParameterSetting.setAllow_work(0); |
| | | workingParameterSetting.setMaximum_output_power(220); |
| | | String message = iotMessageProduce.sendMessage(workingParameterSetting.getCharging_pile_code(), ServiceIdMenu.WORKING_PARAMETER_SETTING.getKey(),messageUtil.workingParameterSetting(workingParameterSetting)); |
| | | return R.ok(message); |
| | | } |
| | | |
| | | @ApiOperation(value = "对时设置",tags = {"硬件接口"}) |
| | | @GetMapping(value = "/timingSetting") |
| | | public R timingSetting(String deviceId) { |
| | | // 对时设置 |
| | | // TimingSetting timingSetting = new TimingSetting(); |
| | | // timingSetting.setCharging_pile_code("3401231001200202"); |
| | | // System.err.println(CP56Time2aConverter.convertToCP56Time2a(new Date())); |
| | | // timingSetting.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date())); |
| | | // String message = iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting)); |
| | | TimingSetting timingSetting = new TimingSetting(); |
| | | timingSetting.setCharging_pile_code(deviceId); |
| | | timingSetting.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date())); |
| | | String message = iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting)); |
| | | return R.ok(message); |
| | | } |
| | | |
| | | @ApiOperation(value = "计费模型设置",tags = {"硬件接口"}) |
| | | @GetMapping(value = "/setupBillingModel") |
| | | public R setupBillingModel(String deviceId) { |
| | | // TODO 罗 计费模型设置 |
| | | // SetupBillingModel setupBillingModel = new SetupBillingModel(); |
| | | // // 计费模型 |
| | | // List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode("3401231001200202").getData(); |
| | | // Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails); |
| | | // // 价格设置 |
| | | // AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply(); |
| | | // StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply); |
| | | // // 时段设置 |
| | | // StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply); |
| | | // TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode("3401231001200202").getData(); |
| | | // acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString()); |
| | | // acquisitionBillingModeReply.setCharging_pile_code("3401231001200202"); |
| | | // acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO); |
| | | // BeanUtils.copyProperties(acquisitionBillingModeReply,setupBillingModel); |
| | | // System.err.println(setupBillingModel); |
| | | // String message = iotMessageProduce.sendMessage(setupBillingModel.getCharging_pile_code(), ServiceIdMenu.SETUP_BILLING_MODEL.getKey(),messageUtil.setupBillingModel(setupBillingModel)); |
| | | SetupBillingModel setupBillingModel = new SetupBillingModel(); |
| | | // 计费模型 |
| | | List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(deviceId).getData(); |
| | | Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails); |
| | | // 价格设置 |
| | | AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply(); |
| | | StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply); |
| | | // 时段设置 |
| | | StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply); |
| | | TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode(deviceId).getData(); |
| | | acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString()); |
| | | acquisitionBillingModeReply.setCharging_pile_code(deviceId); |
| | | acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO); |
| | | BeanUtils.copyProperties(acquisitionBillingModeReply,setupBillingModel); |
| | | System.err.println(setupBillingModel); |
| | | String message = iotMessageProduce.sendMessage(setupBillingModel.getCharging_pile_code(), ServiceIdMenu.SETUP_BILLING_MODEL.getKey(),messageUtil.setupBillingModel(setupBillingModel)); |
| | | return R.ok(message); |
| | | } |
| | | |
| | | @ApiOperation(value = "远程重启",tags = {"硬件接口"}) |
| | | @PostMapping(value = "/platformRestart") |
| | | public R platformRestart(String deviceId) { |
| | | // 远程重启 |
| | | PlatformRestart platformRestart = new PlatformRestart(); |
| | | platformRestart.setCharging_pile_code("3401231001200202"); |
| | | platformRestart.setCharging_pile_code(deviceId); |
| | | platformRestart.setOperate(2); |
| | | String message = iotMessageProduce.sendMessage(platformRestart.getCharging_pile_code(), ServiceIdMenu.PLATFORM_RESTART.getKey(),messageUtil.platformRestart(platformRestart)); |
| | | return R.ok(message); |
| | |
| | | package com.ruoyi.integration.iotda.utils.produce; |
| | | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.huaweicloud.sdk.core.exception.ConnectionException; |
| | | import com.huaweicloud.sdk.core.exception.RequestTimeoutException; |
| | | import com.huaweicloud.sdk.core.exception.ServiceResponseException; |
| | |
| | | * @return |
| | | */ |
| | | @PostMapping("/sendMessage") |
| | | public String sendMessage(String deviceId,String name,String message){ |
| | | public String sendMessage(String deviceId, String name, JSONObject message){ |
| | | CreateMessageRequest request = new CreateMessageRequest(); |
| | | request.withDeviceId(deviceId); |
| | | DeviceMessageRequest body = new DeviceMessageRequest(); |
| | |
| | | * @param onlineReply 实体对象 |
| | | * @return |
| | | */ |
| | | public String onlineReply(OnlineReply onlineReply){ |
| | | public JSONObject onlineReply(OnlineReply onlineReply){ |
| | | onlineReplyService.create(onlineReply); |
| | | return getMessageJsonString(onlineReply, ServiceIdMenu.ONLINE_REPLY.getValue()); |
| | | } |
| | |
| | | * @param pong 实体对象 |
| | | * @return |
| | | */ |
| | | public String pong(Pong pong){ |
| | | public JSONObject pong(Pong pong){ |
| | | pongService.create(pong); |
| | | return getMessageJsonString(pong, ServiceIdMenu.PONG.getValue()); |
| | | } |
| | |
| | | * @param billingModeVerifyReply 实体对象 |
| | | * @return |
| | | */ |
| | | public String billingModeVerifyReply(BillingModeVerifyReply billingModeVerifyReply){ |
| | | public JSONObject billingModeVerifyReply(BillingModeVerifyReply billingModeVerifyReply){ |
| | | billingModeVerifyReplyService.create(billingModeVerifyReply); |
| | | return getMessageJsonString(billingModeVerifyReply, ServiceIdMenu.BILLING_MODE_VERIFY_REPLY.getValue()); |
| | | } |
| | |
| | | * @param acquisitionBillingModeReply 实体对象 |
| | | * @return |
| | | */ |
| | | public String acquisitionBillingModeReply(AcquisitionBillingModeReply acquisitionBillingModeReply){ |
| | | public JSONObject acquisitionBillingModeReply(AcquisitionBillingModeReply acquisitionBillingModeReply){ |
| | | acquisitionBillingModeReplyService.create(acquisitionBillingModeReply); |
| | | return getMessageJsonString(acquisitionBillingModeReply, ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getValue()); |
| | | } |
| | |
| | | * @param readRealTimeMonitoringData 实体对象 |
| | | * @return |
| | | */ |
| | | public String readRealTimeMonitoringData(ReadRealTimeMonitoringData readRealTimeMonitoringData){ |
| | | public JSONObject readRealTimeMonitoringData(ReadRealTimeMonitoringData readRealTimeMonitoringData){ |
| | | readRealTimeMonitoringDataService.create(readRealTimeMonitoringData); |
| | | return getMessageJsonString(readRealTimeMonitoringData, ServiceIdMenu.READ_REAL_TIME_MONITORING_DATA.getValue()); |
| | | } |
| | |
| | | * @param platformConfirmationCharging 实体对象 |
| | | * @return |
| | | */ |
| | | public String platformConfirmationCharging(PlatformConfirmationCharging platformConfirmationCharging){ |
| | | public JSONObject platformConfirmationCharging(PlatformConfirmationCharging platformConfirmationCharging){ |
| | | platformConfirmationChargingService.create(platformConfirmationCharging); |
| | | return getMessageJsonString(platformConfirmationCharging, ServiceIdMenu.PLATFORM_CONFIRMATION_CHARGING.getValue()); |
| | | } |
| | |
| | | * @param platformStartCharging 实体对象 |
| | | * @return |
| | | */ |
| | | public String platformStartCharging(PlatformStartCharging platformStartCharging){ |
| | | public JSONObject platformStartCharging(PlatformStartCharging platformStartCharging){ |
| | | platformStartChargingService.create(platformStartCharging); |
| | | return getMessageJsonString(platformStartCharging, ServiceIdMenu.PLATFORM_START_CHARGING.getValue()); |
| | | } |
| | |
| | | * @param platformStopCharging 实体对象 |
| | | * @return |
| | | */ |
| | | public String platformStopCharging(PlatformStopCharging platformStopCharging){ |
| | | public JSONObject platformStopCharging(PlatformStopCharging platformStopCharging){ |
| | | platformStopChargingService.create(platformStopCharging); |
| | | return getMessageJsonString(platformStopCharging, ServiceIdMenu.PLATFORM_STOP_CHARGING.getValue()); |
| | | } |
| | |
| | | * @param confirmTransactionRecord 实体对象 |
| | | * @return |
| | | */ |
| | | public String confirmTransactionRecord(ConfirmTransactionRecord confirmTransactionRecord){ |
| | | public JSONObject confirmTransactionRecord(ConfirmTransactionRecord confirmTransactionRecord){ |
| | | confirmTransactionRecordService.create(confirmTransactionRecord); |
| | | return getMessageJsonString(confirmTransactionRecord, ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getValue()); |
| | | } |
| | |
| | | * @param updateBalance 实体对象 |
| | | * @return |
| | | */ |
| | | public String updateBalance(UpdateBalance updateBalance){ |
| | | public JSONObject updateBalance(UpdateBalance updateBalance){ |
| | | updateBalanceService.create(updateBalance); |
| | | return getMessageJsonString(updateBalance, ServiceIdMenu.UPDATE_BALANCE.getValue()); |
| | | } |
| | |
| | | * @param synchronizeOfflineCard 实体对象 |
| | | * @return |
| | | */ |
| | | public String synchronizeOfflineCard(SynchronizeOfflineCard synchronizeOfflineCard){ |
| | | public JSONObject synchronizeOfflineCard(SynchronizeOfflineCard synchronizeOfflineCard){ |
| | | synchronizeOfflineCardService.create(synchronizeOfflineCard); |
| | | return getMessageJsonString(synchronizeOfflineCard, ServiceIdMenu.SYNCHRONIZE_OFFLINE_CARD.getValue()); |
| | | } |
| | |
| | | * @param clearOfflineCard 实体对象 |
| | | * @return |
| | | */ |
| | | public String clearOfflineCard(ClearOfflineCard clearOfflineCard){ |
| | | public JSONObject clearOfflineCard(ClearOfflineCard clearOfflineCard){ |
| | | clearOfflineCardService.create(clearOfflineCard); |
| | | return getMessageJsonString(clearOfflineCard, ServiceIdMenu.CLEAR_OFFLINE_CARD.getValue()); |
| | | } |
| | |
| | | * @param queryOfflineCard 实体对象 |
| | | * @return |
| | | */ |
| | | public String queryOfflineCard(QueryOfflineCard queryOfflineCard){ |
| | | public JSONObject queryOfflineCard(QueryOfflineCard queryOfflineCard){ |
| | | queryOfflineCardService.create(queryOfflineCard); |
| | | return getMessageJsonString(queryOfflineCard, ServiceIdMenu.QUERY_OFFLINE_CARD.getValue()); |
| | | } |
| | |
| | | * @param workingParameterSetting 实体对象 |
| | | * @return |
| | | */ |
| | | public String workingParameterSetting(WorkingParameterSetting workingParameterSetting){ |
| | | public JSONObject workingParameterSetting(WorkingParameterSetting workingParameterSetting){ |
| | | workingParameterSettingService.create(workingParameterSetting); |
| | | return getMessageJsonString(workingParameterSetting, ServiceIdMenu.WORKING_PARAMETER_SETTING.getValue()); |
| | | } |
| | |
| | | * @param timingSetting 实体对象 |
| | | * @return |
| | | */ |
| | | public String timingSetting(TimingSetting timingSetting){ |
| | | public JSONObject timingSetting(TimingSetting timingSetting){ |
| | | timingSettingService.create(timingSetting); |
| | | return getMessageJsonString(timingSetting, ServiceIdMenu.TIMING_SETTING.getValue()); |
| | | } |
| | |
| | | * @param timingSettingReply 实体对象 |
| | | * @return |
| | | */ |
| | | public String timingSettingReply(TimingSettingReply timingSettingReply){ |
| | | public JSONObject timingSettingReply(TimingSettingReply timingSettingReply){ |
| | | timingSettingReplyService.create(timingSettingReply); |
| | | return getMessageJsonString(timingSettingReply, ServiceIdMenu.TIMING_SETTING_REPLY.getValue()); |
| | | } |
| | |
| | | * @param setupBillingModel 实体对象 |
| | | * @return |
| | | */ |
| | | public String setupBillingModel(SetupBillingModel setupBillingModel){ |
| | | public JSONObject setupBillingModel(SetupBillingModel setupBillingModel){ |
| | | setupBillingModelService.create(setupBillingModel); |
| | | return getMessageJsonString(setupBillingModel, ServiceIdMenu.SETUP_BILLING_MODEL.getValue()); |
| | | } |
| | |
| | | * @param openOrCloseGroundLock 实体对象 |
| | | * @return |
| | | */ |
| | | public String openOrCloseGroundLock(OpenOrCloseGroundLock openOrCloseGroundLock){ |
| | | public JSONObject openOrCloseGroundLock(OpenOrCloseGroundLock openOrCloseGroundLock){ |
| | | openOrCloseGroundLockService.create(openOrCloseGroundLock); |
| | | return getMessageJsonString(openOrCloseGroundLock, ServiceIdMenu.OPEN_OR_CLOSE_GROUND_LOCK.getValue()); |
| | | } |
| | |
| | | * @param platformRestart 实体对象 |
| | | * @return |
| | | */ |
| | | public String platformRestart(PlatformRestart platformRestart){ |
| | | public JSONObject platformRestart(PlatformRestart platformRestart){ |
| | | platformRestartService.create(platformRestart); |
| | | return getMessageJsonString(platformRestart, ServiceIdMenu.PLATFORM_RESTART.getValue()); |
| | | } |
| | |
| | | * @param platformRemoteUpdate 实体对象 |
| | | * @return |
| | | */ |
| | | public String platformRemoteUpdate(PlatformRemoteUpdate platformRemoteUpdate){ |
| | | public JSONObject platformRemoteUpdate(PlatformRemoteUpdate platformRemoteUpdate){ |
| | | platformRemoteUpdateService.create(platformRemoteUpdate); |
| | | return getMessageJsonString(platformRemoteUpdate, ServiceIdMenu.PLATFORM_REMOTE_UPDATE.getValue()); |
| | | } |
| | |
| | | * @param serviceId 服务ID |
| | | * @return |
| | | */ |
| | | public String getMessageJsonString(Object object, String serviceId){ |
| | | public JSONObject getMessageJsonString(Object object, String serviceId){ |
| | | JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(object)); |
| | | jsonObject.put("service_id", serviceId); |
| | | return jsonObject.toJSONString(); |
| | | return jsonObject; |
| | | } |
| | | } |
| | |
| | | server: |
| | | port: 9700 |
| | | tomcat: |
| | | basedir: /data/tomcat |
| | | # Spring |
| | | spring: |
| | | application: |
| | |
| | | profiles: |
| | | # 环境配置 |
| | | active: dev |
| | | |
| | | --- |
| | | spring: |
| | | cloud: |
| | | stream: |
| | | rocketmq: |
| | | binder: |
| | | name-server: 127.0.0.1:9876 |
| | | --- |
| | | spring: |
| | | config: |
| | |
| | | # 共享配置 |
| | | shared-configs: |
| | | - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} |
| | | |
| | | --- |
| | | |
| | | seata: |
| | | enabled: true |
| | | application-id: ${spring.application.name} |
| | |
| | | config: |
| | | type: nacos |
| | | nacos: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | data-id: seata-server.properties |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # data-id: seata-server.properties |
| | | # username: nacos |
| | | # password: nacos |
| | | registry: |
| | | type: nacos |
| | | nacos: |
| | | application: seata-server |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # username: nacos |
| | | # password: nacos |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 # nacos注册中心地址 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 |
| | | group: DEFAULT_GROUP |
| | | application: seata-server #Nacos 中 Seata 名称 |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # application: seata-server #Nacos 中 Seata 名称 |
| | | # username: nacos |
| | | # password: nacos |
| | | sentinel: |
| | | transport: |
| | | dashboard: 127.0.0.1:8080 # Sentinel控制台地址 |
| | | eager: true |
| | | |
| | | |
| | | --- |
| | | spring: |
| | | config: |
| | |
| | | nacos: |
| | | discovery: |
| | | # 服务注册地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | service: ${spring.application.name} |
| | | group: DEFAULT_GROUP |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | config: |
| | | # 配置中心地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | group: DEFAULT_GROUP |
| | | name: ${spring.application.name} |
| | | # 配置文件格式 |
| | |
| | | package com.ruoyi.order.controller; |
| | | |
| | | |
| | | import cn.afterturn.easypoi.excel.ExcelExportUtil; |
| | | import cn.afterturn.easypoi.excel.entity.ExportParams; |
| | | import com.ruoyi.account.api.dto.GiveVipDto; |
| | | import com.ruoyi.account.api.feignClient.AppUserClient; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.utils.WebUtils; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.common.log.annotation.Log; |
| | | import com.ruoyi.common.log.enums.BusinessType; |
| | | import com.ruoyi.order.api.model.TExchangeOrder; |
| | | import com.ruoyi.order.api.model.TShoppingOrder; |
| | | import com.ruoyi.order.api.model.TVipOrder; |
| | | import com.ruoyi.order.api.query.ShoppingOrderQuery; |
| | | import com.ruoyi.order.api.query.VipShoppingOrderQuery; |
| | | import com.ruoyi.order.dto.TEnterpriseExport; |
| | | import com.ruoyi.order.service.TVipOrderService; |
| | | import com.ruoyi.other.api.domain.TEnterpriseUserApplication; |
| | | import com.ruoyi.other.api.feignClient.OtherClient; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.apache.poi.ss.usermodel.Workbook; |
| | | import org.omg.CORBA.PRIVATE_MEMBER; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.ServletOutputStream; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.net.URLEncoder; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | @Resource |
| | | private OtherClient otherClient; |
| | | |
| | | @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "导出") |
| | | @PutMapping(value = "/export") |
| | | @Log(title = "【申请建桩】导出建桩申请列表", businessType = BusinessType.EXPORT) |
| | | public void export(String landlordPhone) { |
| | | |
| | | R<List<TEnterpriseUserApplication>> tnterPrise = otherClient.getTnterPrise(); |
| | | List<TEnterpriseUserApplication> list = tnterPrise.getData(); |
| | | List<TEnterpriseExport> orderInvoiceExports = new ArrayList<>(); |
| | | for (TEnterpriseUserApplication orderInvoiceVO : list) { |
| | | TEnterpriseExport orderInvoiceExport = new TEnterpriseExport(); |
| | | BeanUtils.copyProperties(orderInvoiceVO,orderInvoiceExport); |
| | | orderInvoiceExport.setCreateTime(DateUtils.localDateTimeToString(orderInvoiceVO.getCreateTime())); |
| | | orderInvoiceExports.add(orderInvoiceExport); |
| | | } |
| | | Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TEnterpriseExport.class, orderInvoiceExports); |
| | | HttpServletResponse response = WebUtils.response(); |
| | | response.setCharacterEncoding("utf-8"); |
| | | ServletOutputStream outputStream = null; |
| | | try { |
| | | String fileName = URLEncoder.encode("集团用户导出.xls", "utf-8"); |
| | | response.setHeader("Content-Disposition", "attachment;filename=" + fileName); |
| | | response.setContentType("application/vnd.ms-excel;charset=UTF-8"); |
| | | response.setHeader("Pragma", "no-cache"); |
| | | response.setHeader("Cache-Control", "no-cache"); |
| | | outputStream = response.getOutputStream(); |
| | | workbook.write(outputStream); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | workbook.close(); |
| | | outputStream.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
New file |
| | |
| | | package com.ruoyi.order.dto; |
| | | |
| | | import cn.afterturn.easypoi.excel.annotation.Excel; |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotNull; |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Data |
| | | @ApiModel(value = "导出公司") |
| | | public class TEnterpriseExport implements Serializable { |
| | | |
| | | @Excel(name = "公司名称",width = 30) |
| | | private String companyName; |
| | | @Excel(name = "新能源电动汽车保有量",width = 30) |
| | | private Integer vehiclesNumber; |
| | | @Excel(name = "联系人",width = 30) |
| | | private String contactName; |
| | | @Excel(name = "联系电话",width = 30) |
| | | private String phone; |
| | | @Excel(name = "备注",width = 30) |
| | | private String remark; |
| | | @Excel(name = "申请时间",width = 30) |
| | | private String createTime; |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | import org.apache.logging.log4j.core.config.Order; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpStatus; |
| | |
| | | import com.ruoyi.other.api.domain.TGoods; |
| | | import com.ruoyi.order.vo.ChargingOrderListInfoVO; |
| | | import com.ruoyi.other.api.domain.TIntegralRule; |
| | | import com.ruoyi.other.api.feignClient.IntegralRuleClient; |
| | | import com.ruoyi.other.api.feignClient.OtherClient; |
| | | import com.ruoyi.other.api.feignClient.RoleSiteClient; |
| | | import com.ruoyi.other.api.feignClient.UserSiteClient; |
| | | import com.ruoyi.other.api.domain.TVip; |
| | | import com.ruoyi.other.api.feignClient.*; |
| | | import com.ruoyi.payment.api.feignClient.AliPaymentClient; |
| | | import com.ruoyi.payment.api.feignClient.WxPaymentClient; |
| | | import com.ruoyi.payment.api.model.RefundReq; |
| | |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | |
| | | @Resource |
| | | private IntegralRuleClient integralRuleClient; |
| | | |
| | | @Resource |
| | | private VipClient vipClient; |
| | | |
| | | //计数器 |
| | | private Map<String, Integer> counter_map = new HashMap<>(); |
| | |
| | | model.setOut_trade_no(chargingOrder.getCode()); |
| | | model.setOut_refund_no(chargingOrderRefund.getRefundCode()); |
| | | model.setReason("充电失败,取消充电订单"); |
| | | model.setNotify_url("http://221.182.45.100:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund"); |
| | | model.setNotify_url("/order/t-charging-order/chargingOrderStartupFailureWxRefund"); |
| | | WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); |
| | | amount.setRefund(rechargeAmount.multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); |
| | |
| | | String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints(); |
| | | JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints); |
| | | Integer num1 = jsonObject.getInteger("num1"); |
| | | |
| | | TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); |
| | | if(null != appUser1.getVipId()){ |
| | | TVip vip = vipClient.getInfo(appUser1.getVipId()).getData(); |
| | | Integer doubleIntegration = vip.getDoubleIntegration(); |
| | | //双倍积分 |
| | | if(1 == doubleIntegration){ |
| | | num1 *= 2; |
| | | } |
| | | } |
| | | |
| | | GetInviteUser query = new GetInviteUser(); |
| | | query.setAppUserId(appUser.getInviteUserId()); |
| | | query.setAppUserId(appUser1.getId()); |
| | | query.setBeInvitedAppUserId(chargingOrder.getAppUserId()); |
| | | TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData(); |
| | | if(null == inviteUser){ |
| | | inviteUser = new TInviteUser(); |
| | | inviteUser.setAppUserId(appUser.getInviteUserId()); |
| | | inviteUser.setAppUserId(appUser1.getId()); |
| | | inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId()); |
| | | inviteUser.setAward(num1); |
| | | inviteUser.setCreateTime(LocalDateTime.now()); |
| | |
| | | inviteUser.setAward(num1); |
| | | inviteUserClient.updateInviteUser(inviteUser); |
| | | } |
| | | TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); |
| | | TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); |
| | | String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); |
| | | appUserIntegralChange.setCode(code); |
| | | appUserIntegralChange.setAppUserId(appUser.getInviteUserId()); |
| | | appUserIntegralChange.setAppUserId(appUser1.getId()); |
| | | appUserIntegralChange.setChangeType(5); |
| | | appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); |
| | | appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); |
| | |
| | | chargingOrder.setStatus(5); |
| | | chargingOrder.setPaymentAmount(payAmount); |
| | | this.updateById(chargingOrder); |
| | | |
| | | //添加积分 |
| | | TIntegralRule integralRule = integralRuleClient.getSet().getData(); |
| | | if(null != integralRule){ |
| | | TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); |
| | | Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1"); |
| | | Integer integral = payAmount.multiply(new BigDecimal(num1)).intValue(); |
| | | if(null != appUser.getVipId()){ |
| | | TVip vip = vipClient.getInfo(appUser.getVipId()).getData(); |
| | | Integer doubleIntegration = vip.getDoubleIntegration(); |
| | | //双倍积分 |
| | | if(1 == doubleIntegration){ |
| | | integral *= 2; |
| | | } |
| | | } |
| | | |
| | | TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); |
| | | appUserIntegralChange.setAppUserId(appUser.getId()); |
| | | appUserIntegralChange.setChangeType(2); |
| | | appUserIntegralChange.setHistoricalIntegral(appUser.getPoints()); |
| | | appUser.setPoints(appUser.getPoints() + integral); |
| | | appUserIntegralChange.setCurrentIntegral(appUser.getPoints()); |
| | | appUserIntegralChange.setCreateTime(LocalDateTime.now()); |
| | | appUserClient.updateAppUser(appUser); |
| | | appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); |
| | | } |
| | | |
| | | //计算优惠券 |
| | | if(null != chargingOrder.getAppCouponId()){ |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints(); |
| | | JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints); |
| | | Integer num1 = jsonObject.getInteger("num1"); |
| | | |
| | | TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); |
| | | if(null != appUser1.getVipId()){ |
| | | TVip vip = vipClient.getInfo(appUser1.getVipId()).getData(); |
| | | Integer doubleIntegration = vip.getDoubleIntegration(); |
| | | //双倍积分 |
| | | if(1 == doubleIntegration){ |
| | | num1 *= 2; |
| | | } |
| | | } |
| | | |
| | | GetInviteUser query = new GetInviteUser(); |
| | | query.setAppUserId(appUser.getInviteUserId()); |
| | | query.setAppUserId(appUser1.getId()); |
| | | query.setBeInvitedAppUserId(chargingOrder.getAppUserId()); |
| | | TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData(); |
| | | if(null == inviteUser){ |
| | | inviteUser = new TInviteUser(); |
| | | inviteUser.setAppUserId(appUser.getInviteUserId()); |
| | | inviteUser.setAppUserId(appUser1.getId()); |
| | | inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId()); |
| | | inviteUser.setAward(num1); |
| | | inviteUser.setCreateTime(LocalDateTime.now()); |
| | |
| | | inviteUser.setAward(num1); |
| | | inviteUserClient.updateInviteUser(inviteUser); |
| | | } |
| | | TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); |
| | | TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); |
| | | String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); |
| | | appUserIntegralChange.setCode(code); |
| | | appUserIntegralChange.setAppUserId(appUser.getInviteUserId()); |
| | | appUserIntegralChange.setAppUserId(appUser1.getId()); |
| | | appUserIntegralChange.setChangeType(5); |
| | | appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); |
| | | appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); |
| | |
| | | appUser1.setPoints(appUser1.getPoints() + num1); |
| | | appUserClient.updateAppUser(appUser1); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | |
| | | @Resource |
| | | private TShoppingOrderService shoppingOrderService; |
| | | @Override |
| | | public R payRefund(PayOrderRefundDto payOrderQueryDto) { |
| | | if (payOrderQueryDto.getType()==1){ |
| | |
| | | |
| | | |
| | | } |
| | | if (payOrderQueryDto.getType()==2){ |
| | | TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId()); |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(tChargingOrder.getId()); |
| | | chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | | chargingOrderRefund.setRefundStatus(1); |
| | | chargingOrderRefund.setPayType(tChargingOrder.getPaymentType()); |
| | | chargingOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | chargingOrderRefund.setCode(tChargingOrder.getCode()); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue())); |
| | | chargingOrderRefund.setRefundTitle("后台退款"); |
| | | chargingOrderRefund.setRefundContent("后台退款"); |
| | | chargingOrderRefund.setRefundReason("后台退款"); |
| | | chargingOrderRefund.setRefundRemark("后台退款"); |
| | | chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount())); |
| | | chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount()); |
| | | |
| | | if(1 == tChargingOrder.getPaymentType()){ |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(tChargingOrder.getCode()); |
| | | model.setOut_refund_no(chargingOrderRefund.getRefundCode()); |
| | | model.setTransaction_id(tChargingOrder.getSerialNumber()); |
| | | model.setReason("取消订单"); |
| | | model.setNotify_url("http://221.182.45.100:9000/order/t-shopping-order/cancelShoppingOrderWxRefund"); |
| | | WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); |
| | | amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue()); |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<String> orderR = wxPaymentClient.refundOrderR(model); |
| | | if(200 == orderR.getCode()){ |
| | | chargingOrderRefundService.save(chargingOrderRefund); |
| | | } |
| | | } |
| | | |
| | | if(2 == tChargingOrder.getPaymentType()){ |
| | | RefundReq dto = new RefundReq(); |
| | | dto.setOutTradeNo(tChargingOrder.getCode()); |
| | | dto.setOutRequestNo(tChargingOrder.getCode()); |
| | | dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString()); |
| | | dto.setRefundReason("取消订单"); |
| | | RefundResp resp = aliPaymentClient.refund(dto).getData(); |
| | | if(null != resp){ |
| | | SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); |
| | | chargingOrderRefundService.save(chargingOrderRefund); |
| | | |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | return null; |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | |
| | | String imgUrl = ""; |
| | | if(tExchangeOrder.getOrderType() == 1){ |
| | | TGoods goods = goodsClient.getGoodsById(tExchangeOrder.getGoodsId()).getData(); |
| | | if(null != goods){ |
| | | name = goods.getName(); |
| | | imgUrl = goods.getCoverPicture(); |
| | | } |
| | | }else{ |
| | | TCoupon coupon = couponClient.getCouponById1(tExchangeOrder.getCouponId()).getData(); |
| | | if(null != coupon){ |
| | | name = coupon.getName(); |
| | | imgUrl = coupon.getCoverPicture(); |
| | | } |
| | | } |
| | | exchangeOrderList.setName(name); |
| | | exchangeOrderList.setImgUrl(imgUrl); |
| | |
| | | String imgUrl = ""; |
| | | if(exchangeOrder.getOrderType() == 1){ |
| | | TGoods goods = goodsClient.getGoodsById(exchangeOrder.getGoodsId()).getData(); |
| | | if(null != goods){ |
| | | name = goods.getName(); |
| | | imgUrl = goods.getCoverPicture(); |
| | | } |
| | | }else{ |
| | | TCoupon coupon = couponClient.getCouponById1(exchangeOrder.getCouponId()).getData(); |
| | | if(null != coupon){ |
| | | info.setCouponType(coupon.getType()); |
| | | info.setDays(coupon.getDays()); |
| | | info.setEndTime(coupon.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| | | name = coupon.getName(); |
| | | imgUrl = coupon.getCoverPicture(); |
| | | } |
| | | } |
| | | info.setName(name); |
| | | info.setImgUrl(imgUrl); |
| | | info.setPurchaseQuantity(exchangeOrder.getPurchaseQuantity()); |
| | |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | |
| | | PageInfo<TOrderAppealVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); |
| | | List<TOrderAppealVO> list = this.baseMapper.pageList(query,pageInfo); |
| | | List<Long> orderIds = list.stream().map(TOrderAppealVO::getOrderId).collect(Collectors.toList()); |
| | | if(CollectionUtils.isEmpty(orderIds)){ |
| | | return new PageInfo<>(); |
| | | } |
| | | // 查询当前页的订单 |
| | | List<TChargingOrder> chargingOrders = chargingOrderMapper.selectList(Wrappers.lambdaQuery(TChargingOrder.class) |
| | | .in(TChargingOrder::getId, orderIds)); |
| | |
| | | import com.ruoyi.order.service.TOrderEvaluateService; |
| | | import com.ruoyi.other.api.domain.TEvaluationTag; |
| | | import com.ruoyi.other.api.domain.TIntegralRule; |
| | | import com.ruoyi.other.api.domain.TVip; |
| | | import com.ruoyi.other.api.feignClient.IntegralRuleClient; |
| | | import com.ruoyi.other.api.feignClient.TEvaluationTagClient; |
| | | import com.ruoyi.other.api.feignClient.VipClient; |
| | | import com.ruoyi.other.api.vo.TEvaluationTagVO; |
| | | import io.seata.spring.annotation.GlobalTransactional; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | |
| | | @Resource |
| | | private AppUserIntegralChangeClient appUserIntegralChangeClient; |
| | | |
| | | @Resource |
| | | private VipClient vipClient; |
| | | |
| | | |
| | | |
| | |
| | | dto.setSiteName(site.getName()); |
| | | List<TOrderEvaluateTag> tOrderEvaluateTags = orderEvaluateTagMapper.selectList(new LambdaQueryWrapper<TOrderEvaluateTag>().eq(TOrderEvaluateTag::getOrderEvaluateId, dto.getId())); |
| | | List<Integer> tagIds = tOrderEvaluateTags.stream().map(TOrderEvaluateTag::getEvaluationTagId).collect(Collectors.toList()); |
| | | if(tagIds.size() > 0){ |
| | | List<TEvaluationTag> data = evaluationTagClient.getListByIds(tagIds).getData(); |
| | | List<String> collect = data.stream().map(TEvaluationTag::getName).collect(Collectors.toList()); |
| | | dto.setTags(collect); |
| | | } |
| | | } |
| | | return pageInfo.setRecords(list); |
| | | } |
| | |
| | | Integer num1 = JSON.parseObject(credit).getInteger("num1"); |
| | | if(null != num1 && 0 < num1){ |
| | | TAppUser appUser = appUserClient.getUserById(userid).getData(); |
| | | if(null != appUser.getVipId()){ |
| | | TVip vip = vipClient.getInfo(appUser.getVipId()).getData(); |
| | | Integer doubleIntegration = vip.getDoubleIntegration(); |
| | | //双倍积分 |
| | | if(1 == doubleIntegration){ |
| | | num1 *= 2; |
| | | } |
| | | } |
| | | Integer points = appUser.getPoints(); |
| | | appUser.setPoints(appUser.getPoints() + num1); |
| | | appUserClient.updateAppUser(appUser); |
| | |
| | | name = goods.getName(); |
| | | imgUrl = goods.getCoverPicture(); |
| | | }else{ |
| | | TCoupon coupon = couponClient.getCouponById1(tShoppingOrder.getGoodsId()).getData(); |
| | | TCoupon coupon = couponClient.getCouponById1(tShoppingOrder.getCouponId()).getData(); |
| | | name = coupon.getName(); |
| | | imgUrl = coupon.getCoverPicture(); |
| | | } |
| | |
| | | server: |
| | | port: 9400 |
| | | tomcat: |
| | | basedir: /data/tomcat |
| | | # Spring |
| | | spring: |
| | | application: |
| | |
| | | # 共享配置 |
| | | shared-configs: |
| | | - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} |
| | | |
| | | --- |
| | | |
| | | seata: |
| | | enabled: true |
| | | application-id: ${spring.application.name} |
| | |
| | | config: |
| | | type: nacos |
| | | nacos: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | data-id: seata-server.properties |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # data-id: seata-server.properties |
| | | # username: nacos |
| | | # password: nacos |
| | | registry: |
| | | type: nacos |
| | | nacos: |
| | | application: seata-server |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # username: nacos |
| | | # password: nacos |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 # nacos注册中心地址 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 |
| | | group: DEFAULT_GROUP |
| | | application: seata-server #Nacos 中 Seata 名称 |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # application: seata-server #Nacos 中 Seata 名称 |
| | | # username: nacos |
| | | # password: nacos |
| | | sentinel: |
| | | transport: |
| | | dashboard: 127.0.0.1:8080 # Sentinel控制台地址 |
| | | eager: true |
| | | |
| | | |
| | | --- |
| | | spring: |
| | | config: |
| | |
| | | nacos: |
| | | discovery: |
| | | # 服务注册地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | service: ${spring.application.name} |
| | | group: DEFAULT_GROUP |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | config: |
| | | # 配置中心地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | group: DEFAULT_GROUP |
| | | name: ${spring.application.name} |
| | | # 配置文件格式 |
| | |
| | | </select> |
| | | <select id="getchargingCapacity" resultType="java.util.Map"> |
| | | SELECT |
| | | DATE_FORMAT( create_time, '%Y-%m-%d %H' ) as time, |
| | | DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, |
| | | SUM(charging_capacity) as chargingCapacity |
| | | FROM |
| | | t_charging_order |
| | |
| | | </description> |
| | | |
| | | <dependencies> |
| | | |
| | | <!-- SpringCloud Alibaba Nacos --> |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-payment</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>easyexcel-core</artifactId> |
| | | <version>RELEASE</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | <build> |
| | |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.common.log.annotation.Log; |
| | | import com.ruoyi.common.log.enums.BusinessType; |
| | | import com.ruoyi.common.log.enums.OperatorType; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.other.api.domain.TEnterpriseUserApplication; |
| | | import com.ruoyi.other.query.PassDto; |
| | | import com.ruoyi.other.service.TEnterpriseUserApplicationService; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | |
| | | @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "导出") |
| | | @PutMapping(value = "/export") |
| | | @Log(title = "【申请建桩】导出建桩申请列表", businessType = BusinessType.EXPORT) |
| | | public R<List<TEnterpriseUserApplication>> export() { |
| | | |
| | | |
| | | List<TEnterpriseUserApplication> list = enterpriseUserApplicationService.lambdaQuery().list(); |
| | | |
| | | return R.ok(list); |
| | | // Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TEnterpriseExport.class, orderInvoiceExports); |
| | | // HttpServletResponse response = WebUtils.response(); |
| | | // response.setCharacterEncoding("utf-8"); |
| | | // ServletOutputStream outputStream = null; |
| | | // try { |
| | | // String fileName = URLEncoder.encode("公司导出.xls", "utf-8"); |
| | | // response.setHeader("Content-Disposition", "attachment;filename=" + fileName); |
| | | // response.setContentType("application/vnd.ms-excel;charset=UTF-8"); |
| | | // response.setHeader("Pragma", "no-cache"); |
| | | // response.setHeader("Cache-Control", "no-cache"); |
| | | // outputStream = response.getOutputStream(); |
| | | // workbook.write(outputStream); |
| | | // } catch (IOException e) { |
| | | // e.printStackTrace(); |
| | | // } finally { |
| | | // try { |
| | | // workbook.close(); |
| | | // outputStream.close(); |
| | | // } catch (IOException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | } |
| | | |
| | | |
| | | |
| | | @Log(title = "【集团用户申请】填写备注", businessType = BusinessType.INSERT) |
| | | @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "备注") |
| | | @PostMapping(value = "/remark") |
| | |
| | | |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.ruoyi.account.api.dto.SendCouponDto; |
| | | import com.ruoyi.common.core.domain.R; |
| | |
| | | return R.ok(vipService.getOne(Wrappers.lambdaQuery(TVip.class) |
| | | .eq(TVip::getReveal,1) |
| | | .orderByDesc(TVip::getMaximumDeduction) |
| | | .orderByDesc(TVip::getCreateTime) |
| | | .last("LIMIT 1"))); |
| | | case 2: |
| | | return R.ok(vipService.getOne(Wrappers.lambdaQuery(TVip.class) |
| | |
| | | return R.ok(vipService.getOne(Wrappers.lambdaQuery(TVip.class) |
| | | .eq(TVip::getReveal,1) |
| | | .orderByDesc(TVip::getMonthlyCardDiscount) |
| | | .orderByDesc(TVip::getCreateTime) |
| | | .last("LIMIT 1"))); |
| | | } |
| | | } |
| | |
| | | |
| | | return R.ok(vipService.vipInfoPay(byId,payMoney,payType,discountMoney,discount,buyType,userId)); |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | import org.apache.logging.log4j.core.config.Order; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpMethod; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.stereotype.Component; |
| | |
| | | HttpServletResponse response = (HttpServletResponse) servletResponse; |
| | | String userid = request.getHeader("user_id"); |
| | | if(StringUtils.isEmpty(userid)){ |
| | | filterChain.doFilter(request, response); |
| | | filterChain.doFilter(servletRequest, servletResponse); |
| | | return; |
| | | } |
| | | String userType = request.getHeader("user_type"); |
| | |
| | | return; |
| | | } |
| | | } |
| | | filterChain.doFilter(request, response); |
| | | filterChain.doFilter(servletRequest, servletResponse); |
| | | } |
| | | |
| | | |
| | |
| | | server: |
| | | port: 9600 |
| | | tomcat: |
| | | basedir: /data/tomcat |
| | | # Spring |
| | | spring: |
| | | application: |
| | |
| | | config: |
| | | type: nacos |
| | | nacos: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | data-id: seata-server.properties |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # data-id: seata-server.properties |
| | | # username: nacos |
| | | # password: nacos |
| | | registry: |
| | | type: nacos |
| | | nacos: |
| | | application: seata-server |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # username: nacos |
| | | # password: nacos |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 # nacos注册中心地址 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 |
| | | group: DEFAULT_GROUP |
| | | application: seata-server #Nacos 中 Seata 名称 |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # application: seata-server #Nacos 中 Seata 名称 |
| | | # username: nacos |
| | | # password: nacos |
| | | sentinel: |
| | | transport: |
| | | dashboard: 127.0.0.1:8080 # Sentinel控制台地址 |
| | | eager: true |
| | | |
| | | |
| | | --- |
| | | spring: |
| | | config: |
| | |
| | | nacos: |
| | | discovery: |
| | | # 服务注册地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | service: ${spring.application.name} |
| | | group: DEFAULT_GROUP |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | config: |
| | | # 配置中心地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | group: DEFAULT_GROUP |
| | | name: ${spring.application.name} |
| | | # 配置文件格式 |
| | |
| | | alipayConfig.setSignType(SignType.RSA2.getType()); |
| | | //判断加签方式 |
| | | String signType = aliProperties.getSignType(); |
| | | if(SignType.CERT.getType().equals(signType)){ |
| | | if(SignType.SECRET_KEY.getType().equals(signType)){ |
| | | alipayConfig.setPrivateKey(aliProperties.getPrivateKey()); |
| | | alipayConfig.setAlipayPublicKey(aliProperties.getAlipayPublicKey()); |
| | | return alipayConfig; |
| | | } |
| | | if(SignType.SECRET_KEY.getType().equals(signType)){ |
| | | if(SignType.CERT.getType().equals(signType)){ |
| | | alipayConfig.setAppCertPath(aliProperties.getAppCertPath()); |
| | | alipayConfig.setAlipayPublicCertPath(aliProperties.getAlipayPublicCertPath()); |
| | | alipayConfig.setRootCertPath(aliProperties.getRootCertPath()); |
| | |
| | | import org.apache.poi.util.IOUtils; |
| | | |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.FileInputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | |
| | |
| | | public InputStream getPrivateKeyStream() { |
| | | // 需要证书释放 |
| | | byte[] certData; |
| | | InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(this.privateKeyPath); |
| | | // InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(this.privateKeyPath); |
| | | InputStream certStream = null; |
| | | try { |
| | | certStream = new FileInputStream(this.privateKeyPath); |
| | | certData = IOUtils.toByteArray(certStream); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | throw new RuntimeException("私钥文件未找到"); |
| | | }finally { |
| | | if(null != certStream){ |
| | | try { |
| | | certStream.close(); |
| | | } catch (IOException e) { |
| | | log.error("私钥流关闭异常"); |
| | | } |
| | | } |
| | | } |
| | | return new ByteArrayInputStream(certData); |
| | | } |
| | | } |
| | |
| | | public void setMchId(String mchId) { |
| | | this.mchId = mchId; |
| | | } |
| | | |
| | | public String getCallBackUrl() { |
| | | return callBackUrl; |
| | | } |
| | | |
| | | public void setCallBackUrl(String callBackUrl) { |
| | | this.callBackUrl = callBackUrl; |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.payment.wx.utils; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.fasterxml.jackson.core.type.TypeReference; |
| | | import com.ruoyi.common.core.utils.WebUtils; |
| | | import com.ruoyi.payment.wx.model.WxCloseOrderModel; |
| | |
| | | */ |
| | | protected String buildBaseParam(WxPaymentInfoModel requestBody, String notifyUrl) { |
| | | // 封装基础数据 |
| | | // requestBody.setNotify_url(notifyUrl); |
| | | requestBody.setNotify_url(notifyUrl + requestBody.getNotify_url()); |
| | | String reqBody = WxJsonUtils.toJsonString(requestBody); |
| | | return reqBody; |
| | | } |
| | |
| | | url |
| | | , socketTimeout |
| | | , connectTimeout); |
| | | String repBody = result(httpClient, httpGet); |
| | | NotifyV3PayDecodeRespBody body = WxJsonUtils.parseObject(repBody, NotifyV3PayDecodeRespBody.class); |
| | | CloseableHttpResponse response = null; |
| | | try { |
| | | response = httpClient.execute(httpGet); |
| | | int statusCode = response.getStatusLine().getStatusCode(); |
| | | String respBodyStr = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); |
| | | if (WxUtils.getLogger().isDebugEnabled()) { |
| | | WxUtils.debug("请求成功:{}", respBodyStr); |
| | | } |
| | | if(404 == statusCode){ |
| | | return null; |
| | | } |
| | | // 成功相应 |
| | | if (STATUS_CODE == statusCode || OTHER_STATUS_CODE == statusCode ) { |
| | | NotifyV3PayDecodeRespBody body = WxJsonUtils.parseObject(respBodyStr, NotifyV3PayDecodeRespBody.class); |
| | | return body; |
| | | } else { |
| | | WxUtils.error("failed,resp code = {},return body = {}", statusCode, respBodyStr); |
| | | throw new RuntimeException(respBodyStr); |
| | | } |
| | | } catch (ConnectTimeoutException e) { |
| | | e.printStackTrace(); |
| | | throw new RuntimeException("接口超时"); |
| | | } catch (SocketTimeoutException e) { |
| | | e.printStackTrace(); |
| | | throw new RuntimeException("读取接口数据超时"); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | throw new RuntimeException("接口请求失败,请尝试检查网络环境或请求接口是否能正常访问"); |
| | | } finally { |
| | | // 关闭响应 |
| | | try { |
| | | if (response != null) { |
| | | //关闭结果集 |
| | | response.getEntity().getContent().close(); |
| | | response.close(); |
| | | } |
| | | } catch (IOException e) { |
| | | throw new RuntimeException("关闭流异常"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | Map<String, Object> body = WxJsonUtils.parseObject(repBody, Map.class); |
| | | return body; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 请求结果 |
| | |
| | | */ |
| | | @Override |
| | | public Map<String, Object> refund(WxPaymentRefundModel refundModel) { |
| | | // refundModel.setNotify_url(this.config.getV3().getNotifyRefundUrl()); |
| | | refundModel.setNotify_url(this.config.getV3().getNotifyRefundUrl() + refundModel.getNotify_url()); |
| | | return refund(this.httpClient, "/v3/refund/domestic/refunds", this.config.getHttpReadTimeoutMs(), this.config.getHttpConnectTimeoutMs(), refundModel); |
| | | } |
| | | |
| | |
| | | server: |
| | | port: 9500 |
| | | tomcat: |
| | | basedir: /data/tomcat |
| | | # Spring |
| | | spring: |
| | | application: |
| | |
| | | # 共享配置 |
| | | shared-configs: |
| | | - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} |
| | | |
| | | |
| | | --- |
| | | |
| | | seata: |
| | | enabled: true |
| | | application-id: ${spring.application.name} |
| | |
| | | config: |
| | | type: nacos |
| | | nacos: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | data-id: seata-server.properties |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # data-id: seata-server.properties |
| | | # username: nacos |
| | | # password: nacos |
| | | registry: |
| | | type: nacos |
| | | nacos: |
| | | application: seata-server |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb |
| | | group: DEFAULT_GROUP |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # username: nacos |
| | | # password: nacos |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | # 开发环境 |
| | | server-addr: 192.168.110.169:8848 # nacos注册中心地址 |
| | | namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 |
| | | group: DEFAULT_GROUP |
| | | application: seata-server #Nacos 中 Seata 名称 |
| | | username: nacos |
| | | password: nacos |
| | | # 生产环境 |
| | | # server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | # group: DEFAULT_GROUP |
| | | # application: seata-server #Nacos 中 Seata 名称 |
| | | # username: nacos |
| | | # password: nacos |
| | | sentinel: |
| | | transport: |
| | | dashboard: 127.0.0.1:8080 # Sentinel控制台地址 |
| | | eager: true |
| | | |
| | | |
| | | --- |
| | | spring: |
| | | config: |
| | |
| | | nacos: |
| | | discovery: |
| | | # 服务注册地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | service: ${spring.application.name} |
| | | group: DEFAULT_GROUP |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | config: |
| | | # 配置中心地址 |
| | | server-addr: 127.0.0.1:8848 |
| | | namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2 |
| | | server-addr: 192.168.0.137:8848,192.168.0.123:8848 |
| | | namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a |
| | | username: nacos |
| | | password: nacos |
| | | group: DEFAULT_GROUP |
| | | name: ${spring.application.name} |
| | | # 配置文件格式 |