Commit 18f30968 authored by suhuiguang's avatar suhuiguang

1.报检信息推送草稿

parent 0a1ed137
package com.yeejoin.amos.boot.module.jyjc.api.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author Administrator
*/
@ApiModel(value = "检验检测申请信息推送数据")
@Data
public class InspectionApplicationPushData implements Serializable {
@ApiModelProperty(value = "报检单号")
private String applicationNo;
@ApiModelProperty(value = "申请日期")
private Date applicationDate;
@ApiModelProperty(value = "报检单位编号")
private String applicationUnitCode;
@ApiModelProperty(value = "报检单位名称")
private String applicationUnitName;
@ApiModelProperty(value = "报检单位地址")
private String applicationUnitAddress;
@ApiModelProperty(value = "报检单位联系人")
private String applicationContactName;
@ApiModelProperty(value = "申请联系人电话")
private String applicationContactPhone;
@ApiModelProperty(value = "内部人员代码")
private String innerPersonCode;
@ApiModelProperty(value = "检验检测类型")
private String inspectionType;
@ApiModelProperty(value = "检验检测类别")
private String inspectionClassify;
@ApiModelProperty(value = "监管单位名称")
private String superviseOrgName;
@ApiModelProperty(value = "检验检测单位编码")
private String inspectionUnitCode;
@ApiModelProperty(value = "检验检测单位名称")
private String inspectionUnitName;
private List<InspectionEquipData> inspectionEquips;
}
package com.yeejoin.amos.boot.module.jyjc.api.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Map;
/**
* @author Administrator
*/
@Data
@ApiModel(value = "检验检测申请信息推送数据-设备信息")
public class InspectionEquipData {
@ApiModelProperty(value = "监管码")
private String supervisoryCode;
@ApiModelProperty(value = "设备名称")
private String equName;
@ApiModelProperty(value = "设备种类")
private String equList;
@ApiModelProperty(value = "设备类别")
private String equCategory;
@ApiModelProperty(value = "设备品种")
private String equDefine;
@ApiModelProperty(value = "注册代码")
private String equCode;
@ApiModelProperty(value = "使用/施工地址")
private String address;
@ApiModelProperty(value = "施工单位信用代码")
private String uscUnitCreditCode;
@ApiModelProperty(value = "施工单位名称")
private String uscUnitCreditName;
@ApiModelProperty(value = "技术参数")
private Map<String, Object> techParams;
}
package com.yeejoin.amos.boot.module.jyjc.biz.event;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionApplicationModel;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
/**
* @author Administrator
*/
@Getter
public class InspectionApplicationPushEvent extends ApplicationEvent {
private JyjcInspectionApplicationModel jyjcInspectionApplicationModel;
/**
* Create a new {@code ApplicationEvent}.
*
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public InspectionApplicationPushEvent(Object source, JyjcInspectionApplicationModel jyjcInspectionApplicationModel) {
super(source);
this.jyjcInspectionApplicationModel = jyjcInspectionApplicationModel;
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.entity.TzsBaseEntity;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplicationEquip;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplicationPushLog;
import com.yeejoin.amos.boot.module.jyjc.api.enums.EquipCategoryEnum;
import com.yeejoin.amos.boot.module.jyjc.api.model.InspectionApplicationPushData;
import com.yeejoin.amos.boot.module.jyjc.api.model.InspectionEquipData;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionApplicationModel;
import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionApplicationPushEvent;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionApplicationEquipServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionApplicationPushLogServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgConstructionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgUseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.stream.Collectors;
/**
* @author Administrator
*/
@Component
@Slf4j
public class InspectionApplicationPushEventListener implements ApplicationListener<InspectionApplicationPushEvent> {
private BlockingQueue<JyjcInspectionApplicationModel> queue = new LinkedBlockingQueue<>();
@Value("${inspection.push.max.deal.thread.num: 2}")
private int threadNum;
@Autowired
JyjcInspectionApplicationPushLogServiceImpl pushLogService;
@Autowired
JyjcInspectionApplicationEquipServiceImpl applicationEquipService;
@Autowired
IdxBizJgConstructionInfoMapper constructionInfoMapper;
@Autowired
IdxBizJgUseInfoMapper useInfoMapper;
@Autowired
TzBaseEnterpriseInfoMapper baseEnterpriseInfoMapper;
@Autowired
private EquipTechParamBoilerMapper equipTechParamBoilerMapper;
@Autowired
private EquipTechParamVesselMapper equipTechParamVesselMapper;
@Autowired
private EquipTechParamElevatorMapper equipTechParamElevatorMapper;
@Autowired
private EquipTechParamLiftingMapper equipTechParamLiftingMapper;
@Autowired
private EquipTechParamVehicleMapper equipTechParamVehicleMapper;
@Autowired
private EquipTechParamRidesMapper equipTechParamRidesMapper;
@Autowired
private EquipTechParamPipelineMapper equipTechParamPipelineMapper;
@Autowired
private EquipTechParamRopewayMapper equipTechParamRopewayMapper;
@Override
public void onApplicationEvent(InspectionApplicationPushEvent event) {
log.info("收到报检推送请求:{}", event);
queue.add(event.getJyjcInspectionApplicationModel());
}
@PostConstruct
public void init() {
ExecutorService executorService = Executors.newFixedThreadPool(threadNum);
for (int i = 0; i < threadNum; i++) {
executorService.execute(() -> {
while (true) {
try {
JyjcInspectionApplicationModel applicationModel = queue.take();
//构建数据
JyjcInspectionApplicationPushLog pushLog = this.createPushData(applicationModel);
// 发送数据
this.pushData2Kafka(pushLog);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
});
}
}
private void pushData2Kafka(JyjcInspectionApplicationPushLog pushLog) {
// 发送kafka指定的主题
}
private JyjcInspectionApplicationPushLog createPushData(JyjcInspectionApplicationModel applicationModel) {
JyjcInspectionApplicationPushLog pushLog = new JyjcInspectionApplicationPushLog();
pushLog.setInspectionUnitCode(applicationModel.getInspectionUnitCode());
pushLog.setApplicationSeq(applicationModel.getSequenceNbr());
// 初始状态
pushLog.setPushStatus("1");
pushLog.setPushData(this.buildData(applicationModel));
pushLog.setRecDate(new Date());
pushLogService.save(pushLog);
return pushLog;
}
private String buildData(JyjcInspectionApplicationModel applicationModel) {
InspectionApplicationPushData pushData = new InspectionApplicationPushData();
BeanUtil.copyProperties(applicationModel, pushData);
// 监管机构
pushData.setSuperviseOrgName(this.getSuperviseNameByCode(applicationModel.getApplicationUnitCode()));
// 报检的设备信息
pushData.setInspectionEquips(this.buildInspectionEquipInfo(applicationModel.getSequenceNbr()));
return JSONObject.toJSONString(pushData);
}
private List<InspectionEquipData> buildInspectionEquipInfo(Long sequenceNbr) {
List<JyjcInspectionApplicationEquip> jyjcInspectionApplicationEquips = applicationEquipService.list(new LambdaQueryWrapper<JyjcInspectionApplicationEquip>().eq(JyjcInspectionApplicationEquip::getApplicationSeq, sequenceNbr));
return jyjcInspectionApplicationEquips.stream().map(e -> {
InspectionEquipData equipData = new InspectionEquipData();
BeanUtil.copyProperties(e, equipData);
equipData.setAddress(this.getAddressByRecord(e.getEquipUnicode()));
this.setUscUnitInfo(equipData, e.getEquipUnicode());
this.setTechParams(equipData, e.getEquipUnicode());
return equipData;
}).collect(Collectors.toList());
}
private void setTechParams(InspectionEquipData equipData, String equipUnicode) {
// 按照设备类型查询不同的技术参数表
equipData.setTechParams(this.populateEquipInfoWithTechParams(equipData.getEquList(), equipUnicode));
}
private Map<String, Object> populateEquipInfoWithTechParams(String equList, String record) {
EquipCategoryEnum productType = EquipCategoryEnum.of(Integer.parseInt(equList));
switch (Objects.requireNonNull(productType)) {
case IDX_BIZ_JG_TECH_PARAMS_BOILER:
return BeanUtil.beanToMap(equipTechParamBoilerMapper.getBoilerByDefaultValue(record));
case IDX_BIZ_JG_TECH_PARAMS_VESSEL:
return BeanUtil.beanToMap(equipTechParamVesselMapper.getVesselByDefaultValue(record));
case IDX_BIZ_JG_TECH_PARAMS_ELEVATOR:
return BeanUtil.beanToMap(equipTechParamElevatorMapper.getElevatorByDefaultValue(record));
case IDX_BIZ_JG_TECH_PARAMS_LIFTING:
return BeanUtil.beanToMap(equipTechParamLiftingMapper.getLiftingByDefaultValue(record));
case IDX_BIZ_JG_TECH_PARAMS_VEHICLE:
return BeanUtil.beanToMap(equipTechParamVehicleMapper.getVehicleByDefaultValue(record));
case IDX_BIZ_JG_TECH_PARAMS_RIDES:
return BeanUtil.beanToMap(equipTechParamRidesMapper.getRidesByDefaultValue(record));
case IDX_BIZ_JG_TECH_PARAMS_PIPELINE:
return BeanUtil.beanToMap(equipTechParamPipelineMapper.getPipelineByDefaultValue(record));
case IDX_BIZ_JG_TECH_PARAMS_ROPEWAY:
return BeanUtil.beanToMap(equipTechParamRopewayMapper.getRopewayByDefaultValue(record));
default:
break;
}
return null;
}
private String getAddressByRecord(String equipUnicode) {
IdxBizJgUseInfo idxBizJgUseInfo = useInfoMapper.selectOne(new LambdaQueryWrapper<IdxBizJgUseInfo>().eq(IdxBizJgUseInfo::getRecord, equipUnicode));
return null2Blank(idxBizJgUseInfo.getProvinceName()) + null2Blank(idxBizJgUseInfo.getCityName()) + null2Blank(idxBizJgUseInfo.getCountyName()) + null2Blank(idxBizJgUseInfo.getAddress());
}
private String null2Blank(String str) {
return StrUtil.isNotEmpty(str) ? str : "";
}
private void setUscUnitInfo(InspectionEquipData equipData, String equipUnicode) {
LambdaQueryWrapper<IdxBizJgConstructionInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IdxBizJgConstructionInfo::getRecord, equipUnicode);
wrapper.orderByDesc(TzsBaseEntity::getRecDate);
wrapper.last("limit 1");
IdxBizJgConstructionInfo jgConstructionInfo = constructionInfoMapper.selectOne(wrapper);
if (jgConstructionInfo != null) {
equipData.setUscUnitCreditCode(jgConstructionInfo.getUscUnitCreditCode());
equipData.setUscUnitCreditName(jgConstructionInfo.getUscUnitName());
}
}
private String getSuperviseNameByCode(String applicationUnitCode) {
//查询监管单位名称
TzBaseEnterpriseInfo tzBaseEnterpriseInfo = baseEnterpriseInfoMapper.selectOne(new LambdaQueryWrapper<TzBaseEnterpriseInfo>().eq(TzBaseEnterpriseInfo::getUseCode, applicationUnitCode));
return tzBaseEnterpriseInfo.getSuperviseOrgName();
}
}
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