Commit 334cdf7a authored by suhuiguang's avatar suhuiguang

feat(综合搜索):实体类创建

1.人员、企业、设备 2.技术参数
parent 8f9aa4dc
package com.yeejoin.amos.boot.biz.common.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface TechnicalParameter {
String key();
String label();
ParamType type();
enum ParamType {
STRING, INTEGER, FLOAT, BIG_DECIMAL, BOOLEAN
}
}
......@@ -26,5 +26,11 @@
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
package com.yeejoin.amos.boot.module.common.api.dao;
import com.yeejoin.amos.boot.module.common.api.entity.EsBaseEnterpriseInfo;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EsBaseEnterpriseInfoDao extends PagingAndSortingRepository<EsBaseEnterpriseInfo, String> {
}
package com.yeejoin.amos.boot.module.common.api.dao;
import com.yeejoin.amos.boot.module.common.api.entity.ESEquipmentInfo;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EsEquipmentDao extends PagingAndSortingRepository<ESEquipmentInfo, String> {
}
package com.yeejoin.amos.boot.module.common.api.dao;
import com.yeejoin.amos.boot.module.common.api.entity.EsUserInfo;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EsUserInfoDao extends PagingAndSortingRepository<EsUserInfo, String> {
}
package com.yeejoin.amos.boot.module.common.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import com.yeejoin.amos.boot.biz.common.annotation.TechnicalParameter;
import lombok.Data;
/**
* 锅炉-技术参数定义
*
* @author system_generator
* @date 2023-08-17
*/
@Data
@Group("1000")
public class BoilerTechParamsDefine implements ITechParamDefine {
@TechnicalParameter(key = "deviceLevel", label = "设备级别", type = TechnicalParameter.ParamType.STRING)
private String deviceLevel;
@TechnicalParameter(key = "ratedEvaporationCapacityThermalPower", label = "额定蒸发量(热功率)", type = TechnicalParameter.ParamType.STRING)
private String ratedEvaporationCapacityThermalPower;
@TechnicalParameter(key = "ratedWorkingPressure", label = "额定工作压力", type = TechnicalParameter.ParamType.BIG_DECIMAL)
private String ratedWorkingPressure;
@TechnicalParameter(key = "ratedOperatingTemperature", label = "额定工作温度", type = TechnicalParameter.ParamType.STRING)
private String ratedOperatingTemperature;
@TechnicalParameter(key = "designThermalEfficiency", label = "设计热效率", type = TechnicalParameter.ParamType.STRING)
private String designThermalEfficiency;
@TechnicalParameter(key = "feedwaterTemperature", label = "给水温度", type = TechnicalParameter.ParamType.STRING)
private String feedwaterTemperature;
@TechnicalParameter(key = "ratedOutletReturnWaterOilTemperature", label = "额定出/回水(油)温度", type = TechnicalParameter.ParamType.STRING)
private String ratedOutletReturnWaterOilTemperature;
@TechnicalParameter(key = "waterOilVolumeOfBoilerProper", label = "锅炉本体水(油)容积", type = TechnicalParameter.ParamType.STRING)
private String waterOilVolumeOfBoilerProper;
@TechnicalParameter(key = "hydraulicTestMediumPressureOfPackagedBoilerBody", label = "整装锅炉本体液压试验介质/压力", type = TechnicalParameter.ParamType.STRING)
private String hydraulicTestMediumPressureOfPackagedBoilerBody;
@TechnicalParameter(key = "inletOutletTemperatureOfReheater", label = "再热器进(出)口温度", type = TechnicalParameter.ParamType.STRING)
private String inletOutletTemperatureOfReheater;
@TechnicalParameter(key = "reheaterInletOutletPressure", label = "再热器进(出)口压力", type = TechnicalParameter.ParamType.STRING)
private String reheaterInletOutletPressure;
@TechnicalParameter(key = "reheatSteamFlow", label = "再热蒸汽流量", type = TechnicalParameter.ParamType.STRING)
private String reheatSteamFlow;
@TechnicalParameter(key = "glAirtightTest", label = "有机热载体锅炉气密试验介质/压力", type = TechnicalParameter.ParamType.STRING)
private String glAirtightTest;
@TechnicalParameter(key = "fuelType", label = "燃料(热源)种类", type = TechnicalParameter.ParamType.STRING)
private String fuelType;
@TechnicalParameter(key = "nameOfPressureParts", label = "受压部件名称", type = TechnicalParameter.ParamType.STRING)
private String nameOfPressureParts;
@TechnicalParameter(key = "materialOfPressureParts", label = "受压部件材料", type = TechnicalParameter.ParamType.STRING)
private String materialOfPressureParts;
@TechnicalParameter(key = "wallThicknessOfPressureParts", label = "受压部件壁厚", type = TechnicalParameter.ParamType.STRING)
private String wallThicknessOfPressureParts;
@TechnicalParameter(key = "nonDestructiveTestingMethodsForPressureParts", label = "受压部件无损检测方法", type = TechnicalParameter.ParamType.STRING)
private String nonDestructiveTestingMethodsForPressureParts;
@TechnicalParameter(key = "proportionOfNdtForPressureParts", label = "受压部件无损检测比例", type = TechnicalParameter.ParamType.STRING)
private String proportionOfNdtForPressureParts;
@TechnicalParameter(key = "heatTreatmentTemperatureOfPressureParts", label = "受压部件热处理温度", type = TechnicalParameter.ParamType.STRING)
private String heatTreatmentTemperatureOfPressureParts;
@TechnicalParameter(key = "heatTreatmentTimeOfPressureParts", label = "受压部件热处理时间", type = TechnicalParameter.ParamType.STRING)
private String heatTreatmentTimeOfPressureParts;
@TechnicalParameter(key = "hydrostaticTestMedium", label = "受压部件水(耐)压试验介质", type = TechnicalParameter.ParamType.STRING)
private String hydrostaticTestMedium;
@TechnicalParameter(key = "hydrostaticTestPressure", label = "受压部件水(耐)压试验压力", type = TechnicalParameter.ParamType.STRING)
private String hydrostaticTestPressure;
@TechnicalParameter(key = "combustionMode", label = "燃烧方式", type = TechnicalParameter.ParamType.STRING)
private String combustionMode;
}
package com.yeejoin.amos.boot.module.common.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import lombok.Data;
/**
* 安全追溯-电梯
*
* @author system_generator
* @date 2023-08-17
*/
@Data
public class ElevatorTechParamDefine implements ITechParamDefine {
@FieldDisplayDefine(value = "额定速度(上行)")
private String ratedSpeedUp;
@FieldDisplayDefine(value = "额定速度(下行)")
private String ratedSpeedDown;
@FieldDisplayDefine(value = "额定载重量")
private String ratedLoadCapacity;
@FieldDisplayDefine(value = "提升高度")
private String liftingHeight;
@FieldDisplayDefine(value = "层数")
private Integer storey;
@FieldDisplayDefine(value = "站数")
private Integer stand;
@FieldDisplayDefine(value = "门数")
private Integer numberDoors;
@FieldDisplayDefine(value = "控制方式", dictCode = "KZFS")
private String controlMode;
@FieldDisplayDefine(value = "油缸数量")
private Integer numberCylinders;
@FieldDisplayDefine(value = "顶升方式", dictCode = "DSXS")
private String jackingType;
@FieldDisplayDefine(value = "区域防爆等级", dictCode = "FBDJ")
private String explosionproofGrade;
@FieldDisplayDefine(value = "整机防爆标志")
private String explosionproofSignComplete;
@FieldDisplayDefine(value = "名义速度")
private String nominalSpeed;
@FieldDisplayDefine(value = "名义宽度")
private String nominalWidth;
@FieldDisplayDefine(value = "倾斜角")
private String angleRoll;
@FieldDisplayDefine(value = "使用区段长度")
private String useSectionLength;
@FieldDisplayDefine(value = "输送能力")
private String conveyingCapacity;
@FieldDisplayDefine(value = "轿门位置")
private String doorPosition;
@FieldDisplayDefine(value = "额定速度")
private String ratedSpeed;
}
package com.yeejoin.amos.boot.module.common.api.dto;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.annotation.TableField;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import lombok.Data;
/**
* 安全追溯-起重机械
*
* @author system_generator
* @date 2023-08-17
*/
@Data
public class LiftingTechParamDefine implements ITechParamDefine {
@FieldDisplayDefine(value = "额定起重量")
private String ratedLiftingCapacity;
@FieldDisplayDefine(value = "最大起重量")
@TableField("MAX_LIFTING_CAPACITY")
private String maxLiftingCapacity;
@FieldDisplayDefine(value = "最大起重力矩")
@TableField("MAX_LIFTING_TORQUE")
private String maxLiftingTorque;
@FieldDisplayDefine(value = "跨度(工作幅度)")
private String spanWorkingRange;
@FieldDisplayDefine(value = "起升速度")
private String liftingSpeed;
@FieldDisplayDefine(value = "起升高度")
private String liftingHeight;
@FieldDisplayDefine(value = "工作级别", dictCode = "GZJB")
private String workLevel;
@FieldDisplayDefine(value = "额定起重力矩")
private String ratedLiftingTorque;
@FieldDisplayDefine(value = "层数/泊位数")
private Integer numberStorey;
@FieldDisplayDefine(value = "运行速度")
private String runningSpeed;
@FieldDisplayDefine(value = "大车运行速度")
private String bigcarRunSpeed;
@FieldDisplayDefine(value = "小车运行速度")
private String smallcarrunSpeed;
@FieldDisplayDefine(value = "额定成员数")
private Integer ratedMembers;
@FieldDisplayDefine(value = "额定提升速度")
private String ratedLiftingSpeed;
@FieldDisplayDefine(value = "自由端高度")
private String heightFreeEnd;
@FieldDisplayDefine(value = "吊笼工作行程")
private String workStrokeCage;
@FieldDisplayDefine(value = "存容量")
private Integer storageCapacity;
@FieldDisplayDefine(value = "额定升降速度")
private String ratedLiftSpeed;
@FieldDisplayDefine(value = "额定横移速度")
private String ratedTraverseSpeed;
@FieldDisplayDefine(value = "单车最大进(出)车时间")
@TableField("BICYCLE_MAX_EXIT_TIME")
private String bicycleMaxExitTime;
@FieldDisplayDefine(value = "单车最大进车时间")
private String bicycleMaxComeTime;
@FieldDisplayDefine(value = "区域防爆等级", dictCode = "FBDJ")
private String explosionProofGrade;
@FieldDisplayDefine(value = "悬臂长度")
private String cantileverLength;
@FieldDisplayDefine(value = "变幅速度")
private String derrickingSpeed;
@FieldDisplayDefine(value = "吊笼数量")
private String hangingCagesNumber;
@FieldDisplayDefine(value = "燃爆物质")
private String explosiveSubstance;
@FieldDisplayDefine(value = "整机防爆标志", type = JSON.class)
private String explosionproofSignComplete;
@FieldDisplayDefine(value = "监检结束高度")
private String checkFinishedHeight;
@FieldDisplayDefine(value = "适停车辆尺寸高")
private String parkingVehicleHeight;
@FieldDisplayDefine(value = "适停车辆尺寸宽")
private String parkingVehicleWeight;
@FieldDisplayDefine(value = "适停车辆尺寸长")
private String parkingVehicleLength;
}
package com.yeejoin.amos.boot.module.common.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import lombok.Data;
/**
* 安全追溯-压力管道
*
* @author system_generator
* @date 2023-08-17
*/
@Data
public class PipelineTechParamDefine implements ITechParamDefine {
@FieldDisplayDefine(value = "唯一标识", isExist = false)
private String record;
@FieldDisplayDefine(value = "管道名称(登记单元)")
private String pipeName;
@FieldDisplayDefine(value = "管道编号")
private String pipelineNumber;
@FieldDisplayDefine(value = "管道级别", typeHandler = "pieLineLevelTypeHandler")
private String deviceLevel;
@FieldDisplayDefine(value = "公称直径")
private String nominalDiameter;
@FieldDisplayDefine(value = "公称壁厚")
private String wallThickness;
@FieldDisplayDefine(value = "管道长度")
private Double pipeLength;
@FieldDisplayDefine(value = "设计压力")
private String pressure;
@FieldDisplayDefine(value = "设计温度")
private String temperature;
@FieldDisplayDefine(value = "设计介质")
private String medium;
@FieldDisplayDefine(value = "工作压力")
private String workPressure;
@FieldDisplayDefine(value = "工作温度")
private String workTemperature;
@FieldDisplayDefine(value = "工作介质")
private String workMedium;
@FieldDisplayDefine(value = "备注")
private String remarks;
}
package com.yeejoin.amos.boot.module.common.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import lombok.Data;
/**
* 安全追溯-游乐设施
*
* @author system_generator
* @date 2023-08-17
*/
@Data
public class RidesTechParamDefine implements ITechParamDefine {
@FieldDisplayDefine(value = "轨道高度")
private String trackHeight;
@FieldDisplayDefine(value = "运行速度")
private String runningSpeed;
@FieldDisplayDefine(value = "乘坐人数")
private Integer numberOfPassengers;
@FieldDisplayDefine(value = "滑道长度")
private String slideLength;
@FieldDisplayDefine(value = "运行高度")
private String operatingHeight;
@FieldDisplayDefine(value = "蹦极绳长度")
private String slideHeight;
@FieldDisplayDefine(value = "回转直径")
private String rotaryDiameter;
@FieldDisplayDefine(value = "单边摆角")
private String unilateralSwingAngle;
@FieldDisplayDefine(value = "车辆数")
private Integer numberOfVehicles;
@FieldDisplayDefine(value = "倾角")
private String dip;
@FieldDisplayDefine(value = "设备高度")
private String equipmentHeight;
}
package com.yeejoin.amos.boot.module.common.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import lombok.Data;
/**
* 安全追溯-索道
*
* @author system_generator
* @date 2023-08-17
*/
@Data
public class RopewayTechParamDefine implements ITechParamDefine {
@FieldDisplayDefine(value = "平距")
private String horizontalDistance;
@FieldDisplayDefine(value = "支架数目")
private Integer supportsCount;
@FieldDisplayDefine(value = "斜长")
private String obliqueLength;
@FieldDisplayDefine(value = "主电机型式")
private String mainMotorModel;
@FieldDisplayDefine(value = "主电机功率")
private String mainMotorPower;
@FieldDisplayDefine(value = "高差")
private String altitudeDifference;
@FieldDisplayDefine(value = "运量")
private String freightVolume;
@FieldDisplayDefine(value = "运载索", dictCode = "YZS")
private String carrierLine;
@FieldDisplayDefine(value = "速度")
private String speed;
@FieldDisplayDefine(value = "承载索")
private String bearingCable;
@FieldDisplayDefine(value = "索距")
private String cablePitch;
@FieldDisplayDefine(value = "张紧油压(重锤重量)")
private String oilPressureHeavyHammer;
@FieldDisplayDefine(value = "运载工具数量和类型")
private String numberAndTypeOfVehicles;
}
package com.yeejoin.amos.boot.module.common.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.TechnicalParameter;
import lombok.Data;
@Data
public class TechParamMeta {
/**
* 设备种类
*/
private String equListCode;
/**
* 参数唯一标识
*/
private String paramKey;
/**
* 参数描述
*/
private String paramLabel;
/**
* 参数类型枚举
*/
private TechnicalParameter.ParamType paramType;
/**
* 数字类型专用:最大小数位数
*/
private Integer maxPrecision;
}
package com.yeejoin.amos.boot.module.common.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import lombok.Data;
/**
* 安全追溯-场内车辆
*
* @author system_generator
* @date 2023-08-17
*/
@Data
public class VehicleTechParamDefine implements ITechParamDefine {
@FieldDisplayDefine(value = "车架编号")
private String frameNo;
@FieldDisplayDefine(value = "发动机(行走电机)编号")
private String engineNo;
@FieldDisplayDefine(value = "额定起重量")
private String liftingCapacity;
@FieldDisplayDefine(value = "传动方式")
private String transmissionMode;
@FieldDisplayDefine(value = "自重")
private String weight;
@FieldDisplayDefine(value = "动力方式")
private String powerMode;
@FieldDisplayDefine(value = "最大运行速度")
private String maxRunningSpeed;
@FieldDisplayDefine(value = "工作装置空载最大起升高度")
private String maxLiftingHeight;
@FieldDisplayDefine(value = "气体/粉尘组别(防爆)")
private String gasGroup;
@FieldDisplayDefine(value = "车架结构")
private String frameStructure;
@FieldDisplayDefine(value = "驾驶方式")
private String drivingMode;
@FieldDisplayDefine(value = "空载最大运行速度")
private String carryingIdlerMaxRunningSpeed;
@FieldDisplayDefine(value = "设备保护等级(防爆)", dictCode = "FBDJ")
private String protectGrade;
@FieldDisplayDefine(value = "温度组别(防爆)")
private String temperatureGroup;
@FieldDisplayDefine(value = "额定载客人数")
private Integer passengersNumber;
@FieldDisplayDefine(value = "最大行驶坡度")
private String maxDrivingSlope;
@FieldDisplayDefine(value = "整车整备质量")
private String vehicleMass;
@FieldDisplayDefine(value = "轴距")
private String wheelBase;
@FieldDisplayDefine(value = "轮距(前)")
private String trackWidthFront;
@FieldDisplayDefine(value = "轮距(后)")
private String trackWidthBehind;
@FieldDisplayDefine(value = "观光列车车厢数")
private Integer carsNumber;
@FieldDisplayDefine(value = "观光列车每节车厢座位数")
private Integer seatNumber;
@FieldDisplayDefine(value = "观光列车牵引车头座位数")
private Integer tractorSeatNumber;
@FieldDisplayDefine(value = "空载最大起升速度")
private String maxLiftingSpeed;
}
package com.yeejoin.amos.boot.module.common.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import lombok.Data;
/**
* 安全追溯-压力容器
*
* @author system_generator
* @date 2023-08-17
*/
@Data
public class VesselTechParamsDefine implements ITechParamDefine {
@FieldDisplayDefine(value = "额定质量")
private String ratedQuality;
@FieldDisplayDefine(value = "使用环境温度")
private String ambientTemperature;
@FieldDisplayDefine(value = "型号")
private String modelNumber;
@FieldDisplayDefine(value = "数量")
private Integer num;
@FieldDisplayDefine(value = "单瓶容积")
private String singleBottleVolume;
@FieldDisplayDefine(value = "总容积")
private String totalVolume;
@FieldDisplayDefine(value = "充装介质")
private String chargingMedium;
@FieldDisplayDefine(value = "规格")
private String specification;
@FieldDisplayDefine(value = "外径")
private String outsideDiameter;
@FieldDisplayDefine(value = "壁厚")
private String wallThickness;
@FieldDisplayDefine(value = "长度")
private String length;
@FieldDisplayDefine(value = "公称工作压力")
private String nominalWorkingPressure;
@FieldDisplayDefine(value = "材料(瓶体)")
private String bottleBody;
@FieldDisplayDefine(value = "材料(端塞)")
private String endPlug;
@FieldDisplayDefine(value = "材料(管路)")
private String piping;
@FieldDisplayDefine(value = "无损检测方法(气瓶)")
private String qpLossless;
@FieldDisplayDefine(value = "无损检测方法(管路)")
private String glLossless;
@FieldDisplayDefine(value = "无损检测比例(气瓶)")
private String qpRatio;
@FieldDisplayDefine(value = "无损检测比例(管路)")
private String glRatio;
@FieldDisplayDefine(value = "耐压试验压力(气瓶)")
private String qpPressure;
@FieldDisplayDefine(value = "耐压试验压力(管路)")
private String glPressure;
@FieldDisplayDefine(value = "气密性试验压力(气瓶)")
private String qpAirTightness;
@FieldDisplayDefine(value = "气密性试验压力(管路)")
private String glAirTightness;
@FieldDisplayDefine(value = "气体置换后压力")
private String displacementPressure;
@FieldDisplayDefine(value = "瓶体内含氧量")
private String oxygen;
@FieldDisplayDefine(value = "瓶体内含氧量")
private String heatTreatmentMethod;
@FieldDisplayDefine(value = "热处理温度")
private String qpHeatTreatmentTemperature;
@FieldDisplayDefine(value = "气瓶安装位置")
private String installationPosition;
@FieldDisplayDefine(value = "容器容积")
private String containerVolume;
@FieldDisplayDefine(value = "容器内径")
private String pressureVesselDiameter;
@FieldDisplayDefine(value = "容器高(长)")
private String height;
@FieldDisplayDefine(value = "材料(筒体(球壳))")
private String materialCylinderShell;
@FieldDisplayDefine(value = "材料(封头)")
private String pressureMaterialHead;
@FieldDisplayDefine(value = "材料(衬里)")
private String pressureMaterialLining;
@FieldDisplayDefine(value = "材料(夹套)")
private String materialJacket;
@FieldDisplayDefine(value = "厚度(筒体(球壳))")
private String thickness;
@FieldDisplayDefine(value = "厚度(封头)")
private String fixedHead;
@FieldDisplayDefine(value = "厚度(衬里)")
private String fixedLining;
@FieldDisplayDefine(value = "厚度(夹套)")
private String fixedJacket;
@FieldDisplayDefine(value = "容器自重")
private String selfWeight;
@FieldDisplayDefine(value = "盛装介质重量")
private String mediumWeight;
@FieldDisplayDefine(value = "设计压力(壳程)")
private String pressureHousingPath;
@FieldDisplayDefine(value = "设计压力(管程)")
private String pressurePipe;
@FieldDisplayDefine(value = "设计压力(夹套)")
private String pressureJacket;
@FieldDisplayDefine(value = "设计温度(壳程)")
private String temperatureShell;
@FieldDisplayDefine(value = "设计温度(管程)")
private String temperaturePipe;
@FieldDisplayDefine(value = "设计温度(夹套)")
private String temperatureJacket;
@FieldDisplayDefine(value = "最高允许工作压力(壳程)")
private String maxPressureShell;
@FieldDisplayDefine(value = "最高允许工作压力(管程)")
private String maxPressurePipe;
@FieldDisplayDefine(value = "最高允许工作压力(夹套)")
private String maxPressureJacket;
@FieldDisplayDefine(value = "介质(壳程)")
private String mediumShell;
@FieldDisplayDefine(value = "介质(管程)")
private String mediumPipe;
@FieldDisplayDefine(value = "介质(夹套)")
private String mediumJacket;
@FieldDisplayDefine(value = "主体结构型式", dictCode = "RQJG")
private String mainStructureType;
@FieldDisplayDefine(value = "支座型式")
private String support;
@FieldDisplayDefine(value = "安装型式")
private String installation;
@FieldDisplayDefine(value = "保温绝热方式")
private String insulation;
@FieldDisplayDefine(value = "无损检测方法", dictCode = "RQJCFF")
private String checkLossless;
@FieldDisplayDefine(value = "耐压试验种类")
private String withstandVoltage;
@FieldDisplayDefine(value = "泄漏试验种类")
private String leakage;
@FieldDisplayDefine(value = "耐压试验压力")
private String withstandPressureTest;
@FieldDisplayDefine(value = "泄漏试验压力")
private String leakPressure;
@FieldDisplayDefine(value = "容器型号")
private String container;
@FieldDisplayDefine(value = "罐车编号")
private String carNum;
@FieldDisplayDefine(value = "容积")
private String volume;
@FieldDisplayDefine(value = "最大充装量")
private String maxFill;
@FieldDisplayDefine(value = "设计压力")
private String designPressure;
@FieldDisplayDefine(value = "设计温度")
private String designTemperature;
@FieldDisplayDefine(value = "工作压力")
private String workingPressure;
@FieldDisplayDefine(value = "工作温度")
private String workTemperature;
@FieldDisplayDefine(value = "材料(筒体)")
private String materialCylinder;
@FieldDisplayDefine(value = "厚度(筒体)")
private String thicknessCylinder;
@FieldDisplayDefine(value = "腐蚀裕量")
private String corrosionMargin;
@FieldDisplayDefine(value = "介质")
private String medium;
@FieldDisplayDefine(value = "氧舱品种")
private String oxygenChamber;
@FieldDisplayDefine(value = "额定进舱人数")
private Integer ratedEntryCapacity;
@FieldDisplayDefine(value = "主体结构")
private String chamberMain;
@FieldDisplayDefine(value = "压力")
private String chamberPressure;
@FieldDisplayDefine(value = "温度")
private String temperature;
@FieldDisplayDefine(value = "压力介质")
private String pressureMedium;
@FieldDisplayDefine(value = "人均舱容")
private String perCapitaCabinCapacity;
@FieldDisplayDefine(value = "车辆VIN码")
private String vin;
}
package com.yeejoin.amos.boot.module.common.api.entity;
import com.yeejoin.amos.boot.biz.common.annotation.TechnicalParameter;
import com.yeejoin.amos.boot.module.common.api.dto.TechParamMeta;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* @Author cpp
* @Description
* @Date 2023/6/5
*/
@Data
@Accessors(chain = true)
@Document(indexName = "idx_biz_equipment_info")
public class ESEquipmentInfo {
@Id
private String SEQUENCE_NBR;
/**
* 管辖机构名称
*/
@Field(type = FieldType.Text)
private String ORG_BRANCH_NAME;
/**
* 管辖机构org_code
*/
@Field(type = FieldType.Keyword)
private String ORG_BRANCH_CODE;
/**
* 使用单位名称
*/
@Field(type = FieldType.Text)
private String USE_UNIT_NAME;
/**
* 使用单位统一信用代码
*/
@Field(type = FieldType.Keyword)
private String USE_UNIT_CREDIT_CODE;
/**
* 设备种类编码
*/
@Field(type = FieldType.Keyword)
private String EQU_LIST_CODE;
/**
* 设备种类名称
*/
@Field(type = FieldType.Text)
private String EQU_LIST;
/**
* 设备类别编码
*/
@Field(type = FieldType.Keyword)
private String EQU_CATEGORY_CODE;
/**
* 设备类别名称
*/
@Field(type = FieldType.Text)
private String EQU_CATEGORY;
/**
* 设备品种编码
*/
@Field(type = FieldType.Keyword)
private String EQU_DEFINE_CODE;
/**
* 设备品种名称
*/
@Field(type = FieldType.Text)
private String EQU_DEFINE;
/**
* 使用登记证编号
*/
@Field(type = FieldType.Keyword)
private String USE_ORG_CODE;
/**
* 96333电梯码
*/
@Field(type = FieldType.Keyword)
private String CODE96333;
/**
* 设备代码
*/
@Field(type = FieldType.Keyword)
private String EQU_CODE;
/**
* 监管码
*/
@Field(type = FieldType.Keyword)
private String SUPERVISORY_CODE;
/**
* 使用场所
*/
@Field(type = FieldType.Keyword)
private String USE_PLACE;
/**
* 详细地址
*/
@Field(type = FieldType.Text)
private String ADDRESS;
/**
* 设备状态:在用、停用、报废
*/
@Field(type = FieldType.Integer)
private Integer EQU_STATE;
/**
* 认领状态
*/
@Field(type = FieldType.Keyword)
private String STATUS;
/**
* 更新日期
*/
@Field(type = FieldType.Long)
private Long REC_DATE;
/**
* 安全管理员
*/
@Field(type = FieldType.Text)
private String SAFETY_MANAGER;
/**
* 安全管理员电话
*/
@Field(type = FieldType.Keyword)
private String PHONE;
/**
* 维保单位统一信用代码
*/
@Field(type = FieldType.Keyword)
private String MAINTAIN_UNIT;
/**
* 维保单位名称
*/
@Field(type = FieldType.Keyword)
private String MAINTAIN_UNIT_NAME;
/**
* 单位内部编号
*/
@Field(type = FieldType.Keyword)
private String USE_INNER_CODE;
/**
* 出场编号
*/
@Field(type = FieldType.Keyword)
private String FACTORY_NUM;
/**
* 制造单位名称
*/
@Field(type = FieldType.Text)
private String PRODUCE_UNIT_NAME;
/**
* 使用单位统一信用代码
*/
@Field(type = FieldType.Keyword)
private String USC_UNIT_CREDIT_CODE;
/**
* 使用单位统名称
*/
@Field(type = FieldType.Text)
private String USC_UNIT_NAME;
/**
* 投用日期
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date USC_DATE;
/**
* 产品名称
*/
@Field(type = FieldType.Keyword)
private String PRODUCT_NAME;
/**
* 设备品牌
*/
@Field(type = FieldType.Text)
private String BRAND_NAME;
/**
* 设备型号
*/
@Field(type = FieldType.Text)
private String EQU_TYPE;
/**
* 制造日期
*/
@Field(type = FieldType.Text)
private String PRODUCE_DATE;
/**
* 设备来源
*/
@Field(type = FieldType.Keyword)
private String DATA_SOURCE;
/**
* 是否车用气瓶
*/
@Field(type = FieldType.Text)
private String WHETHER_VEHICLE_CYLINDER;
/**
* 是否撬装式压力容器
*/
@Field(type = FieldType.Keyword)
private String WHETHER_SKID_MOUNTED_PRESSURE_VESSEL;
/**
* 气瓶分类
*/
@Field(type = FieldType.Keyword)
private String CYLINDER_CATEGORY;
/**
* 是否纳管:true - 已纳管 false-未纳管
*/
@Field(type = FieldType.Boolean)
private Boolean IS_INTO_MANAGEMENT;
/**
* 设备使用地点区域码610000#610100#610101
*/
@Field(type = FieldType.Keyword)
private String USE_PLACE_CODE;
/**
* 设备使用场所代码-来源数据字典ADDRESS
*/
@Field(type = FieldType.Keyword)
private String USE_SITE_CODE;
/**
* 工程装置(工业管道使用)
*/
@Field(type = FieldType.Keyword)
private String PROJECT_CONTRAPTION;
/**
* 信息化
*/
@Field(type = FieldType.Text)
private String INFORMATION_SITUATION;
/**
* 工程装置id(工业管道使用)
*/
@Field(type = FieldType.Keyword, name = "PROJECT_CONTRAPTION_ID")
private String projectContraptionId;
/**
* 是否可以做业务-西安电梯导入用(false-否,true-是)
*/
@Field(type = FieldType.Boolean, name = "IS_DO_BUSINESS")
private Boolean IS_DO_BUSINESS;
/**
* 数据质量等级
*/
@Field(type = FieldType.Integer, name = "DATA_QUALITY_SCORE")
private Integer dataQualityScore;
@Field(type = FieldType.Keyword)
private String designUnitCreditCode;
@Field(type = FieldType.Text)
private String designUnitName;
/**
* 制造单位统一社会信用代码
*/
@Field(type = FieldType.Keyword)
private String produceUnitCreditCode;
/**
* 下次检验日期-冗余字段
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date NEXT_INSPECT_DATE;
/**
* 检验日期-冗余字段
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date INSPECT_DATE;
/**
* 最新一条检验信息
*/
@Field(type = FieldType.Nested)
private List<Inspection> inspections;
/**
* 最新一条维保信息
*/
@Field(type = FieldType.Nested)
private List<Maintenance> maintenances;
@Data
public static class TechParam {
@Field(type = FieldType.Keyword)
private String paramKey;
@Field(type = FieldType.Text)
private String paramLabel;
@Field(type = FieldType.Keyword)
private String strValue;
@Field(type = FieldType.Long)
private Long longValue;
@Field(type = FieldType.Double)
private Double doubleValue;
@Field(type = FieldType.Boolean)
private Boolean boolValue;
@Field(type = FieldType.Date)
private Date dateValue;
public TechParam(TechParamMeta meta, Object rawValue) {
this.paramKey = meta.getParamKey();
this.paramLabel = meta.getParamLabel();
setValueByType(meta.getParamType(), rawValue, meta.getMaxPrecision());
}
private void setValueByType(TechnicalParameter.ParamType type, Object value, Integer precision) {
// 清空所有字段确保无污染
resetFields();
if (value == null) return;
try {
switch (type) {
case STRING:
this.strValue = value.toString();
break;
case INTEGER:
this.longValue = ((Number) value).longValue();
break;
case FLOAT:
this.doubleValue = roundDouble(((Number) value).doubleValue(),
precision != null ? precision : 6);
break;
case BIG_DECIMAL:
BigDecimal bd = (BigDecimal) value;
if (precision != null && bd.scale() > precision) {
this.strValue = bd.setScale(precision, RoundingMode.HALF_UP)
.stripTrailingZeros().toPlainString();
} else {
this.doubleValue = bd.doubleValue();
}
break;
case BOOLEAN:
this.boolValue = Boolean.parseBoolean(value.toString());
break;
}
} catch (Exception e) {
this.strValue = "CONV_ERROR:" + value;
}
}
private double roundDouble(double value, Integer precision) {
// 参数校验
if (Double.isNaN(value) || Double.isInfinite(value)) {
return value; // 保留特殊值原样返回
}
// 默认精度处理
int scale = (precision != null) ?
Math.min(precision, 16) : 6; // 最大支持16位小数
// 银行家舍入法(HALF_EVEN)减少统计误差
BigDecimal bd = BigDecimal.valueOf(value); // 注意:必须用valueOf避免精度丢失
bd = bd.setScale(scale, RoundingMode.HALF_EVEN);
// 处理科学计数法(避免1.23E-4这样的输出)
return bd.stripTrailingZeros().doubleValue();
}
private Date convertToDate(Object value) {
if (value instanceof Date) return (Date) value;
if (value instanceof Long) return new Date((Long) value);
if (value instanceof String) {
try {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse((String) value);
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid date format");
}
}
throw new IllegalArgumentException("Unsupported date type");
}
private void resetFields() {
this.strValue = null;
this.longValue = null;
this.doubleValue = null;
this.boolValue = null;
this.dateValue = null;
}
}
@Data
public static class Inspection {
@Field(type = FieldType.Keyword)
private String sequenceNbr;
/**
* 检验类型
*/
@Field(type = FieldType.Keyword)
private String inspectType;
/**
* 检验机构名称
*/
@Field(type = FieldType.Text)
private String inspectOrgName;
/**
* 检验人员
*/
@Field(type = FieldType.Text)
private String inspectStaff;
/**
* 检验结论
*/
@Field(type = FieldType.Keyword)
private String inspectConclusion;
/**
* 检验日期
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date inspectDate;
/**
* 下次检验日期
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date nextInspectDate;
/**
* 检验机构编码
*/
@Field(type = FieldType.Keyword)
private String inspectOrgCode;
/**
* 报告编号
*/
@Field(type = FieldType.Keyword)
private String inspectReportNo;
}
@Data
public static class Maintenance {
@Field(type = FieldType.Keyword)
private String sequenceNbr;
/**
* 维保单位统一社会信用代码
*/
@Field(type = FieldType.Keyword)
private String meUnitCreditCode;
/**
* 维保单位名称
*/
@Field(type = FieldType.Text)
private String meUnitName;
/**
* 维保备案合同
*/
@Field(type = FieldType.Text)
private String repairInform;
/**
* 维保合同开始日期
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date informStart;
/**
* 维保合同结束日期
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private String informEnd;
/**
* 维保负责人姓名
*/
@Field(type = FieldType.Text)
private String meMaster;
/**
* 维保负责人身份证
*/
@Field(type = FieldType.Keyword)
private String meMasterId;
/**
* 紧急救援电话
*/
@Field(type = FieldType.Keyword)
private String emergencyCall;
/**
* 维保周期
*/
@Field(type = FieldType.Keyword)
private String meCycle;
/**
* 大修周期
*/
@Field(type = FieldType.Text)
private String overhaulCycle;
/**
* 24小时维保电话
*/
@Field(type = FieldType.Text)
private String me24Telephone;
}
}
package com.yeejoin.amos.boot.module.common.api.entity;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.util.Date;
import java.util.List;
@Data
@Document(indexName = "idx_biz_enterprise_info")
public class EsBaseEnterpriseInfo {
@Id
private String sequenceNbr;
/**
* 企业code
*/
@Field(type = FieldType.Keyword)
private String useUnitCode;
/**
* 企业名称
*/
@Field(type = FieldType.Text)
private String useUnit;
/**
* 企业code,个人的包含6600_
*/
@Field(type = FieldType.Keyword)
private String useCode;
/**
* 单位地址行政区划
*/
@Field(type = FieldType.Keyword)
private String regionCode;
/**
* 监管系统唯一编码
*/
@Field(type = FieldType.Keyword)
private String superviseCode;
/**
* 联系人
*/
@Field(type = FieldType.Keyword)
private String contactUser;
/**
* 联系人电话
*/
@Field(type = FieldType.Text)
private String contactPhone;
/**
* 企业详情地址
*/
@Field(type = FieldType.Text)
private String address;
/**
* 单位类型
*/
@Field(type = FieldType.Keyword)
private String unitType;
/**
* 管辖机构OrgCode
*/
@Field(type = FieldType.Keyword)
private String superviseOrgCode;
/**
* 管辖机构名称
*/
@Field(type = FieldType.Text)
private String superviseOrgName;
/**
* 监管标签
*/
@Field(type = FieldType.Keyword)
private String regulatoryLabels;
/**
* 行业主管部门
*/
@Field(type = FieldType.Keyword)
private String industrySupervisor;
/**
* 经营状态
*/
@Field(type = FieldType.Keyword)
private String operatingStatus;
/**
* 涉及设备类型
*/
@Field(type = FieldType.Keyword)
private String equipCategory;
/**
* 公司的orgCode
*/
@Field(type = FieldType.Keyword)
private String orgCode;
/**
* 办公区域
*/
@Field(type = FieldType.Keyword)
private String officeRegion;
/**
* 企业下资质
*/
@Field(type = FieldType.Nested)
private List<License> licenses;
@Data
public static class License {
/**
* 资质表主键
*/
@Field(type = FieldType.Long)
private Long sequenceNbr;
@Field(type = FieldType.Long)
private Long unitLicenceId;
/**
* 证书类型名称
*/
@Field(type = FieldType.Text)
private String certType;
/**
* 证书类型CODE
*/
@Field(type = FieldType.Keyword)
private String certTypeCode;
/**
* 证书编号
*/
@Field(type = FieldType.Keyword)
private String certNo;
/**
* 许可到期日期
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date expiryDate;
/**
* 许可项目/检验类型/设备品种(核准项目名称)
*/
@Field(type = FieldType.Keyword)
private String itemCode;
/**
* 许可子项目/检验项目/充装介质类别code
*/
@Field(type = FieldType.Keyword)
private String subItemCode;
/**
* 机构类别枚举
*/
@Field(type = FieldType.Keyword)
private String agencyType;
/**
* 资质类型编码(检验检测、其他)
*/
@Field(type = FieldType.Keyword)
private String licenceType;
/**
* 发证机关
*/
@Field(type = FieldType.Keyword)
private String approvedOrganCode;
/**
* 发证日期
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date issueDate;
}
}
package com.yeejoin.amos.boot.module.common.api.entity;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.util.Date;
import java.util.List;
@Data
@Document(indexName = "idx_biz_user_info")
public class EsUserInfo {
@Id
private String sequenceNbr;
/**
* 姓名
*/
@Field(type = FieldType.Keyword)
private String name;
/**
* 证件类型
*/
@Field(type = FieldType.Keyword)
private String certificateType;
/**
* 证件编号
*/
@Field(type = FieldType.Keyword)
private String certificateNum;
/**
* 性别
*/
@Field(type = FieldType.Keyword)
private String gender;
/**
* 岗位-保留兼容下游数据查询
*/
@Field(type = FieldType.Keyword)
private String post;
/**
* 新岗位(后期post迁移数组至此)
*/
@Field(type = FieldType.Keyword)
private String newPost;
/**
* 岗位名称-按照new_post显示
*/
@Field(type = FieldType.Text)
private String postName;
/**
* 联系电话
*/
@Field(type = FieldType.Keyword)
private String phone;
/**
* 出生日期
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date birthday;
/**
* 学历
*/
@Field(type = FieldType.Keyword)
private String education;
/**
* 专业
*/
@Field(type = FieldType.Text)
private String speciality;
/**
* 邮箱
*/
@Field(type = FieldType.Keyword)
private String email;
/**
* 住址
*/
@Field(type = FieldType.Keyword)
private String address;
/**
* 证件照片
*/
@Field(type = FieldType.Keyword)
private String identification;
/**
* 证件照片
*/
@Field(type = FieldType.Keyword)
private String appointDoc;
/**
* 单位名称
*/
@Field(type = FieldType.Keyword)
private String unitName;
/**
* 企业编码
*/
@Field(type = FieldType.Keyword)
private String unitCode;
/**
* 头像
*/
@Field(type = FieldType.Keyword)
private String profile;
/**
* 设备类型
*/
@Field(type = FieldType.Keyword)
private String equipType;
/**
* 职称
*/
@Field(type = FieldType.Keyword)
private String jobTitle;
/**
* 岗位子类型(多个逗号分割)
*/
@Field(type = FieldType.Keyword)
private String subPost;
/**
* 岗位子类型名称(多个逗号分割)
*/
@Field(type = FieldType.Text)
private String subPostName;
/**
* 管辖机构OrgCode--来源企业表
*/
@Field(type = FieldType.Keyword)
private String superviseOrgCode;
/**
* 管辖机构名称--来源企业表
*/
@Field(type = FieldType.Text)
private String superviseOrgName;
/**
* 资质
*/
@Field(type = FieldType.Nested)
private List<License> licenses;
@Data
public static class License {
/**
* 资质表主键
*/
@Field(type = FieldType.Long)
private Long sequenceNbr;
/**
* 主表主键
*/
@Field(type = FieldType.Long)
private Long userSeq;
/**
* 检验检测专用-级别
*/
@Field(type = FieldType.Keyword)
private String permissionLevel;
/**
* 检验检测专用-资质项目
*/
@Field(type = FieldType.Keyword)
private String permissionItem;
/**
* 证书编号
*/
@Field(type = FieldType.Keyword)
private String certNo;
/**
* 有效期至
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date expiryDate;
/**
* 发证机关
*/
@Field(type = FieldType.Keyword)
private String approvedOrgan;
/**
* 发证日期
*/
@Field(type = FieldType.Date, format = DateFormat.date)
private Date issueDate;
/**
* 证书类型
*/
@Field(type = FieldType.Keyword)
private String certType;
/**
* 作业项目
*/
@Field(type = FieldType.Keyword)
private String jobItem;
/**
* 项目代号,多个用逗号分割
*/
@Field(type = FieldType.Keyword)
private String itemCode;
/**
* 其他作业项目
*/
@Field(type = FieldType.Keyword)
private String otherItem;
}
}
package com.yeejoin.amos.boot.module.common.biz.utils;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import com.yeejoin.amos.boot.biz.common.annotation.TechnicalParameter;
import com.yeejoin.amos.boot.module.common.api.dto.ITechParamDefine;
import com.yeejoin.amos.boot.module.common.api.dto.TechParamMeta;
import org.reflections.Reflections;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class TechParamUtil {
private static final Set<Class<? extends ITechParamDefine>> subClasses;
private static final Map<String, List<TechParamMeta>> techParamsMetaMap = new ConcurrentHashMap<>();
static {
//▼ 指定扫描包路径(根据实际项目调整)
Reflections reflections = new Reflections("com.yeejoin.amos.boot.module.common.api.dto");
//▼ 获取所有继承ITechParamsMeta的类
subClasses = reflections.getSubTypesOf(ITechParamDefine.class);
}
public static List<TechParamMeta> getParamMetaList(String equListCode) {
return techParamsMetaMap.computeIfAbsent(equListCode, (key) -> {
List<TechParamMeta> techParamMetas = new ArrayList<>();
for (Class<? extends ITechParamDefine> subClass : subClasses) {
Field[] fields = subClass.getDeclaredFields();
Group group = subClass.getAnnotation(Group.class);
if (group != null && equListCode.equals(group.value())) {
for (Field field : fields) {
field.setAccessible(true);
TechnicalParameter technicalParameter = field.getAnnotation(TechnicalParameter.class);
TechParamMeta techParamMeta = new TechParamMeta();
techParamMeta.setParamKey(technicalParameter.key());
techParamMeta.setParamLabel(technicalParameter.label());
techParamMeta.setEquListCode(equListCode);
techParamMeta.setParamType(technicalParameter.type());
techParamMetas.add(techParamMeta);
}
}
}
return techParamMetas;
});
}
}
......@@ -107,4 +107,5 @@ public class BizDataChangeController extends BaseController {
@RequestParam(value = "size") int size) {
return ResponseHelper.buildResponse(bizDataChangeService.getChangeLogPage(bizId, bizType, current, size));
}
}
......@@ -223,9 +223,33 @@ public class DataHandlerController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "put", value = "历史设备装置初始化数据质量等级", notes = "车用气瓶登记产权单位信息刷入useInfo表")
@ApiOperation(httpMethod = "PUT", value = "历史设备装置初始化数据质量等级", notes = "车用气瓶登记产权单位信息刷入useInfo表")
@PutMapping(value = "/initDataQualityScore")
public ResponseModel<String> initDataQualityScore() {
return ResponseHelper.buildResponse(dataHandlerService.initDataQualityScore());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "PUT", value = "初始化综合搜索数据-企业", notes = "初始化综合搜索数据-企业")
@PutMapping(value = "/company/initStatistData2Es")
public ResponseModel<Integer> initCompanyStatistData2Es() {
return ResponseHelper.buildResponse(dataHandlerService.initCompanyStatistData2Es());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "PUT", value = "初始化综合搜索数据-人员", notes = "初始化综合搜索数据-人员")
@PutMapping(value = "/user/initStatistData2Es")
public ResponseModel<Integer> initUserStatistData2Es() {
return ResponseHelper.buildResponse(dataHandlerService.initUserStatistData2Es());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "PUT", value = "初始化综合搜索数据-设备", notes = "初始化综合搜索数据-设备")
@PutMapping(value = "/equip/initStatistData2Es")
public ResponseModel<Integer> initEquipStatistData2Es() {
return ResponseHelper.buildResponse(dataHandlerService.initEquipStatistData2Es());
}
}
\ No newline at end of file
......@@ -9,6 +9,8 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
......@@ -19,7 +21,14 @@ import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
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.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dao.EsBaseEnterpriseInfoDao;
import com.yeejoin.amos.boot.module.common.api.dao.EsEquipmentDao;
import com.yeejoin.amos.boot.module.common.api.dao.EsUserInfoDao;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.common.api.entity.ESEquipmentInfo;
import com.yeejoin.amos.boot.module.common.api.entity.EsBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.common.api.entity.EsUserInfo;
import com.yeejoin.amos.boot.module.common.api.entity.TzsUserPermission;
import com.yeejoin.amos.boot.module.jg.api.dto.JgInstallationNoticeEqDto;
import com.yeejoin.amos.boot.module.jg.api.dto.JgUseRegistrationDto;
import com.yeejoin.amos.boot.module.jg.api.dto.PieLineEquipContraptionDto;
......@@ -56,8 +65,10 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.alibaba.fastjson.JSON.toJSONString;
import static com.yeejoin.amos.boot.module.jg.biz.service.impl.JgInstallationNoticeServiceImpl.CONSTRUCTION_TYPE;
import static com.yeejoin.amos.boot.module.jg.biz.service.impl.JgInstallationNoticeServiceImpl.CONSTRUCTION_TYPE_NAME;
......@@ -108,9 +119,22 @@ public class DataHandlerServiceImpl {
private final JgChangeRegistrationTransferMapper jgChangeRegistrationTransferMapper;
private final JgUseRegistrationManageServiceImpl jgUseRegistrationManageServiceImpl;
private final EsBaseEnterpriseInfoDao enterpriseInfoDao;
private final TzBaseUnitLicenceMapper licenceMapper;
private final TzsUserInfoMapper userInfoMapper;
private final TzsUserPermissionMapper userPermissionMapper;
private final EsUserInfoDao esUserInfoDao;
private final EsEquipmentDao esEquipmentDao;
private final IdxBizJgMaintenanceRecordInfoServiceImpl maintenanceRecordInfoService;
// 组织机构跟节点
private static final String ROOT_ORG_CODE = "50";
private final IdxBizJgDesignInfoServiceImpl idxBizJgDesignInfoServiceImpl;
/**
* 安装告知压力管道历史数据修复-详情中的设备列表修改为汇总表格式
......@@ -1387,4 +1411,111 @@ public class DataHandlerServiceImpl {
});
}
public Integer initCompanyStatistData2Es() {
log.info("综合统计企业信息入库开始");
StopWatch watch = new StopWatch();
watch.start();
List<TzBaseEnterpriseInfo> units = tzBaseEnterpriseInfoMapper.selectList(null);
List<EsBaseEnterpriseInfo> esBaseEnterpriseInfos = units.parallelStream().map(enterpriseInfo -> {
EsBaseEnterpriseInfo esBaseEnterpriseInfo = new EsBaseEnterpriseInfo();
BeanUtil.copyProperties(enterpriseInfo, esBaseEnterpriseInfo);
esBaseEnterpriseInfo.setSequenceNbr(enterpriseInfo.getSequenceNbr() + "");
List<TzBaseUnitLicence> unitLicences = licenceMapper.selectList(new LambdaQueryWrapper<TzBaseUnitLicence>().eq(TzBaseUnitLicence::getUnitCode, enterpriseInfo.getUseUnitCode()));
List<EsBaseEnterpriseInfo.License> licenses = unitLicences.stream().map(lis -> {
EsBaseEnterpriseInfo.License esLicense = new EsBaseEnterpriseInfo.License();
BeanUtil.copyProperties(lis, esLicense);
return esLicense;
}).collect(Collectors.toList());
esBaseEnterpriseInfo.setLicenses(licenses);
return esBaseEnterpriseInfo;
}).collect(Collectors.toList());
enterpriseInfoDao.saveAll(esBaseEnterpriseInfos);
watch.stop();
log.info("综合统计企业信息入库结束,耗时:{}秒", watch.getTotalTimeSeconds());
return units.size();
}
public Integer initUserStatistData2Es() {
log.info("综合统计人员信息入库开始");
StopWatch watch = new StopWatch();
watch.start();
List<TzBaseEnterpriseInfo> units = tzBaseEnterpriseInfoMapper.selectList(new LambdaQueryWrapper<TzBaseEnterpriseInfo>()
.select(BaseEntity::getSequenceNbr,
TzBaseEnterpriseInfo::getUseCode,
TzBaseEnterpriseInfo::getUseUnit,
TzBaseEnterpriseInfo::getSuperviseOrgCode,
TzBaseEnterpriseInfo::getSuperviseOrgName
).eq(BaseEntity::getIsDelete, false));
Map<String, TzBaseEnterpriseInfo> useCodeEnterpriseMap = units.stream().collect(Collectors.toMap(TzBaseEnterpriseInfo::getUseCode, Function.identity(),(k1,k2)->k2));
LambdaQueryWrapper<TzsUserInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BaseEntity::getIsDelete, false)
.and(w->w.ne(TzsUserInfo::getTransferOut, "1").or().isNull(TzsUserInfo::getTransferOut))
.orderByDesc(BaseEntity::getSequenceNbr);
Integer userNum = userInfoMapper.selectCount(wrapper);
int pageSize = 1000;
int totalPage = Math.max(1, (int) Math.ceil((double)userNum / pageSize));
for (int i = 1; i <= totalPage; i++ ){
IPage<TzsUserInfo> tzsUserInfoPage = userInfoMapper.selectPage(new Page<>(i, pageSize), wrapper);
List<EsUserInfo> esUserInfos = tzsUserInfoPage.getRecords().stream().map(u->{
EsUserInfo esUserInfo = new EsUserInfo();
BeanUtil.copyProperties(u, esUserInfo);
esUserInfo.setSuperviseOrgName(useCodeEnterpriseMap.getOrDefault(u.getUnitCode(), new TzBaseEnterpriseInfo()).getSuperviseOrgName());
esUserInfo.setSuperviseOrgCode(useCodeEnterpriseMap.getOrDefault(u.getUnitCode(), new TzBaseEnterpriseInfo()).getSuperviseOrgCode());
esUserInfo.setLicenses(this.buildUserLicenses(u.getSequenceNbr()));
return esUserInfo;
}).collect(Collectors.toList());
esUserInfoDao.saveAll(esUserInfos);
}
watch.stop();
log.info("综合统计人员信息入库结束,耗时:{}秒", watch.getTotalTimeSeconds());
return units.size();
}
private List<EsUserInfo.License> buildUserLicenses(Long sequenceNbr) {
List<TzsUserPermission> permissions = userPermissionMapper.selectList(new LambdaQueryWrapper<TzsUserPermission>().eq(TzsUserPermission::getUserSeq, sequenceNbr));
return permissions.stream().map(p->{
EsUserInfo.License license = new EsUserInfo.License();
BeanUtil.copyProperties(p, license);
return license;
}).collect(Collectors.toList());
}
public Integer initEquipStatistData2Es() {
log.info("综合统计设备信息入库开始");
StopWatch watch = new StopWatch();
watch.start();
Integer maxVersion = useInfoService.getBaseMapper().selectMaxVersion();
// 1.非管道数据刷数据质量等级
List<String> refreshRecords = useInfoService.getBaseMapper().selectUseInfoOfOneVersionAll(maxVersion);
while (!refreshRecords.isEmpty()) {
List<ESEquipmentInfo> esEquipmentInfos = refreshRecords.parallelStream().map(record->{
ESEquipmentInfo esEquipmentInfo = new ESEquipmentInfo();
Optional<ESEquipmentCategoryDto> categoryDto = esEquipmentCategory.findById(record);
categoryDto.ifPresent(categoryEs -> {
BeanUtil.copyProperties(categoryEs, esEquipmentInfo);
IdxBizJgDesignInfo designInfo = idxBizJgDesignInfoServiceImpl.getOne(new LambdaQueryWrapper<IdxBizJgDesignInfo>()
.eq(IdxBizJgDesignInfo::getRecord,record)
.select(IdxBizJgDesignInfo::getRecord, IdxBizJgDesignInfo::getDesignUnitName, IdxBizJgDesignInfo::getDesignUnitCreditCode));
IdxBizJgFactoryInfo factoryInfo = factoryInfoService.getOne(new LambdaQueryWrapper<IdxBizJgFactoryInfo>()
.eq(IdxBizJgFactoryInfo::getRecord, record)
.select(IdxBizJgFactoryInfo::getRecord, IdxBizJgFactoryInfo::getProduceUnitCreditCode));
IdxBizJgInspectionDetectionInfo inspectionDetectionInfo = iIdxBizJgInspectionDetectionInfoService.queryNewestDetailByRecord(record);
esEquipmentInfo.setINSPECT_DATE(inspectionDetectionInfo != null ? inspectionDetectionInfo.getInspectDate() : null);
esEquipmentInfo.setNEXT_INSPECT_DATE(inspectionDetectionInfo != null ? inspectionDetectionInfo.getNextInspectDate() : null);
esEquipmentInfo.setDesignUnitCreditCode(designInfo.getDesignUnitCreditCode());
esEquipmentInfo.setDesignUnitName(designInfo.getDesignUnitName());
esEquipmentInfo.setProduceUnitCreditCode(factoryInfo.getProduceUnitCreditCode());
esEquipmentInfo.setInspections(Collections.singletonList(BeanUtil.copyProperties(inspectionDetectionInfo, ESEquipmentInfo.Inspection.class)));
esEquipmentInfo.setMaintenances(Collections.singletonList(BeanUtil.copyProperties(maintenanceRecordInfoService.queryNewestDetailByRecord(record), ESEquipmentInfo.Maintenance.class)));
});
return esEquipmentInfo;
}).collect(Collectors.toList());
useInfoService.getBaseMapper().updateVersionBatch(refreshRecords, maxVersion + 1);
esEquipmentDao.saveAll(esEquipmentInfos);
refreshRecords = useInfoService.getBaseMapper().selectUseInfoOfOneVersionAll(maxVersion);
}
watch.stop();
log.info("综合统计设备信息入库结束,耗时:{}秒", watch.getTotalTimeSeconds());
return refreshRecords.size();
}
}
package com.yeejoin.amos.boot.module.statistcs.biz.controller;
import com.yeejoin.amos.boot.module.statistcs.biz.service.impl.DataHandlerServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
@RestController
@RequestMapping(value = "/data-handler")
@Api(tags = "刷数据api")
@RequiredArgsConstructor
public class DataHandlerController {
private final DataHandlerServiceImpl dataHandlerService;
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "PUT", value = "企业数据刷入到综合统计的es", notes = "企业数据刷入到综合统计的es")
@PutMapping(value = "/company/init2Es")
public ResponseModel<String> init2EsCompany() {
dataHandlerService.init2EsCompany();
return ResponseHelper.buildResponse("success");
}
}
package com.yeejoin.amos.boot.module.statistcs.biz.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.module.common.api.dao.EsBaseEnterpriseInfoDao;
import com.yeejoin.amos.boot.module.common.api.entity.EsBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseUnitLicence;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseUnitLicenceMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class DataHandlerServiceImpl {
private final EsBaseEnterpriseInfoDao enterpriseInfoDao;
private final TzBaseEnterpriseInfoMapper enterpriseInfoMapper;
private final TzBaseUnitLicenceMapper licenceMapper;
public void init2EsCompany() {
// List<TzBaseEnterpriseInfo> units = enterpriseInfoMapper.selectList(null);
// List<EsBaseEnterpriseInfo> esBaseEnterpriseInfos = units.parallelStream().map(enterpriseInfo -> {
// EsBaseEnterpriseInfo esBaseEnterpriseInfo = new EsBaseEnterpriseInfo();
// esBaseEnterpriseInfo.setSequenceNbr(enterpriseInfo.getSequenceNbr() + "");
// esBaseEnterpriseInfo.setSuperviseOrgCode(enterpriseInfo.getSuperviseOrgCode());
// esBaseEnterpriseInfo.setUnitType(enterpriseInfo.getUnitType());
// esBaseEnterpriseInfo.setUseUnit(enterpriseInfo.getUseUnit());
// esBaseEnterpriseInfo.setUseUnitCode(enterpriseInfo.getUseUnitCode());
// List<TzBaseUnitLicence> unitLicences = licenceMapper.selectList(new LambdaQueryWrapper<TzBaseUnitLicence>().eq(TzBaseUnitLicence::getUnitCode, enterpriseInfo.getUseUnitCode()));
// List<EsBaseEnterpriseInfo.License> licenses = unitLicences.stream().map(lis -> {
// EsBaseEnterpriseInfo.License esLicense = new EsBaseEnterpriseInfo.License();
// esLicense.setExpiryDate(lis.getExpiryDate());
// esLicense.setCertTypeCode(lis.getCertTypeCode());
// esLicense.setUnitCode(lis.getUnitCode());
// esLicense.setCertNo(lis.getCertNo());
// return esLicense;
// }).collect(Collectors.toList());
// esBaseEnterpriseInfo.setLicenses(licenses);
// return esBaseEnterpriseInfo;
// }).collect(Collectors.toList());
// enterpriseInfoDao.saveAll(esBaseEnterpriseInfos);
loopSave();
}
private void loopSave() {
PageRequest pageRequest = PageRequest.of(0, 10000);
for (int i = 0; i < 200; i++) {
List<EsBaseEnterpriseInfo> batch = enterpriseInfoDao.findAll(pageRequest)
.getContent()
.stream()
.peek(info -> info.setSequenceNbr(null))
.collect(Collectors.toList());
enterpriseInfoDao.saveAll(batch);
}
}
}
\ No newline at end of file
......@@ -190,4 +190,16 @@ public class TzBaseEnterpriseInfo extends BaseEntity {
@ApiModelProperty(value = "注册类型")
private String registerType;
@ApiModelProperty(value = "其他附件")
private String otherAccessories;
@ApiModelProperty(value = "企业问题状态")
private String status;
@ApiModelProperty(value = "省内办公地址省#市#区")
private String officeRegion;
@ApiModelProperty(value = "省内详细办公地址")
private String officeAddress;
}
package com.yeejoin.amos.boot.module.ymt.api.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
......@@ -46,12 +47,24 @@ public class TzsUserInfo extends BaseEntity {
private String gender;
/**
* 岗位
* 岗位-保留兼容下游数据查询
*/
@TableField("post")
private String post;
/**
* 新岗位(后期post迁移数组至此)
*/
@TableField("new_post")
private String newPost;
/**
* 岗位名称-按照new_post显示
*/
@TableField("post_name")
private String postName;
/**
* 联系电话
*/
@TableField("phone")
......@@ -93,6 +106,24 @@ public class TzsUserInfo extends BaseEntity {
@TableField(value = "identification")
private String identification;
/**
* 证件照片
*/
@TableField(value = "appoint_doc")
private String appointDoc;
/**
* 执业注册
*/
@TableField(value = "practice_registration")
private String practiceRegistration;
/**
* 劳动合同
*/
@TableField(value = "labor_contract")
private String laborContract;
/**
* 账户名
......@@ -106,6 +137,7 @@ public class TzsUserInfo extends BaseEntity {
@TableField("unit_name")
private String unitName;
/**
* 企业编码
*/
......@@ -124,6 +156,18 @@ public class TzsUserInfo extends BaseEntity {
*/
@TableField("amos_user_id")
private String amosUserId;
/**
* 平台账号锁定状态
*/
@TableField("lock_status")
private String lockStatus;
/**
* 设备类型
*/
@TableField(value = "equip_type", updateStrategy = FieldStrategy.IGNORED)
private String equipType;
/**
* 内部人员编码
*/
......@@ -131,16 +175,36 @@ public class TzsUserInfo extends BaseEntity {
private String innerPersonCode;
/**
* 证件照片
* 其他附件
*/
@TableField(value = "appoint_doc")
private String appointDoc;
@TableField(value = "other_accessories")
private String otherAccessories;
/**
* 新岗位(后期post迁移数组至此)
* 验检验专用-级别-废弃,被permissionData替代
*/
@TableField("new_post")
private String newPost;
@Deprecated
@TableField(value = "permission_level")
private String permissionLevel;
/**
* 验检验专用-资质项目-废弃,被permissionData替代
*/
@Deprecated
@TableField(value = "permission_item")
private String permissionItem;
/**
* 验检验专用-资质数据json,替代:permission_level、permission_item
*/
@TableField(value = "permission_data")
private String permissionData;
/**
* 职称
*/
@TableField(value = "job_title")
private String jobTitle;
/**
* 二维码状态0异常1正常
......@@ -148,6 +212,27 @@ public class TzsUserInfo extends BaseEntity {
@TableField("qr_code_state")
private String qrCodeState;
@TableField("post_name")
private String postName;
/**
* 岗位子类型(多个逗号分割)
*/
@TableField(value = "sub_post", updateStrategy = FieldStrategy.IGNORED)
private String subPost;
/**
* 岗位子类型名称(多个逗号分割)
*/
@TableField(value = "sub_post_name", updateStrategy = FieldStrategy.IGNORED)
private String subPostName;
/**
* 人员转出标识(1:已转出,0:未转出,空值默认为未转出0)
*/
@TableField(value = "transfer_out")
protected String transferOut;
/**
* 人员转出时间
*/
@TableField(value = "transfer_out_time")
protected Date transferOutTime;
}
......@@ -19,9 +19,13 @@ public interface IdxBizJgUseInfoMapper extends BaseMapper<IdxBizJgUseInfo> {
List<IdxBizJgUseInfo> selectXAList();
List<RefreshDataDto> selectUseInfoOfOneVersion(Integer version);
List<RefreshDataDto> selectUseInfoOfOneVersion(@Param("version") Integer version);
List<String> selectUseInfoOfOneVersionAll(@Param("version") Integer version);
Integer selectMaxVersion();
void updateDataQualityScoreBatch(@Param("equips") List<EquipWaitRefreshDataQualityScore> refreshDataQualityScores, @Param("version") int version);
void updateVersionBatch(@Param("records") List<String> records, @Param("version") int version);
}
package com.yeejoin.amos.boot.module.ymt.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.common.api.entity.TzsUserPermission;
/**
* 用户资质信息表 Mapper 接口
*
* @author system_generator
* @date 2024-08-27
*/
public interface TzsUserPermissionMapper extends BaseMapper<TzsUserPermission> {
}
......@@ -45,14 +45,28 @@
LEFT JOIN idx_biz_jg_factory_info fi on fi."RECORD" = ui."RECORD"
where
jri.EQU_LIST !='8000'
AND (ui.VERSION <![CDATA[ <> ]]> 1 or ui.VERSION is null)
AND (ui.VERSION <![CDATA[ <> ]]> #{version} or ui.VERSION is null)
and jri.EQU_CATEGORY <![CDATA[ <> ]]> ''
and ui.is_into_management is not null
limit 10000
</select>
<select id="selectUseInfoOfOneVersionAll" resultType="java.lang.String">
SELECT
ui.record
from
"idx_biz_jg_use_info" ui
where
ui.VERSION <![CDATA[ <> ]]> #{version} or ui.VERSION is null
limit 10000
</select>
<select id="selectMaxVersion" resultType="java.lang.Integer">
SELECT
COALESCE(MAX(version),0) as version
FROM "idx_biz_jg_use_info"
</select>
<update id="updateVersionBatch">
<foreach collection="records" separator=";" item="record" open="" close="">
UPDATE idx_biz_jg_use_info SET "VERSION"=#{version} WHERE record = #{record}
</foreach>
</update>
</mapper>
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