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.notice.mq;
//
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
//import org.apache.rocketmq.spring.core.RocketMQListener;
//import org.springframework.stereotype.Component;
//
///**
// * @author stayAnd
// * @date 2022/5/11
// */
//@Component
//@RocketMQMessageListener(topic = "cyTestDelay-Topic",consumerGroup = "cyTestDelay-Group",selectorExpression = "*")
//@Slf4j
//public class DelayTestListener implements RocketMQListener {
//
// @Override
// public void onMessage(Object o) {
// log.info("DelayTestListener onMessage = {}",JSONObject.toJSONString(o));
// }
//}
//package com.cusc.nirvana.user.rnr.notice.mq;
//
//import com.alibaba.fastjson.JSON;
//import com.cusc.nirvana.user.rnr.mg.constants.*;
//import com.cusc.nirvana.user.rnr.mg.dto.MgBizNoticeDTO;
//import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
//import com.cusc.nirvana.user.rnr.mg.service.IMgRnrCardInfoService;
//import com.cusc.nirvana.user.rnr.mg.service.IMgRnrInfoService;
//import com.cusc.nirvana.user.rnr.mg.service.IRnrOrderService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
//import org.apache.rocketmq.spring.core.RocketMQListener;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.util.Collections;
//
///**
// * @author yubo
// * @since 2022-05-04 10:46
// */
//@Slf4j
//@Service
//@RocketMQMessageListener(topic = RnrMgMqConstant.RNR_CARD_OPERATION_DELAY_TOPIC, consumerGroup =
// RnrMgMqConstant.RNR_CARD_OPERATION_DELAY_GROUP)
//public class RnrBindExchangeConsumer implements RocketMQListener<MgBizNoticeDTO> {
//
// @Autowired
// IRnrOrderService orderService;
//
// @Autowired
// IMgRnrCardInfoService cardInfoService;
//
// @Resource
// private IMgRnrInfoService rnrInfoService;
//
// @Override
// public void onMessage(MgBizNoticeDTO message) {
// log.info("接收到延迟消息:{}", JSON.toJSONString(message));
// //查询工单信息
// RnrOrderDTO rnrOrderDTO = new RnrOrderDTO();
// rnrOrderDTO.setUuid(message.getOrderId());
// rnrOrderDTO = orderService.getByUuid(rnrOrderDTO);
//
// if (null == rnrOrderDTO) {
// log.info("接收到延迟消息 未查询到order,uuid = {}",message.getOrderId());
// return;
// }
//
// if (RnrOrderType.UNBIND.getCode().equals(rnrOrderDTO.getOrderType())
// || RnrOrderType.TBOX_CHANGE.getCode().equals(rnrOrderDTO.getOrderType())
// || RnrOrderType.ONE_CAR_MORE_CARD_BIND.getCode().equals(rnrOrderDTO.getOrderType())
// || RnrOrderType.ENTERPRISEUNBIND.getCode().equals(rnrOrderDTO.getOrderType())){
//
// // 原车主解绑 、 换件 、 一车多卡 、 企业解绑 发送短信后order_status是1或者2(待审核) 如果此时收到延迟消息时 还是此状态 作废工单和卡
// if (!RnrOrderStatusEnum.notFinished(rnrOrderDTO.getOrderStatus())) {
// log.info("接收到延迟消息,不处理,工单类型:{} 工单状态:{} 工单uuid:{}",rnrOrderDTO.getOrderType(),rnrOrderDTO.getOrderStatus(),rnrOrderDTO.getUuid());
// return;
// }
//
// //还是待审核状态
//
// //工单设置成未通过
// orderService.updateOrderStatus(Collections.singletonList(rnrOrderDTO.getUuid()), RnrOrderStatusEnum.CANCEL.getCode());
// //卡设置成失败状态
// cardInfoService.updateCardStatusByOrderId(rnrOrderDTO.getUuid(), NoticeStatusEnum.NONEED.getCode(), RnrStatus.RNR_FAIL.getCode());
//
// //原车主解绑 、 换件 、 一车多卡 挂在原先的rnr_id 下面 不需要处理超时的rnr_info 企业解绑是新的rnr_info 需要处理超时的情况
// if (RnrOrderType.ENTERPRISEUNBIND.getCode().equals(rnrOrderDTO.getOrderType())) {
// //rnr_info 设置成为失败
// rnrInfoService.updateRnrStatus(rnrOrderDTO.getRnrId(),RnrStatus.RNR_FAIL);
// }
// } else if(RnrOrderType.NEW_VEHICLE.getCode().equals(rnrOrderDTO.getOrderType())
// || RnrOrderType.SEC_VEHICLE.getCode().equals(rnrOrderDTO.getOrderType())
// || RnrOrderType.COMPANY_NEW_VEHICLE.getCode().equals(rnrOrderDTO.getOrderType())) {
// //新车自然人实名 二手车实名 企业新车实名 提交资料后 order_status 是0(初始化状态) 如果此时收到延迟消息时 还是此状态 作废工单和卡和实名信息
// if (!RnrOrderStatusEnum.COMMIT.getCode().equals(rnrOrderDTO.getOrderStatus())) {
// log.info("接收到延迟消息,不处理,工单类型:{} 工单状态:{} 工单uuid:{}",rnrOrderDTO.getOrderType(),rnrOrderDTO.getOrderStatus(),rnrOrderDTO.getUuid());
// return;
// }
//
//
// //还是初始化状态 需要作废这笔实名信息
//
// //工单设置成未通过
// orderService.updateOrderStatus(Collections.singletonList(rnrOrderDTO.getUuid()), RnrOrderStatusEnum.CANCEL.getCode());
// //卡设置成失败状态
// cardInfoService.updateCardStatusByOrderId(rnrOrderDTO.getUuid(), NoticeStatusEnum.NONEED.getCode(), RnrStatus.RNR_FAIL.getCode());
// //rnr_info 设置成为失败
// rnrInfoService.updateRnrStatus(rnrOrderDTO.getRnrId(),RnrStatus.RNR_FAIL);
// }
// }
//}
//package com.cusc.nirvana.user.rnr.notice.mq;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.cusc.nirvana.common.result.Response;
//import com.cusc.nirvana.user.rnr.mg.constants.NoticeStatusEnum;
//import com.cusc.nirvana.user.rnr.mg.constants.RnrMgMqConstant;
//import com.cusc.nirvana.user.rnr.mg.dto.MgCardNoticeDTO;
//import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
//import com.cusc.nirvana.user.rnr.mg.service.IMgRnrCardInfoService;
//import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
//import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeConfigDTO;
//import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeContentDTO;
//import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeContentLogDTO;
//import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeConfigService;
//import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeContentLogService;
//import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeContentService;
//import com.cusc.nirvana.user.util.CuscStringUtils;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.http.HttpEntity;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.MediaType;
//import org.springframework.stereotype.Service;
//import org.springframework.util.CollectionUtils;
//import org.springframework.web.client.RestTemplate;
//
//import java.util.*;
//
///**
// * 绑定、解绑 队列消费
// *
// * @author huzl
// */
//@Slf4j
//@Service
//@RocketMQMessageListener(topic = RnrMgMqConstant.RNR_CARD_OPERATION_TOPIC, consumerGroup =
// RnrMgMqConstant.RNR_CARD_OPERATION_GROUP)
//public class RnrNoticeConsumer implements RocketMQListener<MgCardNoticeDTO> {
//
// @Autowired
// private IRnrNoticeConfigService rnrNoticeConfigService;
// @Autowired
// private IRnrNoticeContentLogService rnrNoticeContentLogService;
// @Autowired
// private IRnrNoticeContentService rnrNoticeContentService;
// @Autowired
// @Qualifier("thirdPartyRnr")
// private RestTemplate thirdPartyRnr;
// @Autowired
// IMgRnrCardInfoService cardInfoService;
//
// @Override
// public void onMessage(MgCardNoticeDTO bean) {
// log.info("RnrNoticeConsumer onMessage: {}", JSON.toJSONString(bean));
// if (Objects.isNull(bean)) {
// return;
// }
//
// try {
// //修改iccid的通知状态
// MgRnrCardInfoDTO mgRnrCardInfoDTO = cardInfoService.getByOrderIdAndIccId(bean.getOrderId(), bean.getIccid());
// log.warn("onMessage mgRnrCardInfoDTO : {}", JSON.toJSON(mgRnrCardInfoDTO));
// if (mgRnrCardInfoDTO != null) {
// mgRnrCardInfoDTO.setNoticeStatus(NoticeStatusEnum.SUCCESS.getCode());
// cardInfoService.updateCardNoticeStatus(mgRnrCardInfoDTO);
// }
//
// RnrNoticeConfigDTO paramDTO = new RnrNoticeConfigDTO();
// //通过项目编号查询单条数据
// paramDTO.setNoticeSubject(bean.getManufacturerOrgId());
// paramDTO.setTenantNo(bean.getTenantNo());
// List<RnrNoticeConfigDTO> rnrNoticeConfigList = rnrNoticeConfigService.queryByNoticeSubject(paramDTO);
// if (CollectionUtils.isEmpty(rnrNoticeConfigList)) {
// log.info("RnrNoticeConsumer notice config is null , request: {}", JSON.toJSONString(bean));
// return;
// }
// for (RnrNoticeConfigDTO rnrNoticeConfigDTO : rnrNoticeConfigList) {
// String url = rnrNoticeConfigDTO.getUrl();
//
// //定义参数格式为json
// final HttpHeaders headers = new HttpHeaders();
// headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
//
// //调通知接口时传的参数
// Map<String, Object> parameters = new HashMap<>();
// parameters.put("vin", bean.getVin());
// parameters.put("iccid", bean.getIccid());
// parameters.put("oldIccid", bean.getOldIccid());
// parameters.put("orderId", bean.getOrderId());
// parameters.put("orgId", bean.getOrgId());
// parameters.put("manufacturerOrgId", bean.getManufacturerOrgId());
//
// parameters.put("rnrBizzType", bean.getRnrBizzType());
// parameters.put("resultCode", bean.getResultCode());
// parameters.put("tenantNo", bean.getTenantNo());
//
//
// HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(parameters, headers);
// Date requestTime = new Date();
// Response ret =
// RnrMgRestTemplateUtils.postForObject(thirdPartyRnr, url, httpEntity, Response.class);
// log.info("RnrNoticeConsumer end , url = {},request = {},response = {}",url,JSONObject.toJSONString(parameters),JSONObject.toJSONString(ret));
// Date responseTime = new Date();
// //0-成功,1-失败
// Integer noticeStatus = null;
// if (Objects.nonNull(ret) && ret.getSuccess()) {
// noticeStatus = 0;
// } else {
// noticeStatus = 1;
// }
//
// //插入rnr_notice_content表
// RnrNoticeContentDTO rnrNoticeContentDTO = new RnrNoticeContentDTO();
// rnrNoticeContentDTO.setUuid(CuscStringUtils.generateUuid());
// rnrNoticeContentDTO.setNoticeConfigId(rnrNoticeConfigDTO.getUuid());
// rnrNoticeContentDTO.setNoticeSubject("");
// rnrNoticeContentDTO.setRnrBizzType(bean.getRnrBizzType());
// rnrNoticeContentDTO.setNoticeContent(parameters.toString());
// rnrNoticeContentDTO.setNoticeStatus(noticeStatus);
// rnrNoticeContentDTO.setCount(1);
// rnrNoticeContentDTO.setCreator(bean.getOperator());
// rnrNoticeContentService.insert(rnrNoticeContentDTO);
//
// //插入rnr_notice_content_log表
// RnrNoticeContentLogDTO rnrNoticeContentLogDTO = new RnrNoticeContentLogDTO();
// rnrNoticeContentLogDTO.setUuid(CuscStringUtils.generateUuid());
// rnrNoticeContentLogDTO.setRnrBizzType(bean.getRnrBizzType());
// rnrNoticeContentLogDTO.setNoticeContentId(rnrNoticeContentDTO.getUuid());
// rnrNoticeContentLogDTO.setRequestTime(requestTime);
// rnrNoticeContentLogDTO.setResponseTime(responseTime);
// if (Objects.nonNull(ret)) {
// rnrNoticeContentLogDTO.setResponseMsg(ret.getMsg());
// }
// //0-成功,1-失败
// rnrNoticeContentLogDTO.setIsSuccess(noticeStatus);
// rnrNoticeContentLogDTO.setCreator(bean.getOperator());
// rnrNoticeContentLogService.insert(rnrNoticeContentLogDTO);
// }
//
// } catch (Exception e) {
// log.error("RnrNoticeConsumer 消费异常: data = {}", JSONObject.toJSONString(bean),e);
// }
// }
//
//}
package com.cusc.nirvana.user.rnr.notice.service;
import com.cusc.nirvana.user.rnr.notice.dao.entity.RnrNoticeConfigPO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeConfigDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cusc.nirvana.common.result.PageResult;
import java.util.List;
/**
* 实名通知配置(同一个主体和状态支持多个通知方)(RnrNoticeConfig)表服务接口
*
* @author yuy336
* @since 2022-03-31 15:04:51
*/
public interface IRnrNoticeConfigService extends IService<RnrNoticeConfigPO> {
/**
* 通过UUID查询单条数据
*
* @param bean
* @return 实例对象
*/
RnrNoticeConfigDTO getByUuid(RnrNoticeConfigDTO bean);
/**
* 查询通知的配置
*
* @param bean
* @return 实例对象
*/
List<RnrNoticeConfigDTO> queryByNoticeSubject(RnrNoticeConfigDTO bean);
/**
* 通过查询条件查询集合数据
*
* @param bean
* @return 集合对象
*/
List<RnrNoticeConfigDTO> queryByList(RnrNoticeConfigDTO bean);
/**
* 分页查询
*
* @param bean 筛选条件
* @return 查询结果
*/
PageResult<RnrNoticeConfigDTO> queryByPage(RnrNoticeConfigDTO bean);
/**
* 新增数据
*
* @param bean 实例对象
* @return 实例对象
*/
RnrNoticeConfigDTO insert(RnrNoticeConfigDTO bean);
/**
* 修改数据
*
* @param bean 实例对象
* @return 实例对象
*/
RnrNoticeConfigDTO update(RnrNoticeConfigDTO bean);
/**
* 通过主键删除数据
*
* @param bean
* @return 是否成功
*/
boolean deleteById(RnrNoticeConfigDTO bean);
/**
* 通过业务主体和通知类型查询通知配置(支持缓存)
*
* @param bean
* @return 集合对象
*/
List<RnrNoticeConfigDTO> queryBySubjectAndTypeCache(RnrNoticeConfigDTO bean);
}
package com.cusc.nirvana.user.rnr.notice.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cusc.nirvana.user.rnr.notice.dao.entity.RnrNoticeContentLogPO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeContentLogDTO;
import java.util.List;
/**
* 实名通知内容日志(RnrNoticeContentLog)表服务接口
*
* @author yuy336
* @since 2022-03-31 15:05:28
*/
public interface IRnrNoticeContentLogService extends IService<RnrNoticeContentLogPO> {
/**
* 通过UUID查询单条数据
*
* @param bean
* @return 实例对象
*/
RnrNoticeContentLogDTO getByUuid(RnrNoticeContentLogDTO bean);
/**
* 通过查询条件查询集合数据
*
* @param bean
* @return 集合对象
*/
List<RnrNoticeContentLogDTO> queryByList(RnrNoticeContentLogDTO bean);
/**
* 新增数据
*
* @param bean 实例对象
* @return 实例对象
*/
RnrNoticeContentLogDTO insert(RnrNoticeContentLogDTO bean);
/**
* 修改数据
*
* @param bean 实例对象
* @return 实例对象
*/
RnrNoticeContentLogDTO update(RnrNoticeContentLogDTO bean);
/**
* 通过主键删除数据
*
* @param bean
* @return 是否成功
*/
boolean deleteById(RnrNoticeContentLogDTO bean);
}
package com.cusc.nirvana.user.rnr.notice.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.user.rnr.notice.dao.entity.RnrNoticeContentPO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeContentDTO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeReqDTO;
import java.util.List;
/**
* 实名通知内容(RnrNoticeContent)表服务接口
*
* @author yuy336
* @since 2022-03-31 15:05:11
*/
public interface IRnrNoticeContentService extends IService<RnrNoticeContentPO> {
/**
* 通过UUID查询单条数据
*
* @param bean
* @return 实例对象
*/
RnrNoticeContentDTO getByUuid(RnrNoticeContentDTO bean);
/**
* 通过查询条件查询集合数据
*
* @param bean
* @return 集合对象
*/
List<RnrNoticeContentDTO> queryByList(RnrNoticeContentDTO bean);
/**
* 分页查询
* @param queryDTO
* @return
*/
PageResult<RnrNoticeContentDTO> queryByPage(RnrNoticeContentDTO queryDTO);
/**
* 新增数据
*
* @param bean 实例对象
* @return 实例对象
*/
RnrNoticeContentDTO insert(RnrNoticeContentDTO bean);
/**
* 修改数据
*
* @param bean 实例对象
* @return 实例对象
*/
RnrNoticeContentDTO update(RnrNoticeContentDTO bean);
/**
* 通过主键删除数据
*
* @param bean
* @return 是否成功
*/
boolean deleteById(RnrNoticeContentDTO bean);
/**
* Description: 通知三方系统
* <br />
* CreateDate 2022-03-31 16:19:57
*
* @author yuyi
**/
boolean noticeThreePartySystem(RnrNoticeReqDTO bean);
/**
* Description: 通知三方系统重试
* <br />
* CreateDate 2022-03-31 16:19:57
*
* @author yuyi
**/
boolean noticeThreePartySystemRetry(RnrNoticeContentDTO bean);
}
package com.cusc.nirvana.user.rnr.notice.service;
import com.cusc.nirvana.user.rnr.mg.dto.MgCardNoticeDTO;
/**
* @author yubo
* @since 2022-06-16 18:11
*/
public interface NoticeHandler {
/**
* 处理消息
* @param bean
*/
void handleNotice(MgCardNoticeDTO bean);
}
package com.cusc.nirvana.user.rnr.notice.service;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author yubo
* @since 2022-06-16 18:16
*/
@Service
public class NoticeHandlerContext implements ApplicationContextAware, InitializingBean {
private ApplicationContext context;
private Map<String, NoticeHandler> noticeHandlerMap;
private List<NoticeHandler> handlerList;
public List<NoticeHandler> getHandlerList() {
return handlerList;
}
@Override
public void afterPropertiesSet() throws Exception {
noticeHandlerMap = context.getBeansOfType(NoticeHandler.class);
handlerList = new ArrayList<>(noticeHandlerMap.values());
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
}
package com.cusc.nirvana.user.rnr.notice.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cache.CacheFactory;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.common.constants.RedisConstant;
import com.cusc.nirvana.user.rnr.mg.dto.MgCardNoticeDTO;
import com.cusc.nirvana.user.rnr.mg.util.RnrMgRestTemplateUtils;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeConfigDTO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeContentDTO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeContentLogDTO;
import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeConfigService;
import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeContentLogService;
import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeContentService;
import com.cusc.nirvana.user.rnr.notice.service.NoticeHandler;
import com.cusc.nirvana.user.util.CuscStringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.*;
/**
* @author yubo
* @since 2022-06-16 18:12
*/
@Service("noticeContentHandler")
@Slf4j
public class NoticeContentHandler implements NoticeHandler {
@Autowired
private IRnrNoticeConfigService rnrNoticeConfigService;
@Autowired
private IRnrNoticeContentLogService rnrNoticeContentLogService;
@Autowired
private IRnrNoticeContentService rnrNoticeContentService;
@Autowired
@Qualifier("thirdPartyRnr")
private RestTemplate thirdPartyRnr;
@Autowired
@Qualifier("restTemplate")
private RestTemplate restTemplate;
@Override
public void handleNotice(MgCardNoticeDTO bean) {
log.warn("handleNotice入参{}",JSONObject.toJSONString(bean));
try {
RnrNoticeConfigDTO paramDTO = new RnrNoticeConfigDTO();
//通过项目编号查询单条数据
paramDTO.setNoticeSubject(bean.getManufacturerOrgId());
paramDTO.setTenantNo(bean.getTenantNo());
List<RnrNoticeConfigDTO> rnrNoticeConfigList = rnrNoticeConfigService.queryByNoticeSubject(paramDTO);
if (CollectionUtils.isEmpty(rnrNoticeConfigList)) {
log.info("RnrNoticeConsumer notice config is null , request: {}", JSON.toJSONString(bean));
return;
}
for (RnrNoticeConfigDTO rnrNoticeConfigDTO : rnrNoticeConfigList) {
String url = rnrNoticeConfigDTO.getUrl();
Integer urlType = rnrNoticeConfigDTO.getUrlType();
//定义参数格式为json
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
//调通知接口时传的参数
Map<String, Object> parameters = new HashMap<>();
parameters.put("vin", bean.getVin());
parameters.put("iccid", bean.getIccid());
parameters.put("oldIccid", bean.getOldIccid());
parameters.put("orderId", bean.getOrderId());
parameters.put("orgId", bean.getOrgId());
parameters.put("manufacturerOrgId", bean.getManufacturerOrgId());
parameters.put("rnrBizzType", bean.getRnrBizzType());
parameters.put("resultCode", bean.getResultCode());
parameters.put("tenantNo", bean.getTenantNo());
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(parameters, headers);
Date requestTime = new Date();
Response ret = null;
//1为域名调用 2为服务名调用
log.info("RnrNoticeConsumer start , url = {},request = {}", url, JSONObject.toJSONString(parameters));
if (1 == urlType) {
ret = RnrMgRestTemplateUtils.postForObject(restTemplate, url, httpEntity, Response.class);
} else {
ret = RnrMgRestTemplateUtils.postForObject(thirdPartyRnr, url, httpEntity, Response.class);
}
log.info("RnrNoticeConsumer end , url = {},request = {},response = {}", url, JSONObject.toJSONString(parameters), JSONObject.toJSONString(ret));
Date responseTime = new Date();
//0-成功,1-失败
Integer noticeStatus = null;
if (Objects.nonNull(ret) && ret.getSuccess()) {
noticeStatus = 0;
} else {
noticeStatus = 1;
}
//插入rnr_notice_content表
RnrNoticeContentDTO rnrNoticeContentDTO = new RnrNoticeContentDTO();
rnrNoticeContentDTO.setUuid(CuscStringUtils.generateUuid());
rnrNoticeContentDTO.setNoticeConfigId(rnrNoticeConfigDTO.getUuid());
rnrNoticeContentDTO.setNoticeSubject("");
rnrNoticeContentDTO.setRnrBizzType(bean.getRnrBizzType());
rnrNoticeContentDTO.setNoticeContent(JSON.toJSONString(parameters));
rnrNoticeContentDTO.setNoticeStatus(noticeStatus);
rnrNoticeContentDTO.setCount(1);
rnrNoticeContentDTO.setCreator(bean.getOperator());
rnrNoticeContentService.insert(rnrNoticeContentDTO);
//插入rnr_notice_content_log表
RnrNoticeContentLogDTO rnrNoticeContentLogDTO = new RnrNoticeContentLogDTO();
rnrNoticeContentLogDTO.setUuid(CuscStringUtils.generateUuid());
rnrNoticeContentLogDTO.setRnrBizzType(bean.getRnrBizzType());
rnrNoticeContentLogDTO.setNoticeContentId(rnrNoticeContentDTO.getUuid());
rnrNoticeContentLogDTO.setRequestTime(requestTime);
rnrNoticeContentLogDTO.setResponseTime(responseTime);
if (Objects.nonNull(ret)) {
rnrNoticeContentLogDTO.setResponseMsg(ret.getMsg());
}
//0-成功,1-失败
rnrNoticeContentLogDTO.setIsSuccess(noticeStatus);
rnrNoticeContentLogDTO.setCreator(bean.getOperator());
rnrNoticeContentLogService.insert(rnrNoticeContentLogDTO);
}
} catch (Exception e) {
log.error("RnrNoticeConsumer 消费异常: data = {}", JSONObject.toJSONString(bean),e);
}
}
}
package com.cusc.nirvana.user.rnr.notice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cache.annotation.tag.Cache;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.rds.mybatis.PageHelper;
import com.cusc.nirvana.user.rnr.common.constants.RedisConstant;
import com.cusc.nirvana.user.rnr.mg.constants.CommonDeleteEnum;
import com.cusc.nirvana.user.rnr.notice.converter.RnrNoticeConfigConverter;
import com.cusc.nirvana.user.rnr.notice.dao.RnrNoticeConfigDao;
import com.cusc.nirvana.user.rnr.notice.dao.entity.RnrNoticeConfigPO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeConfigDTO;
import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeConfigService;
import com.cusc.nirvana.user.util.CuscStringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* 实名通知配置(同一个主体和状态支持多个通知方)(RnrNoticeConfig)表服务实现类
*
* @author yuy336
* @since 2022-03-31 15:04:52
*/
@Service
public class RnrNoticeConfigServiceImpl extends ServiceImpl<RnrNoticeConfigDao, RnrNoticeConfigPO>
implements IRnrNoticeConfigService {
/**
* 通过UUID查询单条数据
*
* @param bean
* @return 实例对象
*/
@Override
public RnrNoticeConfigDTO getByUuid(RnrNoticeConfigDTO bean) {
RnrNoticeConfigPO record = this.getPoByUuid(bean.getUuid());
return RnrNoticeConfigConverter.INSTANCE.poToDto(record);
}
@Override
public List<RnrNoticeConfigDTO> queryByNoticeSubject(RnrNoticeConfigDTO bean) {
List<RnrNoticeConfigPO> record = this.getPoByNoticeSubject(bean);
return RnrNoticeConfigConverter.INSTANCE.poListToDtoList(record);
}
/**
* 通过查询条件查询集合数据
*
* @param bean
* @return 集合对象
*/
@Override
public List<RnrNoticeConfigDTO> queryByList(RnrNoticeConfigDTO bean) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("is_delete", CommonDeleteEnum.NORMAL.getCode());
queryWrapper.orderByDesc("create_time");
List<RnrNoticeConfigPO> record = this.list(queryWrapper);
return RnrNoticeConfigConverter.INSTANCE.poListToDtoList(record);
}
/**
* 分页查询
*
* @param bean 筛选条件
* @return 查询结果
*/
@Override
public PageResult<RnrNoticeConfigDTO> queryByPage(RnrNoticeConfigDTO bean) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.orderByDesc("create_time");
queryWrapper.eq("is_delete", CommonDeleteEnum.NORMAL.getCode());
Page<RnrNoticeConfigPO> page =
this.page(new Page<>(bean.getCurrPage(), bean.getPageSize()), queryWrapper);
return PageHelper.convert(page, RnrNoticeConfigDTO.class);
}
/**
* 新增数据
*
* @param bean 实例对象
* @return 实例对象
*/
@Override
@Transactional
@Cache(keyPrefix = RedisConstant.RNR_NOTICE_CONFIG, key = "#bean.noticeSubject+\"_\"+#bean.noticeType", level1 =
"redis", action = 0)
public RnrNoticeConfigDTO insert(RnrNoticeConfigDTO bean) {
RnrNoticeConfigPO rnrNoticeConfigPO = RnrNoticeConfigConverter.INSTANCE.dtoToPo(bean);
rnrNoticeConfigPO.setUuid(CuscStringUtils.generateUuid());
this.save(rnrNoticeConfigPO);
bean.setUuid(rnrNoticeConfigPO.getUuid());
return bean;
}
/**
* 修改数据
*
* @param bean 实例对象
* @return 实例对象
*/
@Override
@Transactional
@Cache(keyPrefix = RedisConstant.RNR_NOTICE_CONFIG, key = "#bean.noticeSubject+\"_\"+#bean.noticeType", level1 =
"redis", action = 0)
public RnrNoticeConfigDTO update(RnrNoticeConfigDTO bean) {
RnrNoticeConfigPO rnrNoticeConfigPO = this.getPoByUuid(bean.getUuid());
if (rnrNoticeConfigPO == null) {
return null;
}
RnrNoticeConfigPO tmpBean = RnrNoticeConfigConverter.INSTANCE.dtoToPo(bean);
tmpBean.setId(rnrNoticeConfigPO.getId());
this.updateById(tmpBean);
return bean;
}
/**
* 通过主键删除数据
*
* @param bean 实例对象
* @return 是否成功
*/
@Override
@Transactional
@Cache(keyPrefix = RedisConstant.RNR_NOTICE_CONFIG, key = "#bean.noticeSubject+\"_\"+#bean.noticeType", level1 =
"redis", action = 0)
public boolean deleteById(RnrNoticeConfigDTO bean) {
RnrNoticeConfigPO rnrNoticeConfigPO = this.getPoByUuid(bean.getUuid());
if (rnrNoticeConfigPO == null) {
return false;
}
RnrNoticeConfigPO tmpBean = new RnrNoticeConfigPO();
tmpBean.setId(rnrNoticeConfigPO.getId());
tmpBean.setIsDelete(CommonDeleteEnum.DELETED.getCode());
return this.updateById(tmpBean);
}
/**
* 通过业务主体和通知类型查询通知配置(支持缓存)
*
* @param bean
* @return 集合对象
*/
@Override
@Cache(keyPrefix = RedisConstant.RNR_NOTICE_CONFIG, key = "#bean.noticeSubject+\"_\"+#bean.rnrBizzType", level1 =
"redis")
public List<RnrNoticeConfigDTO> queryBySubjectAndTypeCache(RnrNoticeConfigDTO bean) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("notice_subject", bean.getNoticeSubject());
queryWrapper.eq("notice_type", bean.getRnrBizzType());
try {
List<RnrNoticeConfigPO> configListPO = this.list(queryWrapper);
if (CollectionUtils.isEmpty(configListPO)) {
return null;
}
return RnrNoticeConfigConverter.INSTANCE.poListToDtoList(configListPO);
} catch (Exception e) {
log.error("queryBySubjectAndTypeCache ", e);
}
return null;
}
//----------------------私有方法区----------------------
/**
* 通过UUID查询单条数据
*
* @param uuid
* @return 实例对象
*/
private RnrNoticeConfigPO getPoByUuid(String uuid) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("uuid", uuid);
queryWrapper.eq("is_delete", CommonDeleteEnum.NORMAL.getCode());
return this.getOne(queryWrapper);
}
/**
* 通过项目编号查询单条数据
*
* @param bean
* @return 实例对象
*/
private List<RnrNoticeConfigPO> getPoByNoticeSubject(RnrNoticeConfigDTO bean) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("notice_subject", bean.getNoticeSubject());
queryWrapper.eq("tenant_no", bean.getTenantNo());
queryWrapper.eq("is_delete", CommonDeleteEnum.NORMAL.getCode());
return this.list(queryWrapper);
}
}
package com.cusc.nirvana.user.rnr.notice.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cusc.nirvana.user.rnr.mg.constants.CommonDeleteEnum;
import com.cusc.nirvana.user.rnr.notice.converter.RnrNoticeContentLogConverter;
import com.cusc.nirvana.user.rnr.notice.dao.RnrNoticeContentLogDao;
import com.cusc.nirvana.user.rnr.notice.dao.entity.RnrNoticeContentLogPO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeContentLogDTO;
import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeContentLogService;
import com.cusc.nirvana.user.util.CuscStringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 实名通知内容日志(RnrNoticeContentLog)表服务实现类
*
* @author yuy336
* @since 2022-03-31 15:05:28
*/
@Service
public class RnrNoticeContentLogServiceImpl extends ServiceImpl<RnrNoticeContentLogDao, RnrNoticeContentLogPO> implements IRnrNoticeContentLogService {
/**
* 通过UUID查询单条数据
*
* @param bean
* @return 实例对象
*/
@Override
public RnrNoticeContentLogDTO getByUuid(RnrNoticeContentLogDTO bean) {
RnrNoticeContentLogPO record = this.getPoByUuid(bean.getUuid());;
return RnrNoticeContentLogConverter.INSTANCE.poToDto(record);
}
/**
* 通过查询条件查询集合数据
*
* @param bean
* @return 集合对象
*/
@Override
public List<RnrNoticeContentLogDTO> queryByList(RnrNoticeContentLogDTO bean) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("is_delete", CommonDeleteEnum.NORMAL.getCode());
queryWrapper.orderByDesc("create_time");
List<RnrNoticeContentLogPO> record = this.list(queryWrapper);
return RnrNoticeContentLogConverter.INSTANCE.poListToDtoList(record);
}
/**
* 新增数据
*
* @param bean 实例对象
* @return 实例对象
*/
@Override
@Transactional
public RnrNoticeContentLogDTO insert(RnrNoticeContentLogDTO bean) {
RnrNoticeContentLogPO rnrNoticeContentLogPO = RnrNoticeContentLogConverter.INSTANCE.dtoToPo(bean);
rnrNoticeContentLogPO.setUuid(CuscStringUtils.generateUuid());
this.save(rnrNoticeContentLogPO);
bean.setUuid(rnrNoticeContentLogPO.getUuid());
return bean;
}
/**
* 修改数据
*
* @param bean 实例对象
* @return 实例对象
*/
@Override
@Transactional
public RnrNoticeContentLogDTO update(RnrNoticeContentLogDTO bean) {
RnrNoticeContentLogPO rnrNoticeContentLogPO = this.getPoByUuid(bean.getUuid());
if(rnrNoticeContentLogPO == null){
return null;
}
RnrNoticeContentLogPO tmpBean = RnrNoticeContentLogConverter.INSTANCE.dtoToPo(bean);
tmpBean.setId(rnrNoticeContentLogPO.getId());
this.updateById(tmpBean);
return bean;
}
/**
* 通过主键删除数据
* @param bean 实例对象
* @return 是否成功
*/
@Override
@Transactional
public boolean deleteById(RnrNoticeContentLogDTO bean) {
RnrNoticeContentLogPO rnrNoticeContentLogPO = this.getPoByUuid(bean.getUuid());
if (rnrNoticeContentLogPO == null) {
return false;
}
RnrNoticeContentLogPO tmpBean = new RnrNoticeContentLogPO();
tmpBean.setId(rnrNoticeContentLogPO.getId());
return this.updateById(tmpBean);
}
/**
* 通过UUID查询单条数据
*
* @param uuid
* @return 实例对象
*/
private RnrNoticeContentLogPO getPoByUuid(String uuid) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("uuid", uuid);
queryWrapper.eq("is_delete", CommonDeleteEnum.NORMAL.getCode());
return this.getOne(queryWrapper);
}
}
package com.cusc.nirvana.user.rnr.notice.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.rds.mybatis.PageHelper;
import com.cusc.nirvana.user.rnr.mg.constants.CommonDeleteEnum;
import com.cusc.nirvana.user.rnr.mg.constants.CommonYesOrNoEnum;
import com.cusc.nirvana.user.rnr.mg.dao.entity.SimFileHistoryPO;
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.Md5CaculateUtil;
import com.cusc.nirvana.user.rnr.notice.constants.NoticeUrlTypeEnum;
import com.cusc.nirvana.user.rnr.notice.converter.RnrNoticeContentConverter;
import com.cusc.nirvana.user.rnr.notice.converter.ThirdPartyNoticeConverter;
import com.cusc.nirvana.user.rnr.notice.dao.RnrNoticeContentDao;
import com.cusc.nirvana.user.rnr.notice.dao.entity.RnrNoticeContentPO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeConfigDTO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeContentDTO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeContentLogDTO;
import com.cusc.nirvana.user.rnr.notice.dto.RnrNoticeReqDTO;
import com.cusc.nirvana.user.rnr.notice.dto.ThirdPartyNoticeReqDTO;
import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeConfigService;
import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeContentLogService;
import com.cusc.nirvana.user.rnr.notice.service.IRnrNoticeContentService;
import com.cusc.nirvana.user.util.CuscStringUtils;
import com.cusc.nirvana.user.util.DateUtils;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import java.util.Date;
import java.util.List;
/**
* 实名通知内容(RnrNoticeContent)表服务实现类
*
* @author yuy336
* @since 2022-03-31 15:05:11
*/
@Service
public class RnrNoticeContentServiceImpl extends ServiceImpl<RnrNoticeContentDao, RnrNoticeContentPO>
implements IRnrNoticeContentService {
@Autowired
private IRnrNoticeContentLogService rnrNoticeContentLogService;
@Autowired
private IRnrNoticeConfigService rnrNoticeConfigService;
@Autowired
@Qualifier("restTemplate")
public RestTemplate restTemplate;
@Autowired
@Qualifier("thirdPartyRnr")
public RestTemplate thirdPartyRnr;
/**
* 通过UUID查询单条数据
*
* @param bean
* @return 实例对象
*/
@Override
public RnrNoticeContentDTO getByUuid(RnrNoticeContentDTO bean) {
RnrNoticeContentPO record = this.getPoByUuid(bean.getUuid());
return RnrNoticeContentConverter.INSTANCE.poToDto(record);
}
/**
* 通过查询条件查询集合数据
*
* @param bean
* @return 集合对象
*/
@Override
public List<RnrNoticeContentDTO> queryByList(RnrNoticeContentDTO bean) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("notice_status", 1);
queryWrapper.orderByDesc("create_time");
List<RnrNoticeContentPO> record = this.list(queryWrapper);
return RnrNoticeContentConverter.INSTANCE.poListToDtoList(record);
}
@Override
public PageResult<RnrNoticeContentDTO> queryByPage(RnrNoticeContentDTO queryDTO) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("notice_status", 1);
queryWrapper.lt("count",10);
queryWrapper.orderByDesc("create_time");
Page<RnrNoticeContentPO> historyPOPage = this.page(new Page<>(queryDTO.getCurrPage(), queryDTO.getPageSize()), queryWrapper);
return PageHelper.convert(historyPOPage, RnrNoticeContentDTO.class);
}
/**
* 新增数据
*
* @param bean 实例对象
* @return 实例对象
*/
@Override
@Transactional
public RnrNoticeContentDTO insert(RnrNoticeContentDTO bean) {
RnrNoticeContentPO rnrNoticeContentPO = RnrNoticeContentConverter.INSTANCE.dtoToPo(bean);
if (StringUtils.isEmpty(rnrNoticeContentPO.getUuid())) {
rnrNoticeContentPO.setUuid(CuscStringUtils.generateUuid());
}
this.save(rnrNoticeContentPO);
bean.setUuid(rnrNoticeContentPO.getUuid());
return bean;
}
/**
* 修改数据
*
* @param bean 实例对象
* @return 实例对象
*/
@Override
@Transactional
public RnrNoticeContentDTO update(RnrNoticeContentDTO bean) {
RnrNoticeContentPO rnrNoticeContentPO = this.getPoByUuid(bean.getUuid());
if (rnrNoticeContentPO == null) {
return null;
}
RnrNoticeContentPO tmpBean = RnrNoticeContentConverter.INSTANCE.dtoToPo(bean);
tmpBean.setId(rnrNoticeContentPO.getId());
this.updateById(tmpBean);
return bean;
}
/**
* 通过主键删除数据
*
* @param bean 实例对象
* @return 是否成功
*/
@Override
@Transactional
public boolean deleteById(RnrNoticeContentDTO bean) {
RnrNoticeContentPO rnrNoticeContentPO = this.getPoByUuid(bean.getUuid());
if (rnrNoticeContentPO == null) {
return false;
}
RnrNoticeContentPO tmpBean = new RnrNoticeContentPO();
tmpBean.setId(rnrNoticeContentPO.getId());
return this.updateById(tmpBean);
}
/**
* Description: 通知三方系统
* <br />
* CreateDate 2022-03-31 16:19:57
*
* @author yuyi
**/
@Override
@Transactional
public boolean noticeThreePartySystem(RnrNoticeReqDTO bean) {
boolean ret = false;
// 根据主体查询通知配置
RnrNoticeConfigDTO config = new RnrNoticeConfigDTO();
config.setNoticeSubject(bean.getNoticeSubject());
//config.setRnrBizzType(bean.getNoticeType());
List<RnrNoticeConfigDTO> noticeConfigList = rnrNoticeConfigService.queryBySubjectAndTypeCache(config);
if (CollectionUtils.isEmpty(noticeConfigList)) {
return ret;
}
ThirdPartyNoticeReqDTO tpNoticeReq = ThirdPartyNoticeConverter.INSTANCE.noticeReqToThirdPartyDto(bean);
RnrNoticeContentDTO contentDTO;
RnrNoticeContentLogDTO logDTO;
for (RnrNoticeConfigDTO noticeConfig : noticeConfigList) {
contentDTO = new RnrNoticeContentDTO();
contentDTO.setNoticeConfigId(noticeConfig.getUuid());
contentDTO.setNoticeSubject(noticeConfig.getNoticeSubject());
contentDTO.setRnrBizzType(noticeConfig.getRnrBizzType());
contentDTO.setCount(1);
logDTO = new RnrNoticeContentLogDTO();
logDTO.setRequestTime(new Date());
logDTO.setTraceId(TraceContext.traceId());
//发起三方通知
Response thirdResp = thirdPartyNotice(noticeConfig, tpNoticeReq);
logDTO.setResponseMsg(JSON.toJSONString(thirdResp));
logDTO.setResponseTime(new Date());
if (thirdResp.getSuccess()) {
logDTO.setIsSuccess(CommonYesOrNoEnum.YES.getCode());
contentDTO.setNoticeStatus(CommonYesOrNoEnum.YES.getCode());
ret = true;
} else {
logDTO.setIsSuccess(CommonYesOrNoEnum.NO.getCode());
contentDTO.setNoticeStatus(CommonYesOrNoEnum.NO.getCode());
}
//记录通知内容和通知日志
contentDTO.setNoticeContent(JSON.toJSONString(tpNoticeReq));
contentDTO = this.insert(contentDTO);
logDTO.setNoticeContentId(contentDTO.getUuid());
rnrNoticeContentLogService.insert(logDTO);
}
return ret;
}
@Override
public boolean noticeThreePartySystemRetry(RnrNoticeContentDTO bean) {
boolean ret = false;
// 根据主体查询通知配置
RnrNoticeConfigDTO config = new RnrNoticeConfigDTO();
config.setNoticeSubject(bean.getNoticeSubject());
config.setRnrBizzType(bean.getRnrBizzType());
List<RnrNoticeConfigDTO> noticeConfigList = rnrNoticeConfigService.queryBySubjectAndTypeCache(config);
if (CollectionUtils.isEmpty(noticeConfigList)) {
return ret;
}
ThirdPartyNoticeReqDTO tpNoticeReq = JSON.parseObject(bean.getNoticeContent(), ThirdPartyNoticeReqDTO.class);
RnrNoticeContentDTO contentDTO;
RnrNoticeContentLogDTO logDTO;
config = null;
for (RnrNoticeConfigDTO noticeConfig : noticeConfigList) {
if (noticeConfig.getUuid().equals(bean.getNoticeConfigId())) {
config = noticeConfig;
}
}
logDTO = new RnrNoticeContentLogDTO();
logDTO.setRequestTime(new Date());
logDTO.setTraceId(TraceContext.traceId());
if (config != null) {
contentDTO = new RnrNoticeContentDTO();
contentDTO.setUuid(bean.getUuid());
//发起三方通知
Response thirdResp = thirdPartyNotice(config, tpNoticeReq);
logDTO.setResponseMsg(JSON.toJSONString(thirdResp));
logDTO.setResponseTime(new Date());
if (thirdResp.getSuccess()) {
logDTO.setIsSuccess(CommonYesOrNoEnum.YES.getCode());
contentDTO.setNoticeStatus(CommonYesOrNoEnum.YES.getCode());
ret = true;
} else {
logDTO.setIsSuccess(CommonYesOrNoEnum.NO.getCode());
//更新错误次数
contentDTO.setCount(bean.getCount() + 1);
}
} else {
logDTO.setResponseMsg("通知配置不存在");
}
//记录通知日志
logDTO.setNoticeContentId(bean.getUuid());
rnrNoticeContentLogService.insert(logDTO);
return ret;
}
//----------------私有方法区--------------
/**
* 通过UUID查询单条数据
*
* @param uuid
* @return 实例对象
*/
private RnrNoticeContentPO getPoByUuid(String uuid) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("uuid", uuid);
// queryWrapper.eq("is_delete", CommonDeleteEnum.NORMAL.getCode());
return this.getOne(queryWrapper);
}
/**
* Description: 发起三方通知
* <br />
* CreateDate 2022-03-31 19:36:38
*
* @author yuyi
**/
private Response thirdPartyNotice(RnrNoticeConfigDTO noticeConfig, ThirdPartyNoticeReqDTO tpNoticeReq) {
Response ret;
if (NoticeUrlTypeEnum.SERVER_NAME.getCode() == noticeConfig.getUrlType()) {
//服务名调用
ret = restTemplate.postForObject(noticeConfig.getUrl(), tpNoticeReq, Response.class);
} else {
//ip调用
HttpEntity reqHttpEntity;
if (CommonYesOrNoEnum.YES.getCode() == noticeConfig.getIsSign()) {
//远程需要header验签
reqHttpEntity = new HttpEntity<>(tpNoticeReq, builderHttpHeaders(noticeConfig));
} else {
reqHttpEntity = new HttpEntity<>(tpNoticeReq);
}
ret = thirdPartyRnr.postForObject(noticeConfig.getUrl(), reqHttpEntity, Response.class);
}
return ret;
}
/**
* Description: 构建header
* <br />
* CreateDate 2022-03-30 10:47:35
*
* @author yuyi
**/
private HttpHeaders builderHttpHeaders(RnrNoticeConfigDTO noticeConfig) {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
String currentTimeStr = DateUtils.currentTimeStr();
String nonce = CuscStringUtils.generateUuid();
requestHeaders.set("appid", noticeConfig.getAppId());
requestHeaders.set("timestamp", currentTimeStr);
requestHeaders.set("serialNumber", "");
StringBuffer sbr = new StringBuffer();
sbr.append("appid=");
sbr.append(noticeConfig.getAppId());
sbr.append("&timestamp=");
sbr.append(currentTimeStr);
sbr.append("&serialNumber=");
sbr.append(nonce);
sbr.append("&appkey=");
sbr.append(noticeConfig.getAppKey());
requestHeaders.set("sign", Md5CaculateUtil.MD5(sbr.toString()));
return requestHeaders;
}
}
package com.cusc.nirvana.user.rnr.notice.service.impl;
/**
* @author yubo
* @since 2022-06-16 18:14
*/
//@Service("t1UploadHandler")
//@RefreshScope
//@Slf4j
//public class T1UploadHandler implements NoticeHandler {
//
// @Value("${t1.upload.enabled:false}")
// private boolean t1UploadEnabled = false;
//
// @Autowired
// T1DataUploadClient t1DataUploadClient;
//
// @Override
// public void handleNotice(MgCardNoticeDTO bean) {
// log.info("T1UploadHandler onMessage: {},t1UploadEnabled: {}", JSON.toJSONString(bean), t1DataUploadClient);
//
// if (!t1UploadEnabled) {
// return;
// }
// Response response = t1DataUploadClient.uploadUserInfoAndFile(bean);
// if (!response.isSuccess()) {
// throw new CuscUserException(response.getCode(), response.getMsg());
// }
// }
//}
package com.cusc.nirvana.user.rnr.workorder.constants;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderType;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* @author stayAnd
* @date 2022/3/30
*/
@AllArgsConstructor
public enum WorkOrderTypeEnum {
/**
* 人工实名认证工单
*/
REAL_NAME_CERTIFICATION_ORDER(RnrOrderType.NEW_VEHICLE, "real_name_natural_person_new_car", "人工实名认证工单", "自然人实名. %s,手机号:%s,VIN:%s,ICCID:%s", "rnrWorkOrderCallBackHandler"),
/**
* 二手车实名认证工单
*/
SECOND_HAND_VEHICLE_CERTIFICATION(RnrOrderType.SEC_VEHICLE, "real_name_natural_person_used_car", "二手车实名认证工单", "二手车实名. %s,手机号:%s,VIN:%s,ICCID:%s", "rnrWorkOrderCallBackHandler"),
/**
* 企业新车实名认证
*/
COMPANY_NEW_VEHICLE_CERTIFICATION(RnrOrderType.COMPANY_NEW_VEHICLE, "real_name_enterprise_new_car", "企业新车实名认证工单", "企业实名. %s,手机号:%s,VIN:%s,ICCID:%s", "rnrWorkOrderCallBackHandler"),
/**
* 车企新车实名认证
*/
CARMAKER_NEW_VEHICLE_CERTIFICATION(RnrOrderType.CARMAKER_NEW_VEHICLE, "real_name_carenterprise_new_car", "车企新车实名认证工单", "车企实名. %s,手机号:%s,VIN:%s,ICCID:%s", "manufacturerRnrCallBackHandler"),
/**
* 二手车主解绑
*/
SECOND_VEHICLE_UNBIND_ORDER(RnrOrderType.SEC_UNBIND, "real_name_unbound_used_car", "二手车主解绑工单", "二手车解绑. %s,手机号:%s,VIN:%s,ICCID:%s", "unbindWorkOrderCallBackHandler"),
/**
* 企业责任人变更
*/
COMPANY_CORPORATION_UNBIND_ORDER(RnrOrderType.COMPANY_CORPORATION_CHANGE, "real_name_enterpriselegalperson", "企业责任人变更工单", "企业责任人变更. %s,手机号:%s", "enterpriseChangeCallBackHandler"),
;
@Getter
private RnrOrderType rnrOrderType;
@Getter
private String key;
@Getter
private String name;
@Getter
private String workOrderNamePattern;
@Getter
private String workOrderCallBackServiceName;
public static WorkOrderTypeEnum getWorkOrderTypeByKey(String key) {
return Arrays.stream(WorkOrderTypeEnum.values()).filter(workOrderTypeEnum -> workOrderTypeEnum.getKey().equals(key))
.findFirst().orElse(null);
}
public String getWorkOrderName(Object... args) {
return String.format(workOrderNamePattern, args);
}
public static WorkOrderTypeEnum getWorkOrderTypeEnumByRnrOrderType(RnrOrderType rnrOrderType){
return Arrays.stream(WorkOrderTypeEnum.values()).filter(workOrderTypeEnum -> workOrderTypeEnum.getRnrOrderType().equals(rnrOrderType)).findFirst().orElse(null);
}
}
package com.cusc.nirvana.user.rnr.workorder.context;
import com.cusc.nirvana.user.rnr.workorder.constants.WorkOrderTypeEnum;
import com.cusc.nirvana.user.rnr.workorder.handler.WorkOrderCallBackHandler;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @author stayAnd
* @date 2022/3/31
*/
@Component
public class WorkOrderCallBackContext implements ApplicationContextAware,InitializingBean {
private ApplicationContext context;
private Map<String,WorkOrderCallBackHandler> workOrderCallBackHandlerMap;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
public WorkOrderCallBackHandler getWorkBackHandler(String workOrderKey){
//根据工单类型获取不同的工单回调处理业务类 workOrderCallBackHandlerMap
WorkOrderTypeEnum workOrderTypeEnum = WorkOrderTypeEnum.getWorkOrderTypeByKey(workOrderKey);
if (null != workOrderTypeEnum){
return workOrderCallBackHandlerMap.get(workOrderTypeEnum.getWorkOrderCallBackServiceName());
}
return null;
}
@Override
public void afterPropertiesSet() throws Exception {
workOrderCallBackHandlerMap = context.getBeansOfType(WorkOrderCallBackHandler.class);
}
}
package com.cusc.nirvana.user.rnr.workorder.context;
import com.cusc.nirvana.user.rnr.workorder.handler.WorkOrderHandler;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Map;
/**
* @author stayAnd
* @date 2022/3/29
*/
@Component
public class WorkOrderContext {
@Resource
private Map<String,WorkOrderHandler> handlerMap;
/**
* 配置
*/
@Value("${work.order.handler.name:internalWorkOrderHandler}")
private String workHandlerServiceName;
public WorkOrderHandler getHandler(){
WorkOrderHandler handler = handlerMap.get(workHandlerServiceName);
if (null == handler){
//throw new CuscUserException();
}
return handler;
}
}
package com.cusc.nirvana.user.rnr.workorder.controller;
import com.alibaba.fastjson.JSONObject;
import com.cache.CacheFactory;
import com.cache.exception.CacheException;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.exception.CuscUserException;
import com.cusc.nirvana.user.rnr.common.constants.RedisConstant;
import com.cusc.nirvana.user.rnr.mg.service.IMgRnrCardNoticeService;
import com.cusc.nirvana.user.rnr.workorder.context.WorkOrderCallBackContext;
import com.cusc.nirvana.user.rnr.workorder.dto.WorkOrderReviewCallBackRequestDTO;
import com.cusc.nirvana.user.rnr.workorder.handler.WorkOrderCallBackHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author stayAnd
* @date 2022/3/30
*/
@RestController
@RequestMapping("/rnr/workOrder")
@Slf4j
public class WorkOrderCallBackController {
@Resource
private WorkOrderCallBackContext context;
@Resource
private CacheFactory cacheFactory;
@Resource
private IMgRnrCardNoticeService iMgRnrCardNoticeService;
@PostMapping("/callBack")
public Response callBack(@RequestBody WorkOrderReviewCallBackRequestDTO callBackRequestDTO){
log.info("WorkOrderCallBackController callBack = {}",JSONObject.toJSONString(callBackRequestDTO));
WorkOrderCallBackHandler workBackHandler = context.getWorkBackHandler(callBackRequestDTO.getWorkOrderKey());
if (null != workBackHandler) {
try {
boolean lockStatus = cacheFactory.getLockService().lock(RedisConstant.RNR_MG_ASYNCORDER_LOCK + callBackRequestDTO.getCode(),
RedisConstant.RNR_MG_ASYNCORDER_LOCK_EXPIRE);
if(!lockStatus){
throw new CuscUserException("", "当前有正在处理的实名请求,请勿重复提交");
}
iMgRnrCardNoticeService.asyncOrderExecutor(callBackRequestDTO);
} catch (CacheException e) {
log.error("personH5CallBack 加锁失败 ", e);
}
}
return Response.createSuccess();
}
}
package com.cusc.nirvana.user.rnr.workorder.controller;
import com.cusc.nirvana.common.result.BaseEnum;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.workorder.constants.WorkOrderTypeEnum;
import com.cusc.nirvana.user.rnr.workorder.context.WorkOrderContext;
import com.cusc.nirvana.user.rnr.workorder.dto.WorkOrderClaimRequestDTO;
import com.cusc.nirvana.user.rnr.workorder.dto.WorkOrderInfoDTO;
import com.cusc.nirvana.user.rnr.workorder.dto.WorkOrderQueryRequestDTO;
import com.cusc.nirvana.user.rnr.workorder.dto.WorkOrderReviewDTO;
import com.cusc.nirvana.user.rnr.workorder.dto.WorkOrderStarRequestDTO;
import com.cusc.nirvana.user.rnr.workorder.handler.WorkOrderHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* @author stayAnd
* @date 2022/3/30
*/
@RestController
@RequestMapping("/rnr/worktest")
@Slf4j
public class WorkTestController {
@Resource
private WorkOrderContext workOrderContext;
@GetMapping("/startWork")
public Response<String> startWork(@RequestParam("id") String id){
WorkOrderHandler handler = workOrderContext.getHandler();
WorkOrderStarRequestDTO dto = new WorkOrderStarRequestDTO();
dto.setTenantUuid("test1");
dto.setApplicationUuid("b05ccb27c2d54113bf32a7203ef4b7a7");
dto.setBusinessObjectId("test"+id);
dto.setName("test"+id);
dto.setStartUserId("test");
dto.setWorkOrderKey(WorkOrderTypeEnum.REAL_NAME_CERTIFICATION_ORDER.getKey());
String workOrderNo = handler.startOrder(dto);
return Response.createSuccess(BaseEnum.SUCCESS.getMsg(),workOrderNo);
}
@GetMapping("/queryUnClaimedOrders")
public Response<List<WorkOrderInfoDTO>> queryUnClaimedOrders(){
WorkOrderHandler handler = workOrderContext.getHandler();
WorkOrderQueryRequestDTO dto = new WorkOrderQueryRequestDTO();
dto.setApplicationUuid("b05ccb27c2d54113bf32a7203ef4b7a7");
dto.setTenantUuid("test1");
dto.setWorkOrderKey(WorkOrderTypeEnum.REAL_NAME_CERTIFICATION_ORDER.getKey());
dto.setCurrPage(1);
dto.setPageSize(30);
List<WorkOrderInfoDTO> list = handler.queryUnClaimedOrders(dto);
return Response.createSuccess(list);
}
@GetMapping("/claimOrder")
public Response<Boolean> claimOrder(@RequestParam("taskNo")String taskNo,
@RequestParam("claimUserId") String claimUserId){
WorkOrderHandler handler = workOrderContext.getHandler();
WorkOrderClaimRequestDTO dto = new WorkOrderClaimRequestDTO();
dto.setApplicationUuid("b05ccb27c2d54113bf32a7203ef4b7a7");
dto.setTenantUuid("test1");
dto.setWorkOrderKey(WorkOrderTypeEnum.REAL_NAME_CERTIFICATION_ORDER.getKey());
dto.setTaskNo(taskNo);
dto.setClaimUserId(claimUserId);
return Response.createSuccess(handler.claimOrder(dto));
}
@GetMapping("/queryClaimedOrders")
public Response<List<WorkOrderInfoDTO>> queryClaimedOrders(@RequestParam("claimUserId") String claimUserId){
WorkOrderHandler handler = workOrderContext.getHandler();
WorkOrderQueryRequestDTO dto = new WorkOrderQueryRequestDTO();
dto.setApplicationUuid("b05ccb27c2d54113bf32a7203ef4b7a7");
dto.setTenantUuid("test1");
dto.setWorkOrderKey(WorkOrderTypeEnum.REAL_NAME_CERTIFICATION_ORDER.getKey());
dto.setCurrPage(1);
dto.setPageSize(30);
dto.setClaimUserId(claimUserId);
List<WorkOrderInfoDTO> list = handler.queryClaimedOrders(dto);
return Response.createSuccess(list);
}
@GetMapping("/reviewWorkOrder")
public Response reviewWorkOrder(@RequestParam("reviewUserId") String reviewUserId,
@RequestParam("taskNo") String taskNo,
@RequestParam("auditResult") Integer auditResult,
@RequestParam("auditNote") String auditNote){
WorkOrderHandler handler = workOrderContext.getHandler();
WorkOrderReviewDTO dto = new WorkOrderReviewDTO();
dto.setApplicationUuid("b05ccb27c2d54113bf32a7203ef4b7a7");
dto.setTenantUuid("test1");
dto.setReviewUserId(reviewUserId);
dto.setTaskNo(taskNo);
dto.setAuditResult(auditResult);
dto.setAuditNote(auditNote);
Boolean success = handler.reviewWorkOrder(dto);
return Response.createSuccess(success);
}
}
package com.cusc.nirvana.user.rnr.workorder.dto;
import lombok.Data;
/**
* @author stayAnd
* @date 2022/3/30
*/
@Data
public class WorkOrderAssignDTO {
/**
* 租户id
*/
private String tenantUuid;
/**
* 应用标识
*/
private String applicationUuid;
/**
* 工单定义编码
*/
private String workOrderKey;
/**
* 创建工单时返回的工单编号 用于关联业务信息
*/
private String workOrderNo;
/**
* 工单下面的任务编号 用于操作工单认领、审核
*/
private String taskNo;
/**
* 委派人id
*/
private String assignUserId;
}
package com.cusc.nirvana.user.rnr.workorder.dto;
import lombok.Data;
import java.util.List;
/**
* @author stayAnd
* @date 2022/3/29
* 认领工单dto
*/
@Data
public class WorkOrderClaimRequestDTO {
/**
* 租户id
*/
private String tenantUuid;
/**
* 应用标识
*/
private String applicationUuid;
/**
* 工单定义编码
*/
private String workOrderKey;
/**
* 创建工单时返回的工单编号 用于关联业务信息
*/
private String workOrderNo;
/**
* 工单下面的任务编号 用于操作工单认领、审核
*/
private String taskNo;
/**
* 认领人的用户id
*/
private String claimUserId;
}
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