Commit b2eded42 authored by kang.nie@inzymeits.com's avatar kang.nie@inzymeits.com
Browse files

初始化代码

parent 12156d65
Pipeline #3109 failed with stages
in 0 seconds
package com.cusc.nirvana.user.rnr.mg.client;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.constants.UserRnrMgClientConstant;
import com.cusc.nirvana.user.rnr.mg.dto.MgVehicleCompanyDTO;
import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* 车企信息表(FpVehicleCompany) client
*
* @author yuy336
* @since 2022-04-19 20:11:23
*/
@Component
public class MgVehicleCompanyClient {
@Autowired
@Qualifier("restTemplateRnrMg")
private RestTemplate restTemplateRnrMg;
/**
* 分页查询
*
* @param bean 筛选条件
* @return 查询结果
*/
public Response<PageResult<MgVehicleCompanyDTO>> queryByPage(MgVehicleCompanyDTO bean) {
return RnrMgRestTemplateUtils.postForResponsePageResult(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgVehicleCompany/queryByPage", bean, MgVehicleCompanyDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<MgVehicleCompanyDTO> getByUuid(MgVehicleCompanyDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgVehicleCompany/getByUuid",
bean,
MgVehicleCompanyDTO.class);
}
/**
* 通过租户编号查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<MgVehicleCompanyDTO> getVehicleCompany(MgVehicleCompanyDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgVehicleCompany/getVehicleCompany",
bean, MgVehicleCompanyDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<List<MgVehicleCompanyDTO>> queryByList(MgVehicleCompanyDTO bean) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgVehicleCompany/queryByList", bean,
MgVehicleCompanyDTO.class);
}
/**
* 新增数据
*
* @param bean 实体
* @return 新增结果
*/
public Response add(MgVehicleCompanyDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgVehicleCompany/add", bean, Response.class);
}
/**
* 编辑数据
*
* @param bean 实体
* @return 编辑结果
*/
public Response update(MgVehicleCompanyDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgVehicleCompany/update", bean, Response.class);
}
/**
* 删除数据
*
* @param bean 实体
* @return 删除是否成功
*/
public Response<Boolean> deleteById(MgVehicleCompanyDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgVehicleCompany/deleteById", bean, Response.class);
}
}
package com.cusc.nirvana.user.rnr.mg.client;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.constants.UserRnrMgClientConstant;
import com.cusc.nirvana.user.rnr.mg.dto.OpenTenantRelationDTO;
import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* 开放平台租户和实名制租户映射关系表(OpenTenantRelation) client
*
* @author yuy336
* @since 2022-06-15 20:03:19
*/
@Component
public class OpenTenantRelationClient {
@Autowired
@Qualifier("restTemplateRnrMg")
private RestTemplate restTemplateRnrMg;
/**
* 分页查询
*
* @param bean 筛选条件
* @return 查询结果
*/
public Response<PageResult<OpenTenantRelationDTO>> queryByPage(OpenTenantRelationDTO bean) {
return RnrMgRestTemplateUtils.postForResponsePageResult(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/openTenantRelation/queryByPage", bean,
OpenTenantRelationDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<OpenTenantRelationDTO> getByUuid(OpenTenantRelationDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/openTenantRelation/getByUuid",
bean,
OpenTenantRelationDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<List<OpenTenantRelationDTO>> queryByList(OpenTenantRelationDTO bean) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/openTenantRelation/queryByList", bean,
OpenTenantRelationDTO.class);
}
/**
* 新增数据
*
* @param bean 实体
* @return 新增结果
*/
public Response add(OpenTenantRelationDTO bean) {
return RnrMgRestTemplateUtils.postForObject(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/openTenantRelation/add", bean, Response.class);
}
/**
* 编辑数据
*
* @param bean 实体
* @return 编辑结果
*/
public Response update(OpenTenantRelationDTO bean) {
return RnrMgRestTemplateUtils.postForObject(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/openTenantRelation/update", bean, Response.class);
}
/**
* 删除数据
*
* @param bean 实体
* @return 删除是否成功
*/
public Response<Boolean> deleteById(OpenTenantRelationDTO bean) {
return RnrMgRestTemplateUtils.postForObject(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/openTenantRelation/deleteById", bean, Response.class);
}
}
package com.cusc.nirvana.user.rnr.mg.client;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.constants.UserRnrMgClientConstant;
import com.cusc.nirvana.user.rnr.mg.dto.OrgBusinessTagDTO;
import com.cusc.nirvana.user.rnr.mg.dto.OrgBusinessTagQueryDTO;
import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@Component
public class OrgBusinessTagClient {
@Autowired
@Qualifier("restTemplateRnrMg")
RestTemplate restTemplateRnrMg;
/**
* 新增业务标签信息
*
* @param bean
* @return
*/
public Response<OrgBusinessTagDTO> add(OrgBusinessTagDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/businessTag/add", bean, OrgBusinessTagDTO.class);
}
/**
* 修改业务标签信息
*
* @param bean
* @return
*/
public Response<OrgBusinessTagDTO> update(OrgBusinessTagDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/businessTag/update", bean, OrgBusinessTagDTO.class);
}
/**
* 删除业务标签信息
*
* @param bean
* @return
*/
public Response delete(OrgBusinessTagDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/businessTag/delete", bean,
Response.class);
}
/**
* 查询指定数据
*
* @param uuid
* @return
*/
public Response<OrgBusinessTagDTO> getByUuid(String uuid) {
return RnrMgRestTemplateUtils.getForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL +
"/businessTag/getByUuid?uuid=" + uuid, OrgBusinessTagDTO.class);
}
/**
* 根据租户和标签编码查询业务标签信息
*
* @param bean
* @return
*/
public Response<OrgBusinessTagDTO> getByTagCode(OrgBusinessTagDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/businessTag/getByTagCode", bean, OrgBusinessTagDTO.class);
}
/**
* 分页查询历史数据
*
* @param queryDTO
* @return
*/
public Response<List<OrgBusinessTagDTO>> query(OrgBusinessTagQueryDTO queryDTO) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg,
UserRnrMgClientConstant.USER_RNR_MG_URL + "/businessTag/query", queryDTO, OrgBusinessTagDTO.class);
}
}
package com.cusc.nirvana.user.rnr.mg.client;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.constants.UserRnrMgClientConstant;
import com.cusc.nirvana.user.rnr.mg.dto.*;
import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@Component
public class OrgSimRelClient {
@Autowired
@Qualifier("restTemplateRnrMg")
RestTemplate restTemplateRnrMg;
/**
* 新增组织与SIM卡关系
* @param bean
* @return
*/
public Response<OrgSimRelDTO> add(OrgSimRelDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/add", bean, OrgSimRelDTO.class);
}
/**
* 批量新增组织与SIM卡的关系
* @param bean
* @return
*/
public Response<?> addBatch(OrgSimRelBatchDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/addBatch", bean, Response.class);
}
/**
* 修改组织与SIM卡关系
* @param bean
* @return
*/
public Response<OrgSimRelDTO> update(OrgSimRelDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/update", bean, OrgSimRelDTO.class);
}
/**
* 修改sim卡与vin码绑定状态
* @param simRelBindStatusDTO
* @return
*/
public Response<Boolean> updateBindStatus(OrgSimRelBindStatusDTO simRelBindStatusDTO) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/updateBindStatus", simRelBindStatusDTO, Boolean.class);
}
/**
* 修改sim卡与vin码绑定状态
* @return
*/
public Response<Boolean> updateBindIccid(List<String> iccid) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/updateBindIccid", iccid, Boolean.class);
}
/**
* 删除SIM卡导入历史信息
* @param bean
* @return
*/
public Response delete(OrgSimRelDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/delete", bean, Response.class);
}
/**
* 查询指定数据
* @param uuid
* @return
*/
public Response<OrgSimRelDTO> getByUuid(String uuid) {
return RnrMgRestTemplateUtils.getForResponse(restTemplateRnrMg,UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/getByUuid?uuid=" + uuid, OrgSimRelDTO.class);
}
/**
* 根据Iccid查询卡信息
* @param iccid
* @return
*/
public Response<OrgSimRelDTO> getByIccid(String iccid) {
return RnrMgRestTemplateUtils.getForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/getByIccid?iccid=" + iccid, OrgSimRelDTO.class);
}
/**
* 根据vin码查询车卡关系列表
* @param queryDTO
* @return
*/
public Response<List<OrgSimRelDTO>> queryByVin(OrgSimRelVinQueryDTO queryDTO) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/queryByVin", queryDTO, OrgSimRelDTO.class);
}
/**
* 分页查询历史数据
* @param bean
* @return
*/
public Response<PageResult<OrgSimRelDTO>> queryByPage(OrgSimRelQueryDTO bean) {
return RnrMgRestTemplateUtils.postForResponsePageResult(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/queryByPage", bean, OrgSimRelDTO.class);
}
public Response<List<OrgSimRelDTO>> queryByList(IccIdListRequestDTO requestDTO) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/queryByList", requestDTO, OrgSimRelDTO.class);
}
public Response updateVin(List<MgRnrCardInfoDTO> mgRnrCardInfoDTOList) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/updateVin", mgRnrCardInfoDTOList, Response.class);
}
public Response<List<OrgSimRelDTO>> queryInfoByIccidAndStatus(IccIdListRequestDTO requestDTO) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/queryInfoByIccidAndStatus", requestDTO, OrgSimRelDTO.class);
}
public Response updateStatusByIccid(IccIdListRequestDTO requestDTO) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/orgSimRel/updateStatusByIccid", requestDTO, Response.class);
}
}
package com.cusc.nirvana.user.rnr.mg.client;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.constants.UserRnrMgClientConstant;
import com.cusc.nirvana.user.rnr.mg.dto.RnrNoticeTemplateConfigDTO;
import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* 消息模板配置(RnrNoticeTemplateConfig) client
*
* @author yuy336
* @since 2022-06-01 11:06:48
*/
@Component
public class RnrNoticeTemplateConfigClient {
@Autowired
@Qualifier("restTemplateRnrMg")
RestTemplate restTemplateRnrMg;
/**
* 分页查询
*
* @param bean 筛选条件
* @return 查询结果
*/
public Response<PageResult<RnrNoticeTemplateConfigDTO>> queryByPage(RnrNoticeTemplateConfigDTO bean) {
return RnrMgRestTemplateUtils.postForResponsePageResult(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/rnrNoticeTemplateConfig/queryByPage", bean, RnrNoticeTemplateConfigDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<RnrNoticeTemplateConfigDTO> getByUuid(RnrNoticeTemplateConfigDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/rnrNoticeTemplateConfig/getByUuid",
bean,
RnrNoticeTemplateConfigDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<List<RnrNoticeTemplateConfigDTO>> queryByList(RnrNoticeTemplateConfigDTO bean) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/rnrNoticeTemplateConfig/queryByList", bean,
RnrNoticeTemplateConfigDTO.class);
}
/**
* 新增数据
*
* @param bean 实体
* @return 新增结果
*/
public Response add(RnrNoticeTemplateConfigDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/rnrNoticeTemplateConfig/add", bean, Response.class);
}
/**
* 编辑数据
*
* @param bean 实体
* @return 编辑结果
*/
public Response update(RnrNoticeTemplateConfigDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/rnrNoticeTemplateConfig/update", bean, Response.class);
}
/**
* 删除数据
*
* @param bean 实体
* @return 删除是否成功
*/
public Response<Boolean> deleteById(RnrNoticeTemplateConfigDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/rnrNoticeTemplateConfig/deleteById", bean, Response.class);
}
}
package com.cusc.nirvana.user.rnr.mg.client;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.constants.UserRnrMgClientConstant;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* 实名工单信息(RnrOrder) client
*
* @author yuy336
* @since 2022-01-26 13:39:49
*/
@Component
public class RnrOrderClient {
@Autowired
@Qualifier("restTemplateRnrMg")
private RestTemplate restTemplateRnrMg;
/**
* 分页查询
*
* @param bean 筛选条件
* @return 查询结果
*/
public Response<PageResult<RnrOrderDTO>> queryByPage(RnrOrderDTO bean) {
return RnrMgRestTemplateUtils.postForResponsePageResult(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrder/queryByPage", bean, RnrOrderDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<RnrOrderDTO> getByUuid(RnrOrderDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrder/getByUuid",
bean,
RnrOrderDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<List<RnrOrderDTO>> queryByList(RnrOrderDTO bean) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrder/queryByList", bean,
RnrOrderDTO.class);
}
/**
* 新增数据
*
* @param bean 实体
* @return 新增结果
*/
public Response add(RnrOrderDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrder/add", bean, Response.class);
}
/**
* 编辑数据
*
* @param bean 实体
* @return 编辑结果
*/
public Response update(RnrOrderDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrder/update", bean, Response.class);
}
/**
* 删除数据
*
* @param bean 实体
* @return 删除是否成功
*/
public Response<Boolean> deleteById(RnrOrderDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrder/deleteById", bean, Response.class);
}
/**
* 发起一个工单审批
* @param dto
* @return
*/
public Response startWorkOrder(@RequestBody RnrOrderDTO dto){
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrder/startWorkOrder", dto, Response.class);
}
/**
* 更新工单状态
* @param dto
* @return
*/
public Response updateOrderStatus(@RequestBody RnrOrderDTO dto){
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrder/updateOrderStatus", dto, Response.class);
}
}
package com.cusc.nirvana.user.rnr.mg.client;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.constants.UserRnrMgClientConstant;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderOperationLogDTO;
import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* 实名工单操作日志(MgRnrOrderOperationLog) client
*
* @author yuy336
* @since 2022-03-04 10:08:01
*/
@Component
public class RnrOrderOperationLogClient {
@Autowired
@Qualifier("restTemplateRnrMg")
private RestTemplate restTemplateRnrMg;
/**
* 分页查询
*
* @param bean 筛选条件
* @return 查询结果
*/
public Response<PageResult<RnrOrderOperationLogDTO>> queryByPage(RnrOrderOperationLogDTO bean) {
return RnrMgRestTemplateUtils.postForResponsePageResult(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrderOperationLog/queryByPage", bean, RnrOrderOperationLogDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<RnrOrderOperationLogDTO> getByUuid(RnrOrderOperationLogDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrderOperationLog/getByUuid",
bean,
RnrOrderOperationLogDTO.class);
}
/**
* 通过主键查询单条数据
*
* @param bean 实体
* @return 单条数据
*/
public Response<List<RnrOrderOperationLogDTO>> queryByList(RnrOrderOperationLogDTO bean) {
return RnrMgRestTemplateUtils.postForResponseList(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrderOperationLog/queryByList", bean,
RnrOrderOperationLogDTO.class);
}
/**
* 新增数据
*
* @param bean 实体
* @return 新增结果
*/
public Response add(RnrOrderOperationLogDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrderOperationLog/add", bean, Response.class);
}
/**
* 编辑数据
*
* @param bean 实体
* @return 编辑结果
*/
public Response update(RnrOrderOperationLogDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/mgRnrOrderOperationLog/update", bean, Response.class);
}
}
package com.cusc.nirvana.user.rnr.mg.client;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.constants.UserRnrMgClientConstant;
import com.cusc.nirvana.user.rnr.mg.dto.SimFileHistoryDTO;
import com.cusc.nirvana.user.rnr.mg.dto.SimFileHistoryQueryDTO;
import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class SimFileHistoryClient {
@Autowired
@Qualifier("restTemplateRnrMg")
RestTemplate restTemplateRnrMg;
/**
* 新增SIM卡导入历史信息
* @param bean
* @return
*/
public Response<SimFileHistoryDTO> add(SimFileHistoryDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/simFileHistory/add", bean, SimFileHistoryDTO.class);
}
/**
* 修改SIM卡导入历史信息
* @param bean
* @return
*/
public Response<SimFileHistoryDTO> update(SimFileHistoryDTO bean) {
return RnrMgRestTemplateUtils.postForResponse(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/simFileHistory/update", bean, SimFileHistoryDTO.class);
}
/**
* 删除SIM卡导入历史信息
* @param bean
* @return
*/
public Response delete(SimFileHistoryDTO bean) {
return restTemplateRnrMg.postForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/simFileHistory/delete", bean, Response.class);
}
/**
* 查询指定数据
* @param uuid
* @return
*/
public Response<SimFileHistoryDTO> getByUuid(String uuid) {
Response response = restTemplateRnrMg.getForObject(UserRnrMgClientConstant.USER_RNR_MG_URL + "/simFileHistory/getByUuid?uuid=" + uuid, Response.class);
return Response.createSuccess(JSON.parseObject(JSONObject.toJSONString(response.getData()), SimFileHistoryDTO.class));
}
/**
* 分页查询历史数据
* @param bean
* @return
*/
public Response<PageResult<SimFileHistoryDTO>> queryByPage(SimFileHistoryQueryDTO bean) {
return RnrMgRestTemplateUtils.postForResponsePageResult(restTemplateRnrMg, UserRnrMgClientConstant.USER_RNR_MG_URL + "/simFileHistory/queryByPage", bean, SimFileHistoryDTO.class);
}
}
package com.cusc.nirvana.user.rnr.mg.constants;
/**
* Description: redis相关常量类
* <br />
* CreateDate 2021-11-03 20:36
*
* @author yuyi
**/
public class UserRnrMgClientConstant {
/**
* 实名业务 服务的url
**/
public static final String USER_RNR_MG_URL = "http://local-rnr-mg";
}
package com.cusc.nirvana.user.rnr.mg.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.Feature;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import java.lang.reflect.Type;
import java.util.List;
/**
* @author jiamj
* @date 2022/3/9
*/
public class RestUtils {
public static <T> Response<T> rest(RestTemplate restTemplate, String url, Object request, Class<?> responseType) {
ResponseEntity<String> entity = restTemplate.postForEntity(url, request, String.class);
return JSON.parseObject(entity.getBody(), (new TypeReference<Response<T>>(new Type[]{responseType}) {
}).getType(), new Feature[0]);
}
public static <T> Response<PageResult<T>> restPageResult(RestTemplate restTemplate, String url, Object request, Class<?> responseType) {
ResponseEntity<String> entity = restTemplate.postForEntity(url, request, String.class);
return JSON.parseObject(entity.getBody(), (new TypeReference<Response<PageResult<T>>>(new Type[]{responseType}) {
}).getType(), new Feature[0]);
}
public static <T> Response<List<T>> restList(RestTemplate restTemplate, String url, Object request, Class<?> responseType) {
ResponseEntity<String> entity = restTemplate.postForEntity(url, request, String.class);
return JSON.parseObject(entity.getBody(), (new TypeReference<Response<List<T>>>(new Type[]{responseType}) {
}).getType(), new Feature[0]);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>local-rnr-mg</artifactId>
<groupId>com.cusc.nirvana</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>local-rnr-mg-server</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<mysql-connector-j.version>5.1.49</mysql-connector-j.version>
<druid.version>1.1.24</druid.version>
<pagehelper.version>5.1.11</pagehelper.version>
<jsqlparser.version>3.2</jsqlparser.version>
<mybatis.version>3.5.4</mybatis.version>
<mybatis-plus.version>3.3.2</mybatis-plus.version>
<mapstruct.version>1.4.2.Final</mapstruct.version>
<skipTests>true</skipTests>
</properties>
<dependencies>
<dependency>
<groupId>com.cusc.nirvana</groupId>
<artifactId>cusc-rds</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<exclusions>
<exclusion>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.cusc.nirvana</groupId>
<artifactId>local-rnr-mg-dto</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.cusc.nirvana</groupId>
<artifactId>local-rnr-user-remote</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.cusc.nirvana</groupId>
<artifactId>user-config-common</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.0.0</version>
<scope>test</scope>
</dependency>
<!-- mapstruct-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<!-- AOP -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- redis依赖 -->
<dependency>
<groupId>com.cusc.component</groupId>
<artifactId>cache-spring</artifactId>
<version>1.0.4-RELEASE</version>
</dependency>
<dependency>
<groupId>com.cusc.component</groupId>
<artifactId>cache-annotation</artifactId>
<version>1.0.4-RELEASE</version>
</dependency>
<!-- apache 文件处理 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- Google开源的优秀图片处理的第三方Java类库 -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.17</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.5</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.66</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.12.0</version>
</dependency>
<!-- kafka依赖 -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources/</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.yml</include>
<include>**/*.yaml</include>
<include>**/*.xml</include>
<include>**/*.factories</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
package com.cusc.nirvana.user.rnr.common.cloud;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@RefreshScope
@Component
public class CloudConstant {
public static String ORGID = "orgId";
private String HOST;
private String VERSION;
private String APPID;
private String APPSCRET;
private String ENCRYPT_KEY;
private String DECRYPT_KEY;
public String getAPPID() {
return APPID;
}
@Value("${rnr.cloud.appid}")
public void setAPPID(String APPID) {
this.APPID = APPID;
}
public String getAPPSCRET() {
return APPSCRET;
}
@Value("${rnr.cloud.appsecret}")
public void setAPPSCRET(String APPSCRET) {
this.APPSCRET = APPSCRET;
}
public String getHOST() {
return HOST;
}
@Value("${rnr.cloud.host}")
public void setHOST(String HOST) {
this.HOST = HOST;
}
public String getVERSION() {
return VERSION;
}
@Value("${rnr.cloud.version:1.0.0}")
public void setVERSION(String VERSION) {
this.VERSION = VERSION;
}
@Value("${rnr.cloud.encrypt:xxxxxx}")
public void setENCRYPT_KEY(String ENCRYPT_KEY) {
this.ENCRYPT_KEY = ENCRYPT_KEY;
}
@Value("${rnr.cloud.decrypt:xxxxxx}")
public void setDECRYPT_KEY(String DECRYPT_KEY) {
this.DECRYPT_KEY = DECRYPT_KEY;
}
public String getENCRYPT_KEY() {
return ENCRYPT_KEY;
}
public String getDECRYPT_KEY() {
return DECRYPT_KEY;
}
}
package com.cusc.nirvana.user.rnr.common.cloud;
public class CloudMethod {
//5.1标签查询
public static String QUERY_TAG_LIST = "/user-rnr-openapi/vehicleCard/manage/queryTagList";
//5.2批量卡导入
public static String SIM_IMPORT = "/user-rnr-openapi/vehicleCard/manage/simImport";
//5.3车卡绑定接口-批量
public static String SIM_BIND = "/user-rnr-openapi/vehicleCard/manage/bind";
//5.4车卡查询接口
public static String GET_ICCIDS_BY_VIN = "/user-rnr-openapi/vehicleCard/manage/getIccidsByVin";
//5.5判断车卡是否绑定接口
public static String VERIFY_VIN_CARD = "/user-rnr-openapi/vehicleCard/manage/verifyVinCard";
//6.文件上传
public static String FILE_UPLOAD = "/user-rnr-openapi/rnAuth/attachment/upload";
//7.1自然人实名-新车接口
public static String NEW_CAR = "/user-rnr-openapi/rnAuth/personal/newCar";
//7.2自然人实名-二手车接口
public static String USED_CAR = "/user-rnr-openapi/rnAuth/personal/usedCar";
//7.3自然人实名-一手车解绑
public static String UNBIND_FIRSTHAND_CAR = "/user-rnr-openapi/rnAuth/unbind/firstHandCar";
//7.4自然人实名-二手车解绑
public static String UNBIND_SECONDHAND_CAR = "/user-rnr-openapi/rnAuth/unbind/secondHandCar";
//8.1企业实名-新车
public static String COMPANY_NEWCAR = "/user-rnr-openapi/rnAuth/enterprise/newCar";
//8.2车企实名-解绑
public static String COMPANY_UNBIND = "/user-rnr-openapi/rnAuth/vehicleEnterprise/unbind";
//8.3企业责任人变更
public static String COMPANY_CHANGEOWNER = "/user-rnr-openapi/rnAuth/enterprise/changeOwner";
//9.1设备更换
public static String TBOX_CHANGE = "/user-rnr-openapi/rnAuth/tBox/change";
//11.1实名信息查询接口
public static String REALMSG_SEARCH = "/user-rnr-openapi/rnAuth/search/getRnAuthInfoByVin";
// 11.2实名状态查询接口
// public static String A = "";
// 11.3实名状态查询接口-批量
// public static String A = "";
//12.1车联网一证十卡接口
public static String IOVCARD_NUM = "/user-rnr-openapi/base/iovCardNum";
//12.2物联网一证十卡接口
public static String IOTCARD_NUM = "/user-rnr-openapi/base/iotCardNum";
//12.3活体认证
public static String LIVENESS = "/user-rnr-openapi/base/liveness";
//12.4活体验证码
public static String LIVENESS_CODE = "/user-rnr-openapi/base/livenessCode";
//12.5身份证OCR
public static String OCR_NP = "/user-rnr-openapi/base/ocrNp";
//12.6人像比对
public static String ID_COMPARE = "/user-rnr-openapi/base/idCompare";
//12.7人脸比对
public static String FACE_COMPARE = "/user-rnr-openapi/base/faceCompare";
//12.8身份信息核查
public static String CERT_CHECK = "/user-rnr-openapi/base/certCheck";
//12.9后端活体检查
public static String FMP = "/user-rnr-openapi/base/fmp";
//13.1个人实名信息同步接口
public static String SYNC_PERSONAL = "/user-rnr-openapi/rnAuth/sync/personal";
//13.2企业实名历史数据同步
public static String ASYNC_ENTERPRISE = "/user-rnr-openapi/rnAuth/sync/enterprise";
//013 本地系统将实名结果回传给智网
public static String NOTIFY_RESULT = "/user-rnr-openapi/rnAuth/notify/result";
//013 h5接口
public static String H5LIVELOGIN_URL = "/user-rnr-openapi/base/getH5LiveLoginUrl";
//----------------------------------------openapi未提供接口
//一车多卡绑定接口
public static String ONE_CAR_MORE_CARDS = "/user-rnr-openapi/";
}
package com.cusc.nirvana.user.rnr.common.cloud;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.cusc.nirvana.common.encrypt.sign.HMAC;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.util.CuscStringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List;
@Service
@Slf4j
public class CloudService<T> {
@Resource
private RestTemplate thirdPartyRnr;
@Autowired
private CloudConstant cloudConstant;
public <T> Response<T> postForResponse(String url, Object rq, Class<T> rsClazz) {
String rqUrl = cloudConstant.getHOST() + url;
try {
log.info("openapi key : {}", cloudConstant.getENCRYPT_KEY());
String encryptrq = Sm4DemoUtils.encryptEcbPaddingHexString(cloudConstant.getENCRYPT_KEY(), JSON.toJSONString(rq));
HttpHeaders headers = headers();
HttpEntity httpEntity = new HttpEntity(encryptrq, headers);
log.info("send 2 cloud begin , url : {}, rq : {}, header : {}, encryptrq : {}", rqUrl, JSON.toJSONString(rq),
headers.toString(), encryptrq);
long startTime = System.currentTimeMillis();
ResponseEntity<String> entity =
thirdPartyRnr.exchange(rqUrl, HttpMethod.POST, httpEntity, String.class);
long endTime = System.currentTimeMillis();
if (entity != null && entity.getStatusCodeValue() == 200) {
log.info("send 2 cloud success code 200, url : {}, rq : {}, body : {}, times : {}",
rqUrl, JSON.toJSONString(rq), entity.getBody(), endTime - startTime);
Response<String> result = JSON.parseObject(entity.getBody(), new TypeReference<Response<String>>(String.class) {
}.getType());
String data = Sm4DemoUtils.decryptEcbPaddingString(cloudConstant.getDECRYPT_KEY(), result.getData());
T t = JSON.parseObject(data, rsClazz);
Response<T> finalresult = new Response<T>(result.getMsg(), result.getCode(), t, result.getSuccess(), result.getException());
finalresult.setAttachment(result.getAttachment());
return finalresult;
} else {
log.info("send 2 cloud fail, url : {}, rq : {}, times : {}, entity : {}", rqUrl, JSON.toJSONString(rq),
endTime - startTime, null == entity ? null : JSON.toJSONString(entity));
return Response.createError("网络异常");
}
} catch (Exception e) {
log.error("send 2 cloud error, url : {}, rq : {}, e : {}", rqUrl, JSON.toJSONString(rq), e);
return Response.createError("系统异常");
}
}
public <T> Response<List<T>> postForResponseList(String url, Object rq, Class<T> rsClazz) {
String rqUrl = cloudConstant.getHOST() + url;
try {
HttpEntity httpEntity = new HttpEntity(
Sm4DemoUtils.encryptEcbPaddingHexString(cloudConstant.getENCRYPT_KEY(), JSON.toJSONString(rq)),
headers());
log.info("send 2 cloud begin , url : {}, rq : {}", rqUrl, JSON.toJSONString(rq));
long startTime = System.currentTimeMillis();
ResponseEntity<String> entity =
thirdPartyRnr.exchange(rqUrl, HttpMethod.POST, httpEntity, String.class);
long endTime = System.currentTimeMillis();
if (entity != null && entity.getStatusCodeValue() == 200) {
log.info("send 2 cloud success code 200, url : {}, rq : {}, body : {}, times : {}",
rqUrl, JSON.toJSONString(rq), entity.getBody(), endTime - startTime);
Response<String> result = JSON.parseObject(entity.getBody(), new TypeReference<Response<String>>(String.class) {
}.getType());
String data = Sm4DemoUtils.decryptEcbPaddingString(cloudConstant.getDECRYPT_KEY(), result.getData());
List<T> t = JSON.parseArray(data, rsClazz);
Response<List<T>> finalresult = new Response<List<T>>(result.getMsg(), result.getCode(), t, result.getSuccess(), result.getException());
finalresult.setAttachment(result.getAttachment());
return finalresult;
} else {
log.info("send 2 cloud fail, url : {}, rq : {}, times : {}, entity : {}", rqUrl, JSON.toJSONString(rq),
endTime - startTime, null == entity ? null : JSON.toJSONString(entity));
return Response.createError("网络异常");
}
} catch (Exception e) {
log.error("send 2 cloud error, url : {}, rq : {}, e : {}", rqUrl, JSON.toJSONString(rq), e);
return Response.createError("系统异常");
}
}
/**
* 生成请求头
*
* @return
*/
public HttpHeaders headers() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add(SignConstants.APP_ID, cloudConstant.getAPPID());
httpHeaders.add(SignConstants.NONCE_STR, CuscStringUtils.generateUuid());
httpHeaders.add(SignConstants.TIMESTAMP, String.valueOf(System.currentTimeMillis()));
httpHeaders.add(SignConstants.VERSION, cloudConstant.getVERSION());
httpHeaders.setContentType(MediaType.parseMediaType("application/json; charset=UTF-8"));
StringBuilder sb = new StringBuilder();
sb.append(SignConstants.APP_ID + cloudConstant.getAPPID());
sb.append(SignConstants.NONCE_STR + httpHeaders.get(SignConstants.NONCE_STR).get(0));
sb.append(SignConstants.TIMESTAMP + httpHeaders.get(SignConstants.TIMESTAMP).get(0));
sb.append(SignConstants.VERSION + httpHeaders.get(SignConstants.VERSION).get(0));
String scret = HMAC.sign(sb.toString(), cloudConstant.getAPPSCRET(), HMAC.Type.HmacSHA256);
httpHeaders.add(SignConstants.SIGN, scret);
return httpHeaders;
}
}
package com.cusc.nirvana.user.rnr.common.cloud;
/**
* 签名静态属性
*/
public class SignConstants {
/**应用ID的key名称*/
public final static String APP_ID = "APPID";
/**随机数key*/
public final static String NONCE_STR = "NONCE_STR";
/**时间戳key*/
public final static String TIMESTAMP = "TIMESTAMP";
/**版本key*/
public final static String VERSION = "VERSION";
/**签名key*/
public final static String SIGN = "SIGN";
}
package com.cusc.nirvana.user.rnr.common.cloud;
import org.apache.commons.lang3.StringUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.util.Base64;
/**
* Description: 国密SM4
* <br />
* BC库从1.59版本开始已经基本实现了国密算法(SM2、SM3、SM4)
**/
public class Sm4DemoUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(Sm4DemoUtils.class);
//算法名称
public static final String ALGORITHM_NAME = "SM4";
//ECB P5填充
public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";
static {
Security.addProvider(new BouncyCastleProvider());
}
private Sm4DemoUtils() {
}
/**
* ecb加密默认 hexString true
**/
public static String encryptEcbPaddingHexString(String key, String data) {
return encryptEcbPaddingHex(key, data, true, null);
}
/**
* ecb解密默认 hexString true
**/
public static String decryptEcbPaddingString(String key, String data) {
return decryptEcbPaddingHex(key, data, true, null);
}
/**
* Description: ecb解密,可以指定混淆
* <br />
* CreateDate 2021-11-17 15:53:34
*
* @author yuyi
**/
public static String decryptEcbPaddingHex(String key, String data, boolean hexString, String charset) {
if (StringUtils.isEmpty(data)) {
return null;
}
try {
byte[] keyBytes;
if (hexString) {
keyBytes = hexStringToBytes(key);
} else {
keyBytes = key.getBytes();
}
byte[] decrypted = decryptEcbPaddingByte(keyBytes, base64Decoder(data));
if (StringUtils.isNotEmpty(charset)) {
return new String(decrypted, charset);
}
return new String(decrypted, StandardCharsets.UTF_8);
} catch (Exception e) {
LOGGER.error("Sm4Util.decryptEcbPaddingHex error ! ", e);
return null;
}
}
/**
* ECB P5填充解密
*
* @param key 密钥
* @param cipherText 加密后的数据
* @return byte
* @throws IllegalBlockSizeException
* @throws BadPaddingException
* @throws InvalidKeyException
* @throws NoSuchAlgorithmException
* @throws NoSuchProviderException
* @throws NoSuchPaddingException
*/
private static byte[] decryptEcbPaddingByte(byte[] key, byte[] cipherText)
throws IllegalBlockSizeException, BadPaddingException, InvalidKeyException,
NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException {
Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, key);
return cipher.doFinal(cipherText);
}
/**
* Description: ecb加密,可以指定混淆
* <br />
* CreateDate 2021-11-17 15:53:34
*
* @author yuyi
**/
private static String encryptEcbPaddingHex(String key, String data, boolean hexString, String charset) {
if (StringUtils.isEmpty(data)) {
return null;
}
try {
byte[] keyBytes;
if (hexString) {
keyBytes = hexStringToBytes(key);
} else {
keyBytes = key.getBytes();
}
byte[] dataBytes;
if (StringUtils.isNotEmpty(charset)) {
dataBytes = data.getBytes(charset);
} else {
dataBytes = data.getBytes(StandardCharsets.UTF_8);
}
byte[] encrypted = encryptEcbPaddingByte(keyBytes, dataBytes);
return base64Encoder(encrypted);
} catch (Exception e) {
LOGGER.error("Sm4Util.encryptEcbPaddingHex error ! ", e);
return null;
}
}
/**
* base64编码
**/
private static String base64Encoder(byte[] encrypted) {
return Base64.getEncoder().encodeToString(encrypted);
}
/**
* base64解码
**/
private static byte[] base64Decoder(String encrypted) throws IOException {
return Base64.getDecoder().decode(encrypted);
}
/**
* ECB P5填充加密
*
* @param key 密钥
* @param data 明文数据
* @return byte
* @throws InvalidKeyException
* @throws NoSuchAlgorithmException
* @throws NoSuchProviderException
* @throws NoSuchPaddingException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
private static byte[] encryptEcbPaddingByte(byte[] key, byte[] data)
throws InvalidKeyException, NoSuchAlgorithmException, NoSuchProviderException,
NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(data);
}
/**
* ECB P5填充加解密Cipher初始化
*
* @param algorithmName 算法名称
* @param mode 1 加密 2解密
* @param key 密钥
* @return Cipher
* @throws NoSuchAlgorithmException
* @throws NoSuchProviderException
* @throws NoSuchPaddingException
* @throws InvalidKeyException
*/
private static Cipher generateEcbCipher(String algorithmName, int mode, byte[] key)
throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, InvalidKeyException {
Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME);
Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);
cipher.init(mode, sm4Key);
return cipher;
}
/**
* Convert hex string to byte[]
*
* @param hexString
* the hex string
* @return byte[]
*/
public static byte[] hexStringToBytes(String hexString)
{
if (hexString == null || hexString.equals(""))
{
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++)
{
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}
/**
* Convert char to byte
*
* @param c
* char
* @return byte
*/
public static byte charToByte(char c)
{
return (byte) "0123456789ABCDEF".indexOf(c);
}
}
package com.cusc.nirvana.user.rnr.common.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.AsyncTaskExecutor;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* Description: 异步线程池配置
* <br />
* CreateDate 2021-12-01 17:25
*
* @author yuy336
**/
@Configuration
@EnableAsync
public class ExecutorConfig {
private final static Logger LOGGER = LoggerFactory.getLogger(ExecutorConfig.class);
/**
* Description: 日志异步入库
* <br />
* CreateDate 2021-12-01 17:27:11
*
* @author yuyi
**/
@Bean("logToDBExecutor")
public Executor logToDBExecutor() {
LOGGER.info("init logToDBExecutor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(2);
//配置最大线程数
executor.setMaxPoolSize(10);
//配置队列大小
executor.setQueueCapacity(100);
//允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
executor.setKeepAliveSeconds(60);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("data-to-redis");
//线程池的饱和策略 我这里设置的是 CallerRunsPolicy 也就是由用调用者所在的线程来执行任务 共有四种
//AbortPolicy:直接抛出异常,这是默认策略;
//CallerRunsPolicy:用调用者所在的线程来执行任务;
//DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
//DiscardPolicy:直接丢弃任务;
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//线程池的优雅关闭,表明等待所有线程执行完
executor.setWaitForTasksToCompleteOnShutdown(true);
//执行初始化
executor.initialize();
return executor;
}
/**
* Description: 实名认证方式执行
* <br />
* CreateDate 2021-12-01 17:27:11
*
* @author yuyi
**/
@Bean("rnrAuthWayExecutor")
public AsyncTaskExecutor rnrAuthWayExecutor() {
LOGGER.info("init rnrAuthWayExecutor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(2);
//配置最大线程数
executor.setMaxPoolSize(10);
//配置队列大小
executor.setQueueCapacity(100);
//允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
executor.setKeepAliveSeconds(60);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("rnr-mq");
//线程池的饱和策略 我这里设置的是 CallerRunsPolicy 也就是由用调用者所在的线程来执行任务 共有四种
//AbortPolicy:直接抛出异常,这是默认策略;
//CallerRunsPolicy:用调用者所在的线程来执行任务;
//DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
//DiscardPolicy:直接丢弃任务;
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
//线程池的优雅关闭,表明等待所有线程执行完
executor.setWaitForTasksToCompleteOnShutdown(true);
//执行初始化
executor.initialize();
return executor;
}
/**
* Description: 实名认证方式执行
* <br />
* CreateDate 2021-12-01 17:27:11
*
* @author yuyi
**/
@Bean("mqExecutor")
public AsyncTaskExecutor mqExecutor() {
LOGGER.info("init mqExecutor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(50);
//配置最大线程数
executor.setMaxPoolSize(200);
//配置队列大小
executor.setQueueCapacity(100);
//允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
executor.setKeepAliveSeconds(60);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("rnr-auth-way");
//线程池的饱和策略 我这里设置的是 CallerRunsPolicy 也就是由用调用者所在的线程来执行任务 共有四种
//AbortPolicy:直接抛出异常,这是默认策略;
//CallerRunsPolicy:用调用者所在的线程来执行任务;
//DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
//DiscardPolicy:直接丢弃任务;
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//线程池的优雅关闭,表明等待所有线程执行完
executor.setWaitForTasksToCompleteOnShutdown(true);
//执行初始化
executor.initialize();
return executor;
}
@Bean("updateVinExecutor")
public AsyncTaskExecutor updateVinExecutor() {
LOGGER.info("init updateVinExecutor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(2);
//配置最大线程数
executor.setMaxPoolSize(10);
//配置队列大小
executor.setQueueCapacity(100);
//允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
executor.setKeepAliveSeconds(60);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("local-rnr-update");
//线程池的饱和策略 我这里设置的是 CallerRunsPolicy 也就是由用调用者所在的线程来执行任务 共有四种
//AbortPolicy:直接抛出异常,这是默认策略;
//CallerRunsPolicy:用调用者所在的线程来执行任务;
//DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
//DiscardPolicy:直接丢弃任务;
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
//线程池的优雅关闭,表明等待所有线程执行完
executor.setWaitForTasksToCompleteOnShutdown(true);
//执行初始化
executor.initialize();
return executor;
}
@Bean("asyncOrderExecutor")
public AsyncTaskExecutor asyncOrderExecutor() {
LOGGER.info("init asyncOrderExecutor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(10);
//配置最大线程数
executor.setMaxPoolSize(10);
//配置队列大小
executor.setQueueCapacity(100);
//允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
executor.setKeepAliveSeconds(60);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("async_order_executor");
//线程池的饱和策略 我这里设置的是 CallerRunsPolicy 也就是由用调用者所在的线程来执行任务 共有四种
//AbortPolicy:直接抛出异常,这是默认策略;
//CallerRunsPolicy:用调用者所在的线程来执行任务;
//DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
//DiscardPolicy:直接丢弃任务;
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
//线程池的优雅关闭,表明等待所有线程执行完
executor.setWaitForTasksToCompleteOnShutdown(true);
//执行初始化
executor.initialize();
return executor;
}
}
/*
package com.cusc.nirvana.user.rnr.common.config;
import com.cusc.nirvana.user.rnr.mg.util.OSSUtil;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
*/
/**
* @author fyp
* @CreateTime: 2022/6/10
* @Description: OSS配置类
*//*
@Data
@Component
public class OssConfig {
@Value("${oss.endpoint}")
private String endpoint;
@Value("${oss.accessKeyId}")
private String accessKeyId;
@Value("${oss.accessKeySecret}")
private String accessKeySecret;
@Value("${oss.bucketName}")
private String bucketName;
@Value("${oss.prefix:/}")
private String prefix;
@Bean
public OSSUtil createOssClient() {
return new OSSUtil(endpoint, bucketName, accessKeyId, accessKeySecret,prefix);
}
}
*/
package com.cusc.nirvana.user.rnr.common.config;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.util.concurrent.TimeUnit;
/**
* Description: 实名的RestTemplate对象
* <br />
* CreateDate 2021-10-27 18:52
*
* @author yuyi
**/
@Configuration
@Slf4j
public class RestTemplateRnrConfig {
@Autowired
private ThirdPartyHttpPoolConfig httpPoolConstants;
@Bean(name="thirdPartyRnr")
public RestTemplate thirdPartyRnr() {
return getRestTemplateRnr();
}
@Bean(name="restTemplate")
@LoadBalanced
public RestTemplate restTemplate() {
return getRestTemplateRnr();
}
public RestTemplate getRestTemplateRnr() {
return new RestTemplate(httpRequestFactoryRnr());
}
private ClientHttpRequestFactory httpRequestFactoryRnr() {
return new HttpComponentsClientHttpRequestFactory(httpClientRnr());
}
private HttpClient httpClientRnr() {
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
//设置整个连接池最大连接数
connectionManager.setMaxTotal(httpPoolConstants.getMaxTotal());
//路由是对maxTotal的细分
connectionManager.setDefaultMaxPerRoute(httpPoolConstants.getDefaultMaxPerRoute());
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(httpPoolConstants.getSocketTimeout()) //返回数据的超时时间
.setConnectTimeout(httpPoolConstants.getConnectTimeout()) //连接上服务器的超时时间
.setConnectionRequestTimeout(httpPoolConstants.getConnectionRequestTimeout()) //从连接池中获取连接的超时时间
.build();
return HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
//设置后台线程剔除失效连接
.evictExpiredConnections().evictIdleConnections(httpPoolConstants.getMaxIdleTime(), TimeUnit.SECONDS)
.build();
}
}
package com.cusc.nirvana.user.rnr.common.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* Description: resttemplate的连接池配置
* <br />
* CreateDate 2022-05-18 15:00
*
* @author yuy336
**/
@Component
@Data
public class ThirdPartyHttpPoolConfig {
/**
* 设置整个连接池最大连接数
*/
@Value("${httpPool.thirdParty.maxTotal:200}")
private Integer maxTotal;
/**
* 路由是对maxTotal的细分,针对一个url的最大并发数,每路由最大连接数,默认值是2
*/
@Value("${httpPool.thirdParty.defaultMaxPerRoute:100}")
private Integer defaultMaxPerRoute;
/**
* 服务器返回数据(response)的时间,超过该时间抛出read timeout
*/
@Value("${httpPool.thirdParty.socketTimeout:60000}")
private Integer socketTimeout;
/**
* 连接上服务器(握手成功)的时间,超出该时间抛出connect timeout
*/
@Value("${httpPool.thirdParty.connectTimeout:1000}")
private Integer connectTimeout;
/**
* 从连接池中获取连接的超时时间,超过该时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
*/
@Value("${httpPool.thirdParty.connectionRequestTimeout:500}")
private Integer connectionRequestTimeout;
/**
* 线程最大空闲时间
*/
@Value("${httpPool.thirdParty.maxIdleTime:10}")
private Integer maxIdleTime;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment