Commit 533f2c1c authored by suhuiguang's avatar suhuiguang

feat(jyjc): 报检开发调整

1.报检规则4.0开发
parent 1b06b1ee
package com.yeejoin.amos.boot.module.common.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("装置查询参数")
public class ContraptionQueryParams {
@ApiModelProperty(value = "检验类型", required = true)
private String inspectionType;
@ApiModelProperty("设备类别")
private String equCategory;
@ApiModelProperty("设备列表")
private String equList;
@ApiModelProperty("设备定义")
private String equDefine;
@ApiModelProperty("城市")
private String city;
@ApiModelProperty("区县")
private String county;
}
......@@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
/**
......@@ -24,7 +25,7 @@ public class EquipCategoryTypeHandler implements TypeHandler<String> {
public String handle(String code) {
return code != null ? CODE_NAME_MAP.computeIfAbsent(code, (k) -> {
EquipmentCategory equipmentCategory = equipmentCategoryMapper.selectOne(new LambdaQueryWrapper<EquipmentCategory>().eq(EquipmentCategory::getCode, code).select(EquipmentCategory::getName, EquipmentCategory::getId));
return equipmentCategory == null ? "" : equipmentCategory.getName();
return Optional.ofNullable(equipmentCategory).map(EquipmentCategory::getName).orElse("");
}) : null;
}
}
......@@ -28,4 +28,14 @@ public interface BizCommonConstant {
* 资质信息key
*/
String UNIT_LICENCE_KEY = "baseUnitLicences";
/**
* 推送状态初始
*/
String PUSH_STATUS_INIT = "1";
/**
* 推送状态成功
*/
String PUSH_STATUS_SUCCESS = "2";
}
package com.yeejoin.amos.boot.module.jyjc.api.dto;
import com.yeejoin.amos.boot.module.jyjc.api.model.InspectionEquipData;
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 InspectionApplicationPushDataPipeline 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 inspectionType;
@ApiModelProperty(value = "监管单位名称")
private String superviseOrgName;
@ApiModelProperty(value = "检验检测单位编码")
private String inspectionUnitCode;
@ApiModelProperty(value = "检验检测单位名称")
private String inspectionUnitName;
@ApiModelProperty(value = "管道类别")
private String pipelineClass;
@ApiModelProperty(value = "工程(装置)名称")
private String deviceName;
@ApiModelProperty(value = "安装地点/使用地点")
private String address;
@ApiModelProperty(value = "使用登记证编号")
private String useRegistrationCode;
@ApiModelProperty(value = "设备数量(m)")
private String totalLength;
@ApiModelProperty(value = "报检的管道")
private List<PipelineResultItemDto> inspectionEquips;
private String traceId;
}
package com.yeejoin.amos.boot.module.jyjc.api.dto;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionResultDataModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 管道检验检测结果数据接收
*
* @author system_generator
*/
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel(value = "PipelineInspectionResultDto", description = "管道检验检测结果数据接收")
public class PipelineInspectionResultDto extends JyjcInspectionResultDataModel {
@ApiModelProperty(value = "报检的管道")
private List<PipelineResultItemDto> inspectionEquips;
}
package com.yeejoin.amos.boot.module.jyjc.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 压力管道汇总表数据项
*
* @author system_generator
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "压力管道汇总表数据项")
public class PipelineResultItemDto {
@ApiModelProperty(value = "唯一标识")
private String equipId;
@ApiModelProperty(value = "管道名称(登记单元)")
private String pipeName;
@ApiModelProperty(value = "管道编号")
private String pipelineNumber;
@ApiModelProperty(value = "设计单位名称")
private String designUnitName;
@ApiModelProperty(value = "管道级别")
private String deviceLevel;
@ApiModelProperty(value = "公称直径")
private String nominalDiameter;
@ApiModelProperty(value = "公称壁厚")
private String wallThickness;
@ApiModelProperty(value = "管道长度")
private String pipeLength;
@ApiModelProperty(value = "设计压力")
private String pressure;
@ApiModelProperty(value = "设计温度")
private String temperature;
@ApiModelProperty(value = "设计介质")
private String medium;
@ApiModelProperty(value = "工作压力")
private String workPressure;
@ApiModelProperty(value = "工作温度")
private String workTemperature;
@ApiModelProperty(value = "工作介质")
private String workMedium;
@ApiModelProperty(value = "备注")
private String remarks;
}
......@@ -19,8 +19,8 @@ public enum ResultTypeEnum {
/**
* 集成方式
*/
INPUT("检验机构录入", "input"),
INTEGRATED("检验机构对接", "integrated"),
INPUT("手工录入", "input"),
INTEGRATED("系统对接", "integrated"),
USEUNITENTRY("使用单位录入", "useUnitEntry");
private final String name;
......
......@@ -148,10 +148,15 @@ public class JyjcInspectionApplicationModel extends BaseModel {
@ApiModelProperty(value = "下一步任务名称")
private String nextTaskName;
@ApiModelProperty(value = "设备分类")
@ApiModelProperty(value = "设备种类编码")
private String equList;
@ApiModelProperty(value = "设备种类名称")
private String equListName;
@ApiModelProperty(value = "设备类别code")
private String equCategory;
......
......@@ -131,7 +131,7 @@
and ((tzjia.application_unit_code = #{currentApplicationUnitCode} or tzjia.inspection_unit_code = #{currentInspectionUnitCode}) OR tzjia.transfer_to_user_ids LIKE concat ( '%', #{currentUserId}, '%' ))
</when>
<otherwise>
1=2
and 1=2
</otherwise>
</choose>
</where>
......
......@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.common.biz.utils.CommonResponseUtil;
import com.yeejoin.amos.boot.module.common.api.dto.ContraptionQueryParams;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplication;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionApplicationEquipModel;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionApplicationModel;
......@@ -325,15 +326,14 @@ public class JyjcInspectionApplicationController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/projectContraptionPage")
@ApiOperation(value = "按照检验类型查询可进行检验的装置", notes = "不包括流程中的")
public ResponseModel<IPage<IdxBizJgProjectContraption>> getJgProjectContraptionPage(@RequestParam String inspectionType,
@RequestParam String equCategory,
public ResponseModel<IPage<IdxBizJgProjectContraption>> getJgProjectContraptionPage(ContraptionQueryParams queryParams,
@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size) {
ReginParams selectedOrgInfo = getSelectedOrgInfo();
Page<IdxBizJgProjectContraption> page = new Page<>();
page.setCurrent(current);
page.setSize(size);
IPage<IdxBizJgProjectContraption> re = jyjcInspectionApplicationServiceImpl.getJgProjectContraptionPage(inspectionType, page, selectedOrgInfo.getCompany().getCompanyCode(), equCategory);
IPage<IdxBizJgProjectContraption> re = jyjcInspectionApplicationServiceImpl.getJgProjectContraptionPage(queryParams, page, selectedOrgInfo.getCompany().getCompanyCode());
return ResponseHelper.buildResponse(re);
}
......
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.jyjc.biz.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.jyjc.api.dto.PipelineInspectionResultDto;
import com.yeejoin.amos.boot.module.jyjc.api.enums.ResultTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionResultDataModel;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionResultModel;
......@@ -243,4 +244,16 @@ public class JyjcInspectionResultController extends BaseController {
public ResponseModel<Boolean> delUseUnitEntry(@RequestParam(value = "sequenceNbr")String resultSeq) {
return ResponseHelper.buildResponse(jyjcInspectionResultServiceImpl.delUseUnitEntry(Long.valueOf(resultSeq)));
}
/**
* 压力管道-报检结果接收
* @param resultData 结果信息
* @return List<JyjcInspectionResultDataModel>
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "报检结果接收", notes = "对外对接使用,支持单条及批量")
@PostMapping(value = "/pipeline/receive")
public ResponseModel<List<PipelineInspectionResultDto>> savePipelineResultDataBatch(@RequestBody List<PipelineInspectionResultDto> resultData){
return ResponseHelper.buildResponse(jyjcInspectionResultServiceImpl.receivePipelineResultData(resultData));
}
}
......@@ -12,7 +12,7 @@ import java.util.List;
@Getter
public class InspectionDetectionSaveToDbEvent extends ApplicationEvent {
private List<JyjcInspectionResult> jyjcInspectionResultList;
private final List<JyjcInspectionResult> jyjcInspectionResultList;
/**
* Create a new {@code ApplicationEvent}.
......
package com.yeejoin.amos.boot.module.jyjc.biz.event;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
import java.util.List;
/**
* @author Administrator
*/
@Getter
public class UseInfoSaveToDbEvent extends ApplicationEvent {
private List<JyjcInspectionResult> jyjcInspectionResultList;
/**
* 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 UseInfoSaveToDbEvent(Object source, List<JyjcInspectionResult> jyjcInspectionResultList) {
super(source);
this.jyjcInspectionResultList = jyjcInspectionResultList;
}
}
......@@ -9,8 +9,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.biz.common.entity.TzsBaseEntity;
import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil;
import com.yeejoin.amos.boot.module.common.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistrationManage;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgUseRegistrationManageMapper;
import com.yeejoin.amos.boot.module.jyjc.api.common.BizCommonConstant;
import com.yeejoin.amos.boot.module.jyjc.api.dto.InspectionApplicationPushDataPipeline;
import com.yeejoin.amos.boot.module.jyjc.api.dto.PipelineResultItemDto;
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;
......@@ -21,19 +25,23 @@ import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionApplicationPushEven
import com.yeejoin.amos.boot.module.jyjc.biz.kafka.KafkaProducer;
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.jyjc.biz.service.impl.JyjcInspectionApplicationServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.util.JsonUtils;
import com.yeejoin.amos.boot.module.jyjc.biz.util.JyjcConstant;
import com.yeejoin.amos.boot.module.ymt.api.entity.*;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationListener;
import org.springframework.core.io.Resource;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
......@@ -46,14 +54,14 @@ import java.util.stream.Collectors;
*/
@Component
@Slf4j
public class InspectionApplicationPushEventListener implements ApplicationListener<InspectionApplicationPushEvent> {
public class InspectionApplicationPushEventListener {
@Value("classpath:/json/companyCodeRegName.json")
private Resource regNameJson;
private Map<String, String> companyCodeRegNameMap;
private BlockingQueue<JyjcInspectionApplicationModel> queue = new LinkedBlockingQueue<>();
private final BlockingQueue<JyjcInspectionApplicationModel> queue = new LinkedBlockingQueue<>();
@Value("${inspection.push.max.deal.thread.num:2}")
private int threadNum;
......@@ -118,6 +126,13 @@ public class InspectionApplicationPushEventListener implements ApplicationListen
@Autowired
IdxBizJgDesignInfoMapper designInfoMapper;
@javax.annotation.Resource
IdxBizJgProjectContraptionMapper projectContraptionMapper;
@javax.annotation.Resource
private JyjcInspectionApplicationServiceImpl inspectionApplicationService;
/**
* 报检推送主题, 第一位为接收单位标识
......@@ -134,8 +149,10 @@ public class InspectionApplicationPushEventListener implements ApplicationListen
*/
private final static List<String> DSJ_ARRAY = Arrays.asList("DQJY", "SCJY");
private static final BigDecimal ZERO = new BigDecimal("0.000");
@Override
@TransactionalEventListener(value = InspectionApplicationPushEvent.class)
public void onApplicationEvent(InspectionApplicationPushEvent event) {
log.info("收到报检推送请求:{}", event);
queue.add(event.getJyjcInspectionApplicationModel());
......@@ -145,20 +162,11 @@ public class InspectionApplicationPushEventListener implements ApplicationListen
public void init() {
ExecutorService executorService = Executors.newFixedThreadPool(threadNum);
companyCodeRegNameMap = JsonUtils.getResourceJson(regNameJson);
// 可处理的检验检测类型,目前只处理检验的,不处理检测业务
List<String> canDealInspectionTypes = getCanDealInspectionType();
for (int i = 0; i < threadNum; i++) {
executorService.execute(() -> {
while (true) {
try {
JyjcInspectionApplicationModel applicationModel = queue.take();
if (!canDealInspectionTypes.contains(applicationModel.getInspectionType())) {
return;
}
if(applicationModel.getEquipClassify().equals(EquipmentClassifityEnum.YLGD.getCode())){
log.info("压力管道暂不处理");
return;
}
//构建数据
JyjcInspectionApplicationPushLog pushLog = this.createPushData(applicationModel);
// 发送数据
......@@ -175,7 +183,7 @@ public class InspectionApplicationPushEventListener implements ApplicationListen
// 发送kafka指定的主题
String topic = String.format(INSPECTION_APPLICATION_PUSH_TOPIC, dockingUnitCode);
kafkaProducer.sendMessage(topic, pushLog.getPushData());
pushLog.setPushStatus("2");
pushLog.setPushStatus(BizCommonConstant.PUSH_STATUS_SUCCESS);
pushLogService.updateById(pushLog);
}
......@@ -186,7 +194,7 @@ public class InspectionApplicationPushEventListener implements ApplicationListen
pushLog.setApplicationSeq(applicationModel.getSequenceNbr());
// 初始状态
pushLog.setSequenceNbr(id);
pushLog.setPushStatus("1");
pushLog.setPushStatus(BizCommonConstant.PUSH_STATUS_INIT);
pushLog.setPushData(this.buildData(id, applicationModel));
pushLog.setRecDate(new Date());
pushLogService.save(pushLog);
......@@ -199,15 +207,84 @@ public class InspectionApplicationPushEventListener implements ApplicationListen
return canDealInspectionTypes;
}
private String calTotalLength(List<PipelineResultItemDto> pipelines) {
if (pipelines == null || pipelines.isEmpty()) {
return ZERO.toPlainString();
}
return pipelines.stream()
.map(PipelineResultItemDto::getPipeLength)
.filter(Objects::nonNull)
.map(String::trim)
.filter(s -> !s.isEmpty())
.map(this::parseToBigDecimal)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(3, RoundingMode.HALF_UP)
.toPlainString();
}
private BigDecimal parseToBigDecimal(String value) {
try {
return new BigDecimal(value);
} catch (NumberFormatException e) {
return BigDecimal.ZERO;
}
}
private String buildData(long traceId, JyjcInspectionApplicationModel applicationModel) {
InspectionApplicationPushData pushData = new InspectionApplicationPushData();
BeanUtil.copyProperties(applicationModel, pushData);
// 监管机构
pushData.setSuperviseOrgName(this.getSuperviseNameByCode(applicationModel.getApplicationUnitCode()));
// 报检的设备信息
pushData.setInspectionEquips(this.buildInspectionEquipInfo(applicationModel));
pushData.setTraceId(traceId + "");
return JSONObject.toJSONString(pushData);
String jsonStr = "";
EquipmentClassifityEnum classifyEnum = EquipmentClassifityEnum.getOne(applicationModel.getEquipClassify());
if (classifyEnum == EquipmentClassifityEnum.YLGD) {
InspectionApplicationPushDataPipeline pushDataPipeline = new InspectionApplicationPushDataPipeline();
BeanUtil.copyProperties(applicationModel, pushDataPipeline);
pushDataPipeline.setPipelineClass(applicationModel.getEquCategory());
pushDataPipeline.setSuperviseOrgName(this.getSuperviseNameByCode(applicationModel.getApplicationUnitCode()));
this.setProjectContraptionInfo(applicationModel.getProjectContraptionId(), pushDataPipeline);
pushDataPipeline.setInspectionEquips(this.getPipelines(applicationModel));
pushDataPipeline.setTotalLength(calTotalLength(pushDataPipeline.getInspectionEquips()));
pushDataPipeline.setTraceId(traceId + "");
jsonStr = JSONObject.toJSONString(pushDataPipeline);
} else {
InspectionApplicationPushData pushData = new InspectionApplicationPushData();
BeanUtil.copyProperties(applicationModel, pushData);
// 监管机构
pushData.setSuperviseOrgName(this.getSuperviseNameByCode(applicationModel.getApplicationUnitCode()));
// 报检的设备信息
pushData.setInspectionEquips(this.buildInspectionEquipInfo(applicationModel));
pushData.setTraceId(traceId + "");
jsonStr = JSONObject.toJSONString(pushData);
}
return jsonStr;
}
private List<PipelineResultItemDto> getPipelines(JyjcInspectionApplicationModel applicationModel) {
List<Map<String, Object>> pipelines = inspectionApplicationService.getPipelines(applicationModel);
return pipelines.stream().map(p -> {
PipelineResultItemDto resultItemDto = new PipelineResultItemDto();
BeanUtil.copyProperties(p, resultItemDto);
resultItemDto.setEquipId(p.get("record").toString());
return resultItemDto;
}).collect(Collectors.toList());
}
private void setProjectContraptionInfo(String projectContraptionId, InspectionApplicationPushDataPipeline pushDataPipeline) {
IdxBizJgProjectContraption idxBizJgProjectContraption = projectContraptionMapper.selectById(projectContraptionId);
if (idxBizJgProjectContraption != null) {
pushDataPipeline.setDeviceName(idxBizJgProjectContraption.getProjectContraption());
pushDataPipeline.setAddress(getDetailAddress(idxBizJgProjectContraption));
pushDataPipeline.setUseRegistrationCode(idxBizJgProjectContraption.getUseRegistrationCode());
}
}
private String getDetailAddress(IdxBizJgProjectContraption projectContraption) {
return trimIfNull(projectContraption.getProvinceName()) + trimIfNull(projectContraption.getCityName()) + trimIfNull(projectContraption.getCountyName()) + trimIfNull(projectContraption.getStreetName() + trimIfNull(projectContraption.getAddress()));
}
private String trimIfNull(String str) {
if (StringUtils.isBlank(str)) {
return "";
}
return str.trim();
}
private List<InspectionEquipData> buildInspectionEquipInfo(JyjcInspectionApplicationModel applicationModel) {
......@@ -413,7 +490,7 @@ public class InspectionApplicationPushEventListener implements ApplicationListen
private String getSuperviseNameByCode(String applicationUnitCode) {
//查询监管单位名称
TzBaseEnterpriseInfo tzBaseEnterpriseInfo = baseEnterpriseInfoMapper.selectOne(new LambdaQueryWrapper<TzBaseEnterpriseInfo>().eq(TzBaseEnterpriseInfo::getUseCode, applicationUnitCode));
return tzBaseEnterpriseInfo.getSuperviseOrgName();
return Optional.ofNullable(tzBaseEnterpriseInfo).map(TzBaseEnterpriseInfo::getSuperviseOrgName).orElse(null);
}
......
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionDetectionSaveToDbEvent;
import com.yeejoin.amos.boot.module.jyjc.biz.event.listener.service.InspectionDetectionInfoUpdateService;
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.BizEmqPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.InspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.InspectionDetectionInfoMapper;
import lombok.RequiredArgsConstructor;
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 org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.List;
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
......@@ -41,7 +29,7 @@ public class InspectionDetectionSaveToDbEventListener implements ApplicationList
private final BlockingQueue<JyjcInspectionResult> blockingQueue = new LinkedBlockingQueue<>();
private final InspectionDetectionInfoUpdateService updateService;
private final InspectionDetectionInfoUpdateService updateService;
@Override
......@@ -68,9 +56,4 @@ public class InspectionDetectionSaveToDbEventListener implements ApplicationList
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
import com.yeejoin.amos.boot.module.jyjc.biz.event.UseInfoSaveToDbEvent;
import com.yeejoin.amos.boot.module.ymt.api.mapper.UseInfoMapper;
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.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
/**
* @author Administrator
*/
@Component
@Slf4j
public class UseInfoSaveToDbEventListener implements ApplicationListener<UseInfoSaveToDbEvent> {
@Value("${user.info.save.thread.number:3}")
private int threadNumber;
@Autowired
UseInfoMapper useInfoMapper;
private BlockingQueue<JyjcInspectionResult> blockingQueue = new LinkedBlockingQueue<>();
@Override
public void onApplicationEvent(UseInfoSaveToDbEvent event) {
log.info("收到更新使用信息的检验检测字段消息:{}", JSONObject.toJSONString(event.getJyjcInspectionResultList()));
blockingQueue.addAll(event.getJyjcInspectionResultList());
}
@PostConstruct
public void init() {
ExecutorService executorService = Executors.newFixedThreadPool(threadNumber);
for (int i = 0; i < threadNumber; i++) {
executorService.execute(() -> {
while (true) {
try {
JyjcInspectionResult jyjcInspectionResult = blockingQueue.take();
//更新使用信息表
useInfoMapper.updateByRecord(jyjcInspectionResult.getEquipUnicode(), jyjcInspectionResult.getNextInspectionDate(), jyjcInspectionResult.getInspectionType(), jyjcInspectionResult.getApplicationNo());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
});
}
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener.result;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Sets;
import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil;
import com.yeejoin.amos.boot.module.common.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResultAttachment;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResultParam;
import com.yeejoin.amos.boot.module.jyjc.api.service.IJyjcInspectionResultParamService;
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.BizEmqPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionResultServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgTechParamsPipeline;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgInspectionDetectionInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgTechParamsPipelineMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.UseInfoMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.util.*;
@Component
@RequiredArgsConstructor
public class BatchEquipResultDataProcessor implements SupportableResultDataProcessor {
private final IJyjcInspectionResultParamService iJyjcInspectionResultParamService;
private final ObjectMapper objectMapper;
private final IdxBizJgTechParamsPipelineMapper techParamPipelineMapper;
private final IdxBizJgInspectionDetectionInfoMapper inspectionDetectionInfoMapper;
private final BizEmqPublisher bizEmqPublisher;
private final CommonServiceImpl commonService;
private final SnowflakeIdUtil sequence;
private final UseInfoMapper useInfoMapper;
private final JyjcInspectionResultServiceImpl inspectionResultService;
private static final Set<String> SUPPORTED_TYPES = Sets.newHashSet(EquipmentClassifityEnum.YLGD.getCode());
@Override
public boolean support(String equList) {
return SUPPORTED_TYPES.contains(equList);
}
@Override
public void process(JyjcInspectionResult jyjcInspectionResult) {
Set<String> records = new HashSet<>();
JyjcInspectionResultParam param = iJyjcInspectionResultParamService.getOneParamByResultSeq(jyjcInspectionResult.getSequenceNbr());
if (!ObjectUtils.isEmpty(param.getParamJson())) {
JSONObject paramObj = JSON.parseObject(param.getParamJson());
try {
List<Map<String, Object>> equips = objectMapper.readValue(
objectMapper.writeValueAsString(paramObj.get("equip")),
new TypeReference<ArrayList<Map<String, Object>>>() {
}
);
equips.forEach(e -> {
String record = String.valueOf(e.get("equipId"));
records.add(record);
// 1.更新管道的技术参数
updateTechParams(e, record);
// 2.检验信息更新或者插入
IdxBizJgInspectionDetectionInfo info = new IdxBizJgInspectionDetectionInfo();
LambdaQueryWrapper<IdxBizJgInspectionDetectionInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IdxBizJgInspectionDetectionInfo::getResultSeq, jyjcInspectionResult.getSequenceNbr());
wrapper.eq(IdxBizJgInspectionDetectionInfo::getRecord, record);
List<IdxBizJgInspectionDetectionInfo> list = inspectionDetectionInfoMapper.selectList(wrapper);
JyjcInspectionResultAttachment jybgFile = inspectionResultService.getReportAttachment(jyjcInspectionResult.getSequenceNbr());
if (CollectionUtils.isEmpty(list)) {
// 无则插入
commonService.buildInspectInfo(jyjcInspectionResult, info, jybgFile, record);
info.setSequenceNbr(sequence.nextId() + "");
inspectionDetectionInfoMapper.insert(info);
// 对方不查询库 所以无事务操作
bizEmqPublisher.sendInspectionMsgAfterSave(info, "insert");
} else {
// 已经维护过则更新
info = list.get(0);
commonService.buildInspectInfo(jyjcInspectionResult, info, jybgFile, record);
inspectionDetectionInfoMapper.updateById(info);
// 对方不查询库 所以无事务操作
bizEmqPublisher.sendInspectionMsgAfterSave(info, "update");
}
// 3.更新使用信息表,最新检验信息
useInfoMapper.updateByRecord(record, jyjcInspectionResult.getNextInspectionDate(), jyjcInspectionResult.getInspectionType(), jyjcInspectionResult.getApplicationNo());
// 4.更新es下次检验日期
commonService.updateEquipNextInspectDate(jyjcInspectionResult, record);
});
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
// 5.更新单据信息的json(公共)
inspectionResultService.updateHisDataAfterResultUpdate(jyjcInspectionResult.getApplicationNo());
// 6.发送数据刷新消息
inspectionResultService.sendDataRefreshMsg(records);
}
}
private void updateTechParams(Map<String, Object> e, String record) {
JyjcInspectionResultServiceImpl.doUpdatePipelineTechParams(e, record, techParamPipelineMapper);
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener.result;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
public interface ResultDataProcessor {
void process(JyjcInspectionResult jyjcInspectionResult);
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener.result;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
public class ResultDataProcessorWrapper implements ResultDataProcessor {
private final SupportableResultDataProcessor delegate;
public ResultDataProcessorWrapper(SupportableResultDataProcessor delegate) {
this.delegate = delegate;
}
@Override
public void process(JyjcInspectionResult jyjcInspectionResult) {
delegate.process(jyjcInspectionResult);
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener.result;
import com.yeejoin.amos.component.robot.BadRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Component
@RequiredArgsConstructor
public class ResultProcessorFactory {
private final Map<String, ResultDataProcessor> processorMap = new ConcurrentHashMap<>();
private final List<SupportableResultDataProcessor> processors;
public ResultDataProcessor getProcessor(String equList) {
return processorMap.computeIfAbsent(equList, k ->
new ResultDataProcessorWrapper(
processors.stream()
.filter(p -> p.support(equList))
.findFirst()
.orElseThrow(() -> new BadRequest("No processor found for: " + equList))
)
);
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener.result;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Sets;
import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil;
import com.yeejoin.amos.boot.module.common.api.constant.TZSCommonConstant;
import com.yeejoin.amos.boot.module.common.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.boot.module.common.biz.refresh.DataRefreshEvent;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.BizEmqPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionResultServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgInspectionDetectionInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.UseInfoMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Component
@RequiredArgsConstructor
@Slf4j
public class SingleEquipResultDataProcessor implements SupportableResultDataProcessor {
private final CommonServiceImpl commonService;
private final SnowflakeIdUtil sequence;
private final IdxBizJgInspectionDetectionInfoMapper inspectionDetectionInfoMapper;
private final BizEmqPublisher bizEmqPublisher;
private final UseInfoMapper useInfoMapper;
private final JyjcInspectionResultServiceImpl inspectionResultService;
private static final Set<String> SUPPORTED_TYPES = Sets.newHashSet(
EquipmentClassifityEnum.GL.getCode(),
EquipmentClassifityEnum.YLRQ.getCode(),
EquipmentClassifityEnum.DT.getCode(),
EquipmentClassifityEnum.QZJX.getCode(),
EquipmentClassifityEnum.CC.getCode(),
EquipmentClassifityEnum.YLSS.getCode(),
EquipmentClassifityEnum.KYSD.getCode()
);
@Override
public boolean support(String equList) {
return SUPPORTED_TYPES.contains(equList);
}
@Override
public void process(JyjcInspectionResult jyjcInspectionResult) {
IdxBizJgInspectionDetectionInfo info = new IdxBizJgInspectionDetectionInfo();
QueryWrapper<IdxBizJgInspectionDetectionInfo> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(IdxBizJgInspectionDetectionInfo::getInspectReportNo, jyjcInspectionResult.getSequenceNbr());
List<IdxBizJgInspectionDetectionInfo> list = inspectionDetectionInfoMapper.selectList(wrapper);
String record;
if (CollectionUtils.isEmpty(list)) {
fillInspectionFields(jyjcInspectionResult, info);
info.setSequenceNbr(sequence.nextId() + "");
inspectionDetectionInfoMapper.insert(info);
record = info.getRecord();
bizEmqPublisher.sendInspectionMsgAfterSave(info, "insert");
} else {
info = list.get(0);
fillInspectionFields(jyjcInspectionResult, info);
inspectionDetectionInfoMapper.updateById(info);
record = info.getRecord();
bizEmqPublisher.sendInspectionMsgAfterSave(info, "update");
}
try {
bizEmqPublisher.getEmqKeeper().getMqttClient().publish(String.format(TZSCommonConstant.DATA_REFRESH_TOPIC, DataRefreshEvent.DataType.equipment.name(), DataRefreshEvent.Operation.UPDATE), JSONObject.toJSONString(Collections.singletonList(record)).getBytes(StandardCharsets.UTF_8), 2, false);
} catch (MqttException e) {
log.error("发送数据变更emq消息失败:{}", e.getMessage(), e);
}
// 3.更新使用信息表最新的检验信息
useInfoMapper.updateByRecord(jyjcInspectionResult.getEquipUnicode(), jyjcInspectionResult.getNextInspectionDate(), jyjcInspectionResult.getInspectionType(), jyjcInspectionResult.getApplicationNo());
// 4.es更新下次检验日期
commonService.updateEquipNextInspectDate(jyjcInspectionResult, jyjcInspectionResult.getEquipUnicode());
// 更新单据信息的json(公共)
inspectionResultService.updateHisDataAfterResultUpdate(jyjcInspectionResult.getApplicationNo());
// 发送数据刷新消息
inspectionResultService.sendDataRefreshMsg(Collections.singleton(record));
}
private void fillInspectionFields(JyjcInspectionResult jyjcInspectionResult, IdxBizJgInspectionDetectionInfo info) {
info.setInspectOrgName(jyjcInspectionResult.getInspectionTypeName());
info.setInspectType(jyjcInspectionResult.getInspectionType());
info.setRecord(jyjcInspectionResult.getEquipUnicode());
info.setInspectDate(jyjcInspectionResult.getInspectionDate());
info.setInspectStaff(getInspectUserName(jyjcInspectionResult));
info.setInspectStaffCode(jyjcInspectionResult.getInspector());
info.setInspectConclusion(jyjcInspectionResult.getInspectionConclusion());
info.setProblemRemark(jyjcInspectionResult.getNonConformance());
info.setNextInspectDate(jyjcInspectionResult.getNextInspectionDate());
info.setSequenceCode(jyjcInspectionResult.getEquipUnicode());
info.setInspectOrgCode(jyjcInspectionResult.getInspectionUnitCode());
info.setInspectReportNo(jyjcInspectionResult.getResultNo());
info.setRecDate(new Date());
}
private String getInspectUserName(JyjcInspectionResult model) {
List<TzsUserInfo> userInfos = commonService.getUserInfosByUnitCode(model.getInspectionUnitCode());
return userInfos.stream().filter(u -> model.getInspector().contains(u.getSequenceNbr() + "")).map(TzsUserInfo::getName).collect(Collectors.joining(","));
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener.result;
public interface SupportableResultDataProcessor extends ResultDataProcessor{
boolean support(String equList);
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.listener.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil;
import com.yeejoin.amos.boot.module.common.api.constant.TZSCommonConstant;
import com.yeejoin.amos.boot.module.common.biz.refresh.DataRefreshEvent;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.BizEmqPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.InspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.InspectionDetectionInfoMapper;
import com.yeejoin.amos.boot.module.jyjc.biz.event.listener.result.ResultProcessorFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.typroject.tyboot.component.emq.EmqKeeper;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Component
@Slf4j
@RequiredArgsConstructor
public class InspectionDetectionInfoUpdateService {
@Autowired
CommonServiceImpl commonService;
@Autowired
private SnowflakeIdUtil sequence;
@Autowired
InspectionDetectionInfoMapper inspectionDetectionInfoMapper;
@Autowired
BizEmqPublisher bizEmqPublisher;
@Autowired
private EmqKeeper emqKeeper;
private final ResultProcessorFactory resultProcessorFactory;
@Transactional(rollbackFor = Exception.class)
public void update(JyjcInspectionResult jyjcInspectionResult) {
InspectionDetectionInfo info = new InspectionDetectionInfo();
QueryWrapper<InspectionDetectionInfo> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(InspectionDetectionInfo::getInspectReportNo, jyjcInspectionResult.getResultNo());
List<InspectionDetectionInfo> list = inspectionDetectionInfoMapper.selectList(wrapper);
String record;
if (CollectionUtils.isEmpty(list)) {
fillInspectionFields(jyjcInspectionResult, info);
info.setSequenceNbr(sequence.nextId() + "");
inspectionDetectionInfoMapper.insert(info);
record = info.getRecord();
bizEmqPublisher.sendInspectionMsgAfterSave(info, "insert");
} else {
info = list.get(0);
fillInspectionFields(jyjcInspectionResult, info);
inspectionDetectionInfoMapper.updateById(info);
record = info.getRecord();
bizEmqPublisher.sendInspectionMsgAfterSave(info, "update");
}
try {
emqKeeper.getMqttClient().publish(String.format(TZSCommonConstant.DATA_REFRESH_TOPIC, DataRefreshEvent.DataType.equipment.name(), DataRefreshEvent.Operation.UPDATE), JSONObject.toJSONString(Collections.singletonList(record)).getBytes(StandardCharsets.UTF_8), 2, false);
} catch (MqttException e) {
log.error("发送数据变更emq消息失败:{}", e.getMessage(), e);
}
}
private void fillInspectionFields(JyjcInspectionResult jyjcInspectionResult, InspectionDetectionInfo info) {
info.setInspectOrgName(jyjcInspectionResult.getInspectionTypeName());
info.setInspectType(jyjcInspectionResult.getInspectionType());
info.setRecord(jyjcInspectionResult.getEquipUnicode());
info.setInspectDate(jyjcInspectionResult.getInspectionDate());
info.setInspectStaff(getInspectUserName(jyjcInspectionResult));
info.setInspectStaffCode(jyjcInspectionResult.getInspector());
info.setInspectConclusion(jyjcInspectionResult.getInspectionConclusion());
info.setProblemRemark(jyjcInspectionResult.getNonConformance());
info.setNextInspectDate(jyjcInspectionResult.getNextInspectionDate());
info.setSequenceCode(jyjcInspectionResult.getEquipUnicode());
info.setInspectOrgCode(jyjcInspectionResult.getInspectionUnitCode());
info.setInspectReportNo(jyjcInspectionResult.getResultNo());
info.setRecDate(new Date());
resultProcessorFactory.getProcessor(jyjcInspectionResult.getEquList()).process(jyjcInspectionResult);
}
private String getInspectUserName(JyjcInspectionResult model) {
List<TzsUserInfo> userInfos = commonService.getUserInfosByUnitCode(model.getInspectionUnitCode());
return userInfos.stream().filter(u -> model.getInspector().contains(u.getSequenceNbr() + "")).map(TzsUserInfo::getName).collect(Collectors.joining(","));
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.event.publisher;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.boot.module.ymt.api.entity.InspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.stereotype.Component;
......@@ -15,6 +16,7 @@ import java.util.List;
*/
@Component
@Slf4j
@Getter
public class BizEmqPublisher {
private final EmqKeeper emqKeeper;
......@@ -29,14 +31,14 @@ public class BizEmqPublisher {
private static final String INSPECTION_DETECTION_SAVE_TO_DB_TOPIC_PREFIX = "safetyProblemTracing/jy/bj";
private static final String INSPECTION_DETECTION_SAVE_TO_DB_TOPIC_TYPE_UPDATE = "update";
public void sendInspectionMsgAfterSave(InspectionDetectionInfo info, String type) {
public void sendInspectionMsgAfterSave(IdxBizJgInspectionDetectionInfo info, String type) {
try {
if (emqKeeper.getMqttClient() == null) {
return;
}
// 安全追溯目前只需要type=update的信息
if (INSPECTION_DETECTION_SAVE_TO_DB_TOPIC_TYPE_UPDATE.equals(type)) {
List<InspectionDetectionInfo> list = new ArrayList<>();
List<IdxBizJgInspectionDetectionInfo> list = new ArrayList<>();
list.add(info);
emqKeeper.getMqttClient().publish(this.buildSave2DbEmqTopic(type), JSON.toJSONBytes(list), 2, false);
}
......
......@@ -10,13 +10,12 @@ import org.springframework.stereotype.Component;
*/
@Component
public class EventPublisher {
private ApplicationEventPublisher publisher;
private final ApplicationEventPublisher publisher;
public EventPublisher(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
@Async
public void publish(ApplicationEvent event) {
publisher.publishEvent(event);
}
......
package com.yeejoin.amos.boot.module.jyjc.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
......@@ -14,14 +14,22 @@ import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.common.api.constant.TZSCommonConstant;
import com.yeejoin.amos.boot.module.jg.api.entity.JgRegistrationHistory;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.common.biz.refresh.DataRefreshEvent;
import com.yeejoin.amos.boot.module.jg.api.vo.SortVo;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplication;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionHistory;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResultAttachment;
import com.yeejoin.amos.boot.module.jyjc.api.enums.OpenBizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.enums.PersonTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.InstanceRuntimeData;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionApplicationModel;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionResultModel;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper;
......@@ -30,8 +38,9 @@ import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -41,14 +50,17 @@ import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author Administrator
*/
@Service
@Slf4j
public class CommonServiceImpl {
@Value("${jyjc.user-post:6615}")
......@@ -88,8 +100,18 @@ public class CommonServiceImpl {
@Resource
private JyjcInspectionHistoryServiceImpl inspectionHistoryService;
@Resource
private ESEquipmentCategory esEquipmentCategory;
private static Map<Integer, RegionModel> regionCodeRegionMap = new ConcurrentHashMap<>();
/**
* 可发起单位的单位类型(角色与单位类型已绑定,在业务系统增加的账号不会出现角色与的单位类型不匹配场景)
*/
private final static String[] applyIdentityDefine = {"使用单位", "安装改造维修单位"};
/**
* 可进行检验检测申请接收的单位类型,在业务系统增加的账号不会出现角色与的单位类型不匹配场景
*/
private final static String[] receiveIdentityDefine = {"检验机构", "检测机构"};
/**
......@@ -121,7 +143,7 @@ public class CommonServiceImpl {
public void castPersonType2Post(LambdaQueryWrapper<TzsUserInfo> userInfoQueryWrapper, String personType) {
if (personType.contains(PersonTypeEnum.jc.name()) && personType.contains(PersonTypeEnum.jy.name()) && personType.contains(PersonTypeEnum.charge.name())) {
userInfoQueryWrapper.and(w-> w.like(TzsUserInfo::getPost, jyUserPost).or().like(TzsUserInfo::getPost, jcUserPost).or().like(TzsUserInfo::getPost, chargeUserPost));
userInfoQueryWrapper.and(w -> w.like(TzsUserInfo::getPost, jyUserPost).or().like(TzsUserInfo::getPost, jcUserPost).or().like(TzsUserInfo::getPost, chargeUserPost));
return;
}
if (personType.equals(OpenBizTypeEnum.JY.getCode())) {
......@@ -240,9 +262,6 @@ public class CommonServiceImpl {
}
/**
* 撤回时校验流程是否已经执行
*
......@@ -350,12 +369,96 @@ public class CommonServiceImpl {
}
public String getDictName(List<String> dictTypes, String dictKey) {
if(StringUtils.isEmpty(dictKey)){
if (StringUtils.isEmpty(dictKey)) {
return "";
}
List<DataDictionary> dataDictionaries = dictionaryService.list(new LambdaQueryWrapper<DataDictionary>().in(DataDictionary::getType, dictTypes).select(BaseEntity::getSequenceNbr, DataDictionary::getName, DataDictionary::getCode));
return dataDictionaries.stream().filter(d->d.getCode().equals(dictKey)).findFirst().map(DataDictionary::getName).orElse("");
return dataDictionaries.stream().filter(d -> d.getCode().equals(dictKey)).findFirst().map(DataDictionary::getName).orElse("");
}
public static String getCompanyIdentityByType(String companyType) {
boolean isApplyIdentityMatch = false;
boolean isReceiveIdentityMatch = false;
if (Arrays.stream(applyIdentityDefine).anyMatch(companyType::contains)) {
isApplyIdentityMatch = true;
}
if (Arrays.stream(receiveIdentityDefine).anyMatch(companyType::contains)) {
isReceiveIdentityMatch = true;
}
if (isApplyIdentityMatch && !isReceiveIdentityMatch) {
return "apply";
}
if (!isApplyIdentityMatch && isReceiveIdentityMatch) {
return "receive";
}
if (isApplyIdentityMatch) {
return "all";
}
return "no";
}
public void updateEquipNextInspectDate(JyjcInspectionResultModel model, String record) {
updateEsInspectDate(record, model.getNextInspectionDate());
}
public void updateEquipNextInspectDate(JyjcInspectionResult model, String record) {
updateEsInspectDate(record, model.getNextInspectionDate());
}
private void updateEsInspectDate(String record, Date nextInspectionDate) {
if (nextInspectionDate != null) {
Optional<ESEquipmentCategoryDto> optional = esEquipmentCategory.findById(record);
if (optional.isPresent()) {
ESEquipmentCategoryDto esEquipmentCategoryDto = optional.get();
esEquipmentCategoryDto.setNEXT_INSPECT_DATE(nextInspectionDate.getTime());
esEquipmentCategory.save(esEquipmentCategoryDto);
}
}
}
public void buildInspectInfo(JyjcInspectionResultModel model, IdxBizJgInspectionDetectionInfo info, JyjcInspectionResultAttachment jybgFile, String record) {
info.setInspectOrgName(model.getInspectionUnitName());
info.setInspectType(model.getInspectionType());
info.setRecord(record);
info.setInspectDate(model.getInspectionDate());
info.setInspectStaff(getInspectUserName(model));
info.setInspectStaffCode(model.getInspector());
info.setInspectReport(jybgFile.getAttachmentUrl());
info.setInspectConclusion(model.getInspectionConclusion());
// json字段暂时注释
// info.setProblemRemark(model.getNonConformance());
info.setNextInspectDate(model.getNextInspectionDate());
info.setSequenceCode(record);
info.setInspectOrgCode(model.getInspectionUnitCode());
info.setInspectReportNo(model.getResultNo());
info.setRecDate(new Date());
}
public void buildInspectInfo(JyjcInspectionResult model, IdxBizJgInspectionDetectionInfo info, JyjcInspectionResultAttachment jybgFile, String record) {
info.setInspectOrgName(model.getInspectionUnitName());
info.setInspectType(model.getInspectionType());
info.setRecord(record);
info.setInspectDate(model.getInspectionDate());
info.setInspectStaff(getInspectUserName(model));
info.setInspectStaffCode(model.getInspector());
info.setInspectReport(jybgFile.getAttachmentUrl());
info.setInspectConclusion(model.getInspectionConclusion());
// json字段暂时注释
// info.setProblemRemark(model.getNonConformance());
info.setNextInspectDate(model.getNextInspectionDate());
info.setSequenceCode(record);
info.setInspectOrgCode(model.getInspectionUnitCode());
info.setInspectReportNo(model.getResultNo());
info.setRecDate(new Date());
}
private String getInspectUserName(JyjcInspectionResult model) {
List<TzsUserInfo> userInfos = this.getUserInfosByUnitCode(model.getInspectionUnitCode());
return userInfos.stream().filter(u -> model.getInspector().contains(u.getSequenceNbr() + "")).map(TzsUserInfo::getName).collect(Collectors.joining(","));
}
private String getInspectUserName(JyjcInspectionResultModel model) {
List<TzsUserInfo> userInfos = this.getUserInfosByUnitCode(model.getInspectionUnitCode());
return userInfos.stream().filter(u -> model.getInspector().contains(u.getSequenceNbr() + "")).map(TzsUserInfo::getName).collect(Collectors.joining(","));
}
}
......@@ -36,25 +36,4 @@ public class JyjcInspectionApplicationPushLogServiceImpl extends BaseService<Jyj
return this.queryForList("" , false);
}
/**
* 记录日志
*
*
* @param params params
* @return {@link boolean}
* @author yangyang
* @throws
* @date 2023/12/15 15:53
*/
public boolean saveInspectionApplicationPushLog(Map<String, Object> params) {
JyjcInspectionApplicationModel inspectionApplicationModel = (JyjcInspectionApplicationModel) params.get("inspectionApplication");
List<JyjcInspectionApplicationEquipModel> applicationEquipModels = (List<JyjcInspectionApplicationEquipModel>) params.get("applicationEquips");
JyjcInspectionApplicationPushLog logEntity = new JyjcInspectionApplicationPushLog();
logEntity.setApplicationSeq(inspectionApplicationModel.getSequenceNbr());
logEntity.setInspectionUnitCode(inspectionApplicationModel.getInspectionUnitCode());
logEntity.setPushData(JSON.toJSONString(applicationEquipModels));
logEntity.setPushStatus("0");
return this.save(logEntity);
}
}
\ No newline at end of file
......@@ -9,7 +9,6 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
......@@ -24,6 +23,7 @@ import com.yeejoin.amos.boot.module.common.api.dto.AttachmentDto;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.common.api.enums.JYJCBusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.vo.SortVo;
import com.yeejoin.amos.boot.module.common.api.dto.ContraptionQueryParams;
import com.yeejoin.amos.boot.module.jyjc.api.entity.*;
import com.yeejoin.amos.boot.module.jyjc.api.enums.*;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
......@@ -37,6 +37,8 @@ import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.feign.JgFeignClient;
import com.yeejoin.amos.boot.module.jyjc.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.typeHandler.EquipCategoryTypeHandler;
import com.yeejoin.amos.boot.module.jyjc.biz.util.CompareUtils;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgProjectConstruction;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgProjectContraption;
......@@ -44,7 +46,6 @@ import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgProjectConstructionMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgProjectContraptionMapper;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
......@@ -167,6 +168,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Resource
private JyjcInspectionHistoryServiceImpl inspectionHistoryService;
@Resource
private EquipCategoryTypeHandler typeHandler;
@NotNull
public static List<DictionarieModel> getDictionarieModels(String bizType) {
......@@ -402,7 +406,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
}
private String getAllSupervisoryCode(List<JyjcInspectionApplicationEquip> equipInfos) {
return equipInfos.stream().map(JyjcInspectionApplicationEquip::getSupervisoryCode).collect(Collectors.joining(","));
return equipInfos.stream().map(JyjcInspectionApplicationEquip::getSupervisoryCode).filter(supervisoryCode -> !CompareUtils.isNullOrEmpty(supervisoryCode)).collect(Collectors.joining(","));
}
private void setEquipCategoryIfPieLine(JyjcInspectionApplicationModel model, JyjcInspectionApplicationEquip equipInfo, JyjcInspectionApplicationEquipDto equipDto) {
......@@ -420,14 +424,10 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
private String buildTaskContent(JyjcInspectionApplicationModel model) {
String equListName = EquipmentClassifityEnum.getNameByCode(model.getEquipClassify());
return String.format("来自%s%s的业务办理,【申请单号:%s】", equListName, StringUtils.isNotBlank(model.getSupervisoryCode()) ? "【" + model.getSupervisoryCode() + "】" : "", model.getApplicationNo());
return String.format("来自%s%s的业务办理,【申请单号:%s】", equListName, !CompareUtils.isNullOrEmpty(model.getSupervisoryCode()) ? "【" + model.getSupervisoryCode() + "】" : "", model.getApplicationNo());
}
private String null2String(Object obj) {
return obj == null ? "" : obj.toString();
}
private void setNameAndIsMustAccept(JyjcInspectionApplicationModel model) {
if (model.getInspectionUnitCode() != null) {
String[] inspectionUnit = model.getInspectionUnitCode().split("_");
......@@ -470,6 +470,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
if (StringUtils.isNotEmpty(model.getInspectionType())) {
model.setInspectionTypeName(getInspectionTypeName(model.getInspectionType()));
}
model.setEquListName(typeHandler.handle(model.getEquList()));
return model;
}
......@@ -506,7 +507,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
return new Page<>(0, 10, 0);
}
// 判断当前登录人身份(报检机构、接收机构、即时报检又是接收机构、都不是(不存在此情况))
String identity = this.getCompanyIdentityByType(reginParams.getCompany().getCompanyType());
String identity = CommonServiceImpl.getCompanyIdentityByType(reginParams.getCompany().getCompanyType());
if (ValidationUtil.equals("apply", identity)) {
currentApplicationUnitCode = companyCode;
}
......@@ -543,30 +544,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
ExcelUtil.createTemplate(response, typeName + "数据", typeName, exportData, JyjcInspectionApplicationVo.class, null, false);
}
private String getCompanyIdentityByType(String companyType) {
// 可发起单位的单位类型(角色与单位类型已绑定,在业务系统增加的账号不会出现角色与的单位类型不匹配场景)
String[] applyIdentityDefine = {"使用单位", "安装改造维修单位"};
// 可进行检验检测申请接收的单位类型,在业务系统增加的账号不会出现角色与的单位类型不匹配场景
String[] receiveIdentityDefine = {"检验检测机构"};
boolean isApplyIdentityMatch = false;
boolean isReceiveIdentityMatch = false;
if (Arrays.stream(applyIdentityDefine).anyMatch(companyType::contains)) {
isApplyIdentityMatch = true;
}
if (Arrays.stream(receiveIdentityDefine).anyMatch(companyType::contains)) {
isReceiveIdentityMatch = true;
}
if (isApplyIdentityMatch && !isReceiveIdentityMatch) {
return "apply";
}
if (!isApplyIdentityMatch && isReceiveIdentityMatch) {
return "receive";
}
if (isApplyIdentityMatch) {
return "all";
}
return "no";
}
/**
* 列表查询 示例
......@@ -848,9 +825,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
}
}
private void pushInspectionApplication(JyjcInspectionApplicationModel inspectionApplicationModel) {
public void pushInspectionApplication(JyjcInspectionApplicationModel inspectionApplicationModel) {
// 将检验检测申请信息推送至对应的检验机构
if (inspectionApplicationModel.getResultType().equals(ResultTypeEnum.INTEGRATED.getCode())) {
if (ResultTypeEnum.INTEGRATED.getCode().equals(inspectionApplicationModel.getResultType())) {
InspectionApplicationPushEvent event = new InspectionApplicationPushEvent(this, inspectionApplicationModel);
eventPublisher.publish(event);
}
......@@ -1533,13 +1510,13 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
return getDictionarieModels(bizType);
}
public IPage<IdxBizJgProjectContraption> getJgProjectContraptionPage(String inspectionType, Page<IdxBizJgProjectContraption> page, String companyCode, String equCategory) {
public IPage<IdxBizJgProjectContraption> getJgProjectContraptionPage(ContraptionQueryParams queryParams, Page<IdxBizJgProjectContraption> page, String companyCode) {
// 兼容个人业务
if (companyCode.contains("_")) {
companyCode = companyCode.split("_")[1];
}
// 定期检验,查询当前使用单位,工业管道: 查询当前使用单位下已纳管且有使用登记证的装置,且非流程中的 ;公用管道、长输管道:已纳管且做过检验的,且非流程中的
return idxBizJgProjectContraptionMapper.queryJgProjectContraptionPage(page, inspectionType, companyCode, equCategory);
return idxBizJgProjectContraptionMapper.queryJgProjectContraptionPage(page, queryParams, companyCode);
}
......@@ -1582,13 +1559,17 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
*/
public JSONObject getDeviceListByProjectContraption2(JyjcInspectionApplicationModel applicationModel) {
IdxBizJgProjectContraption projectContraption = idxBizJgProjectContraptionMapper.selectById(applicationModel.getProjectContraptionId());
List<JyjcInspectionApplicationEquipModel> applicationEquipModels = applicationEquipService.listApplicationEquipByApplicationSeq(applicationModel.getSequenceNbr());
List<String> records = applicationEquipModels.stream().map(JyjcInspectionApplicationEquipModel::getEquipUnicode).collect(Collectors.toList());
List<Map<String, Object>> equList = getPipelines(applicationModel);
JSONObject jsonObject = new JSONObject();
List<Map<String, Object>> equList = this.getBaseMapper().selectPieLineListOfInspect(records);
return setPieLineInfo(applicationModel, projectContraption, jsonObject, equList);
}
public List<Map<String, Object>> getPipelines(JyjcInspectionApplicationModel applicationModel) {
List<JyjcInspectionApplicationEquipModel> applicationEquipModels = applicationEquipService.listApplicationEquipByApplicationSeq(applicationModel.getSequenceNbr());
List<String> records = applicationEquipModels.stream().map(JyjcInspectionApplicationEquipModel::getEquipUnicode).collect(Collectors.toList());
return this.getBaseMapper().selectPieLineListOfInspect(records);
}
@NotNull
private JSONObject setPieLineInfo(JyjcInspectionApplicationModel applicationModel, IdxBizJgProjectContraption projectContraption, JSONObject jsonObject, List<Map<String, Object>> equList) {
jsonObject.put("equip", equList);
......
......@@ -39,4 +39,11 @@ public class JyjcInspectionResultAttachmentServiceImpl extends BaseService<JyjcI
wrapper.eq(JyjcInspectionResultAttachment::getResultSeq, resultSeq);
return this.baseMapper.selectList(wrapper);
}
public JyjcInspectionResultAttachment getOneByUniKey(Long resultSeq, String attachmentType) {
LambdaQueryWrapper<JyjcInspectionResultAttachment> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(JyjcInspectionResultAttachment::getResultSeq, resultSeq);
wrapper.likeLeft(JyjcInspectionResultAttachment::getAttachmentType, attachmentType);
return this.baseMapper.selectOne(wrapper);
}
}
\ No newline at end of file
......@@ -20,13 +20,12 @@ import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil;
import com.yeejoin.amos.boot.module.common.api.constant.TZSCommonConstant;
import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.common.biz.refresh.DataRefreshEvent;
import com.yeejoin.amos.boot.module.jg.api.dto.DynamicColumnDto;
import com.yeejoin.amos.boot.module.jg.api.mapper.CommonMapper;
import com.yeejoin.amos.boot.module.jg.api.vo.SortVo;
import com.yeejoin.amos.boot.module.jyjc.api.common.StringUtil;
import com.yeejoin.amos.boot.module.jyjc.api.dto.PipelineInspectionResultDto;
import com.yeejoin.amos.boot.module.jyjc.api.entity.*;
import com.yeejoin.amos.boot.module.jyjc.api.enums.*;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionResultMapper;
......@@ -38,7 +37,7 @@ import com.yeejoin.amos.boot.module.jyjc.api.service.IJyjcInspectionResultParamS
import com.yeejoin.amos.boot.module.jyjc.api.service.IJyjcInspectionResultService;
import com.yeejoin.amos.boot.module.jyjc.api.vo.JyjcInspectionResultVo;
import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionDetectionSaveToDbEvent;
import com.yeejoin.amos.boot.module.jyjc.biz.event.UseInfoSaveToDbEvent;
import com.yeejoin.amos.boot.module.jyjc.biz.event.listener.result.BatchEquipResultDataProcessor;
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.BizEmqPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.feign.TzsServiceFeignClient;
......@@ -90,7 +89,6 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
private static final String JYJC_SUBMIT_FILE_JYBG = "JYBG";
private static final String JYJC_SUBMIT_KEY = "inspectResult";
private static final String EQU_LIST = "equip";
private static final String JYJC_RESULT_STATUS = "2";
@Autowired
......@@ -115,7 +113,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
UseInfoMapper useInfoMapper;
@Autowired
InspectionDetectionInfoMapper inspectionDetectionInfoMapper;
IdxBizJgInspectionDetectionInfoMapper inspectionDetectionInfoMapper;
@Autowired
private SnowflakeIdUtil sequence;
......@@ -133,9 +131,6 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
BizEmqPublisher bizEmqPublisher;
@Autowired
private ESEquipmentCategory esEquipmentCategory;
@Autowired
@Lazy
JyjcInspectionApplicationServiceImpl inspectionApplicationService;
......@@ -146,7 +141,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
private ObjectMapper objectMapper;
@Autowired
private EquipTechParamPipelineMapper techParamPipelineMapper;
private IdxBizJgTechParamsPipelineMapper techParamPipelineMapper;
@Autowired
TzsServiceFeignClient tzsServiceFeignClient;
......@@ -163,6 +158,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
@Autowired
private EmqKeeper emqKeeper;
/**
* 检验检测单位分页查询
*/
......@@ -199,7 +195,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
model = new JyjcInspectionResultModel();
}
// 判断当前登录人身份(报检机构、接收机构、即时报检又是接收机构、都不是(不存在此情况))
String identity = this.getCompanyIdentityByType(reginParams.getCompany().getCompanyType());
String identity = CommonServiceImpl.getCompanyIdentityByType(reginParams.getCompany().getCompanyType());
model.setCompanyCode(reginParams.getCompany().getCompanyCode());
Page<JyjcInspectionResultModel> resultPage = resultMapper.selectForPage(page, model, identity, sortMap);
resultPage.getRecords().forEach(v -> {
......@@ -215,30 +211,6 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
return resultPage;
}
private String getCompanyIdentityByType(String companyType) {
// 可发起单位的单位类型(角色与单位类型已绑定,在业务系统增加的账号不会出现角色与的单位类型不匹配场景)
String[] applyIdentityDefine = {"使用单位", "安装改造维修单位"};
// 可进行检验检测申请接收的单位类型,在业务系统增加的账号不会出现角色与的单位类型不匹配场景
String[] receiveIdentityDefine = {"检验检测机构"};
boolean isApplyIdentityMatch = false;
boolean isReceiveIdentityMatch = false;
if (Arrays.stream(applyIdentityDefine).anyMatch(companyType::contains)) {
isApplyIdentityMatch = true;
}
if (Arrays.stream(receiveIdentityDefine).anyMatch(companyType::contains)) {
isReceiveIdentityMatch = true;
}
if (isApplyIdentityMatch && !isReceiveIdentityMatch) {
return "apply";
}
if (!isApplyIdentityMatch && isReceiveIdentityMatch) {
return "receive";
}
if (isApplyIdentityMatch) {
return "all";
}
return "no";
}
static String getPersonIdentityByType(String companyType) {
if ("使用单位".equals(companyType)) {
......@@ -251,6 +223,10 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
}
public JyjcInspectionResultAttachment getReportAttachment(Long resultSeq){
return Optional.ofNullable(attachmentService.getOneByUniKey(resultSeq, JYJC_SUBMIT_FILE_JYBG)).orElse(new JyjcInspectionResultAttachment());
}
@Transactional(rollbackFor = Exception.class)
public JyjcInspectionResultModel updateJyjcInspectionResult(Map<String, Map<String, Object>> tableModel) {
......@@ -325,12 +301,12 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
// 更新使用信息、检验信息、技术参数
Set<String> records = this.updateTechParamAndInspectInfo(dbResultModel, jybgFile);
// 更新单据信息的json(公共)
this.updateHisDataAfterResultUpdate(dbResultModel);
this.updateHisDataAfterResultUpdate(dbResultModel.getApplicationNo());
sendDataRefreshMsg(records);
return dbResultModel;
}
private void sendDataRefreshMsg(Set<String> records) {
public void sendDataRefreshMsg(Set<String> records) {
try {
emqKeeper.getMqttClient().publish(String.format(TZSCommonConstant.DATA_REFRESH_TOPIC, DataRefreshEvent.DataType.equipment.name(), DataRefreshEvent.Operation.UPDATE), JSONObject.toJSONString(new ArrayList<>(records)).getBytes(StandardCharsets.UTF_8), 2, false);
} catch (MqttException e) {
......@@ -339,9 +315,9 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
}
private Set<String> updateTechParamAndInspectInfo(JyjcInspectionResultModel model, JyjcInspectionResultAttachment jybgFile){
private Set<String> updateTechParamAndInspectInfo(JyjcInspectionResultModel model, JyjcInspectionResultAttachment jybgFile) {
Set<String> records = new HashSet<>();
if(model.getEquList().equals(EquipmentClassifityEnum.YLGD.getCode())){
if (model.getEquList().equals(EquipmentClassifityEnum.YLGD.getCode())) {
// 管道逻辑: 循环更新技术参数、检验信息更新或者插入、使用信息更新(数据库及es)
JyjcInspectionResultParam param = iJyjcInspectionResultParamService.getOneParamByResultSeq(model.getSequenceNbr());
if (!ObjectUtils.isEmpty(param.getParamJson())) {
......@@ -352,35 +328,21 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
new TypeReference<ArrayList<Map<String, Object>>>() {
}
);
equips.forEach(e->{
equips.forEach(e -> {
String record = String.valueOf(e.get("record"));
records.add(record);
// 1.更新管道的技术参数
EquipTechParamPipeline techParamPipeline = new EquipTechParamPipeline();
BeanUtil.copyProperties(e, techParamPipeline,true);
LambdaUpdateWrapper<EquipTechParamPipeline> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(AbstractEquipBaseEntity::getRecord, record);
updateWrapper.set(EquipTechParamPipeline::getNominalDiameter, techParamPipeline.getNominalDiameter());
updateWrapper.set(EquipTechParamPipeline::getWallThickness, techParamPipeline.getWallThickness());
updateWrapper.set(EquipTechParamPipeline::getPipeLength, techParamPipeline.getPipeLength());
updateWrapper.set(EquipTechParamPipeline::getPressure, techParamPipeline.getPressure());
updateWrapper.set(EquipTechParamPipeline::getTemperature, techParamPipeline.getTemperature());
updateWrapper.set(EquipTechParamPipeline::getMedium, techParamPipeline.getMedium());
updateWrapper.set(EquipTechParamPipeline::getWorkMedium, techParamPipeline.getWorkMedium());
updateWrapper.set(EquipTechParamPipeline::getWorkPressure, techParamPipeline.getWorkPressure());
updateWrapper.set(EquipTechParamPipeline::getWorkTemperature, techParamPipeline.getWorkTemperature());
updateWrapper.set(EquipTechParamPipeline::getRemarks, techParamPipeline.getRemarks());
techParamPipelineMapper.update(null,updateWrapper);
doUpdatePipelineTechParams(e, record, techParamPipelineMapper);
// 2.检验信息更新或者插入
InspectionDetectionInfo info = new InspectionDetectionInfo();
LambdaQueryWrapper<InspectionDetectionInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(InspectionDetectionInfo::getInspectReportNo, model.getResultNo());
wrapper.eq(InspectionDetectionInfo::getRecord, record);
wrapper.eq(InspectionDetectionInfo::getInspectOrgCode, model.getInspectionUnitCode());
List<InspectionDetectionInfo> list = inspectionDetectionInfoMapper.selectList(wrapper);
IdxBizJgInspectionDetectionInfo info = new IdxBizJgInspectionDetectionInfo();
LambdaQueryWrapper<IdxBizJgInspectionDetectionInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IdxBizJgInspectionDetectionInfo::getInspectReportNo, model.getResultNo());
wrapper.eq(IdxBizJgInspectionDetectionInfo::getRecord, record);
wrapper.eq(IdxBizJgInspectionDetectionInfo::getInspectOrgCode, model.getInspectionUnitCode());
List<IdxBizJgInspectionDetectionInfo> list = inspectionDetectionInfoMapper.selectList(wrapper);
if (CollectionUtils.isEmpty(list)) {
// 无则插入
extracted(model, info, jybgFile, record);
commonService.buildInspectInfo(model, info, jybgFile, record);
info.setSequenceNbr(sequence.nextId() + "");
inspectionDetectionInfoMapper.insert(info);
// 对方不查询库 所以无事务操作
......@@ -388,7 +350,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
} else {
// 已经维护过则更新
info = list.get(0);
extracted(model, info, jybgFile, record);
commonService.buildInspectInfo(model, info, jybgFile, record);
inspectionDetectionInfoMapper.updateById(info);
// 对方不查询库 所以无事务操作
bizEmqPublisher.sendInspectionMsgAfterSave(info, "update");
......@@ -396,7 +358,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
// 3.更新使用信息表,最新检验信息
useInfoMapper.updateByRecord(record, model.getNextInspectionDate(), model.getInspectionType(), model.getApplicationNo());
// 4.更新es下次检验日期
this.updateEquipNextInspectDate(model, record);
commonService.updateEquipNextInspectDate(model, record);
});
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
......@@ -410,30 +372,30 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
if (param != null) {
if (!ObjectUtils.isEmpty(param.getParamJson())) {
JSONObject paramObj = JSON.parseObject(param.getParamJson());
paramObj.forEach((k,v)->{
DynamicColumnDto columnDto = new DynamicColumnDto();
columnDto.setColumnName(String.format("\"%s\"", StrUtil.toUnderlineCase(k).toUpperCase()));
columnDto.setColumnValue(v == null ? null : String.valueOf(v));
columns.add(columnDto);
paramObj.forEach((k, v) -> {
DynamicColumnDto columnDto = new DynamicColumnDto();
columnDto.setColumnName(String.format("\"%s\"", StrUtil.toUnderlineCase(k).toUpperCase()));
columnDto.setColumnValue(v == null ? null : String.valueOf(v));
columns.add(columnDto);
});
String tableName = this.getTableName(param.getParamType());
String tableName = this.getTableName(param.getParamType());
jgCommonMapper.updateTechParamDynamic(tableName, model.getEquipUnicode(), columns);
}
}
// 2.检验信息更新或者插入
InspectionDetectionInfo info = new InspectionDetectionInfo();
QueryWrapper<InspectionDetectionInfo> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(InspectionDetectionInfo::getInspectReportNo, model.getResultNo());
List<InspectionDetectionInfo> list = inspectionDetectionInfoMapper.selectList(wrapper);
IdxBizJgInspectionDetectionInfo info = new IdxBizJgInspectionDetectionInfo();
QueryWrapper<IdxBizJgInspectionDetectionInfo> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(IdxBizJgInspectionDetectionInfo::getResultSeq, model.getSequenceNbr());
List<IdxBizJgInspectionDetectionInfo> list = inspectionDetectionInfoMapper.selectList(wrapper);
if (CollectionUtils.isEmpty(list)) {
extracted(model, info, jybgFile, model.getEquipUnicode());
commonService.buildInspectInfo(model, info, jybgFile, model.getEquipUnicode());
info.setSequenceNbr(sequence.nextId() + "");
inspectionDetectionInfoMapper.insert(info);
// 对方不查询库 所以无事务操作
bizEmqPublisher.sendInspectionMsgAfterSave(info, "insert");
} else {
info = list.get(0);
extracted(model, info, jybgFile, model.getEquipUnicode());
commonService.buildInspectInfo(model, info, jybgFile, model.getEquipUnicode());
inspectionDetectionInfoMapper.updateById(info);
// 对方不查询库 所以无事务操作
bizEmqPublisher.sendInspectionMsgAfterSave(info, "update");
......@@ -441,7 +403,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
// 3.更新使用信息表最新的检验信息
useInfoMapper.updateByRecord(model.getEquipUnicode(), model.getNextInspectionDate(), model.getInspectionType(), model.getApplicationNo());
// 4.es更新下次检验日期
this.updateEquipNextInspectDate(model, model.getEquipUnicode());
commonService.updateEquipNextInspectDate(model, model.getEquipUnicode());
records.add(model.getEquipUnicode());
}
return records;
......@@ -451,45 +413,11 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
return String.format("\"%s\"", StrUtil.toUnderlineCase(paramType));
}
private void updateHisDataAfterResultUpdate(JyjcInspectionResultModel model) {
JyjcInspectionApplication application = inspectionApplicationService.getOne(new LambdaQueryWrapper<JyjcInspectionApplication>().eq(JyjcInspectionApplication::getApplicationNo, model.getApplicationNo()));
public void updateHisDataAfterResultUpdate(String applicationNo) {
JyjcInspectionApplication application = inspectionApplicationService.getOne(new LambdaQueryWrapper<JyjcInspectionApplication>().eq(JyjcInspectionApplication::getApplicationNo,applicationNo));
inspectionApplicationService.createHisAfterReceive(BeanUtil.copyProperties(application, JyjcInspectionApplicationModel.class));
}
private void updateEquipNextInspectDate(JyjcInspectionResultModel model, String record) {
if (model.getNextInspectionDate() != null) {
Optional<ESEquipmentCategoryDto> optional = esEquipmentCategory.findById(record);
if (optional.isPresent()) {
ESEquipmentCategoryDto esEquipmentCategoryDto = optional.get();
esEquipmentCategoryDto.setNEXT_INSPECT_DATE(model.getNextInspectionDate().getTime());
esEquipmentCategory.save(esEquipmentCategoryDto);
}
}
}
private void extracted(JyjcInspectionResultModel model, InspectionDetectionInfo info, JyjcInspectionResultAttachment jybgFile, String record) {
info.setInspectOrgName(model.getInspectionUnitName());
info.setInspectType(model.getInspectionType());
info.setRecord(record);
info.setInspectDate(model.getInspectionDate());
info.setInspectStaff(getInspectUserName(model));
info.setInspectStaffCode(model.getInspector());
info.setInspectReport(jybgFile.getAttachmentUrl());
info.setInspectConclusion(model.getInspectionConclusion());
// json字段暂时注释
// info.setProblemRemark(model.getNonConformance());
info.setNextInspectDate(model.getNextInspectionDate());
info.setSequenceCode(record);
info.setInspectOrgCode(model.getInspectionUnitCode());
info.setInspectReportNo(model.getResultNo());
info.setRecDate(new Date());
}
private String getInspectUserName(JyjcInspectionResultModel model) {
List<TzsUserInfo> userInfos = commonService.getUserInfosByUnitCode(model.getInspectionUnitCode());
return userInfos.stream().filter(u -> model.getInspector().contains(u.getSequenceNbr() + "")).map(TzsUserInfo::getName).collect(Collectors.joining(","));
}
/**
* 列表查询 示例
*/
......@@ -571,7 +499,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
// 1.数据合法性检查
this.checkMustFieldIsValid(resultDataModels);
// 2.组织数据
List<JyjcInspectionResult> resultList = queryResultList(resultDataModels);
List<JyjcInspectionResult> resultList = queryResultList(resultDataModels.stream().map(JyjcInspectionResultDataModel::getApplicationNo).collect(Collectors.toList()));
// key为{record}, value为{JyjcInspectionResult},首次检验时,设备无监管码,用record作为设备标识,可适用与所有的检验结果的接收
Map<String, JyjcInspectionResult> recordResultMap = getRecordKeyResultMap(resultList);
// key为{supervisoryCode}, value为{JyjcInspectionResult} ,适用于非首次检验之外的检验结果接收
......@@ -580,8 +508,8 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
List<JyjcInspectionResultAttachment> resultAttachments = new ArrayList<>();
List<JyjcInspectionResultParam> resultParams = new ArrayList<>();
resultDataModels.forEach(r -> {
JyjcInspectionResult result = this.getJyjcInspectionResult(r,recordResultMap, superviseCodeKeyResultMap);
if(result != null) {
JyjcInspectionResult result = this.getJyjcInspectionResult(r, recordResultMap, superviseCodeKeyResultMap);
if (result != null) {
// 填充主表数据
this.fillResultData(r, result, updateResultList);
// 填充附件数据
......@@ -591,14 +519,12 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
}
});
// 3.数据入库
if(!updateResultList.isEmpty()){
if (!updateResultList.isEmpty()) {
// 3.1 批量保存主表数据
this.updateBatchById(updateResultList);
// 3.2 批量保存子表数据
deleteAndCreateSubTable(updateResultList, resultAttachments, resultParams);
// 3.3 异步更新最新一次检验信息
eventPublisher.publish(new UseInfoSaveToDbEvent(this, new ArrayList<>(updateResultList)));
// 4.4 异步更新设备的检验检测信息
// 3.4 异步更新设备的检验检测信息
eventPublisher.publish(new InspectionDetectionSaveToDbEvent(this, new ArrayList<>(updateResultList)));
}
return resultDataModels;
......@@ -606,28 +532,27 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
private void checkMustFieldIsValid(List<JyjcInspectionResultDataModel> resultDataModels) {
int i = 0;
for(JyjcInspectionResultDataModel resultDataModel : resultDataModels){
for (JyjcInspectionResultDataModel resultDataModel : resultDataModels) {
i++;
if(StringUtils.isEmpty(resultDataModel.getEquipId()) && StringUtils.isEmpty(resultDataModel.getSupervisoryCode())){
if (StringUtils.isEmpty(resultDataModel.getEquipId()) && StringUtils.isEmpty(resultDataModel.getSupervisoryCode())) {
throw new BadRequest("第" + i + "条数据存在问题,supervisoryCode和equipId不能同时为空!");
}
}
}
private JyjcInspectionResult getJyjcInspectionResult(JyjcInspectionResultDataModel resultDataModel,
Map<String, JyjcInspectionResult> recordResultMap ,
Map<String, JyjcInspectionResult> superviseCodeKeyResultMap){
if(StringUtils.isNotEmpty(resultDataModel.getEquipId())){
Map<String, JyjcInspectionResult> recordResultMap,
Map<String, JyjcInspectionResult> superviseCodeKeyResultMap) {
if (StringUtils.isNotEmpty(resultDataModel.getEquipId())) {
return recordResultMap.get(resultDataModel.getApplicationNo() + ":" + resultDataModel.getEquipId());
}
if(StringUtils.isNotEmpty(resultDataModel.getSupervisoryCode())){
if (StringUtils.isNotEmpty(resultDataModel.getSupervisoryCode())) {
return superviseCodeKeyResultMap.get(resultDataModel.getApplicationNo() + ":" + resultDataModel.getSupervisoryCode());
}
return null;
}
private void deleteAndCreateSubTable(List<JyjcInspectionResult> resultList, List<JyjcInspectionResultAttachment> resultAttachments, List<JyjcInspectionResultParam> resultParams) {
List<Long> resultIds = resultList.stream().map(BaseEntity::getSequenceNbr).collect(Collectors.toList());
if (!resultAttachments.isEmpty()) {
......@@ -653,6 +578,18 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
resultParams.add(resultParam);
}
private void fillResultParamData(PipelineInspectionResultDto r, JyjcInspectionResult jyjcInspectionResult, List<JyjcInspectionResultParam> resultParams) {
JyjcInspectionResultParam resultParam = new JyjcInspectionResultParam();
resultParam.setResultSeq(jyjcInspectionResult.getSequenceNbr());
resultParam.setParamJson(JSON.toJSONString(r.getInspectionEquips()));
resultParam.setRecUserId(RequestContext.getExeUserId());
resultParam.setRecDate(new Date());
resultParam.setRemark("同步数据");
// 将设备种类code换成技术参数枚举
resultParam.setParamType(this.getTypeByEquipList(jyjcInspectionResult.getEquList()));
resultParams.add(resultParam);
}
private String getTypeByEquipList(String equList) {
EquipCategoryEnum categoryEnum = EquipCategoryEnum.of(Integer.parseInt(equList));
assert categoryEnum != null;
......@@ -693,7 +630,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
private String getUserSeqByPersonCode(String innerPersonCode) {
if (StrUtil.isNotEmpty(innerPersonCode)) {
List<TzsUserInfo> tzsUserInfos = tzsUserInfoMapper.selectList(new LambdaQueryWrapper<TzsUserInfo>().in(TzsUserInfo::getInnerPersonCode, Arrays.asList(innerPersonCode.split(","))));
List<TzsUserInfo> tzsUserInfos = tzsUserInfoMapper.selectList(new LambdaQueryWrapper<TzsUserInfo>().in(TzsUserInfo::getCertificateNum, Arrays.asList(innerPersonCode.split(","))));
return tzsUserInfos.stream().map(u -> u.getSequenceNbr() + "").collect(Collectors.joining(","));
}
log.error("检验人员内部编号为空");
......@@ -701,15 +638,14 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
}
private Map<String, JyjcInspectionResult> getSuperviseCodeKeyResultMap(List<JyjcInspectionResult> resultList) {
return resultList.stream().filter(r-> StringUtils.isNotEmpty(r.getSupervisoryCode())).collect(Collectors.toMap((c) -> c.getApplicationNo() + ":" + c.getSupervisoryCode(), Function.identity()));
return resultList.stream().filter(r -> StringUtils.isNotEmpty(r.getSupervisoryCode())).collect(Collectors.toMap((c) -> c.getApplicationNo() + ":" + c.getSupervisoryCode(), Function.identity()));
}
private Map<String, JyjcInspectionResult> getRecordKeyResultMap(List<JyjcInspectionResult> resultList) {
return resultList.stream().collect(Collectors.toMap((c) -> c.getApplicationNo() + ":" + c.getEquipUnicode(), Function.identity()));
}
private List<JyjcInspectionResult> queryResultList(List<JyjcInspectionResultDataModel> resultDataModels) {
List<String> applicationNos = resultDataModels.stream().map(JyjcInspectionResultDataModel::getApplicationNo).collect(Collectors.toList());
private List<JyjcInspectionResult> queryResultList(List<String> applicationNos) {
LambdaQueryWrapper<JyjcInspectionResult> wrapper = new LambdaQueryWrapper<>();
wrapper.in(JyjcInspectionResult::getApplicationNo, applicationNos);
return this.list(wrapper);
......@@ -730,6 +666,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
/**
* 检验检测结果列表数据导出
*
* @param response
* @param ids
*/
......@@ -840,11 +777,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
throw new BadRequest("数据异常,请联系管理员!");
}
}
try {
emqKeeper.getMqttClient().publish(String.format(TZSCommonConstant.DATA_REFRESH_TOPIC, DataRefreshEvent.DataType.equipment.name(), DataRefreshEvent.Operation.UPDATE), JSONObject.toJSONString(records).getBytes(StandardCharsets.UTF_8), 2, false);
} catch (MqttException e) {
log.error("发送数据变更emq消息失败:{}", e.getMessage(), e);
}
sendDataRefreshMsg(records);
return Boolean.TRUE;
}
......@@ -1000,11 +933,65 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
// 删除检验信息表
idxBizJgInspectionDetectionInfoMapper.delete(new LambdaQueryWrapper<IdxBizJgInspectionDetectionInfo>().eq(IdxBizJgInspectionDetectionInfo::getResultSeq, resultSeq.toString()));
// 删除附件表
attachmentService.getBaseMapper().delete(new LambdaQueryWrapper<JyjcInspectionResultAttachment>().eq(JyjcInspectionResultAttachment::getResultSeq,resultSeq.toString()));
attachmentService.getBaseMapper().delete(new LambdaQueryWrapper<JyjcInspectionResultAttachment>().eq(JyjcInspectionResultAttachment::getResultSeq, resultSeq.toString()));
// 删除历史表
jyjcInspectionHistoryService.getBaseMapper().delete(new LambdaQueryWrapper<JyjcInspectionHistory>().eq(JyjcInspectionHistory::getSSeq, resultSeq));
// 发送数据变更消息
sendDataRefreshMsg(records);
return Boolean.TRUE;
}
public List<PipelineInspectionResultDto> receivePipelineResultData(List<PipelineInspectionResultDto> resultData) {
log.info("收到检验检测厂商推送的压力管道结果数据:{}", JSONArray.toJSONString(resultData));
// 1.数据合法性检查
this.checkMustFieldIsValid2(resultData);
// 2.组织数据
List<JyjcInspectionResult> resultList = queryResultList(resultData.stream().map(PipelineInspectionResultDto::getApplicationNo).collect(Collectors.toList()));
Map<String, JyjcInspectionResult> applyNoResultAppMap = resultList.stream().collect(Collectors.toMap(JyjcInspectionResult::getApplicationNo, Function.identity()));
List<JyjcInspectionResult> updateResultList = new ArrayList<>();
List<JyjcInspectionResultAttachment> resultAttachments = new ArrayList<>();
List<JyjcInspectionResultParam> resultParams = new ArrayList<>();
resultData.forEach(r -> {
JyjcInspectionResult result = applyNoResultAppMap.get(r.getApplicationNo());
if (result != null) {
// 填充主表数据
this.fillResultData(r, result, updateResultList);
// 填充附件数据
this.fillResultAttachmentData(r, result, resultAttachments);
// 填充技术参数数据
this.fillResultParamData(r, result, resultParams);
}
});
// 3.数据入库
if (!updateResultList.isEmpty()) {
// 3.1 批量保存主表数据
super.updateBatchById(updateResultList);
// 3.2 批量保存子表数据
deleteAndCreateSubTable(updateResultList, resultAttachments, resultParams);
// 3.3 异步更新设备的检验检测信息
eventPublisher.publish(new InspectionDetectionSaveToDbEvent(this, new ArrayList<>(updateResultList)));
}
return resultData;
}
private void checkMustFieldIsValid2(List<PipelineInspectionResultDto> resultData) {
}
public static void doUpdatePipelineTechParams(Map<String, Object> e, String record, IdxBizJgTechParamsPipelineMapper techParamPipelineMapper) {
IdxBizJgTechParamsPipeline techParamPipeline = new IdxBizJgTechParamsPipeline();
BeanUtil.copyProperties(e, techParamPipeline, true);
LambdaUpdateWrapper<IdxBizJgTechParamsPipeline> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(IdxBizJgTechParamsPipeline::getRecord, record);
updateWrapper.set(IdxBizJgTechParamsPipeline::getNominalDiameter, techParamPipeline.getNominalDiameter());
updateWrapper.set(IdxBizJgTechParamsPipeline::getWallThickness, techParamPipeline.getWallThickness());
updateWrapper.set(IdxBizJgTechParamsPipeline::getPipeLength, techParamPipeline.getPipeLength());
updateWrapper.set(IdxBizJgTechParamsPipeline::getPressure, techParamPipeline.getPressure());
updateWrapper.set(IdxBizJgTechParamsPipeline::getTemperature, techParamPipeline.getTemperature());
updateWrapper.set(IdxBizJgTechParamsPipeline::getMedium, techParamPipeline.getMedium());
updateWrapper.set(IdxBizJgTechParamsPipeline::getWorkMedium, techParamPipeline.getWorkMedium());
updateWrapper.set(IdxBizJgTechParamsPipeline::getWorkPressure, techParamPipeline.getWorkPressure());
updateWrapper.set(IdxBizJgTechParamsPipeline::getWorkTemperature, techParamPipeline.getWorkTemperature());
updateWrapper.set(IdxBizJgTechParamsPipeline::getRemarks, techParamPipeline.getRemarks());
techParamPipelineMapper.update(null, updateWrapper);
}
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.jyjc.biz.typeHandler;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.typeHandler.TypeHandler;
import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory;
import com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 特种设备目录处理器
*/
@Component("equipCategoryTypeHandler")
@RequiredArgsConstructor
public class EquipCategoryTypeHandler implements TypeHandler<String> {
private final Map<String, String> CODE_NAME_MAP = new ConcurrentHashMap<>();
private final EquipmentCategoryMapper equipmentCategoryMapper;
@Override
public String handle(String code) {
return code != null ? CODE_NAME_MAP.computeIfAbsent(code, (k) -> {
EquipmentCategory equipmentCategory = equipmentCategoryMapper.selectOne(new LambdaQueryWrapper<EquipmentCategory>().eq(EquipmentCategory::getCode, code).select(EquipmentCategory::getName, EquipmentCategory::getId));
return equipmentCategory == null ? "" : equipmentCategory.getName();
}) : null;
}
}
package com.yeejoin.amos.boot.module.jyjc.biz.util;
public class CompareUtils {
public static boolean isNullOrEmpty(String str) {
return str == null || str.trim().isEmpty() || "null".equals(str);
}
}
......@@ -65,13 +65,13 @@ spring.kafka.security.protocol=SASL_PLAINTEXT
spring.kafka.properties.sasl.mechanism=PLAIN
#定期检验是否启用规则:true-启用,false-不启用,默认不配置时不启动规则
inspection.rule.enabled.DQJY=true
inspection.rule.enabled.DQJY=false
#安装监督检验是否启用规则:true-启用,false-不启用
inspection.rule.enabled.AZJDJY=true
inspection.rule.enabled.AZJDJY=false
#改造监督检验是否启用规则:true-启用,false-不启用
inspection.rule.enabled.GZJDJY=true
inspection.rule.enabled.GZJDJY=false
#维修监督检验是否启用规则:true-启用,false-不启用
inspection.rule.enabled.WXJDJY=true
inspection.rule.enabled.WXJDJY=false
#电梯检测是否启用规则:true-启用,false-不启用
inspection.rule.enabled.DTJC=true
inspection.rule.enabled.WTJY=true
inspection.rule.enabled.DTJC=false
inspection.rule.enabled.WTJY=false
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.ymt.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.common.api.dto.ContraptionQueryParams;
import com.yeejoin.amos.boot.module.ymt.api.dto.ProjectWaitRefreshDataQualityScore;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgProjectContraption;
import org.apache.ibatis.annotations.Param;
......@@ -66,12 +67,11 @@ public interface IdxBizJgProjectContraptionMapper extends BaseMapper<IdxBizJgPro
* 查询检验的装置
*
* @param page 分页
* @param inspectionType 检验类型
* @param queryParams 查询参数
* @param companyCode 公司code
* @param equCategory 设备类别
* @return 分页
*/
IPage<IdxBizJgProjectContraption> queryJgProjectContraptionPage(Page<IdxBizJgProjectContraption> page, @Param("inspectionType") String inspectionType, @Param("companyCode") String companyCode, @Param("equCategory") String equCategory);
IPage<IdxBizJgProjectContraption> queryJgProjectContraptionPage(Page<IdxBizJgProjectContraption> page, @Param("params") ContraptionQueryParams queryParams, @Param("companyCode") String companyCode);
/**
* 获取管道信息分页
......
......@@ -280,15 +280,30 @@
idx_biz_jg_project_contraption pc
where
1=1
<if test="params.equList != null and params.equList != ''">
and pc.equ_list= #{params.equList}
</if>
<if test="params.equCategory != null and params.equCategory != ''">
and pc.equ_category= #{params.equCategory}
</if>
<if test="params.equDefine != null and params.equDefine != ''">
and pc.equ_define= #{params.equDefine}
</if>
<if test="params.city != null and params.city != ''">
and pc.city= #{params.city}
</if>
<if test="params.county != null and params.county != ''">
and pc.county= #{params.county}
</if>
<choose>
<when test="inspectionType == 'AZJDJY'">
<when test="params.inspectionType == 'AZJDJY'">
and pc.usc_unit_credit_code=#{companyCode}
and pc.is_into_management = true
and (pc.use_registration_code is null or pc.use_registration_code = '' )
</when>
<otherwise>
<choose>
<when test="equCategory == '8300'">
<when test="params.equCategory == '8300'">
and pc.use_unit_credit_code=#{companyCode}
and pc.is_into_management = true
and pc.use_registration_code <![CDATA[<>]]> ''
......@@ -302,10 +317,9 @@
</choose>
and not EXISTS (SELECt 1 FROM tz_jyjc_inspection_application a where a.status='6611' and a.application_unit_code=#{companyCode} and a.project_contraption_id = pc.sequence_nbr)
and (pc.project_contraption_parent_id is null or pc.project_contraption_parent_id = '')
and pc.equ_category = #{equCategory}
) s
<where>
<if test="inspectionType == 'DQJY' and equCategory != '8300'">
<if test="params.inspectionType == 'DQJY' and params.equCategory != '8300'">
s.inspectNum = s.totalNum
and s.inspectNum > 0
</if>
......
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