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.workorder.dto;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author stayAnd
* @date 2022/3/30
*/
@Data
@Accessors(chain = true)
public class WorkOrderInfoDTO {
/**
* 创建工单时返回的工单编号 用于关联业务信息
*/
private String workOrderNo;
/**
* 工单下面的任务编号 用于操作工单认领、审核
*/
private String taskNo;
/**
* 租户id
*/
private String tenantUuid;
/**
* 工单绑定的业务对象标识
*/
private String businessObjectId;
/**
* 工单定义编码
*/
private String workOrderKey;
/**
* 应用标识
*/
private String applicationUuid;
}
package com.cusc.nirvana.user.rnr.workorder.dto;
import com.cusc.nirvana.user.rnr.mg.common.BaseRnrMgPageDTO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author stayAnd
* @date 2022/3/30
* 工单查询dto
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class WorkOrderQueryRequestDTO extends BaseRnrMgPageDTO {
/**
* 租户id
*/
private String tenantUuid;
/**
* 应用标识
*/
private String applicationUuid;
/**
* 工单定义编码
*/
private String workOrderKey;
/**
* 认领人的用户id
*/
private String claimUserId;
}
package com.cusc.nirvana.user.rnr.workorder.dto;
import lombok.Data;
/**
* @author stayAnd
* @date 2022/3/30
*/
@Data
public class WorkOrderRequestParamDTO {
/**
* 参数编码
*/
private String code;
/**
* 参数名称
*/
private String name;
/**
* 参数值
*/
private String value;
}
package com.cusc.nirvana.user.rnr.workorder.dto;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* @author stayAnd
* @date 2022/3/31
* 工单回调接口
*/
@Data
public class WorkOrderReviewCallBackRequestDTO {
/**指派人*/
private String assignee;
/**
* 审核意见
*/
private String auditNote;
/**
* 审核结果 1 审核通过 2 审核不通过
*/
private String auditResult;
/** 业务对象标识 */
private String businessObjectId;
/** 认领状态 */
private Integer claimStatus;
/** 认领时间 */
private Date claimTime;
/**
* 工单code
*/
private String code;
/**
* 扩展参数
*/
private Map<String, Object> extParams;
/**操作*/
private String userId;
/** 工单类型编码*/
private String workOrderKey;
/** 工单状态 */
private Integer workorderStatus;
/**
* 工单唯一标识 uuid
*/
private String workOrderUuid;
}
package com.cusc.nirvana.user.rnr.workorder.dto;
import lombok.Data;
/**
* @author stayAnd
* @date 2022/3/30
*/
@Data
public class WorkOrderReviewDTO {
/**
* 租户id
*/
private String tenantUuid;
/**
* 应用标识
*/
private String applicationUuid;
/**
* 任务编号
*/
private String taskNo;
/**
* 1-审核通过,2-审核不通过
*/
private Integer auditResult;
/**
* 审核意见
*/
private String auditNote;
/**
* 审核人
*/
private String reviewUserId;
}
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 WorkOrderStarRequestDTO {
/**
* 租户id
*/
private String tenantUuid;
/**
* 应用标识
*/
private String applicationUuid;
/**
* 工单绑定的业务对象标识
*/
private String businessObjectId;
/**
* 标签
*/
private String tag;
/**
* 工单名称
*/
private String name;
/**
* 发起人标识
*/
private String startUserId;
/**
* 工单定义编码
*/
private String workOrderKey;
/**
*表单参数数组
*/
private List<WorkOrderRequestParamDTO> params;
}
package com.cusc.nirvana.user.rnr.workorder.handler;
import com.cusc.nirvana.user.rnr.workorder.constants.WorkOrderTypeEnum;
import com.cusc.nirvana.user.rnr.workorder.dto.WorkOrderReviewCallBackRequestDTO;
/**
* @author stayAnd
* @date 2022/3/31
*/
public interface WorkOrderCallBackHandler {
/**
* 工单认领或者指派后的回调
* @param workNo 工单号
*/
void claimAssignWorkOrder(String workNo);
/**
* 工单审核回调
* @param dto
*/
void reviewCallBack(WorkOrderReviewCallBackRequestDTO dto);
}
package com.cusc.nirvana.user.rnr.workorder.handler;
import com.cusc.nirvana.user.rnr.workorder.dto.*;
import java.util.List;
/**
* @author stayAnd
* @date 2022/3/29
* 工单处理
*/
public interface WorkOrderHandler {
/**
* 发起工单
* @param dto 请求参数
* @return 工单单号
*/
String startOrder(WorkOrderStarRequestDTO dto);
/**
* 查询未认领的工单
* @param dto 参数
* @return
*/
List<WorkOrderInfoDTO> queryUnClaimedOrders(WorkOrderQueryRequestDTO dto);
/**
* 认领工单
* @param dto 参数
* @return
*/
Boolean claimOrder(WorkOrderClaimRequestDTO dto);
/**
* 查询认领的工单
* @param dto 参数
* @return
*/
List<WorkOrderInfoDTO> queryClaimedOrders(WorkOrderQueryRequestDTO dto);
/**
* 审核工单
* @param dto 参数
* @return
*/
Boolean reviewWorkOrder(WorkOrderReviewDTO dto);
/**
* 指派工单
* @param dto
* @return
*/
Boolean assignWorkOrder(WorkOrderAssignDTO dto);
}
package com.cusc.nirvana.user.rnr.workorder.handler.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderStatusEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.dao.entity.MgRnrCardInfoPO;
import com.cusc.nirvana.user.rnr.mg.dto.*;
import com.cusc.nirvana.user.rnr.mg.service.*;
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.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.List;
/**
* @author stayAnd
* @date 2022/4/26
*/
@Component
@Slf4j
public class EnterpriseChangeCallBackHandler implements WorkOrderCallBackHandler {
@Resource
private IRnrOrderService orderService;
@Resource
private IMgRnrInfoService mgRnrInfoService;
@Resource
private IMgRnrCardInfoService cardInfoService;
@Resource
private IRnrResultProcessService processService;
@Resource
private IMgVehicleCompanyService vehicleCompanyService;
@Resource
private IMgRnrCompanyInfoService companyInfoService;
@Override
public void claimAssignWorkOrder(String workNo) {
}
@Override
public void reviewCallBack(WorkOrderReviewCallBackRequestDTO dto) {
boolean auditResult = StringUtils.equalsIgnoreCase(dto.getAuditResult(), "1");
String orderId = dto.getBusinessObjectId();
//查询orderDto
RnrOrderDTO orderQuery = new RnrOrderDTO();
orderQuery.setUuid(orderId);
RnrOrderDTO orderDTO = orderService.getByUuid(orderQuery);
if (null == orderDTO) {
log.error("EnterpriseChangeCallBackHandler reviewCallBack orderDTO is null,dto = {} ", JSONObject.toJSONString(dto));
return;
}
//查询rnr_info
MgRnrInfoDTO infoQuery = new MgRnrInfoDTO();
infoQuery.setUuid(orderDTO.getRnrId());
MgRnrInfoDTO rnrInfo = mgRnrInfoService.getByUuid(infoQuery);
if (null == rnrInfo) {
log.error("EnterpriseChangeCallBackHandler reviewCallBack rnrInfo is null,dto = {} ", JSONObject.toJSONString(dto));
return;
}
//查询卡信息
MgRnrCardInfoDTO cardQuery = new MgRnrCardInfoDTO();
cardQuery.setRnrId(rnrInfo.getUuid());
List<MgRnrCardInfoDTO> cardInfoDTOList = cardInfoService.queryByList(cardQuery);
if (CollectionUtils.isEmpty(cardInfoDTOList)) {
log.error("EnterpriseChangeCallBackHandler reviewCallBack cardInfoDTOList is empty,dto = {} ", JSONObject.toJSONString(dto));
return;
}
processService.processRnrResult(orderId, rnrInfo.getUuid(), auditResult ? RnrOrderStatusEnum.PASS : RnrOrderStatusEnum.NOT_PASS,dto.getAuditNote());
if (auditResult) {
//解绑老的卡信息
unBindOldCard(cardInfoDTOList);
//修改mg_vehicle_company的first_rnr_id
log.info("企业责任人变更 修改firstRnrId 开始,orderId = {}",orderId);
MgRnrCompanyInfoDTO companyQuery = new MgRnrCompanyInfoDTO();
companyQuery.setRnrId(rnrInfo.getUuid());
MgRnrCompanyInfoDTO companyInfoDTO = companyInfoService.getByRnrid(companyQuery);
if (null == companyInfoDTO) {
log.info("企业责任人变更 修改firstRnrId 未查询到 MgRnrCompanyInfoDTO,orderId = {}",orderId);
return;
}
MgVehicleCompanyDTO vehicleQuery = new MgVehicleCompanyDTO();
vehicleQuery.setTenantNo(orderDTO.getTenantNo());
vehicleQuery.setCompanyName(companyInfoDTO.getCompanyName());
MgVehicleCompanyDTO vehicleCompany = vehicleCompanyService.getVehicleCompany(vehicleQuery);
if (null == vehicleCompany) {
log.info("企业责任人变更 修改firstRnrId 未查询到 MgVehicleCompanyDTO,orderId = {}",orderId);
return;
}
MgVehicleCompanyDTO vehicleUpdateDto = new MgVehicleCompanyDTO();
vehicleUpdateDto.setUuid(vehicleCompany.getUuid());
vehicleUpdateDto.setFirstRnrId(rnrInfo.getUuid());
vehicleCompanyService.update(vehicleUpdateDto);
log.info("企业责任人变更 修改firstRnrId 成功,orderId = {}",orderId);
}
}
private void unBindOldCard(List<MgRnrCardInfoDTO> cardInfoDTOList) {
cardInfoDTOList.parallelStream().forEach(card -> {
if (StringUtils.isNotBlank(card.getOldCardId())) {
MgRnrCardInfoPO updateCardPo = new MgRnrCardInfoPO();
updateCardPo.setRnrStatus(RnrStatus.UNBOUND.getCode());
LambdaQueryWrapper<MgRnrCardInfoPO> cardQuery = new LambdaQueryWrapper<>();
cardQuery.eq(MgRnrCardInfoPO::getUuid, card.getOldCardId());
cardInfoService.update(updateCardPo, cardQuery);
}
});
}
}
package com.cusc.nirvana.user.rnr.workorder.handler.impl;
import com.alibaba.fastjson.JSONObject;
import com.cusc.nirvana.common.loader.CollectionUtils;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderStatusEnum;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import com.cusc.nirvana.user.rnr.mg.dto.MgVehicleCompanyDTO;
import com.cusc.nirvana.user.rnr.mg.dto.OrgSimRelDTO;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
import com.cusc.nirvana.user.rnr.mg.service.*;
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.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* Description: 车企实名成功工单回调
* <br />
* CreateDate 2022-05-04 14:27:32
*
* @author yuyi
**/
@Service("manufacturerRnrCallBackHandler")
@Slf4j
public class ManufacturerRnrCallBackHandler implements WorkOrderCallBackHandler {
@Autowired
IRnrOrderService orderService;
@Autowired
IMgRnrCardInfoService cardInfoService;
@Autowired
@Lazy
IMgRnrCardNoticeService cardNoticeService;
@Autowired
IMgRnrInfoService mgRnrInfoService;
@Autowired
IMgVehicleCompanyService mgVehicleCompanyService;
@Resource
private IRnrResultProcessService processService;
@Resource
private IOrgSimRelService iOrgSimRelService;
@Override
public void claimAssignWorkOrder(String workNo) {
//todo
}
@Override
public void reviewCallBack(WorkOrderReviewCallBackRequestDTO dto) {
String orderId = dto.getBusinessObjectId();
RnrOrderStatusEnum statusEnum =
StringUtils.equalsIgnoreCase(dto.getAuditResult(), "1") ? RnrOrderStatusEnum.PASS : RnrOrderStatusEnum.NOT_PASS;
//获取rnrId
RnrOrderDTO rnrOrderDTO = new RnrOrderDTO();
rnrOrderDTO.setUuid(orderId);
RnrOrderDTO orderDTO = orderService.getByUuid(rnrOrderDTO);
if (null == orderDTO) {
log.error("ManufacturerRnrCallBackHandler reviewCallBack orderDTO is null,dto = {} ", JSONObject.toJSONString(dto));
return;
}
String rnrId = orderDTO.getRnrId();
if (statusEnum == RnrOrderStatusEnum.PASS) {
//更新orderId查询carInfo
MgRnrCardInfoDTO mgRnrCardInfoDTO = new MgRnrCardInfoDTO();
mgRnrCardInfoDTO.setOrderId(orderId);
List<MgRnrCardInfoDTO> mgRnrCardInfoDTOList = cardInfoService.queryByList(mgRnrCardInfoDTO);
String orgId = "";
if(!CollectionUtils.isEmpty(mgRnrCardInfoDTOList)){
OrgSimRelDTO orgSimRelDTO =iOrgSimRelService.getByIccid(mgRnrCardInfoDTOList.get(0).getIccid());
orgId = orgSimRelDTO.getOrgUuid();
}
//查询车企是否存在
MgVehicleCompanyDTO mvc = new MgVehicleCompanyDTO();
mvc.setTenantNo(orderDTO.getTenantNo());
mvc.setOrgId(orgId);
mvc = mgVehicleCompanyService.getVehicleCompany(mvc);
//不存在则保存
if(mvc == null){
mvc = new MgVehicleCompanyDTO();
mvc.setFirstRnrId(rnrId);
mvc.setOrgId(orderDTO.getOrgId());
mvc.setTenantNo(orderDTO.getTenantNo());
mvc.setCreator(orderDTO.getCreator());
mgVehicleCompanyService.saveByRnrId(mvc);
}
iOrgSimRelService.updateVin(mgRnrCardInfoDTOList);
}
//更新数据状态
processService.processRnrResult(orderId,rnrId,statusEnum,dto.getAuditNote());
}
}
package com.cusc.nirvana.user.rnr.workorder.handler.impl;
import com.cusc.nirvana.user.rnr.workorder.dto.*;
import com.cusc.nirvana.user.rnr.workorder.handler.WorkOrderHandler;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author stayAnd
* @date 2022/3/29
* 远程调用工单系统(通过网关)
*/
@Component
public class OpenApiWorkOrderHandler implements WorkOrderHandler {
@Override
public String startOrder(WorkOrderStarRequestDTO dto) {
return null;
}
@Override
public List<WorkOrderInfoDTO> queryUnClaimedOrders(WorkOrderQueryRequestDTO dto) {
return null;
}
@Override
public Boolean claimOrder(WorkOrderClaimRequestDTO dto) {
return null;
}
@Override
public List<WorkOrderInfoDTO> queryClaimedOrders(WorkOrderQueryRequestDTO dto) {
return null;
}
@Override
public Boolean reviewWorkOrder(WorkOrderReviewDTO dto) {
return null;
}
@Override
public Boolean assignWorkOrder(WorkOrderAssignDTO dto) {
return null;
}
}
package com.cusc.nirvana.user.rnr.workorder.handler.impl;
import com.alibaba.fastjson.JSONObject;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.exception.CuscUserException;
import com.cusc.nirvana.user.rnr.common.constants.ResponseCode;
import com.cusc.nirvana.user.rnr.mg.constants.NoticeStatusEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderStatusEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderType;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrInfoDTO;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
import com.cusc.nirvana.user.rnr.mg.dto.RnrUnbindDTO;
import com.cusc.nirvana.user.rnr.mg.service.*;
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.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* 实名成功工单回调
*
* @author yubo
* @since 2022-04-19 20:25
*/
@Service("rnrWorkOrderCallBackHandler")
@Slf4j
public class RnrWorkOrderCallBackHandler implements WorkOrderCallBackHandler {
@Autowired
IRnrOrderService orderService;
@Autowired
IMgRnrCardInfoService cardInfoService;
@Autowired
@Lazy
IMgRnrCardNoticeService cardNoticeService;
@Autowired
IMgRnrInfoService mgRnrInfoService;
@Autowired
IRnrUnboundService iRnrUnboundService;
@Resource
private IRnrResultProcessService processService;
@Resource
private IOrgSimRelService iOrgSimRelService;
@Override
public void claimAssignWorkOrder(String workNo) {
//todo
}
@Override
public void reviewCallBack(WorkOrderReviewCallBackRequestDTO dto) {
String orderId = dto.getBusinessObjectId();
RnrOrderStatusEnum statusEnum =
StringUtils.equalsIgnoreCase(dto.getAuditResult(), "1") ? RnrOrderStatusEnum.PASS : RnrOrderStatusEnum.NOT_PASS;
//获取rnrId
RnrOrderDTO rnrOrderDTO = new RnrOrderDTO();
rnrOrderDTO.setUuid(orderId);
RnrOrderDTO orderDTO = orderService.getByUuid(rnrOrderDTO);
if (null == orderDTO) {
log.error("RnrWorkOrderCallBackHandler reviewCallBack orderDTO is null,dto = {} ", JSONObject.toJSONString(dto));
return;
}
String rnrId = orderDTO.getRnrId();
if (statusEnum == RnrOrderStatusEnum.PASS) {
if (RnrOrderType.SEC_VEHICLE.getCode().equals(orderDTO.getOrderType())) {
unboundCards(orderId, rnrId);
}
//更新orderId查询carInfo
MgRnrCardInfoDTO mgRnrCardInfoDTO = new MgRnrCardInfoDTO();
mgRnrCardInfoDTO.setOrderId(orderId);
List<MgRnrCardInfoDTO> mgRnrCardInfoDTOList = cardInfoService.queryByList(mgRnrCardInfoDTO);
iOrgSimRelService.updateVin(mgRnrCardInfoDTOList);
}
processService.processRnrResult(orderId,rnrId,statusEnum,dto.getAuditNote());
}
/**
* 解绑卡
*/
@Transactional
public void unboundCards(String orderId, String rnrId) {
//查询所有的待审核的card
MgRnrCardInfoDTO query = new MgRnrCardInfoDTO();
query.setOrderId(orderId);
query.setRnrId(rnrId);
List<MgRnrCardInfoDTO> mgRnrCardInfoDTOS = cardInfoService.queryByList(query);
//查询所有已经实名的卡
List<String> iccids = mgRnrCardInfoDTOS.stream().map(card -> card.getIccid()).collect(Collectors.toList());
query = new MgRnrCardInfoDTO();
query.setIccidList(iccids);
query.setRnrStatus(RnrStatus.RNR.getCode());
mgRnrCardInfoDTOS = cardInfoService.queryByList(query);
if (!CollectionUtils.isEmpty(mgRnrCardInfoDTOS)) {
RnrUnbindDTO unbindDTO;
Response response;
for (MgRnrCardInfoDTO cardDto : mgRnrCardInfoDTOS) {
//获取实名主体信息
MgRnrInfoDTO mgRnrInfoDTO = new MgRnrInfoDTO();
mgRnrInfoDTO.setUuid(cardDto.getRnrId());
MgRnrInfoDTO rnrInfoDTO = mgRnrInfoService.getByUuid(mgRnrInfoDTO);
if (rnrInfoDTO == null) {
throw new CuscUserException("", "实名业务【" + cardDto.getRnrId() + "】不存在");
}
unbindDTO = new RnrUnbindDTO();
unbindDTO.setIccid(cardDto.getIccid());
unbindDTO.setVin(cardDto.getIotId());
unbindDTO.setCertNumber(rnrInfoDTO.getCertNumber());
unbindDTO.setFullName(rnrInfoDTO.getFullName());
unbindDTO.setCertType(rnrInfoDTO.getCertType());
unbindDTO.setPhone(rnrInfoDTO.getPhone());
unbindDTO.setReason(3);
unbindDTO.setManualUnbind(false);
response = iRnrUnboundService.rnrUnbound(unbindDTO);
if (null == response || (!response.getSuccess() && response.getCode() != ResponseCode.ICCID_RNR_INFO_NOT_MATCHED.getCode())) {
throw new CuscUserException("", "解绑卡[" + cardDto.getIccid() + "]失败");
}
}
}
}
}
package com.cusc.nirvana.user.rnr.workorder.handler.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cusc.nirvana.common.loader.CollectionUtils;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.eiam.dto.OrganizationDTO;
import com.cusc.nirvana.user.rnr.mg.constants.CommonDeleteEnum;
import com.cusc.nirvana.user.rnr.mg.constants.CryptKeyHelper;
import com.cusc.nirvana.user.rnr.mg.constants.NoticeStatusEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrBizzTypeEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderStatusEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.converter.MgRnrCardInfoConverter;
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.dto.RnrOrderDTO;
import com.cusc.nirvana.user.rnr.mg.service.*;
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.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* 解绑工单回调
*
* @author yubo
* @since 2022-04-25 16:19
*/
@Service("unbindWorkOrderCallBackHandler")
@Slf4j
public class UnbindWorkOrderCallBackHandler implements WorkOrderCallBackHandler {
@Autowired
IRnrOrderService orderService;
@Autowired
private IMgRnrInfoService rnrInfoService;
@Autowired
IMgRnrCardInfoService cardInfoService;
@Autowired
@Lazy
private IMgRnrCardNoticeService cardNoticeService;
@Autowired
private IOrganService organService;
@Override
public void claimAssignWorkOrder(String workNo) {
}
@Override
public void reviewCallBack(WorkOrderReviewCallBackRequestDTO dto) {
String orderId = dto.getBusinessObjectId();
RnrOrderStatusEnum statusEnum =
StringUtils.equalsIgnoreCase(dto.getAuditResult(), "1") ? RnrOrderStatusEnum.PASS : RnrOrderStatusEnum.NOT_PASS;
//获取rnrId
RnrOrderDTO rnrOrderDTO = new RnrOrderDTO();
rnrOrderDTO.setUuid(orderId);
RnrOrderDTO orderDTO = orderService.getByUuid(rnrOrderDTO);
rnrOrderDTO.setTenantNo(orderDTO.getTenantNo());
if (null == orderDTO) {
log.error("UnbindWorkOrderCallBackHandler reviewCallBack orderDTO is null,dto = {} ", JSONObject.toJSONString(dto));
return;
}
String rnrId = orderDTO.getRnrId();
//根据rnrId找到所有iccids
List<MgRnrCardInfoDTO> cardInfoDTOS = findCardsByRnrId(rnrId);
List<String> cardIds = new ArrayList<>();
List<String> rnrIds = new ArrayList<>();
List<MgCardNoticeDTO> mqList = new ArrayList<>();
//查询车企信息
String manufacturerOrgId;
OrganizationDTO organ = new OrganizationDTO();
organ.setTenantNo(orderDTO.getTenantNo());
organ.setUuid(orderDTO.getOrgId());
Response<OrganizationDTO> organResp = organService.getCarSubOrganByOrgId(organ);
if (organResp != null && organResp.isSuccess() && organResp.getData() != null) {
manufacturerOrgId = organResp.getData().getUuid();
} else {
log.warn("sendCardNoticeByOrderId 获取车企组织失败,{}", JSON.toJSONString(organResp));
manufacturerOrgId = "0";
}
//根据iccids找到需要解绑的记录
findUnboundInfo(cardInfoDTOS, mqList, cardIds, rnrIds, statusEnum, rnrOrderDTO, manufacturerOrgId);
//更新状态
saveStatus(orderId, rnrId, cardIds,rnrIds,statusEnum,dto.getAuditNote());
//异步发送解绑消息 审核通过在发送通知
if (CollectionUtils.isNotEmpty(mqList)&& RnrOrderStatusEnum.PASS.getCode().equals(statusEnum.getCode())) {
log.info("异步发送消息入参{}",JSONObject.toJSONString(mqList));
cardNoticeService.sendCardNotice(mqList);
}
}
@Transactional
public void saveStatus(String orderId, String rnrId, List<String> cardIds, List<String> rnrIds, RnrOrderStatusEnum statusEnum,String content) {
//更新订单状态
//orderService.updateOrderStatus(Collections.singletonList(orderId), statusEnum.getCode());
RnrOrderDTO updateOrder = new RnrOrderDTO();
updateOrder.setUuid(orderId);
updateOrder.setOrderStatus(statusEnum.getCode());
updateOrder.setAuditTime(new Date());
updateOrder.setFinalApproveTime(new Date());
updateOrder.setComment(content);
orderService.update(updateOrder);
if (statusEnum == RnrOrderStatusEnum.PASS) {
//审核通过
rnrInfoService.updateRnrStatus(rnrId, RnrStatus.RNR);
//更新card状态
cardInfoService.updateCardStatusByOrderId(orderId, NoticeStatusEnum.NEED.getCode(), RnrStatus.UNBOUND.getCode());
} else {
//更新rnr状态
rnrInfoService.updateRnrStatus(rnrId, RnrStatus.RNR_FAIL);
//更新card状态
cardInfoService.updateCardStatusByOrderId(orderId, NoticeStatusEnum.NONEED.getCode(), RnrStatus.RNR_FAIL.getCode());
}
//原card表设置成解绑状态
if (CollectionUtils.isNotEmpty(cardIds) && RnrOrderStatusEnum.PASS.equals(statusEnum)) {
cardInfoService.unboundCardBatch(cardIds, RnrStatus.UNBOUND);
}
//原rnr表设置成解绑状态
// rnrInfoService.updateRnrStatusBatch(rnrIds, RnrStatus.UNBOUND);
}
/**
* 获取待解绑的卡信息
*
* @param cardInfoDTOS
* @param mqList
* @param cardIds
* @param rnrIds
*/
private void findUnboundInfo(List<MgRnrCardInfoDTO> cardInfoDTOS, List<MgCardNoticeDTO> mqList, List<String> cardIds, List<String> rnrIds, RnrOrderStatusEnum statusEnum,
RnrOrderDTO orderDTO, String manufacturerOrgId) {
for (MgRnrCardInfoDTO cardInfoDTO : cardInfoDTOS) {
List<MgRnrCardInfoDTO> bindCards = findBindCards(cardInfoDTO.getIccid());
for (MgRnrCardInfoDTO bindCard : bindCards) {
cardIds.add(bindCard.getUuid());
rnrIds.add(bindCard.getRnrId());
MgCardNoticeDTO mgCardNoticeDTO = new MgCardNoticeDTO();
mgCardNoticeDTO.setVin(bindCard.getIotId());
mgCardNoticeDTO.setIccid(bindCard.getIccid());
mgCardNoticeDTO.setRnrBizzType(RnrBizzTypeEnum.Unbound.getCode());
mgCardNoticeDTO.setOrderId(orderDTO.getUuid());
mgCardNoticeDTO.setTenantNo(orderDTO.getTenantNo());
mgCardNoticeDTO.setResultCode(statusEnum.getCode());
mgCardNoticeDTO.setManufacturerOrgId(manufacturerOrgId);
mqList.add(mgCardNoticeDTO);
}
}
}
//根据iccid寻找已绑定的记录
private List<MgRnrCardInfoDTO> findBindCards(String iccid) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("is_delete", CommonDeleteEnum.NORMAL.getCode());
queryWrapper.eq("iccid", CryptKeyHelper.encrypt(iccid));
queryWrapper.eq("rnr_status", RnrStatus.RNR.getCode());
List list = cardInfoService.list(queryWrapper);
return MgRnrCardInfoConverter.INSTANCE.poListToDtoList(list);
}
//根据rnrid找到iccis
private List<MgRnrCardInfoDTO> findCardsByRnrId(String rnrId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("is_delete", CommonDeleteEnum.NORMAL.getCode());
queryWrapper.eq("rnr_id", rnrId);
// queryWrapper.eq("rnr_status", RnrStatus.RNR.getCode());
List list = cardInfoService.list(queryWrapper);
return MgRnrCardInfoConverter.INSTANCE.poListToDtoList(list);
}
}
package com.cusc.nirvana.user.rnr.workorder.job;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cache.CacheFactory;
import com.cusc.nirvana.common.loader.CollectionUtils;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.eiam.client.UserClient;
import com.cusc.nirvana.user.eiam.dto.UserDTO;
import com.cusc.nirvana.user.rnr.common.constants.RedisConstant;
import com.cusc.nirvana.user.rnr.mg.dao.entity.MgOrderApproverPO;
import com.cusc.nirvana.user.rnr.mg.service.IMgOrderApproverService;
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.WorkOrderAssignDTO;
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.handler.WorkOrderHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author stayAnd
* @date 2022/3/31
* 工单定时任务
*/
@Component
@Slf4j
public class WorkOrderJob {
@Resource
private WorkOrderContext workOrderContext;
@Resource
private IMgOrderApproverService mgOrderApproverService;
@Resource
private CacheFactory cacheFactory;
@Resource
private UserClient userClient;
/**
* 工单指派
*/
public void assignWorkOrderJob() {
try {
Boolean lock = cacheFactory.getLockService().lock(RedisConstant.RNR_WORK_ORDER_CONFIG, "assginWorkOrderJob", 60 * 10);
if (!lock) {
log.error("WorkOrderJob assignWorkOrderJob has lock");
return;
}
WorkOrderHandler handler = workOrderContext.getHandler();
int pageNumber = 1;
int pageSize = 50;
int returnSize;
String applicationUuid = "b05ccb27c2d54113bf32a7203ef4b7a7";
do {
//获取未认领的工单列表
WorkOrderQueryRequestDTO dto = new WorkOrderQueryRequestDTO();
dto.setApplicationUuid(applicationUuid);
dto.setWorkOrderKey(WorkOrderTypeEnum.REAL_NAME_CERTIFICATION_ORDER.getKey());
dto.setCurrPage(pageNumber);
dto.setPageSize(pageSize);
List<WorkOrderInfoDTO> workOrderList = handler.queryUnClaimedOrders(dto);
returnSize = workOrderList.size();
//工单分派
doAssignWorkOrder(workOrderList,handler);
pageNumber++;
} while (returnSize == pageSize);
} catch (Exception e) {
log.error("WorkOrderJob assignWorkOrderJob has error", e);
} finally {
try {
cacheFactory.getLockService().unLock(RedisConstant.RNR_WORK_ORDER_CONFIG);
} catch (Exception e) {
log.error("WorkOrderJob assignWorkOrderJob unLock has error", e);
}
}
}
private void doAssignWorkOrder(List<WorkOrderInfoDTO> workOrderList,WorkOrderHandler workOrderHandler) {
if (CollectionUtils.isEmpty(workOrderList)) {
return;
}
//按照租户分组
Map<String, List<WorkOrderInfoDTO>> groupByTenantUuidMap = workOrderList.stream().collect(Collectors.groupingBy(WorkOrderInfoDTO::getTenantUuid));
groupByTenantUuidMap.forEach((tenantUuid, list) -> {
//查询该租户下面的所有审批员工并过滤掉停止接单的员工
LambdaQueryWrapper<MgOrderApproverPO> query = new LambdaQueryWrapper<>();
query.eq(MgOrderApproverPO::getTenantNo, tenantUuid).eq(MgOrderApproverPO::getStopAcceptOrder, 0);
List<MgOrderApproverPO> userApprovalList = mgOrderApproverService.list(query);
if (CollectionUtils.isEmpty(userApprovalList)) {
return;
}
//过滤掉不在线的 并按照id升序
List<MgOrderApproverPO> onLineUserList = userApprovalList.stream().filter(mgUserApprovalPo -> {
UserDTO userDto = new UserDTO();
userDto.setUuid(mgUserApprovalPo.getUserId());
userDto.setApplicationId("4");
userDto.setTenantNo(mgUserApprovalPo.getTenantNo());
Response<Boolean> userOnline = userClient.getUserOnline(userDto);
return null != userOnline && userOnline.getData();
}).sorted(Comparator.comparing(MgOrderApproverPO::getId)).collect(Collectors.toList());
log.info("WorkOrderJob doAssignWorkOrder,tenantUuid = {},onLineList = {}", tenantUuid, JSONObject.toJSONString(onLineUserList));
if (CollectionUtils.isEmpty(onLineUserList)) {
return;
}
Long lastAssignUserId = getLastAssignUserId(tenantUuid);
//onLineUserList中获取比lastAssignUserId大 但是差值最小的审批人员
MgOrderApproverPO startApprovalUser = onLineUserList.stream().filter(mgUserApproval -> mgUserApproval.getId().compareTo(lastAssignUserId) > 0)
.min(Comparator.comparing(MgOrderApproverPO::getId)).orElse(null);
Integer startIndex;
if (null == startApprovalUser) {
startIndex = 0;
} else {
startIndex = onLineUserList.indexOf(startApprovalUser);
}
//本次最后一个审批人
Long lastApprovalUserId = 0L;
for (int i = 0; i < list.size(); i++) {
WorkOrderInfoDTO workOrderInfoDTO = list.get(i);
if (startIndex > onLineUserList.size() - 1) {
startIndex = 0;
}
//指派人
MgOrderApproverPO mgOrderApproverPo = onLineUserList.get(startIndex);
//指派工单
WorkOrderAssignDTO assignRequest = new WorkOrderAssignDTO();
assignRequest.setApplicationUuid(workOrderInfoDTO.getApplicationUuid());
assignRequest.setTenantUuid(workOrderInfoDTO.getTenantUuid());
assignRequest.setTaskNo(workOrderInfoDTO.getTaskNo());
assignRequest.setWorkOrderNo(workOrderInfoDTO.getWorkOrderNo());
assignRequest.setWorkOrderKey(workOrderInfoDTO.getWorkOrderKey());
assignRequest.setAssignUserId(mgOrderApproverPo.getUserId());
workOrderHandler.assignWorkOrder(assignRequest);
if (i == list.size() - 1) {
lastApprovalUserId = mgOrderApproverPo.getId();
}
startIndex++;
}
//记录本次审批最后一个人id
saveLastAssignUserId(tenantUuid, lastApprovalUserId);
});
}
private Long getLastAssignUserId(String tenantUuid) {
Long lastAssignUserId;
try {
lastAssignUserId = cacheFactory.getStringService().getValue(RedisConstant.RNR_WORK_ORDER_ASSIGN_CONFIG + tenantUuid, Long.class);
} catch (Exception e) {
log.error("WorkOrderJob getLastAssignUserId has error,tenantUuid = {}", tenantUuid, e);
lastAssignUserId = 0L;
}
return lastAssignUserId;
}
private void saveLastAssignUserId(String tenantUuid, Long lastApprovalUserId) {
try {
cacheFactory.getStringService().setValue(RedisConstant.RNR_WORK_ORDER_ASSIGN_CONFIG + tenantUuid, lastApprovalUserId);
} catch (Exception e) {
log.error("WorkOrderJob saveLastAssignUserId has error,tenantUuid = {},lastApprovalUserId = {}", tenantUuid, lastApprovalUserId, e);
}
}
}
spring:
cloud:
nacos:
config:
server-addr: 10.179.71.33:8848,10.179.71.81:8848,10.179.71.221:8848
username: nacos
password: nacos
namespace: 92bf8770-8770-4326-a20e-2ed8b17a559e
group: DEFAULT_GROUP
file-extension: yml
discovery:
server-addr: 10.179.71.33:8848,10.179.71.81:8848,10.179.71.221:8848
namespace: 92bf8770-8770-4326-a20e-2ed8b17a559e
username: nacos
password: nacos
group: DEFAULT_GROUP
spring:
application:
name: local-rnr-mg
#切换环境配置spring.profiles.active属性,值为bootstrap后缀。如spring.profiles.active: dev
package com.cusc.nirvana.user.rnr.mg.service.impl;
import com.cusc.nirvana.user.rnr.mg.util.crypt.Sm4Util;
import com.cusc.nirvana.user.util.crypt.CryptKeyUtil;
import org.apache.commons.io.FileUtils;
import java.io.*;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
/**
* Description:
* <br />
* CreateDate 2021-11-17 18:48
*
* @author yuyi
**/
public class CuscCryptTest {
public static void main(String[] args)
throws IOException, ClassNotFoundException, NoSuchAlgorithmException, NoSuchProviderException {
ObjectInputStream inputStream = new ObjectInputStream(
FileUtils.openInputStream(new File("C:\\coding\\CryptKey\\private.key")));
PrivateKey pk = (PrivateKey) inputStream.readObject();
//System.out.println(CryptKeyUtil.decrypt(
// "",
// pk));
//加密
//inputStream = new ObjectInputStream(
// FileUtils.openInputStream(new File("C:\\coding\\CryptKey\\public.key")));
//PublicKey pulicKey = (PublicKey) inputStream.readObject();
//String mw = CryptKeyUtil.encrypt(
// "", pulicKey);
//System.out.println(mw);
//
//String mingwen = "430621199006087785";
String key = CryptKeyUtil.decrypt(
"2CEED72AFCF6769A1E89811E30C516726B728BEDE8681D52C4B594E379C53734EB00C054A5B0123BABB48106903C19ECA65A314E1B0646B4A528B885CD4CEE9F",
pk);
System.out.println(key);
//System.out.println("key: " + key);
String encrypt = Sm4Util.encryptEcbPadding(key, "15827307189");
System.out.println("encrypt:" + encrypt);
String decrypt = Sm4Util.decryptEcbPadding(key, "hWzs852J3UtvxSYqPV3w6WLa9qEhjIyhrmzxG49kVzW2MThJ4oRUlEtvQaqaRfcM9a4s63Fx7AjP7dbYTY2binEhjL0Q05oxCik7BwVNUTSxoZ1LQZY690Vi/1QlVVd6I66Ico+nP274KJ59splWQHTQ6PANZn8HWPI9aCG2eBk=");
System.out.println("decrypt:" + decrypt);
System.out.println("89860919720012021008".hashCode());
}
}
package com.cusc.nirvana.user.rnr.mg.service.impl;
import com.cusc.nirvana.user.rnr.mg.LocalRnrMgApplication;
import com.cusc.nirvana.user.rnr.mg.dao.entity.MgOrderApproverPO;
import com.cusc.nirvana.user.rnr.mg.service.IMgOrderApproverService;
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.WorkOrderStarRequestDTO;
import com.cusc.nirvana.user.rnr.workorder.handler.WorkOrderHandler;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
/**
* @author stayAnd
* @date 2022/3/30
*/
@SpringBootTest(classes = LocalRnrMgApplication.class)
@RunWith(SpringRunner.class)
public class WorkOrderTest {
@Resource
private WorkOrderContext workOrderContext;
@Test
public void testStartOrder(){
WorkOrderHandler handler = workOrderContext.getHandler();
WorkOrderStarRequestDTO dto = new WorkOrderStarRequestDTO();
dto.setTenantUuid("test1");
dto.setApplicationUuid("b05ccb27c2d54113bf32a7203ef4b7a7");
dto.setBusinessObjectId("test1");
dto.setName("test1");
dto.setStartUserId("test1");
dto.setWorkOrderKey(WorkOrderTypeEnum.REAL_NAME_CERTIFICATION_ORDER.getKey());
String s = handler.startOrder(dto);
//System.out.println("AAA");
}
@Resource
private IMgOrderApproverService userApprovalService;
@Test
public void testUserApproval(){
List<MgOrderApproverPO> list = userApprovalService.list();
System.out.println(list.size());
}
//@Autowired
//IVehicleSimBindingService vehicleSimBindingService;
//
//@Test
//public void VehicleSimBindingPage(){
// String json = "{\"organizationId\":\"2022001\",\"iccid\":\"\",\"vin\":\"HYQ3D4D17JZ012227\",\"currPage\":4,\"pageSize\":2,\"startCreateTime\":1654704000000,\"endCreateTime\":1654790399999}";
// VehicleSimBindingDTO dto = JSON.parseObject(json, VehicleSimBindingDTO.class);
// PageResult<VehicleSimBindingDTO> vehicleSimBindingDTOPageResult = vehicleSimBindingService.queryBindingPage(dto);
// System.out.println(JSON.toJSONString(vehicleSimBindingDTOPageResult));
//}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>local-rnr-mg-dto</module>
<module>local-rnr-mg-remote</module>
<module>local-rnr-mg-server</module>
</modules>
<parent>
<groupId>com.cusc.nirvana</groupId>
<artifactId>cusc-parent</artifactId>
<version>1.2.1-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>com.cusc.nirvana</groupId>
<artifactId>local-rnr-mg</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
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