Commit 6e454e53 authored by 韩桐桐's avatar 韩桐桐

Merge branch 'develop_tzs_register' into develop_tzs_bugfix

parents 97ad40d2 90564961
package com.yeejoin.amos.boot.biz.common.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface FieldDisplayDefine {
String value();
/**
* 字段别名 兼容前端使用
*
* @return 别名key
*/
String alias() default "";
Class<?> type() default String.class;
boolean isExist() default true;
}
package com.yeejoin.amos.boot.biz.common.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Group {
String value();
}
package com.yeejoin.amos.boot.module.jczs.api.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageParam {
int current = 0;
......
......@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.jczs.api.dto.EquEnterDto;
import com.yeejoin.amos.boot.module.jczs.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.jczs.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.jczs.api.vo.BaseEnterpriseVo;
import org.apache.ibatis.annotations.Param;
/**
* 企业数据信息 Mapper 接口
......@@ -45,4 +47,6 @@ public interface TzBaseEnterpriseInfoMapper extends BaseMapper<TzBaseEnterpriseI
IPage<TzBaseEnterpriseInfoDto> page(Page<TzBaseEnterpriseInfoDto> page, TzBaseEnterpriseInfoDto tzBaseEnterpriseInfoDto);
IPage<TzBaseEnterpriseInfoDto> pageList(Page<TzBaseEnterpriseInfoDto> page, TzBaseEnterpriseInfoDto tzBaseEnterpriseInfoDto, List orgCodeList);
List<BaseEnterpriseVo> queryBaseEnterpriseInIds(@Param("ids") List<String> ids);
}
......@@ -7,6 +7,7 @@ import com.yeejoin.amos.boot.module.jczs.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.jczs.api.entity.PageParam;
import com.yeejoin.amos.boot.module.jczs.api.entity.TzBaseEnterpriseInfo;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
......@@ -44,4 +45,6 @@ public interface ITzBaseEnterpriseInfoService extends IService<TzBaseEnterpriseI
TzBaseEnterpriseInfoDto getInfoByUseCode(String useCode);
String setLabel(List<Long> enterpriseIds, List<String> enterpriseLabels);
void export(HttpServletResponse response, String ids,TzBaseEnterpriseInfoDto tzBaseEnterpriseInfoDto);
}
......@@ -146,6 +146,24 @@
order by rec_date desc
</select>
<select id="queryBaseEnterpriseInIds" resultType="com.yeejoin.amos.boot.module.jczs.api.vo.BaseEnterpriseVo">
SELECT
*,
CONCAT(province,'/',city,'/',district) AS region,
CONCAT(street,'/',address) AS full_address
FROM
tz_base_enterprise_info
<where>
<if test='ids != null'>
and sequence_nbr in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
</where>
order by rec_date desc
</select>
<select id="selectByUseUnit" resultType="com.yeejoin.amos.boot.module.jczs.api.entity.TzBaseEnterpriseInfo">
select * from tz_base_enterprise_info where use_unit = #{useUnit}
</select>
......
......@@ -27,6 +27,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
......@@ -249,4 +250,11 @@ public class TzBaseEnterpriseInfoController {
return ResponseHelper.buildResponse(iTzBaseEnterpriseInfoService.setLabel(enterpriseIds, enterpriseLabel));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "企业信息列表数据导出", notes = "企业信息列表数据导出")
public void baseEnterpriseExport(HttpServletResponse response, String ids, TzBaseEnterpriseInfoDto tzBaseEnterpriseInfoDto) {
iTzBaseEnterpriseInfoService.export(response, ids, tzBaseEnterpriseInfoDto);
}
}
......@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.excel.ExcelUtil;
import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.jczs.api.dto.BaseUnitLicenceDto;
......@@ -20,6 +21,7 @@ import com.yeejoin.amos.boot.module.jczs.api.entity.SpeUseUnit;
import com.yeejoin.amos.boot.module.jczs.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.jczs.api.mapper.TzBaseEnterpriseInfoMapper;
import com.yeejoin.amos.boot.module.jczs.api.service.ITzBaseEnterpriseInfoService;
import com.yeejoin.amos.boot.module.jczs.api.vo.BaseEnterpriseVo;
import com.yeejoin.amos.boot.module.jczs.biz.utils.RedisUtil;
import com.yeejoin.amos.boot.module.jczs.flc.api.dto.RegUnitIcDto;
import com.yeejoin.amos.boot.module.jczs.flc.api.dto.RegUnitInfoDto;
......@@ -38,8 +40,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
......@@ -575,4 +579,23 @@ public class TzBaseEnterpriseInfoServiceImpl
return map;
}
/**
* 企业信息列表数据导出
*
* @param response 响应
* @param ids 数据id
*/
@Override
public void export(HttpServletResponse response, String ids, TzBaseEnterpriseInfoDto tzBaseEnterpriseInfoDto) {
List<BaseEnterpriseVo> exportData;
if (StringUtils.isEmpty(ids)) { // 前端不选行,导出列表所有的数据
IPage<TzBaseEnterpriseInfoDto> page = this.page(new PageParam(1,Integer.MAX_VALUE), tzBaseEnterpriseInfoDto);
exportData =JSON.parseArray(JSON.toJSONString(page.getRecords()), BaseEnterpriseVo.class) ;
} else { // 前端选行,导出所选行的数据
List<String> idsList = Arrays.asList(ids.split(","));
exportData = this.baseMapper.queryBaseEnterpriseInIds(idsList);
}
ExcelUtil.createTemplate(response, "企业信息列表数据", "企业信息列表", exportData, BaseEnterpriseVo.class, null, false);
}
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class BaseChangeDataDto implements Serializable {
private String changeId;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import java.io.Serializable;
public class BaseTechParamsFieldDto implements Serializable {
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@ApiModel(value = "变化的数据")
public class ChangeDataDto implements Serializable {
/**
* 必须字段-字段key
*/
private String columnKey;
/**
* 必须字段-字段描述
*/
private String columnLabel;
/**
* 必须字段-字段原始值
*/
private String columnOldValue;
/**
* 必须字段-字段新值
*/
private String columnNewValue;
/**
* 非必须字段-变化的数据id(设备的record、或者业务的id),持使用登记的设备信息变更、不同业务流程的业务数据变更
*/
private String changeId;
/**
* 非必须字段-业务数据分类:如使用登记、安装告知等
*/
private String bizType;
/**
* 非必须字段-变更数据的分类:如使用信息、制造信息、设计信息、技术参数 - key
*/
private String columnFamily;
/**
* 非必须字段-字段类型-扩展使用
*/
private String columnType;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel(value = "字段描述")
public class DynamicColumnDto implements Serializable {
@ApiModelProperty("数据库字段列")
private String columnName;
@ApiModelProperty("字段值")
private String columnValue;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
/**
* @author Administrator
* 用户操作日志
*/
@Data
@Document(indexName = "biz_data_operate_log", shards = 2)
public class ESDataChangeLogDto {
@Id
private String id;
@Field(type = FieldType.Keyword)
private String columnKey;
@Field(type = FieldType.Text)
private String columnKeyLabel;
@Field(type = FieldType.Text)
private String beforeData;
@Field(type = FieldType.Text)
private String afterData;
@Field(type = FieldType.Keyword)
private String batchId;
@Field(type = FieldType.Keyword)
private String userId;
@Field(type = FieldType.Long)
private Long createDate;
@Field(type = FieldType.Text)
private String requestDate;
@Field(type = FieldType.Keyword)
private String bizType;
@Field(type = FieldType.Keyword)
private String columnFamily;
@Field(type = FieldType.Keyword)
private String changeId;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@Group(value = "equip_design_info")
public class EquipDesignChangeDataDto extends BaseChangeDataDto {
@FieldDisplayDefine(value = "设计单位统一社会信用代码")
private String designUnitCreditCode;
@FieldDisplayDefine(value = "设计单位名称")
private String designUnitName;
@FieldDisplayDefine(value = "设计许可编号")
private String designLicenseNum;
@FieldDisplayDefine(value = "设计使用年限")
private String designUseDate;
@FieldDisplayDefine(value = "设计日期")
private String designDate;
@FieldDisplayDefine(value = "总图图号")
private String drawingDo;
@FieldDisplayDefine(value = "设计文件", type = JSON.class)
private String designDoc;
@FieldDisplayDefine(value = "设计文件鉴定单位")
private String appraisalUnit;
@FieldDisplayDefine(value = "设计文件鉴定日期")
private String appraisalDate;
@FieldDisplayDefine(value = "设计规范", type = JSON.class)
private String designStandard;
@FieldDisplayDefine(value = "其他附件", type = JSON.class)
private String otherAccessoriesDes;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@Group(value = "equip_factory_info")
public class EquipFactoryChangeDataDto extends BaseChangeDataDto {
@FieldDisplayDefine(value = "制造单位统一社会信用代码")
private String produceUnitCreditCode;
@FieldDisplayDefine(value = "制造单位名称")
private String produceUnitName;
@FieldDisplayDefine(value = "制造许可编号")
private String produceLicenseNum;
@FieldDisplayDefine(value = "出厂编号/产品编号")
private String factoryNum;
@FieldDisplayDefine(value = "制造日期")
private String produceDate;
@FieldDisplayDefine(value = "是否进口")
private String imported;
@FieldDisplayDefine(value = "制造国")
private String produceCountry;
@FieldDisplayDefine(value = "产品质量合格证", type = JSON.class)
private String productQualityYieldProve;
@FieldDisplayDefine(value = "安装及使用维护保养说明", type = JSON.class)
private String insUseMaintainExplain;
@FieldDisplayDefine(value = "其他附件", type = JSON.class)
private String otherAccessoriesFact;
@FieldDisplayDefine(value = "制造标准", type = JSON.class)
private String factoryStandard;
@FieldDisplayDefine(value = "制造监督检验报告", type = JSON.class)
private String factSupervisionInspectionReport;
@FieldDisplayDefine(value = "锅炉能效证明文件", type = JSON.class)
private String boilerEnergyEfficiencyCertificate;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@Group(value = "equip_register_info")
public class EquipRegisterChangeDataDto extends BaseChangeDataDto {
@FieldDisplayDefine(value = "设备种类" ,isExist = false)
private String equList;
@FieldDisplayDefine(value = "设备类别" ,isExist = false)
private String equCategory;
@FieldDisplayDefine(value = "设备代码")
private String equCode;
/**
* 1-手工输入、2-系统自动生成
*/
@FieldDisplayDefine(value = "设备代码类型" ,isExist = false)
private String equCodeType;
@FieldDisplayDefine(value = "设备品种")
private String equDefine;
@FieldDisplayDefine(value = "产品名称")
private String productName;
@FieldDisplayDefine(value = "设备型号")
private String equType;
@FieldDisplayDefine(value = "设备总价值(万元)")
private String equPrice;
@FieldDisplayDefine(value = "产品照片(可上传产品铭牌)", type = JSON.class)
private String productPhoto;
@FieldDisplayDefine(value = "其他附件", type = JSON.class)
private String otherAccessoriesReg;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class EquipTechParamChangeDataDto extends BaseChangeDataDto {
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.Data;
import java.util.Map;
@Data
public class MultiChangeItemData {
String record;
Map<String, Object> detail;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import java.util.HashMap;
public class RequestChangeData extends JSONObject {
public static final String multiDataKey = "tableData";
public IBizDataChangeHandleStrategy.ModelType getModelType() {
if (!this.containsKey(multiDataKey)) {
return IBizDataChangeHandleStrategy.ModelType.single;
}
return IBizDataChangeHandleStrategy.ModelType.batch;
}
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 安全追溯-锅炉
*
* @author system_generator
* @date 2023-08-17
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Group(value = "tech_params_boiler")
public class TechParamsBoilerChangeFieldDto extends BaseTechParamsFieldDto {
@FieldDisplayDefine(value = "设备级别")
private String deviceLevel;
@FieldDisplayDefine(value = "额定蒸发量(热功率)")
private String ratedEvaporationCapacityThermalPower;
@FieldDisplayDefine(value = "额定工作压力")
private String ratedWorkingPressure;
@FieldDisplayDefine(value = "额定工作温度")
private String ratedOperatingTemperature;
@FieldDisplayDefine(value = "设计热效率")
private String designThermalEfficiency;
@FieldDisplayDefine(value = "给水温度")
private String feedwaterTemperature;
@FieldDisplayDefine(value = "额定出/回水(油)温度")
private String ratedOutletReturnWaterOilTemperature;
@FieldDisplayDefine(value = "锅炉本体水(油)容积")
private String waterOilVolumeOfBoilerProper;
@FieldDisplayDefine(value = "整装锅炉本体液压试验介质/压力")
private String hydraulicTestMediumPressureOfPackagedBoilerBody;
@FieldDisplayDefine(value = "再热器进(出)口温度")
private String inletOutletTemperatureOfReheater;
@FieldDisplayDefine(value = "再热器进(出)口压力")
private String reheaterInletOutletPressure;
@FieldDisplayDefine(value = "再热蒸汽流量")
private String reheatSteamFlow;
@FieldDisplayDefine(value = "有机热载体锅炉气密试验介质/压力")
private String glAirtightTest;
@FieldDisplayDefine(value = "燃料(热源)种类")
private String fuelType;
@FieldDisplayDefine(value = "受压部件名称")
private String nameOfPressureParts;
@FieldDisplayDefine(value = "受压部件材料")
private String materialOfPressureParts;
@FieldDisplayDefine(value = "受压部件壁厚")
private String wallThicknessOfPressureParts;
@FieldDisplayDefine(value = "受压部件无损检测方法")
private String nonDestructiveTestingMethodsForPressureParts;
@FieldDisplayDefine(value = "受压部件无损检测比例")
private String proportionOfNdtForPressureParts;
@FieldDisplayDefine(value = "受压部件热处理温度")
private String heatTreatmentTemperatureOfPressureParts;
@FieldDisplayDefine(value = "受压部件热处理时间")
private String heatTreatmentTimeOfPressureParts;
@FieldDisplayDefine(value = "受压部件水(耐)压试验介质")
private String hydrostaticTestMedium;
@FieldDisplayDefine(value = "受压部件水(耐)压试验压力")
private String hydrostaticTestPressure;
@FieldDisplayDefine(value = "燃烧方式")
private String combustionMode;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 安全追溯-电梯
*
* @author system_generator
* @date 2023-08-17
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Group(value = "tech_params_elevator")
public class TechParamsElevatorChangeFieldDto extends BaseTechParamsFieldDto {
@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 = "控制方式")
private String controlMode;
@FieldDisplayDefine(value = "油缸数量")
private Integer numberCylinders;
@FieldDisplayDefine(value = "顶升方式")
private String jackingType;
@FieldDisplayDefine(value = "区域防爆等级")
private String explosionproofGrade;
@FieldDisplayDefine(value = "整机防爆标志")
private String explosionproofSignComplete;
@FieldDisplayDefine(value = "名义速度")
private String nominalSpeed;
@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.jg.api.dto;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.annotation.TableField;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 安全追溯-起重机械
*
* @author system_generator
* @date 2023-08-17
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Group(value = "tech_params_lifting")
public class TechParamsLiftingChangeFieldDto extends BaseTechParamsFieldDto {
@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 = "工作级别")
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 = "区域防爆等级")
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.jg.api.dto;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 安全追溯-压力管道
*
* @author system_generator
* @date 2023-08-17
*/
@Data
@Accessors(chain = true)
@Group(value = "tech_params_pipeline")
public class TechParamsPipelineChangeFieldDto extends BaseTechParamsFieldDto {
@FieldDisplayDefine(value = "管道类别")
private String pipelineClass;
@FieldDisplayDefine(value = "管道编号")
private String pipelineNumber;
@FieldDisplayDefine(value = "管道级别")
private String deviceLevel;
@FieldDisplayDefine(value = "公称直径")
private String nominalDiameter;
@FieldDisplayDefine(value = "公称壁厚")
private String wallThickness;
@FieldDisplayDefine(value = "管道长度")
private String pipeLength;
@FieldDisplayDefine(value = "起/始位置", type = JSON.class)
private String startePosition;
@FieldDisplayDefine(value = "压力")
private String pressure;
@FieldDisplayDefine(value = "温度")
private String temperature;
@FieldDisplayDefine(value = "介质")
private String medium;
@FieldDisplayDefine(value = "备注")
private String remarks;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 安全追溯-游乐设施
*
* @author system_generator
* @date 2023-08-17
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Group(value = "tech_params_rides")
public class TechParamsRidesChangeFieldDto extends BaseTechParamsFieldDto {
@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.jg.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 安全追溯-索道
*
* @author system_generator
* @date 2023-08-17
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Group(value = "tech_params_ropeway")
public class TechParamsRopewayChangeFieldDto extends BaseTechParamsFieldDto {
@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 = "运载索")
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.jg.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 安全追溯-场内车辆
*
* @author system_generator
* @date 2023-08-17
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Group(value = "tech_params_vehicle")
public class TechParamsVehicleChangeFieldDto extends BaseTechParamsFieldDto {
@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 = "设备保护等级(防爆)")
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.jg.api.dto;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 安全追溯-压力容器
*
* @author system_generator
* @date 2023-08-17
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Group(value = "tech_params_vessel")
public class TechParamsVesselChangeFieldDto extends BaseTechParamsFieldDto {
@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 = "主体结构型式")
private String mainStructureType;
@FieldDisplayDefine(value = "支座型式")
private String support;
@FieldDisplayDefine(value = "安装型式")
private String installation;
@FieldDisplayDefine(value = "保温绝热方式")
private String insulation;
@FieldDisplayDefine(value = "无损检测方法")
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;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class UseRegisterChangeDataDto extends BaseChangeDataDto {
}
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.jg.api.bo.JgBizCountDataBO;
import com.yeejoin.amos.boot.module.jg.api.dto.DynamicColumnDto;
import com.yeejoin.amos.boot.module.jg.api.dto.ReportAnalysisSearchDTO;
import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory;
import org.apache.ibatis.annotations.Param;
......@@ -184,11 +185,23 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> {
Page<Map<String,Object>> countBizFinishedNumForDPListBGDJ(@Param("page") Page<Map<String,Object>> page, @Param("orgCode") String orgCode, @Param("dto") DPFilterParamDto dpFilterParamForDetailDto);
Page<Map<String,Object>> countBizFinishedNumForDPListZXBX(@Param("page") Page<Map<String,Object>> page, @Param("orgCode") String orgCode, @Param("dto") DPFilterParamDto dpFilterParamForDetailDto);
void updateTechParamDynamic(@Param(value = "tableName") String tableName,@Param(value = "record") String record, @Param(value = "columns") List<DynamicColumnDto> columns);
/**
* 当前设备在流程中的申请单号
* @param record 设备id
* @return 申请单号
*/
List<String> findEquipInUseService(@Param("record") String record);
/**
* 查询指定设备,使用登记后,后续业务的数据
* @param record 设备标识
* @return 后续业务数量
*/
Integer countBizNumAfterUseReg(@Param("record") String record);
}
package com.yeejoin.amos.boot.module.jg.api.service;
import java.util.Map;
public interface IBizDataChangeHandleStrategy {
/**
* 可处理的业务类型(使用登记等)
*
* @return 业务类型
*/
String canHandleBizType();
/**
* 获取变更信息详情
*
* @param applyNo 单据编号
* @param model single, batch
* @param bizId 设备record
* @return 变更信息详情
*/
Map<String, ?> getDetail(String applyNo, ModelType model, String bizId);
/**
* 保存
*
* @param applyNo 单据编号
* @param model single, batch
* @param changeData 变更数据
*/
void doSave(String applyNo, ModelType model, Map<String, Object> changeData);
/**
* 单据方式:单个处理、批量处理
*/
enum ModelType {
single,
batch
}
String DEFAULT_VALUE = "default";
}
......@@ -16,7 +16,7 @@ public interface IShCarService {
Page<ShCarDto> queryForShCarPage(Page<ShCarDto> page, ShCarDto dto);
Boolean claim(Map<String, Object> paramMap);
Boolean claim(String claimOneself,Map<String, Object> paramMap);
ShCar searchForSanHan(Map<?, ?> map);
}
package com.yeejoin.amos.boot.module.jg.api.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel(value = "变化的数据")
public class ChangeDataVo implements Serializable {
/**
* 必须字段-字段key
*/
private String columnKey;
/**
* 必须字段-字段描述
*/
private String columnLabel;
/**
* 必须字段-字段原始值
*/
private Object columnOldValue;
/**
* 必须字段-字段新值
*/
private Object columnNewValue;
/**
* 非必须字段-变化的数据id(设备的record、或者业务的id),持使用登记的设备信息变更、不同业务流程的业务数据变更
*/
private String changeId;
}
......@@ -113,6 +113,15 @@ public class ShCarEquVo {
private String produceUnitName;
private String equList;
private String equCategory;
private String equDefine;
/**
* 是否车用气瓶
*/
private String whetherVehicleCylinder;
public ShCarEquVo(ShCarEqu shCarEqu) {
this.setSequenceNbr(shCarEqu.getSequenceNbr());
......
......@@ -105,6 +105,7 @@
where instance_id = #{instanceId}
</update>
<select id="getUserPhone" resultType="java.util.Map">
SELECT phone
FROM "tzs_user_info"
......@@ -2445,4 +2446,74 @@
and (a.status <![CDATA[ <> ]]> '已作废')
)
</select>
<update id="updateTechParamDynamic">
<if test="columns != null and columns.size > 0">
update
${tableName}
set
<foreach collection="columns" item="column" separator=",">
${column.columnName} = #{column.columnValue}
</foreach>
where record = #{record}
</if>
</update>
<select id="countBizNumAfterUseReg" resultType="java.lang.Integer">
select
sum(inUseNumber)
from (
select
count(1) as inUseNumber
from
tzs_jg_change_registration_reform a,
tzs_jg_change_registration_reform_eq b
where
a.sequence_nbr = b.equip_transfer_id
and b.equ_id = #{record}
and (a.audit_status <![CDATA[ <> ]]> '使用单位待提交' and a.audit_status <![CDATA[ <> ]]> '已作废')
UNION all
select
count(1) as inUseNumber
from
tzs_jg_change_registration_transfer a,
tzs_jg_change_registration_transfer_eq b
where
a.sequence_nbr = b.equip_transfer_id
and b.equ_id = #{record}
and (a.audit_status <![CDATA[ <> ]]> '使用单位待提交' and a.audit_status <![CDATA[ <> ]]> '已作废')
UNION all
select
count(1) as inUseNumber
from
tzs_jg_change_registration_unit a,
tzs_jg_change_registration_unit_eq b
where
a.sequence_nbr = b.unit_change_registration_id
and b.equ_id = #{record}
and (a.status <![CDATA[ <> ]]> '使用单位待提交' and a.status <![CDATA[ <> ]]> '已作废')
UNION all
select
count(1) as inUseNumber
from
tzs_jg_scrap_cancel a,
tzs_jg_scrap_cancel_eq b
where
a.sequence_nbr = b.equip_transfer_id
and b.equ_id = #{record}
and (a.audit_status <![CDATA[ <> ]]> '使用单位待提交' and a.audit_status <![CDATA[ <> ]]> '已作废')
UNION all
select
count(1) as inUseNumber
from
(SELECT
json_array_elements(e.equip_info)->>'SEQUENCE_NBR' AS record
FROM
tzs_jg_change_registration_name_eq e,
tzs_jg_change_registration_name n
where
n.sequence_nbr = e.name_change_registration_id
and n.audit_status <![CDATA[ <> ]]> '使用单位待提交' and n.audit_status <![CDATA[ <> ]]> '已作废') ne
where
ne.record = #{record}
)
</select>
</mapper>
......@@ -159,7 +159,7 @@ public class PressureVesselListener extends AnalysisEventListener<EquipInfoCylin
private void checkEquCodeUniqueness(String equCode) {
// 根据设备代码检查唯一性
Integer count = idxBizJgRegisterInfoMapper.selectByEquCodeAndClaimStatus(equCode,"");
Integer count = idxBizJgRegisterInfoMapper.selectByEquCodeAndClaimStatus(equCode,"",null);
if (count > 0) {
result.append("设备代码系统中已存在");
}
......
package com.yeejoin.amos.boot.module.jg.biz.context;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* @author Administrator
*/
@Component
public class BizDataHandleStrategyContext implements ApplicationContextAware {
private static final Map<String, IBizDataChangeHandleStrategy> dataProcessStrategyHashMap = new HashMap<>();
public static IBizDataChangeHandleStrategy getStrategy(String bizType) {
return Optional.ofNullable(dataProcessStrategyHashMap.get(bizType)).orElseThrow(() -> new RuntimeException(String.format("not found %s type strategy", bizType)));
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
Map<String, IBizDataChangeHandleStrategy> strategyBeans = applicationContext.getBeansOfType(IBizDataChangeHandleStrategy.class);
if (strategyBeans.isEmpty()) {
return;
}
for (IBizDataChangeHandleStrategy strategy : strategyBeans.values()) {
dataProcessStrategyHashMap.put(strategy.canHandleBizType(), strategy);
}
}
}
package com.yeejoin.amos.boot.module.jg.biz.context;
import com.yeejoin.amos.boot.module.jg.biz.service.IChangeDataProcessStrategy;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* @author Administrator
*/
@Component
public class DataProcessStrategyContext implements ApplicationContextAware {
private static final Map<IBizDataChangeHandleStrategy.ModelType, IChangeDataProcessStrategy> dataProcessStrategyHashMap = new HashMap<>();
public static IChangeDataProcessStrategy getStrategy(IBizDataChangeHandleStrategy.ModelType modelType) {
return Optional.ofNullable(dataProcessStrategyHashMap.get(modelType)).orElseThrow(() -> new RuntimeException(String.format("not found %s type strategy", modelType)));
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
Map<String, IChangeDataProcessStrategy> strategyBeans = applicationContext.getBeansOfType(IChangeDataProcessStrategy.class);
if (strategyBeans.isEmpty()) {
return;
}
for (IChangeDataProcessStrategy strategy : strategyBeans.values()) {
dataProcessStrategyHashMap.put(strategy.canHandleMode(), strategy);
}
}
}
package com.yeejoin.amos.boot.module.jg.biz.controller;
import com.yeejoin.amos.boot.module.jg.api.dto.RequestChangeData;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.BizDataChangeServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
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;
import java.util.Map;
@RestController
@RequestMapping(value = "/data-change")
@Api(tags = "业务数据变化处理控制器")
public class BizDataChangeController {
private final BizDataChangeServiceImpl bizDataChangeService;
public BizDataChangeController(BizDataChangeServiceImpl bizDataChangeService) {
this.bizDataChangeService = bizDataChangeService;
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/{bizType}/save")
@ApiOperation(value = "业务数据变更保存", httpMethod = "POST")
public ResponseModel<String> save(@RequestParam String applyNo,
@PathVariable String bizType,
@RequestBody RequestChangeData changeData) {
bizDataChangeService.save(applyNo, bizType, changeData);
return ResponseHelper.buildResponse("success");
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{bizType}/detail")
@ApiOperation(value = "查询可业务变更的字段及默认值", httpMethod = "GET")
public ResponseModel<Map<String, ?>> getDetail(@RequestParam(required = false) String applyNo,
@PathVariable String bizType,
IBizDataChangeHandleStrategy.ModelType model,
@RequestParam(required = false) String bizId) {
return ResponseHelper.buildResponse(bizDataChangeService.queryDetail(applyNo, bizType, model, bizId));
}
}
......@@ -17,6 +17,7 @@ import org.typroject.tyboot.component.event.RestEventTrigger;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
......@@ -124,10 +125,12 @@ public class JgChangeVehicleRegistrationUnitController extends BaseController {
public ResponseModel<Page<JgUseRegistrationManageDto>> getUseRegistrationCodeData(
@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@RequestParam(value = "useUnitCreditCode") String useUnitCreditCode,
@RequestParam(value = "useUnitCreditCode", required = false) String useUnitCreditCode,
@RequestParam(value = "whetherVehicleCylinder") String whetherVehicleCylinder,
@RequestParam(value = "certificateStatus") String certificateStatus,
@RequestParam(value = "useRegistrationCode", required = false) String useRegistrationCode) {
if (ValidationUtil.isEmpty(useUnitCreditCode))
throw new BadRequest("请先选择原使用单位");
JgUseRegistrationManageDto dto = new JgUseRegistrationManageDto();
Page<JgUseRegistrationManageDto> page = new Page<JgUseRegistrationManageDto>();
page.setCurrent(current);
......
......@@ -2,6 +2,7 @@ package com.yeejoin.amos.boot.module.jg.biz.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sun.org.apache.xpath.internal.operations.Bool;
import com.yeejoin.amos.boot.module.jg.api.dto.ShCarDto;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistrationManage;
import com.yeejoin.amos.boot.module.jg.api.entity.ShCar;
......@@ -9,6 +10,8 @@ import com.yeejoin.amos.boot.module.jg.api.entity.ShCarEqu;
import com.yeejoin.amos.boot.module.jg.api.service.IShCarService;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.JgUseRegistrationManageServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.ShCarEquServiceImpl;
import io.swagger.annotations.ApiParam;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Api;
......@@ -40,6 +43,9 @@ import java.util.*;
public class ShCarController extends BaseController {
@Autowired
ShCarEquServiceImpl shCarEquService;
@Autowired
ShCarServiceImpl shCarServiceImpl;
@Autowired
......@@ -115,21 +121,21 @@ public class ShCarController extends BaseController {
public ResponseModel<Page<ShCarDto>> queryForPage(@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
ShCarDto dto) {
Page<ShCarDto> page = new Page<>();
page.setCurrent(current);
page.setSize(size);
Page<ShCarDto> page = new Page<>(current, size);
Page<ShCarDto> shCarDtoPage = iShCarService.queryForShCarPage(page, dto);
shCarDtoPage.getRecords().forEach(record -> {
if ("1".equals(record.getClaimedFlag())) {
record.setClaimedFlag("是");
// 填充 证管理表的seq,用与认领后跳转证详情页
JgUseRegistrationManage manage = jgUseRegistrationManageServiceImpl.getBaseMapper().selectOne(new LambdaQueryWrapper<JgUseRegistrationManage>()
.eq(JgUseRegistrationManage::getUseRegistrationCode, record.getUseRegistrationCode()));
record.setCertificateSeq(String.valueOf(manage.getSequenceNbr()));
} else if ("0".equals(record.getClaimedFlag())) {
record.setClaimedFlag("否");
}
});
Optional.ofNullable(shCarDtoPage.getRecords()).ifPresent(records ->
records.forEach(record -> {
if ("1".equals(record.getClaimedFlag())) {
record.setClaimedFlag("是");
JgUseRegistrationManage manage = jgUseRegistrationManageServiceImpl.getBaseMapper()
.selectOne(new LambdaQueryWrapper<JgUseRegistrationManage>()
.eq(JgUseRegistrationManage::getUseRegistrationCode, record.getUseRegistrationCode()));
record.setCertificateSeq(manage != null ? String.valueOf(manage.getSequenceNbr()) : null);
} else if ("0".equals(record.getClaimedFlag())) {
record.setClaimedFlag("否");
}
})
);
return ResponseHelper.buildResponse(shCarDtoPage);
}
......@@ -161,6 +167,36 @@ public class ShCarController extends BaseController {
return ResponseHelper.buildResponse(shCarServiceImpl.searchForSanHan(map));
}
/**
* 数据查询,校验是否是三环系统数据 (三个入参必须同时满足)
*
* @param useRegistrationCode 使用登记证编号
* @param carNumber 车牌号
* @param identificationCode 车辆VIN码
* @return result
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "数据查询,校验是否是三环系统数据", notes = "数据查询,校验是否是三环系统数据")
@GetMapping(value = "/searchForSanHanAllParams")
public ResponseModel<ShCar> searchForSanHan(@ApiParam(name = "使用登记证编号") @RequestParam String useRegistrationCode,
@ApiParam(name = "车牌号") @RequestParam String carNumber,
@ApiParam(name = "车辆VIN码") @RequestParam String identificationCode) {
if (StringUtils.isEmpty(useRegistrationCode) || StringUtils.isEmpty(carNumber) || StringUtils.isEmpty(identificationCode))
return ResponseHelper.buildResponse(new ShCar());
LambdaQueryWrapper<ShCar> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ShCar::getClaimedFlag, Boolean.FALSE);
wrapper.eq(ShCar::getCarNumber, carNumber.trim());
wrapper.eq(ShCar::getUseRegistrationCode, useRegistrationCode.trim());
wrapper.eq(ShCar::getFrameNumber, identificationCode.trim());
ShCar shCar = shCarServiceImpl.getBaseMapper().selectList(wrapper)
.stream()
.findFirst()
.orElse(new ShCar());
if (StringUtils.isEmpty(shCar.getSequenceNbr()))
return ResponseHelper.buildResponse(new ShCar());
return ResponseHelper.buildResponse(shCar);
}
/**
* 认领三环系统数据
......@@ -170,7 +206,8 @@ public class ShCarController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "认领三环系统数据", notes = "认领三环系统数据")
@PostMapping(value = "/claim")
public ResponseModel<Boolean> claim(@RequestBody Map<String, Object> paramMap) {
return ResponseHelper.buildResponse(shCarServiceImpl.claim(paramMap));
public ResponseModel<Boolean> claim(@RequestParam(value = "claimOneself",defaultValue = "true")String claimOneself,
@RequestBody Map<String, Object> paramMap) {
return ResponseHelper.buildResponse(shCarServiceImpl.claim(claimOneself,paramMap));
}
}
......@@ -19,6 +19,7 @@ import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import java.util.List;
import java.util.Map;
/**
*
......@@ -120,8 +121,9 @@ public class ShCarEquController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "汽车详细信息列表", notes = "汽车详细信息列表")
@GetMapping(value = "/selectByCarId")
public ResponseModel<CarAndEquVo> selectByCarId(@RequestParam String carId) {
public ResponseModel<Map<String,Object>> selectByCarId(@RequestParam(value = "carId") String carId,
@RequestParam(value = "claimOneself") String claimOneself) {
ReginParams reginParams = getSelectedOrgInfo();
return ResponseHelper.buildResponse(shCarEquServiceImpl.queryByCarId(carId,reginParams));
return ResponseHelper.buildResponse(shCarEquServiceImpl.queryByCarId(carId,claimOneself,reginParams));
}
}
package com.yeejoin.amos.boot.module.jg.biz.dao;
import com.yeejoin.amos.boot.module.jg.api.dto.ESDataChangeLogDto;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
/**
* @author Administrator
*/
@Repository
public interface ESDataChangeLogDao extends PagingAndSortingRepository<ESDataChangeLogDto, String> {
}
package com.yeejoin.amos.boot.module.jg.biz.event;
import com.yeejoin.amos.boot.module.jg.api.dto.ChangeDataDto;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
import org.typroject.tyboot.core.foundation.context.RequestContextModel;
import java.util.List;
/**
* @author Administrator
*/
@Getter
public class ChangeDataEvent extends ApplicationEvent {
private final List<ChangeDataDto> data;
private final RequestContextModel requestContext;
/**
* 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 ChangeDataEvent(Object source, List<ChangeDataDto> data, RequestContextModel requestContext) {
super(source);
this.data = data;
this.requestContext = requestContext;
}
}
package com.yeejoin.amos.boot.module.jg.biz.event.listener;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.jg.api.dto.ChangeDataDto;
import com.yeejoin.amos.boot.module.jg.api.dto.ESDataChangeLogDto;
import com.yeejoin.amos.boot.module.jg.biz.dao.ESDataChangeLogDao;
import com.yeejoin.amos.boot.module.jg.biz.event.ChangeDataEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.foundation.context.RequestContextModel;
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
*/
@Component
@Slf4j
public class ChangeDataEventListener {
@Value("${changeData.deal.thread.number:1}")
private int threadNumber;
private final ESDataChangeLogDao esDataChangeLogDao;
private final BlockingQueue<ChangeDataEvent> queue = new LinkedBlockingQueue<>();
public ChangeDataEventListener(ESDataChangeLogDao esDataChangeLogDao) {
this.esDataChangeLogDao = esDataChangeLogDao;
}
@EventListener(value = ChangeDataEvent.class)
public void handleTransactionalEvent(ChangeDataEvent event) {
log.info("收到用户变更业务数据消息:{}", JSONObject.toJSONString(event));
queue.add(event);
}
@PostConstruct
public void init() {
ExecutorService executorService = Executors.newFixedThreadPool(threadNumber);
for (int i = 0; i < threadNumber; i++) {
executorService.execute(() -> {
while (true) {
try {
ChangeDataEvent event = queue.take();
this.dealData(event);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
});
}
}
private void dealData(ChangeDataEvent event) {
List<ChangeDataDto> changeDataDtos = event.getData();
RequestContextModel requestContextModel = event.getRequestContext();
Date date = new Date();
List<ESDataChangeLogDto> logs = changeDataDtos.parallelStream().map(changeDataDto -> {
ESDataChangeLogDto changeLogDto = new ESDataChangeLogDto();
changeLogDto.setColumnKey(changeDataDto.getColumnKey());
changeLogDto.setColumnKeyLabel(changeDataDto.getColumnLabel());
changeLogDto.setBeforeData(changeDataDto.getColumnOldValue());
changeLogDto.setAfterData(changeDataDto.getColumnNewValue());
changeLogDto.setUserId(requestContextModel.getExcutedUserId());
changeLogDto.setCreateDate(date.getTime());
changeLogDto.setRequestDate(DateUtil.formatDateTime(date));
changeLogDto.setChangeId(changeDataDto.getChangeId());
changeLogDto.setColumnFamily(changeDataDto.getColumnFamily());
changeLogDto.setBizType(changeDataDto.getBizType());
changeLogDto.setBatchId(requestContextModel.getTraceId());
return changeLogDto;
}).collect(Collectors.toList());
esDataChangeLogDao.saveAll(logs);
log.info("es 操作日志数据入库成功:{}条", logs.size());
}
}
package com.yeejoin.amos.boot.module.jg.biz.factory;
import com.yeejoin.amos.boot.module.jg.api.dto.*;
import java.util.HashMap;
import java.util.Map;
public class ChangeItemFactory {
private static final Map<String, Class<? extends BaseChangeDataDto>> ITEM_FACTORY = new HashMap<>();
static {
// 使用登记信息
ITEM_FACTORY.put("biz_use_register_info", UseRegisterChangeDataDto.class);
// 设备-注册登记信息
ITEM_FACTORY.put("equip_register_info", EquipRegisterChangeDataDto.class);
// 设备-制造信息
ITEM_FACTORY.put("equip_factory_info", EquipFactoryChangeDataDto.class);
// 设备-设计信息
ITEM_FACTORY.put("equip_design_info", EquipDesignChangeDataDto.class);
}
public static Class<? extends BaseChangeDataDto> getItemGroupClass(String group) {
return ITEM_FACTORY.get(group);
}
}
package com.yeejoin.amos.boot.module.jg.biz.service;
import com.yeejoin.amos.boot.module.jg.api.dto.ChangeDataDto;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import java.util.List;
import java.util.Map;
/**
* 事件处理监听器,将前端数据解析为java对象格式
*/
public interface IChangeDataProcessStrategy {
/**
* 事件处理
*/
List<ChangeDataDto> handle(Map<String, Object> changeData, String defaultChangeId);
Map<String, ?> getDetail(String applyNo, String bizId);
/**
* 可处理类型
*
* @return 可处理的事件
*/
IBizDataChangeHandleStrategy.ModelType canHandleMode();
}
......@@ -228,4 +228,13 @@ public interface ICommonService {
* @return
*/
Boolean checkEquCodeUniqueness(String equCode);
/**
* 检查使用登记证号全局唯一
*
* @param useRegistrationCode 使用登记证号
* @param equipId 设备record
* @return
*/
Boolean useRegistrationCertificateAccountUnique(String useRegistrationCode, String equipId);
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
public class BaseUseRegisterResultData {
public static final String HAPPEN_AFTER_BIZ = "happenAfterBiz";
private final JSONObject data;
public BaseUseRegisterResultData(JSONObject data) {
this.data = data;
}
public JSONObject getData() {
return data;
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.api.entity.JgRegistrationHistory;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistration;
import com.yeejoin.amos.boot.module.jg.api.enums.CylinderTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgUseRegistrationMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import com.yeejoin.amos.boot.module.jg.biz.service.IChangeDataProcessStrategy;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
/**
* 批量维护使用登记策略实现类
*/
@Component
public class BatchDataChangeProcessStrategy implements IChangeDataProcessStrategy {
private final JgUseRegistrationServiceImpl useRegistrationService;
private final JgRegistrationHistoryServiceImpl jgRegistrationHistoryService;
private final JgUseRegistrationMapper jgUseRegistrationMapper;
private final CommonEquipDataProcessService commonEquipDataProcessService;
public BatchDataChangeProcessStrategy(JgUseRegistrationServiceImpl useRegistrationService, JgRegistrationHistoryServiceImpl jgRegistrationHistoryService, JgUseRegistrationMapper jgUseRegistrationMapper, CommonEquipDataProcessService commonEquipDataProcessService) {
this.useRegistrationService = useRegistrationService;
this.jgRegistrationHistoryService = jgRegistrationHistoryService;
this.jgUseRegistrationMapper = jgUseRegistrationMapper;
this.commonEquipDataProcessService = commonEquipDataProcessService;
}
@Override
public List<ChangeDataDto> handle(Map<String, Object> changeData, String defaultChangeId) {
JSONObject data = (JSONObject) changeData;
JSONArray equips = data.getJSONArray(RequestChangeData.multiDataKey);
List<MultiChangeItemData> items = equips.toJavaList(MultiChangeItemData.class);
List<ChangeDataDto> allChangeColumns = new ArrayList<>();
// 校验
items.forEach(item -> {
String record = item.getRecord();
Map<String, Object> itemData = item.getDetail();
if (itemData != null) {
EquipRegisterChangeDataDto registerChangeDataDto = commonEquipDataProcessService.castMap2Bean(itemData, EquipRegisterChangeDataDto.class);
EquipFactoryChangeDataDto factoryChangeDataDto = commonEquipDataProcessService.castMap2Bean(itemData, EquipFactoryChangeDataDto.class);
EquipDesignChangeDataDto designChangeDataDto = commonEquipDataProcessService.castMap2Bean(itemData, EquipDesignChangeDataDto.class);
// 前置检验
commonEquipDataProcessService.checkValidField(record, registerChangeDataDto, null, null, null);
commonEquipDataProcessService.checkValidField(record, factoryChangeDataDto, registerChangeDataDto.getEquList(), registerChangeDataDto.getEquCategory(), registerChangeDataDto.getEquDefine());
commonEquipDataProcessService.checkValidField(record, designChangeDataDto, registerChangeDataDto.getEquList(), registerChangeDataDto.getEquCategory(), registerChangeDataDto.getEquDefine());
}
});
// 入库
items.forEach(item -> {
String record = item.getRecord();
Map<String, Object> itemData = item.getDetail();
if (itemData != null) {
EquipRegisterChangeDataDto registerChangeDataDto = commonEquipDataProcessService.castMap2Bean(itemData, EquipRegisterChangeDataDto.class);
EquipFactoryChangeDataDto factoryChangeDataDto = commonEquipDataProcessService.castMap2Bean(itemData, EquipFactoryChangeDataDto.class);
EquipDesignChangeDataDto designChangeDataDto = commonEquipDataProcessService.castMap2Bean(itemData, EquipDesignChangeDataDto.class);
commonEquipDataProcessService.buildChangeFields(record, designChangeDataDto, factoryChangeDataDto, registerChangeDataDto, allChangeColumns);
// 设备制造、设计、注册信息业务处理落库
commonEquipDataProcessService.dealBizDataForEquip(record, registerChangeDataDto);
commonEquipDataProcessService.dealBizDataForEquip(record, factoryChangeDataDto);
commonEquipDataProcessService.dealBizDataForEquip(record, designChangeDataDto);
// 设备技术参数入库处理
commonEquipDataProcessService.updateTechParamInfo(registerChangeDataDto, record, itemData, allChangeColumns);
}
});
// 单位办理不能修改设备品种,如果修改无法保证单据下的所有设备都一致
return allChangeColumns;
}
@Override
public Map<String, List<Map<String, Object>>> getDetail(String applyNo, String bizId) {
Map<String, List<Map<String, Object>>> result = new HashMap<>();
JgUseRegistration jgUseRegistration = useRegistrationService.getOne(new LambdaQueryWrapper<JgUseRegistration>()
.eq(JgUseRegistration::getApplyNo, applyNo).select(BaseEntity::getSequenceNbr));
LambdaQueryWrapper<JgRegistrationHistory> lambda = new QueryWrapper<JgRegistrationHistory>().lambda();
lambda.eq(JgRegistrationHistory::getCurrentDocumentId, jgUseRegistration.getSequenceNbr());
lambda.eq(JgRegistrationHistory::getIsDelete, false);
JgRegistrationHistory jgRegistrationHistory = jgRegistrationHistoryService.getBaseMapper().selectOne(lambda);
JSONObject jsonObject = JSONObject.parseObject(jgRegistrationHistory.getChangeData());
List<Map<String, Object>> equipmentLists = (List<Map<String, Object>>) jsonObject.get("equipmentLists");
List<String> records = equipmentLists.stream().map(v -> (String) v.get("record")).collect(toList());
List<Map<String, Object>> tableData;
if (CylinderTypeEnum.CYLINDER.getCode().equals(jsonObject.get("EQU_CATEGORY_CODE"))) {
List<DictionarieValueModel> fillingMedium = Systemctl.dictionarieClient.dictValues("FILLING_MEDIUM").getResult();
Map<String, Object> fillingMediumMap = fillingMedium.stream().collect(Collectors.toMap(DictionarieValueModel::getDictDataKey, DictionarieValueModel::getDictDataValue));
tableData = jgUseRegistrationMapper.queryForUnitVesselEquipment(records);
tableData.forEach(i -> i.put("chargingMedium", fillingMediumMap.get(i.get("chargingMedium"))));
} else {
tableData = jgUseRegistrationMapper.queryForUnitPipelineEquipment(records);
}
result.put("tableData", tableData);
return result;
}
@Override
public IBizDataChangeHandleStrategy.ModelType canHandleMode() {
return IBizDataChangeHandleStrategy.ModelType.batch;
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.yeejoin.amos.boot.module.jg.api.dto.RequestChangeData;
import com.yeejoin.amos.boot.module.jg.biz.context.BizDataHandleStrategyContext;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
@Service
public class BizDataChangeServiceImpl {
/**
* 变更保存
*
* @param applyNo 单据编号
* @param bizType 业务类型
* @param changeData 变化后的数据
*/
@Transactional(rollbackFor = Exception.class)
public void save(String applyNo,
String bizType,
RequestChangeData changeData) {
IBizDataChangeHandleStrategy.ModelType model = changeData.getModelType();
IBizDataChangeHandleStrategy handleStrategy = BizDataHandleStrategyContext.getStrategy(bizType);
handleStrategy.doSave(applyNo, model, changeData);
}
public Map<String, ?> queryDetail(String applyNo, String bizType, IBizDataChangeHandleStrategy.ModelType model, String bizId) {
IBizDataChangeHandleStrategy handleStrategy = BizDataHandleStrategyContext.getStrategy(bizType);
return handleStrategy.getDetail(applyNo, model, bizId);
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.annotation.Group;
import com.yeejoin.amos.boot.module.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.biz.service.*;
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.IdxBizJgDesignInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgFactoryInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgRegisterInfoMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
@Component
public class CommonEquipDataProcessService {
private final IdxBizJgDesignInfoMapper idxBizJgDesignInfoMapper;
private final IdxBizJgFactoryInfoMapper jgFactoryInfoMapper;
private final IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper;
private final IIdxBizJgTechParamsElevatorService iIdxBizJgTechParamsElevatorService;
private final IIdxBizJgTechParamsVehicleService iIdxBizJgTechParamsVehicleService;
private final IIdxBizJgTechParamsRopewayService iIdxBizJgTechParamsRopewayService;
private final IIdxBizJgTechParamsRidesService iIdxBizJgTechParamsRidesService;
private final IIdxBizJgTechParamsBoilerService iIdxBizJgTechParamsBoilerService;
private final IIdxBizJgTechParamsVesselService iIdxBizJgTechParamsVesselService;
private final IIdxBizJgTechParamsPipelineService iIdxBizJgTechParamsPipelineService;
private final IIdxBizJgTechParamsLiftingService iIdxBizJgTechParamsLiftingService;
private final EquipChangeDataUpdateService equipChangeDataUpdateService;
public CommonEquipDataProcessService(IdxBizJgDesignInfoMapper idxBizJgDesignInfoMapper, IdxBizJgFactoryInfoMapper jgFactoryInfoMapper, IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper, IIdxBizJgTechParamsElevatorService iIdxBizJgTechParamsElevatorService, IIdxBizJgTechParamsVehicleService iIdxBizJgTechParamsVehicleService, IIdxBizJgTechParamsRopewayService iIdxBizJgTechParamsRopewayService, IIdxBizJgTechParamsRidesService iIdxBizJgTechParamsRidesService, IIdxBizJgTechParamsBoilerService iIdxBizJgTechParamsBoilerService, IIdxBizJgTechParamsVesselService iIdxBizJgTechParamsVesselService, IIdxBizJgTechParamsPipelineService iIdxBizJgTechParamsPipelineService, IIdxBizJgTechParamsLiftingService iIdxBizJgTechParamsLiftingService, EquipChangeDataUpdateService equipChangeDataUpdateService) {
this.idxBizJgDesignInfoMapper = idxBizJgDesignInfoMapper;
this.jgFactoryInfoMapper = jgFactoryInfoMapper;
this.idxBizJgRegisterInfoMapper = idxBizJgRegisterInfoMapper;
this.iIdxBizJgTechParamsElevatorService = iIdxBizJgTechParamsElevatorService;
this.iIdxBizJgTechParamsVehicleService = iIdxBizJgTechParamsVehicleService;
this.iIdxBizJgTechParamsRopewayService = iIdxBizJgTechParamsRopewayService;
this.iIdxBizJgTechParamsRidesService = iIdxBizJgTechParamsRidesService;
this.iIdxBizJgTechParamsBoilerService = iIdxBizJgTechParamsBoilerService;
this.iIdxBizJgTechParamsVesselService = iIdxBizJgTechParamsVesselService;
this.iIdxBizJgTechParamsPipelineService = iIdxBizJgTechParamsPipelineService;
this.iIdxBizJgTechParamsLiftingService = iIdxBizJgTechParamsLiftingService;
this.equipChangeDataUpdateService = equipChangeDataUpdateService;
}
public <T extends BaseChangeDataDto> T castMap2Bean(Map<String, Object> map, Class<T> clazz) {
try {
T t = clazz.newInstance();
BeanUtil.copyProperties(JSON.parse(JSONObject.toJSONString(map)), t, true);
return t;
} catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
public void checkValidField(String record, BaseChangeDataDto changeDataDto, String equList, String equCategory, String equDefine) {
// 注册信息
if (changeDataDto instanceof EquipRegisterChangeDataDto) {
EquipRegisterChangeDataDto registerChangeDataDto = (EquipRegisterChangeDataDto) changeDataDto;
equipChangeDataUpdateService.checkRegisterChangeData(record, registerChangeDataDto);
}
// 制造信息
if (changeDataDto instanceof EquipFactoryChangeDataDto) {
EquipFactoryChangeDataDto equipFactoryChangeDataDto = (EquipFactoryChangeDataDto) changeDataDto;
equipChangeDataUpdateService.checkFactoryChangeData(record, equipFactoryChangeDataDto, equList, equCategory, equDefine);
}
// 设计信息
if (changeDataDto instanceof EquipDesignChangeDataDto) {
EquipDesignChangeDataDto equipDesignChangeDataDto = (EquipDesignChangeDataDto) changeDataDto;
equipChangeDataUpdateService.checkDesignChangeData(record, equipDesignChangeDataDto);
}
}
void buildChangeFields(String record, EquipDesignChangeDataDto equipDesignChangeDataDto, EquipFactoryChangeDataDto equipFactoryChangeDataDto, EquipRegisterChangeDataDto registerChangeDataDto, List<ChangeDataDto> allChangeColumns) {
// 构造新对象行转列
List<ChangeDataDto> designInfoNew = this.buildDesignInfoNew(equipDesignChangeDataDto, record);
List<ChangeDataDto> factoryInfoNew = this.buildFactoryInfoNew(equipFactoryChangeDataDto, record);
List<ChangeDataDto> registerInfoNew = this.buildRegisterInfoNew(registerChangeDataDto, record);
// 老数据查询行转列
List<ChangeDataDto> designInfoOld = this.buildDesignInfoOld(record);
List<ChangeDataDto> factoryInfoOld = this.buildFactoryInfoOld(record);
List<ChangeDataDto> registerInfoOld = this.buildRegisterInfoOld(record);
allChangeColumns.addAll(this.mergeChangeFields(designInfoNew, designInfoOld));
allChangeColumns.addAll(this.mergeChangeFields(factoryInfoNew, factoryInfoOld));
allChangeColumns.addAll(this.mergeChangeFields(registerInfoNew, registerInfoOld));
}
/**
* 业务处理-业务对象
*
* @param record 设备主键
* @param changeDataDto 变更后数据
*/
void dealBizDataForEquip(String record, BaseChangeDataDto changeDataDto) {
// 注册信息
if (changeDataDto instanceof EquipRegisterChangeDataDto) {
EquipRegisterChangeDataDto registerChangeDataDto = (EquipRegisterChangeDataDto) changeDataDto;
equipChangeDataUpdateService.updateRegisterChangeData(record, registerChangeDataDto);
}
// 制造信息
if (changeDataDto instanceof EquipFactoryChangeDataDto) {
EquipFactoryChangeDataDto equipFactoryChangeDataDto = (EquipFactoryChangeDataDto) changeDataDto;
equipChangeDataUpdateService.updateFactoryChangeData(record, equipFactoryChangeDataDto);
}
// 设计信息
if (changeDataDto instanceof EquipDesignChangeDataDto) {
EquipDesignChangeDataDto equipDesignChangeDataDto = (EquipDesignChangeDataDto) changeDataDto;
equipChangeDataUpdateService.updateDesignChangeData(record, equipDesignChangeDataDto);
}
}
private String buildTableName(Class<?> clazz) {
Group group = clazz.getAnnotation(Group.class);
return String.format("\"%s_%s\"", "idx_biz_jg", group.value());
}
private List<ChangeDataDto> mergeChangeFields(List<ChangeDataDto> changeDataNew, List<ChangeDataDto> changeDataOld) {
Map<String, ChangeDataDto> oldKv = changeDataOld.stream().collect(Collectors.toMap(ChangeDataDto::getColumnKey, Function.identity()));
changeDataNew.forEach(o -> {
// 正常不会出现此情况,old数据 大于等于 new 数据的key
if (oldKv.get(o.getColumnKey()) != null) {
o.setColumnOldValue(oldKv.get(o.getColumnKey()).getColumnOldValue());
}
});
return changeDataNew.stream().filter(n -> !StringUtils.equals(n.getColumnNewValue(), n.getColumnOldValue())).collect(Collectors.toList());
}
private static TechParamsBoilerChangeFieldDto getTechParamsBoilerChangeField(Map<String, Object> changeData) {
TechParamsBoilerChangeFieldDto newBoiler = new TechParamsBoilerChangeFieldDto();
BeanUtil.copyProperties(JSON.parse(JSONObject.toJSONString(changeData)), newBoiler, true);
return newBoiler;
}
private TechParamsBoilerChangeFieldDto getTechParamsBoilerChangeField(String record) {
IdxBizJgTechParamsBoiler boiler = iIdxBizJgTechParamsBoilerService.getOneData(record);
TechParamsBoilerChangeFieldDto oldBoiler = new TechParamsBoilerChangeFieldDto();
BeanUtil.copyProperties(boiler, oldBoiler);
return oldBoiler;
}
BaseTechParamsFieldDto buildTechParamInfo(EquipRegisterChangeDataDto equipRegisterChangeDataDto, String record) {
EquipmentClassifityEnum equipmentClassifityEnum = EquipmentClassifityEnum.getOne(equipRegisterChangeDataDto.getEquList());
switch (Objects.requireNonNull(equipmentClassifityEnum)) {
case GL:
// 锅炉
IdxBizJgTechParamsBoiler boiler = iIdxBizJgTechParamsBoilerService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
return BeanUtil.copyProperties(boiler, TechParamsBoilerChangeFieldDto.class);
case YLRQ:
// 压力容器
IdxBizJgTechParamsVessel techParamsVessel = iIdxBizJgTechParamsVesselService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
return BeanUtil.copyProperties(techParamsVessel, TechParamsVesselChangeFieldDto.class);
case DT:
// 电梯
IdxBizJgTechParamsElevator techParamsElevator = iIdxBizJgTechParamsElevatorService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
return BeanUtil.copyProperties(techParamsElevator, TechParamsElevatorChangeFieldDto.class);
case QZJX:
// 起重机械
IdxBizJgTechParamsLifting techParamsLifting = iIdxBizJgTechParamsLiftingService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
return BeanUtil.copyProperties(techParamsLifting, TechParamsLiftingChangeFieldDto.class);
case CC:
// 场(厂)内专用机动车辆
IdxBizJgTechParamsVehicle techParamsVehicle = iIdxBizJgTechParamsVehicleService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
return BeanUtil.copyProperties(techParamsVehicle, TechParamsVehicleChangeFieldDto.class);
case YLSS:
// 大型游乐设施
IdxBizJgTechParamsRides techParamsRides = iIdxBizJgTechParamsRidesService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
return BeanUtil.copyProperties(techParamsRides, TechParamsRidesChangeFieldDto.class);
case YLGD:
// 压力管道
IdxBizJgTechParamsPipeline techParamsPipeline = iIdxBizJgTechParamsPipelineService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
return BeanUtil.copyProperties(techParamsPipeline, TechParamsPipelineChangeFieldDto.class);
case KYSD:
// 客运索道
IdxBizJgTechParamsRopeway techParamsRopeway = iIdxBizJgTechParamsRopewayService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
return BeanUtil.copyProperties(techParamsRopeway, TechParamsRopewayChangeFieldDto.class);
default:
break;
}
return null;
}
void updateTechParamInfo(EquipRegisterChangeDataDto equipRegisterChangeDataDto, String record, Map<String, Object> changeData, List<ChangeDataDto> allChange) {
EquipmentClassifityEnum equipmentClassifityEnum = EquipmentClassifityEnum.getOne(equipRegisterChangeDataDto.getEquList());
switch (Objects.requireNonNull(equipmentClassifityEnum)) {
case GL:
// 锅炉
TechParamsBoilerChangeFieldDto newBoiler = getTechParamsBoilerChangeField(changeData);
TechParamsBoilerChangeFieldDto oldBoiler = getTechParamsBoilerChangeField(record);
// 字段行转列
List<ChangeDataDto> boilerChangeDataNew = this.convertBeanField2Column2(newBoiler, record);
List<ChangeDataDto> boilerChangeDataOld = this.convertBeanField2Column2(oldBoiler, record);
// 比对
List<ChangeDataDto> boilerChangeFields = this.mergeChangeFields(boilerChangeDataNew, boilerChangeDataOld);
// 业务处理
equipChangeDataUpdateService.updateTechParamByRecord(this.buildTableName(TechParamsBoilerChangeFieldDto.class), record, boilerChangeFields);
// 日志数据记录
allChange.addAll(boilerChangeDataNew);
break;
case YLRQ:
// 压力容器
TechParamsVesselChangeFieldDto newVessel = new TechParamsVesselChangeFieldDto();
BeanUtil.copyProperties(JSON.parse(JSONObject.toJSONString(changeData)), newVessel, true);
IdxBizJgTechParamsVessel techParamsVessel = iIdxBizJgTechParamsVesselService.getOneData(record);
TechParamsVesselChangeFieldDto oldVessel = BeanUtil.copyProperties(techParamsVessel, TechParamsVesselChangeFieldDto.class);
// 字段行转列
List<ChangeDataDto> newVesselChangeData = this.convertBeanField2Column2(newVessel, record);
List<ChangeDataDto> oldVesselChangeData = this.convertBeanField2Column2(oldVessel, record);
// 比对
List<ChangeDataDto> vesselChangeFields = this.mergeChangeFields(newVesselChangeData, oldVesselChangeData);
// 业务处理
equipChangeDataUpdateService.updateTechParamByRecord(this.buildTableName(TechParamsVesselChangeFieldDto.class), record, vesselChangeFields);
// 日志数据记录
allChange.addAll(vesselChangeFields);
break;
case DT:
// 电梯
TechParamsElevatorChangeFieldDto newElevator = new TechParamsElevatorChangeFieldDto();
BeanUtil.copyProperties(JSON.parse(JSONObject.toJSONString(changeData)), newElevator, true);
IdxBizJgTechParamsElevator techParamsElevator = iIdxBizJgTechParamsElevatorService.getOneData(record);
TechParamsElevatorChangeFieldDto oldElevator = BeanUtil.copyProperties(techParamsElevator, TechParamsElevatorChangeFieldDto.class);
// 字段行转列
List<ChangeDataDto> newElevatorChangeData = this.convertBeanField2Column2(newElevator, record);
List<ChangeDataDto> oldElevatorChangeData = this.convertBeanField2Column2(oldElevator, record);
// 比对
List<ChangeDataDto> elevatorChangeFields = this.mergeChangeFields(newElevatorChangeData, oldElevatorChangeData);
// 业务处理
equipChangeDataUpdateService.updateTechParamByRecord(this.buildTableName(TechParamsElevatorChangeFieldDto.class), record, elevatorChangeFields);
// 日志数据记录
allChange.addAll(elevatorChangeFields);
break;
case QZJX:
// 起重机械
TechParamsLiftingChangeFieldDto newLifting = new TechParamsLiftingChangeFieldDto();
BeanUtil.copyProperties(JSON.parse(JSONObject.toJSONString(changeData)), newLifting, true);
IdxBizJgTechParamsLifting techParamsLifting = iIdxBizJgTechParamsLiftingService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsLiftingChangeFieldDto oldLifting = BeanUtil.copyProperties(techParamsLifting, TechParamsLiftingChangeFieldDto.class);
// 字段行转列
List<ChangeDataDto> newLiftingChangeData = this.convertBeanField2Column2(newLifting, record);
List<ChangeDataDto> oldLiftingChangeData = this.convertBeanField2Column2(oldLifting, record);
// 比对
List<ChangeDataDto> liftingChangeFields = this.mergeChangeFields(newLiftingChangeData, oldLiftingChangeData);
// 业务处理
equipChangeDataUpdateService.updateTechParamByRecord(this.buildTableName(TechParamsLiftingChangeFieldDto.class), record, liftingChangeFields);
// 日志数据记录
allChange.addAll(liftingChangeFields);
break;
case CC:
// 场(厂)内专用机动车辆
TechParamsVehicleChangeFieldDto newVehicle = new TechParamsVehicleChangeFieldDto();
BeanUtil.copyProperties(JSON.parse(JSONObject.toJSONString(changeData)), newVehicle, true);
IdxBizJgTechParamsVehicle techParamsVehicle = iIdxBizJgTechParamsVehicleService.getOneData(record);
TechParamsVehicleChangeFieldDto oldVehicle = BeanUtil.copyProperties(techParamsVehicle, TechParamsVehicleChangeFieldDto.class);
// 字段行转列
List<ChangeDataDto> newVehicleChangeData = this.convertBeanField2Column2(newVehicle, record);
List<ChangeDataDto> oldVehicleChangeData = this.convertBeanField2Column2(oldVehicle, record);
// 比对
List<ChangeDataDto> vehicleChangeFields = this.mergeChangeFields(newVehicleChangeData, oldVehicleChangeData);
// 业务处理
equipChangeDataUpdateService.updateTechParamByRecord(this.buildTableName(TechParamsVehicleChangeFieldDto.class), record, vehicleChangeFields);
// 日志数据记录
allChange.addAll(vehicleChangeFields);
break;
case YLSS:
// 大型游乐设施
TechParamsRidesChangeFieldDto newRides = new TechParamsRidesChangeFieldDto();
BeanUtil.copyProperties(JSON.parse(JSONObject.toJSONString(changeData)), newRides, true);
IdxBizJgTechParamsRides techParamsRides = iIdxBizJgTechParamsRidesService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsRidesChangeFieldDto oldRides = BeanUtil.copyProperties(techParamsRides, TechParamsRidesChangeFieldDto.class);
// 字段行转列
List<ChangeDataDto> newRidesChangeData = this.convertBeanField2Column2(newRides, record);
List<ChangeDataDto> oldRidesChangeData = this.convertBeanField2Column2(oldRides, record);
// 比对
List<ChangeDataDto> ridesChangeFields = this.mergeChangeFields(newRidesChangeData, oldRidesChangeData);
// 业务处理
equipChangeDataUpdateService.updateTechParamByRecord(this.buildTableName(TechParamsRidesChangeFieldDto.class), record, ridesChangeFields);
// 日志数据记录
allChange.addAll(ridesChangeFields);
break;
case YLGD:
// 压力管道
TechParamsPipelineChangeFieldDto newPipeline = new TechParamsPipelineChangeFieldDto();
BeanUtil.copyProperties(JSON.parse(JSONObject.toJSONString(changeData)), newPipeline, true);
IdxBizJgTechParamsPipeline techParamsPipeline = iIdxBizJgTechParamsPipelineService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsPipelineChangeFieldDto oldPipeline = BeanUtil.copyProperties(techParamsPipeline, TechParamsPipelineChangeFieldDto.class);
// 字段行转列
List<ChangeDataDto> newPipelineChangeData = this.convertBeanField2Column2(newPipeline, record);
List<ChangeDataDto> oldPipelineChangeData = this.convertBeanField2Column2(oldPipeline, record);
// 比对
List<ChangeDataDto> pipelineChangeFields = this.mergeChangeFields(newPipelineChangeData, oldPipelineChangeData);
// 业务处理
equipChangeDataUpdateService.updateTechParamByRecord(this.buildTableName(TechParamsPipelineChangeFieldDto.class), record, pipelineChangeFields);
// 日志数据记录
allChange.addAll(pipelineChangeFields);
break;
case KYSD:
// 客运索道
TechParamsRopewayChangeFieldDto newRopeway = new TechParamsRopewayChangeFieldDto();
BeanUtil.copyProperties(JSON.parse(JSONObject.toJSONString(changeData)), newRopeway, true);
IdxBizJgTechParamsRopeway techParamsRopeway = iIdxBizJgTechParamsRopewayService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsRopewayChangeFieldDto oldRopeway = BeanUtil.copyProperties(techParamsRopeway, TechParamsRopewayChangeFieldDto.class);
// 字段行转列
List<ChangeDataDto> newRopewayChangeData = this.convertBeanField2Column2(newRopeway, record);
List<ChangeDataDto> oldRopewayChangeData = this.convertBeanField2Column2(oldRopeway, record);
// 比对
List<ChangeDataDto> ropewayChangeFields = this.mergeChangeFields(newRopewayChangeData, oldRopewayChangeData);
// 业务处理
equipChangeDataUpdateService.updateTechParamByRecord(this.buildTableName(TechParamsRopewayChangeFieldDto.class), record, ropewayChangeFields);
// 日志数据记录
allChange.addAll(ropewayChangeFields);
break;
default:
break;
}
}
private List<ChangeDataDto> convertBeanField2Column2(Object beanData, String record) {
List<ChangeDataDto> changeData = new ArrayList<>();
Group group = beanData.getClass().getAnnotation(Group.class);
Field[] fields = beanData.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
FieldDisplayDefine displayDefine = field.getAnnotation(FieldDisplayDefine.class);
try {
if (displayDefine != null && displayDefine.isExist()) {
String fieldName = displayDefine.value();
ChangeDataDto changeDataDto = new ChangeDataDto();
changeDataDto.setColumnKey(field.getName());
changeDataDto.setColumnFamily(group.value());
changeDataDto.setColumnLabel(fieldName);
changeDataDto.setChangeId(record);
Object oV = field.get(beanData);
if (oV instanceof String) {
String value = (String) field.get(beanData);
changeDataDto.setColumnNewValue(value);
changeDataDto.setColumnOldValue(value);
} else if (oV instanceof Number) {
String value = String.valueOf(field.get(beanData));
changeDataDto.setColumnNewValue(value);
changeDataDto.setColumnOldValue(value);
}
changeData.add(changeDataDto);
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
return changeData;
}
private List<ChangeDataDto> buildDesignInfoNew(EquipDesignChangeDataDto changeDataDto, String record) {
return this.convertBeanField2Column2(changeDataDto, record);
}
private List<ChangeDataDto> buildFactoryInfoNew(EquipFactoryChangeDataDto changeDataDto, String record) {
return this.convertBeanField2Column2(changeDataDto, record);
}
private List<ChangeDataDto> buildRegisterInfoNew(EquipRegisterChangeDataDto changeDataDto, String record) {
return this.convertBeanField2Column2(changeDataDto, record);
}
private List<ChangeDataDto> buildDesignInfoOld(String record) {
EquipDesignChangeDataDto changeDataDto = new EquipDesignChangeDataDto();
IdxBizJgDesignInfo designInfo = idxBizJgDesignInfoMapper.selectOne(new LambdaQueryWrapper<IdxBizJgDesignInfo>().eq(IdxBizJgDesignInfo::getRecord, record));
BeanUtil.copyProperties(designInfo, changeDataDto);
changeDataDto.setDesignDate(DateUtil.formatDate(designInfo.getDesignDate()));
return this.convertBeanField2Column2(changeDataDto, record);
}
private List<ChangeDataDto> buildFactoryInfoOld(String record) {
EquipFactoryChangeDataDto changeDataDto = new EquipFactoryChangeDataDto();
IdxBizJgFactoryInfo factoryInfo = jgFactoryInfoMapper.selectOne(new LambdaQueryWrapper<IdxBizJgFactoryInfo>().eq(IdxBizJgFactoryInfo::getRecord, record));
BeanUtil.copyProperties(factoryInfo, changeDataDto);
changeDataDto.setProduceDate(DateUtil.formatDate(factoryInfo.getProduceDate()));
return this.convertBeanField2Column2(changeDataDto, record);
}
private List<ChangeDataDto> buildRegisterInfoOld(String record) {
EquipRegisterChangeDataDto changeDataDto = new EquipRegisterChangeDataDto();
IdxBizJgRegisterInfo registerInfo = idxBizJgRegisterInfoMapper.selectOne(new LambdaQueryWrapper<IdxBizJgRegisterInfo>().eq(IdxBizJgRegisterInfo::getRecord, record));
BeanUtil.copyProperties(registerInfo, changeDataDto);
return this.convertBeanField2Column2(changeDataDto, record);
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.core.codec.Base64Encoder;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
......@@ -788,6 +787,11 @@ public class CommonServiceImpl implements ICommonService {
List<DictionarieValueModel> result = Systemctl.dictionarieClient.dictValues("OLD_INSTALLATION_UNIT").getResult();
result.forEach(x -> convertAndAddToUnitList(x, unitList));
}
// 使用单位追加 三环认领的(业主可能未注册系统,别人帮忙认领的,帮忙认领后会保存一份原使用单位的数据到字典)
if ("使用单位".equals(type)) {
List<DictionarieValueModel> result = Systemctl.dictionarieClient.dictValues("OLD_USE_UNIT").getResult();
result.forEach(x -> convertAndAddToUnitList(x, unitList));
}
List<Map<String, Object>> unitListByType = commonMapper.getUnitListByType(type);
unitList.addAll(unitListByType);
return unitList;
......
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
/**
* 默认处理器
*/
@Slf4j
public class DefaultUseRegisterResult extends BaseUseRegisterResultData {
public DefaultUseRegisterResult(JSONObject data) {
super(data);
}
@Override
public JSONObject getData() {
JSONObject data = super.getData();
fillingEditPermission(data);
return data;
}
/**
* 新增时默认不可编辑
* @param jsonObject 原始数据
*/
private void fillingEditPermission(JSONObject jsonObject) {
jsonObject.put(HAPPEN_AFTER_BIZ, true);
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.api.enums.CylinderTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.CommonMapper;
import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgDesignInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgFactoryInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgRegisterInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquCodeTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgDesignInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgFactoryInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgRegisterInfoMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Service
public class EquipChangeDataUpdateService {
private final ESEquipmentCategory esEquipmentCategory;
private final IdxBizJgDesignInfoMapper idxBizJgDesignInfoMapper;
private final IdxBizJgFactoryInfoMapper jgFactoryInfoMapper;
private final IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper;
private final CommonMapper commonMapper;
private final EquipmentCategoryMapper equipmentCategoryMapper;
public EquipChangeDataUpdateService(ESEquipmentCategory esEquipmentCategory, IdxBizJgDesignInfoMapper idxBizJgDesignInfoMapper, IdxBizJgFactoryInfoMapper jgFactoryInfoMapper, IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper, CommonMapper commonMapper, EquipmentCategoryMapper equipmentCategoryMapper) {
this.esEquipmentCategory = esEquipmentCategory;
this.idxBizJgDesignInfoMapper = idxBizJgDesignInfoMapper;
this.jgFactoryInfoMapper = jgFactoryInfoMapper;
this.idxBizJgRegisterInfoMapper = idxBizJgRegisterInfoMapper;
this.commonMapper = commonMapper;
this.equipmentCategoryMapper = equipmentCategoryMapper;
}
public void updateRegisterChangeData(String record, EquipRegisterChangeDataDto registerChangeDataDto) {
LambdaUpdateWrapper<IdxBizJgRegisterInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(IdxBizJgRegisterInfo::getRecord, record);
updateWrapper.set(IdxBizJgRegisterInfo::getEquCode, registerChangeDataDto.getEquCode());
updateWrapper.set(IdxBizJgRegisterInfo::getEquDefine, registerChangeDataDto.getEquDefine());
updateWrapper.set(IdxBizJgRegisterInfo::getProductName, registerChangeDataDto.getProductName());
updateWrapper.set(IdxBizJgRegisterInfo::getEquType, registerChangeDataDto.getEquType());
updateWrapper.set(IdxBizJgRegisterInfo::getEquPrice, registerChangeDataDto.getEquPrice());
updateWrapper.set(IdxBizJgRegisterInfo::getProductPhoto, registerChangeDataDto.getProductPhoto());
updateWrapper.set(IdxBizJgRegisterInfo::getOtherAccessoriesReg, registerChangeDataDto.getOtherAccessoriesReg());
idxBizJgRegisterInfoMapper.update(null, updateWrapper);
updateRegisterEsData(record, registerChangeDataDto);
}
public void updateDesignChangeData(String record, EquipDesignChangeDataDto equipDesignChangeDataDto) {
LambdaUpdateWrapper<IdxBizJgDesignInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(IdxBizJgDesignInfo::getRecord, record);
updateWrapper.set(IdxBizJgDesignInfo::getDesignDate, DateUtil.parse(equipDesignChangeDataDto.getDesignDate(), "yyyy-MM-dd"));
updateWrapper.set(IdxBizJgDesignInfo::getDesignDoc, equipDesignChangeDataDto.getDesignDoc());
updateWrapper.set(IdxBizJgDesignInfo::getDesignUnitCreditCode, equipDesignChangeDataDto.getDesignUnitCreditCode());
updateWrapper.set(IdxBizJgDesignInfo::getDesignUnitName, equipDesignChangeDataDto.getDesignUnitName());
updateWrapper.set(IdxBizJgDesignInfo::getDesignUseDate, equipDesignChangeDataDto.getDesignUseDate());
updateWrapper.set(IdxBizJgDesignInfo::getDesignLicenseNum, equipDesignChangeDataDto.getDesignLicenseNum());
updateWrapper.set(IdxBizJgDesignInfo::getAppraisalUnit, equipDesignChangeDataDto.getAppraisalUnit());
updateWrapper.set(IdxBizJgDesignInfo::getOtherAccessoriesDes, equipDesignChangeDataDto.getOtherAccessoriesDes());
updateWrapper.set(IdxBizJgDesignInfo::getAppraisalDate, equipDesignChangeDataDto.getAppraisalDate());
updateWrapper.set(IdxBizJgDesignInfo::getDrawingDo, equipDesignChangeDataDto.getDrawingDo());
updateWrapper.set(IdxBizJgDesignInfo::getDesignStandard, equipDesignChangeDataDto.getDesignStandard());
idxBizJgDesignInfoMapper.update(null, updateWrapper);
}
public void updateFactoryChangeData(String record, EquipFactoryChangeDataDto equipFactoryChangeDataDto) {
LambdaUpdateWrapper<IdxBizJgFactoryInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(IdxBizJgFactoryInfo::getRecord, record);
// 影响设备代码的生成
updateWrapper.set(IdxBizJgFactoryInfo::getProduceDate, DateUtil.parse(equipFactoryChangeDataDto.getProduceDate(), "yyyy-MM-dd"));
updateWrapper.set(IdxBizJgFactoryInfo::getProduceUnitName, equipFactoryChangeDataDto.getProduceUnitName());
updateWrapper.set(IdxBizJgFactoryInfo::getProduceCountry, equipFactoryChangeDataDto.getProduceCountry());
updateWrapper.set(IdxBizJgFactoryInfo::getProduceUnitCreditCode, equipFactoryChangeDataDto.getProduceUnitCreditCode());
updateWrapper.set(IdxBizJgFactoryInfo::getProduceLicenseNum, equipFactoryChangeDataDto.getProduceLicenseNum());
updateWrapper.set(IdxBizJgFactoryInfo::getProductQualityYieldProve, equipFactoryChangeDataDto.getProductQualityYieldProve());
updateWrapper.set(IdxBizJgFactoryInfo::getFactoryStandard, equipFactoryChangeDataDto.getFactoryStandard());
updateWrapper.set(IdxBizJgFactoryInfo::getFactoryNum, equipFactoryChangeDataDto.getFactoryNum());
updateWrapper.set(IdxBizJgFactoryInfo::getFactSupervisionInspectionReport, equipFactoryChangeDataDto.getFactSupervisionInspectionReport());
updateWrapper.set(IdxBizJgFactoryInfo::getOtherAccessoriesFact, equipFactoryChangeDataDto.getOtherAccessoriesFact());
updateWrapper.set(IdxBizJgFactoryInfo::getImported, equipFactoryChangeDataDto.getImported());
updateWrapper.set(IdxBizJgFactoryInfo::getInsUseMaintainExplain, equipFactoryChangeDataDto.getInsUseMaintainExplain());
updateWrapper.set(IdxBizJgFactoryInfo::getBoilerEnergyEfficiencyCertificate, equipFactoryChangeDataDto.getBoilerEnergyEfficiencyCertificate());
jgFactoryInfoMapper.update(null, updateWrapper);
this.updateFactoryEsData(record, equipFactoryChangeDataDto);
}
private void updateFactoryEsData(String record, EquipFactoryChangeDataDto equipFactoryChangeDataDto) {
// es 数据更新
Optional<ESEquipmentCategoryDto> optional = esEquipmentCategory.findById(record);
if (optional.isPresent()) {
ESEquipmentCategoryDto esEquipmentCategoryDto = optional.get();
esEquipmentCategoryDto.setPRODUCE_DATE(equipFactoryChangeDataDto.getProduceDate());
esEquipmentCategoryDto.setFACTORY_NUM(equipFactoryChangeDataDto.getFactoryNum());
esEquipmentCategoryDto.setPRODUCE_UNIT_NAME(equipFactoryChangeDataDto.getProduceUnitName());
esEquipmentCategory.save(esEquipmentCategoryDto);
}
}
private void updateRegisterEsData(String record, EquipRegisterChangeDataDto registerChangeDataDto) {
// es 数据更新
Optional<ESEquipmentCategoryDto> optional = esEquipmentCategory.findById(record);
if (optional.isPresent()) {
ESEquipmentCategoryDto esEquipmentCategoryDto = optional.get();
esEquipmentCategoryDto.setPRODUCT_NAME(registerChangeDataDto.getProductName());
esEquipmentCategoryDto.setEQU_CODE(registerChangeDataDto.getEquCode());
esEquipmentCategoryDto.setEQU_TYPE(registerChangeDataDto.getEquType());
esEquipmentCategoryDto.setEQU_DEFINE_CODE(registerChangeDataDto.getEquDefine());
if (StringUtils.isEmpty(registerChangeDataDto.getEquDefine())) {
esEquipmentCategoryDto.setEQU_DEFINE(null);
} else {
EquipmentCategory category = getEquipmentCategory(registerChangeDataDto);
if (category != null) {
esEquipmentCategoryDto.setEQU_DEFINE(category.getName());
}
}
esEquipmentCategory.save(esEquipmentCategoryDto);
}
}
private EquipmentCategory getEquipmentCategory(EquipRegisterChangeDataDto registerChangeDataDto) {
return equipmentCategoryMapper.selectOne(new LambdaQueryWrapper<EquipmentCategory>().eq(EquipmentCategory::getCode, registerChangeDataDto.getEquDefine()));
}
public void updateTechParamByRecord(String tableName, String record, List<ChangeDataDto> changeDataDtos) {
List<DynamicColumnDto> columns = changeDataDtos.stream().map(c -> {
DynamicColumnDto columnDto = new DynamicColumnDto();
columnDto.setColumnName(String.format("\"%s\"", StrUtil.toUnderlineCase(c.getColumnKey()).toUpperCase()));
columnDto.setColumnValue(c.getColumnNewValue());
return columnDto;
}).collect(Collectors.toList());
// sql 动态构建入库
commonMapper.updateTechParamDynamic(tableName, record, columns);
}
public void checkFactoryChangeData(String record, EquipFactoryChangeDataDto equipFactoryChangeDataDto, String equList, String equCategory, String equDefine) {
// 气瓶时检验出厂编号-普通气瓶,车用气瓶不再此范围内
if (CylinderTypeEnum.CYLINDER.getCode().equals(equCategory)) {
boolean isUsed = this.checkFactoryNumUnique(equipFactoryChangeDataDto.getFactoryNum(), record, equipFactoryChangeDataDto.getProduceUnitCreditCode());
if (isUsed) {
throw new BadRequest("出厂编号/产品编码在该企业中已存在!");
}
}
}
/**
* 普通气瓶检验-同制造单位下唯一
*
* @param factoryNum 出厂编号
* @param produceUnitCreditCode 制造单位编码
* @return 是否被占用
*/
private boolean checkFactoryNumUnique(String factoryNum, String record, String produceUnitCreditCode) {
return commonMapper.checkFactoryNumUnique(factoryNum, record, produceUnitCreditCode) > 0;
}
public void checkRegisterChangeData(String record, EquipRegisterChangeDataDto registerChangeDataDto) {
// 自行输入时,检验设备代码的全局唯一性
if (registerChangeDataDto.getEquCodeType().equals(EquCodeTypeEnum.INPUT.getCode()) && StringUtils.isNotEmpty(registerChangeDataDto.getEquCode())) {
Boolean isUsed = this.checkEquCodeUniqueness(registerChangeDataDto.getEquCode(), record);
if (isUsed) {
throw new BadRequest("设备代码:" + registerChangeDataDto.getEquCode() + "在系统中已存在!");
}
}
}
private Boolean checkEquCodeUniqueness(String equCode, String record) {
// 根据设备代码检查唯一性
return idxBizJgRegisterInfoMapper.selectByEquCodeAndClaimStatus(equCode, "", record) > 0;
}
public void checkDesignChangeData(String record, EquipDesignChangeDataDto equipDesignChangeDataDto) {
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.GroupModel;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import lombok.extern.slf4j.Slf4j;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import java.util.List;
@Slf4j
public class FillingEditPermForCurrentUser extends BaseUseRegisterResultData {
public FillingEditPermForCurrentUser(JSONObject data) {
super(data);
}
@Override
public JSONObject getData() {
JSONObject data = super.getData();
fillingEditPermission(data);
return data;
}
private void fillingEditPermission(JSONObject jsonObject) {
String HAS_PERMISSION = "hasPermission";
jsonObject.put(HAS_PERMISSION, false);
// 当前登录人所在用户组
List<GroupModel> groupModels = FeignUtil.remoteCall(() -> Privilege.groupClient.queryByUserId(RequestContext.getExeUserId()));
// 有权限编辑设备的用户组(value为用户组名称)
List<DictionarieValueModel> hasPermGroup = FeignUtil.remoteCall(() -> Systemctl.dictionarieClient.dictValues("USE_REG_PERMISSION_GROUP"));
if (groupModels.stream().anyMatch(g -> hasPermGroup.stream().anyMatch(h -> h.getDictDataValue().equals(g.getGroupName())))) {
jsonObject.put(HAS_PERMISSION, true);
}
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistrationEq;
import com.yeejoin.amos.boot.module.jg.api.mapper.CommonMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import java.util.List;
@Slf4j
public class FillingUseRegisterResult extends BaseUseRegisterResultData {
private final ApplicationContext applicationContext;
/**
* 使用登记主键
*/
private final Long userRegisterId;
public FillingUseRegisterResult(Long sequenceNbr, JSONObject data, ApplicationContext applicationContext) {
super(data);
this.applicationContext = applicationContext;
this.userRegisterId = sequenceNbr;
}
@Override
public JSONObject getData() {
JSONObject data = super.getData();
fillingEditPermission(data);
return data;
}
/**
* 判断设备在做过后续业务:移转变更、改造变更、更名变更、单位变更【使用单位未提交、已作废不包括统计内】
*
* @param jsonObject 返回的数据
*/
private void fillingEditPermission(JSONObject jsonObject) {
jsonObject.put(HAPPEN_AFTER_BIZ, false);
List<JgUseRegistrationEq> useRegistrationEqs = getJgUseRegistrationEqService().list(new LambdaQueryWrapper<JgUseRegistrationEq>()
.eq(JgUseRegistrationEq::getEquipTransferId, userRegisterId)
.select(JgUseRegistrationEq::getEquId, BaseEntity::getSequenceNbr));
for (JgUseRegistrationEq useRegistrationEq : useRegistrationEqs) {
Integer useTimes = getCommonMapper().countBizNumAfterUseReg(useRegistrationEq.getEquId());
if (useTimes > 0) {
log.warn("设备:{}做过后续业务, 此使用登记:{}不可再变更设备信息", useRegistrationEq.getEquId(), userRegisterId);
jsonObject.put(HAPPEN_AFTER_BIZ, true);
break;
}
}
}
private JgUseRegistrationEqServiceImpl getJgUseRegistrationEqService() {
return applicationContext.getBean(JgUseRegistrationEqServiceImpl.class);
}
private CommonMapper getCommonMapper() {
return applicationContext.getBean(CommonMapper.class);
}
}
......@@ -299,8 +299,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
Map<String, Object> result = new HashMap<>();
Class<?> clazz = object.getClass();
for (Field field : clazz.getDeclaredFields()) {
field.setAccessible(true);
String fieldName = field.getName();
field.setAccessible(true);
String underscoreFieldName = StringUtils.camelToUnderline(fieldName).toUpperCase();
Object value;
try {
......@@ -398,6 +398,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
check96333Code(equipmentInfoForm);
// 气瓶 校验制造单位统一信用代码与出场编码唯一
checkFactoryNumUniqueWithGasCylinder(equipmentInfoForm, record);
// 历史(车用气瓶)设备校验使用登记证编号全库唯一
hisEquCheckUseRegistrationCodeUniqueness(equipmentInfoForm);
// 检测是否三环系统中的车用气瓶数据 不让三环系统数据通过设备新增方式进来
// checkIsSanHanData(equipmentInfoForm);
} catch (Exception e) {
......@@ -439,7 +441,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
// 根据设备代码检查唯一性
String equCode = (String) equipmentInfoForm.get(EQU_CODE);
String sequenceNbr = (String) equipmentInfoForm.get(SEQUENCE_NBR);
List<Integer> results = Stream.of(idxBizJgRegisterInfoMapper.selectByEquCodeAndClaimStatus(equCode, sequenceNbr),
List<Integer> results = Stream.of(idxBizJgRegisterInfoMapper.selectByEquCodeAndClaimStatus(equCode, sequenceNbr, null),
idxBizJgRegisterInfoMapper.selectInstallNoticeEqByEquCode(equCode, sequenceNbr)
).collect(Collectors.toList());
......@@ -510,6 +512,19 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
}
}
private void hisEquCheckUseRegistrationCodeUniqueness(LinkedHashMap<?, ?> equipmentInfoForm) {
// 历史(车用气瓶)设备校验使用登记证编号全库唯一
String dataSource = (String) equipmentInfoForm.get(DATA_SOURCE);
String record = (String) equipmentInfoForm.get(RECORD);
String useRegistrationCode = (String) equipmentInfoForm.get("useRegistrationCode");
if (!ValidationUtil.isEmpty(dataSource) && dataSource.contains("his") && !ValidationUtil.isEmpty(useRegistrationCode)) {
Boolean unique = commonService.useRegistrationCertificateAccountUnique(useRegistrationCode, ValidationUtil.isEmpty(record) ? null : record);
if (unique) {
throw new BadRequest("使用登记证编号已存在,请重新输入!");
}
}
}
private void checkFactoryNumUnique(String factoryNum, String produceUnitCreditCode, StringBuilder result) {
// 车用气瓶业务里面的 出厂编号/产品编码 校验唯一性(产品编号在车用气瓶范围内全局唯一)
if (commonMapper.checkFactoryNumUnique(factoryNum, null, produceUnitCreditCode) > 0) {
......@@ -615,9 +630,6 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
if (!ValidationUtil.isEmpty(equIpClassMap)) {
resultMap.put(EQUIP_CLASS_FORM_ID, equIpClassMap);
}
if (!ValidationUtil.isEmpty(equipInfoMap)) {
resultMap.put(EQUIP_INFO_FORM_ID, equipInfoMap);
}
// 设备参数
if (equIpClassMap.containsKey(EQU_LIST) && !ValidationUtil.isEmpty(equIpClassMap.get(EQU_LIST).toString())) {
Map<String, Object> equipParamsMap = this.getEquipParamsMap(record, "", equIpClassMap.get(EQU_LIST).toString());
......@@ -629,6 +641,11 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
equipParamsMap.put(EQU_DEFINE, String.valueOf(equIpClassMap.get(EQU_DEFINE)));
resultMap.put(EQUIP_PARAMS_FORM_ID, equipParamsMap);
}
equipInfoMap.put("identificationCode", equipParamsMap.get("VIN"));
}
if (!ValidationUtil.isEmpty(equipInfoMap)) {
resultMap.put(EQUIP_INFO_FORM_ID, equipInfoMap);
}
// 处理复制设备信息
......@@ -1072,6 +1089,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
objMap.putAll(filterMap);
}
objMap.put("useRegistrationCode", registerInfo.getUseOrgCode());
}
// 维保备案【一对多,暂时只取最新一条数据】
IdxBizJgMaintenanceRecordInfo maintenanceRecordInfo = iIdxBizJgMaintenanceRecordInfoService.queryNewestDetailByRecord(record);
......@@ -1376,7 +1394,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
liftingMap = Bean.BeantoMap(lifting);
liftingMap.put("liftingSeq", lifting.getSequenceNbr());
} else {
liftingMap = convertCamelToUnderscore(lifting, null);
String[] fields = {"EXPLOSIONPROOF_SIGN_COMPLETE"};
liftingMap = convertCamelToUnderscore(lifting, fields);
liftingMap.put("LIFTING_SEQ", lifting.getSequenceNbr());
}
if (!liftingMap.isEmpty()) {
......@@ -2406,9 +2425,6 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
inspectionDetectionInfo.setInspectOrgName((String) mapOrDefault.getOrDefault("useUnit", inspectionDetectionInfo.getInspectOrgName()));
inspectionDetectionInfo.setRecord(record);
inspectionDetectionInfo.setRecDate(date);
if (!"1".equals(equipmentInfoForm.get(WHETHER_VEHICLE_CYLINDER))) { // 老旧车用气瓶有些制造监督检验已过期,可放开选择定期检验
inspectionDetectionInfo.setInspectType("8300".equals(equCategory) ? "AZJDJY" : "ZZJDJY");
}
if (inspectionDetectionInfo.getNextInspectDate() != null) {
inspectionDetectionInfo.setNextInspectDate(DateUtil.parse(DateUtil.format(inspectionDetectionInfo.getNextInspectDate(), DatePattern.NORM_DATE_PATTERN)));
}
......@@ -2498,7 +2514,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
// 补丁:saveOrUpdate在update数据时不会更新字段为null的字段,但是编辑设备的代码时,从有改成无,equCode解析成null,但是此时需要将equcode删掉
registerInfo.setEquCode(ObjectUtils.isEmpty(registerInfo.getEquCode()) ? "" : registerInfo.getEquCode());
// copy设备 =》 使用登记证号置空
registerInfo.setUseOrgCode(isCopy ? "" : registerInfo.getUseOrgCode());
String useOrgCode = ValidationUtil.isEmpty(equipmentInfoForm.get("useRegistrationCode")) ? "" : String.valueOf(equipmentInfoForm.get("useRegistrationCode"));
registerInfo.setUseOrgCode(isCopy ? "" : useOrgCode);
this.saveOrUpdate(registerInfo);
// 监督管理
......@@ -2607,6 +2624,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
if (!ValidationUtil.isEmpty(vessel)) {
vessel.setRecord(record);
vessel.setRecDate(date);
String VIN = ValidationUtil.isEmpty(equipmentInfoForm.get("identificationCode")) ? "" : (String) equipmentInfoForm.get("identificationCode");
vessel.setVin(VIN);
vessel.setSequenceNbr(OPERATESAVE.equals(operateType) ? null : String.valueOf(equipmentParamsForm.get("VESSEL_SEQ")));
iIdxBizJgTechParamsVesselService.saveOrUpdateData(vessel);
}
......@@ -3465,7 +3484,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
private void checkEquCodeUniqueness(String equCode, StringBuilder result) {
// 根据设备代码检查唯一性
Integer count = idxBizJgRegisterInfoMapper.selectByEquCodeAndClaimStatus(equCode, "");
Integer count = idxBizJgRegisterInfoMapper.selectByEquCodeAndClaimStatus(equCode, "", null);
if (count > 0) {
result.append("设备代码系统中已存在;");
}
......
......@@ -113,24 +113,11 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
private static final String CONSTRUCTION_TYPE_NAME = "安装";
// 西安行政区划code
private static final String XIAN = "610100";
// 咸阳行政区划code
private static final String XIAN_YANG = "610400";
@Value("classpath:/json/urlInfo.json")
public Resource bizTypeInfo;
@Autowired
EquipmentCategoryMapper equipmentCategoryMapper;
@Autowired
JgInstallationNoticeEqMapper jgInstallationNoticeEqMapper;
@Autowired
JgInstallationNoticeEqServiceImpl jgInstallationNoticeEqService;
@Autowired
JgUseRegistrationMapper jgUseRegistrationMapper;
@Autowired
IdxBizJgUseInfoServiceImpl idxBizJgUseInfoService;
@Autowired
IdxBizJgRegisterInfoServiceImpl idxBizJgRegisterInfoService;
@Autowired
IdxBizJgRegisterInfoMapper tzsJgRegistrationInfoMapper;
......@@ -143,8 +130,6 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
@Autowired
SupervisoryCodeInfoMapper supervisoryCodeInfoMapper;
@Autowired
SuperviseInfoMapper superviseInfoMapper;
@Autowired
IIdxBizJgConstructionInfoService constructionInfoService;
@Autowired
IIdxBizJgUseInfoService useInfoService;
......@@ -153,12 +138,8 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
@Value(value = "${tzs.domain:http://sxtzsb.sxsei.com}")
String TZSDOMAIN;
@Autowired
AmosRequestContext amosRequestContext;
@Autowired
CodeUtil codeUtil;
@Autowired
CommonServiceImpl commonServiceImpl;
@Autowired
JgCertificateChangeRecordServiceImpl certificateChangeRecordService;
@Autowired
JgCertificateChangeRecordEqServiceImpl certificateChangeRecordEqService;
......@@ -203,6 +184,12 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
EventPublisher eventPublisher;
/**
* 安装改造维修单位吱资质类型:1234
*/
@Value("${company.type.notice:1234}")
private String companyType;
/**
* 根据sequenceNbr查询
*
* @param sequenceNbr 主键
......@@ -610,7 +597,7 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
ArrayList<Map<String, Object>> maps = new ArrayList<>();
equList.forEach(equ -> {
List<Map<String, Object>> informationList = jgInstallationNoticeMapper.queryEquipInformation(equ.getSequenceNbr());
if (Objects.isNull(jgInstallationNotice) || CollectionUtils.isEmpty(informationList)) {
if (CollectionUtils.isEmpty(informationList)) {
throw new IllegalArgumentException("安装告知单不存在");
}
Map<String, Object> placeholders = fullFillTemplateObj(informationList, BusinessTypeEnum.JG_INSTALLATION_NOTIFICATION.getName().substring(0, 2));
......@@ -633,8 +620,12 @@ public class JgInstallationNoticeServiceImpl extends BaseService<JgInstallationN
String useCode = String.valueOf(informObj.get("installUnitCreditCode"));
LambdaQueryWrapper<TzBaseUnitLicence> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TzBaseUnitLicence::getUnitCode, useCode);
wrapper.eq(TzBaseUnitLicence::getCertTypeCode, companyType);
wrapper.orderByDesc(TzBaseUnitLicence::getExpiryDate);
wrapper.orderByDesc(TzBaseUnitLicence::getRecDate);
// 去重显示3个
wrapper.groupBy(TzBaseUnitLicence::getCertNo,TzBaseUnitLicence::getExpiryDate);
wrapper.select(TzBaseUnitLicence::getCertNo,TzBaseUnitLicence::getExpiryDate);
wrapper.last(" LIMIT 3");
List<TzBaseUnitLicence> list = baseUnitLicenceMapper.selectList(wrapper);
......
......@@ -64,7 +64,10 @@ import org.apache.commons.io.IOUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -107,10 +110,12 @@ import static java.util.stream.Collectors.toList;
*/
@Service
@Slf4j
public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationDto, JgUseRegistration, JgUseRegistrationMapper> implements IJgUseRegistrationService, ICompensateFlowDataOfRedis<JgUseRegistration> {
public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationDto, JgUseRegistration, JgUseRegistrationMapper> implements IJgUseRegistrationService, ICompensateFlowDataOfRedis<JgUseRegistration>, ApplicationContextAware {
private static final String DEFINITION_KEY = "useRegistration";
private final List<String> NOT_FLOWING_STATE = Arrays.asList("使用单位待提交", "一级受理已驳回", "使用单位已撤回", "已作废");
private ApplicationContext applicationContext;
@Autowired
RedisUtils redisUtils;
@Autowired
......@@ -124,8 +129,6 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
@Autowired
IdxBizJgDesignInfoServiceImpl idxBizJgDesignInfoService;
@Autowired
TzsUserInfoMapper userInfoMapper;
@Autowired
ICommonService commonService;
@Autowired
CommonServiceImpl commonServiceImpl;
......@@ -136,8 +139,6 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
@Autowired
TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper;
@Autowired
EquipTechParamPipelineMapper equipTechParamPipelineMapper;
@Autowired
EventPublisher eventPublisher;
@Autowired
......@@ -145,7 +146,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
@Autowired
DataDictionaryServiceImpl iDataDictionaryService;
String[] jsonFields = {"productPhoto", "factoryStandard", "productQualityYieldProve", "insUseMaintainExplain",
public static final String[] jsonFields = {"productPhoto", "factoryStandard", "productQualityYieldProve", "insUseMaintainExplain",
"inspectReport", "designStandard", "designDoc", "longitudeLatitude", "otherAccessoriesDes", "otherAccessoriesFact",
"otherAccessoriesReg", "installProxyStatementAttachment", "installContractAttachment", "insOtherAccessories",
"maintenanceContract", "maintOtherAccessories", "installProxyStatementAttachment", "installContractAttachment",
......@@ -209,6 +210,8 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
@Autowired
SupervisoryCodeInfoMapper supervisoryCodeInfoMapper;
/**
* @param auditPassDate 通过时间
* @param exportParamsMap 参数map
......@@ -1757,6 +1760,10 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
jsonObject.put("useRegistrationCode", jgUseRegistration.getUseRegistrationCode());
// 转化 附件 字段
commonServiceImpl.convertStringToJsonobject(jsonObject, jsonFields);
// 结果增强,填充单据是否可变更设备状态,用来控制前端按钮的显示隐藏。
new FillingUseRegisterResult(sequenceNbr, jsonObject, applicationContext).getData();
// 结果增强,填充当前人是否有编辑按钮权限
new FillingEditPermForCurrentUser(jsonObject).getData();
return jsonObject;
}
// 基本信息 + 制造信息
......@@ -1802,9 +1809,18 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
// 附件解析
commonServiceImpl.convertStringToJsonobject(detail, jsonFields);
detail.put("province", "610000");
return detail;
JSONObject result = new JSONObject();
result.putAll(detail);
// 结果增强,填充单据是否可变更设备状态
new DefaultUseRegisterResult(result).getData();
// 结果增强,填充当前人是否有编辑按钮权限
new FillingEditPermForCurrentUser(result).getData();
return result;
}
public Map<String, Object> getDetailByIdx(String record) {
// 基本信息 + 制造信息
Map<String, Object> detail = this.baseMapper.getDetail(record);
......@@ -1884,6 +1900,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
return detail;
}
private void convertTreeToListMap(LinkedHashMap receiveUnit, List<Map<String, Object>> resultList) {
resultList.add(receiveUnit);
......@@ -1895,7 +1912,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
}
}
private String setDefaultRecord(JgUseRegistration jgUseRegistration, String record) {
public String setDefaultRecord(JgUseRegistration jgUseRegistration, String record) {
if (StringUtils.isEmpty(record)) {
JgUseRegistrationEq jgUseRegistrationEq = jgUseRegistrationEqService.getOne(new LambdaQueryWrapper<JgUseRegistrationEq>().eq(JgUseRegistrationEq::getEquipTransferId, jgUseRegistration.getSequenceNbr()));
record = jgUseRegistrationEq.getEquId();
......@@ -2319,40 +2336,49 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
* @param jgUseRegistration 使用信息
* @param record 设备唯一标识
*/
private void fillHistoryDataWithNewEquip(JSONObject jsonObject, JgUseRegistration jgUseRegistration, String record) {
void fillHistoryDataWithNewEquip(JSONObject jsonObject, JgUseRegistration jgUseRegistration, String record) {
// 非已完成、非作废时显示设备最新信息。前置需求:一个设备只能同时发起一个流程
if (!(FlowStatusEnum.TO_BE_FINISHED.getName().equals(jgUseRegistration.getStatus())
|| FlowStatusEnum.TO_BE_DISCARD.getName().equals(jgUseRegistration.getStatus()))
|| "1".equals(jgUseRegistration.getRegType())) {
// 基本信息 + 制造信息
Map<String, Object> detail = this.baseMapper.getDetail(record);
// 设计信息
Map<String, Object> desDetail = this.baseMapper.getDesDetail(record);
if (!ObjectUtils.isEmpty(desDetail)) {
detail.putAll(desDetail);
}
// 安装信息
Map<String, Object> installDetail = this.baseMapper.getiInstallDetail(record);
// 历史设备登记来的数据没有安装业务信息 从一码通数据拿
if (ValidationUtil.isEmpty(installDetail)) {
installDetail = this.baseMapper.getiInstallDetailByIdx(record);
}
// 维保信息
Map<String, Object> maintenanceDetail = this.baseMapper.getMaintenanceDetail(record);
// 历史设备登记来的数据没有维保业务信息 从一码通数据拿
if (ValidationUtil.isEmpty(maintenanceDetail)) {
maintenanceDetail = this.baseMapper.getMaintenanceDetailByIdx(record);
}
if (!ObjectUtils.isEmpty(maintenanceDetail)) {
detail.putAll(maintenanceDetail);
}
if (!ObjectUtils.isEmpty(installDetail)) {
detail.putAll(installDetail);
}
jsonObject.putAll(detail);
fillLastEquipDetail(jsonObject, record);
}
}
public void fillLastEquipDetail(JSONObject jsonObject, String record) {
// 基本信息 + 制造信息 + 设计信息
fillLastEquipBaseInfo(jsonObject, record);
// 安装信息
Map<String, Object> installDetail = this.baseMapper.getiInstallDetail(record);
// 历史设备登记来的数据没有安装业务信息 从一码通数据拿
if (ValidationUtil.isEmpty(installDetail)) {
installDetail = this.baseMapper.getiInstallDetailByIdx(record);
}
// 维保信息
Map<String, Object> maintenanceDetail = this.baseMapper.getMaintenanceDetail(record);
// 历史设备登记来的数据没有维保业务信息 从一码通数据拿
if (ValidationUtil.isEmpty(maintenanceDetail)) {
maintenanceDetail = this.baseMapper.getMaintenanceDetailByIdx(record);
}
if (!ObjectUtils.isEmpty(maintenanceDetail)) {
jsonObject.putAll(maintenanceDetail);
}
if (!ObjectUtils.isEmpty(installDetail)) {
jsonObject.putAll(installDetail);
}
}
public void fillLastEquipBaseInfo(JSONObject jsonObject, String record) {
// 基本信息 + 制造信息
Map<String, Object> detail = this.baseMapper.getDetail(record);
// 设计信息
Map<String, Object> desDetail = this.baseMapper.getDesDetail(record);
if (!ObjectUtils.isEmpty(desDetail)) {
detail.putAll(desDetail);
}
jsonObject.putAll(detail);
}
private UseFlagParamDto buildUseFlagParamDto(JgUseRegistration useRegistration, IdxBizJgRegisterInfo registerInfo, IdxBizJgFactoryInfo factoryInfo, Map<String, Object> exportParamsMap) {
UseFlagParamDto useFlagParamDto = new UseFlagParamDto();
useFlagParamDto.setReceiveCompanyCode(useRegistration.getReceiveCompanyCode());
......@@ -3502,4 +3528,9 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
public void compensate(JgUseRegistration jgUseRegistration) {
commonService.saveExecuteFlowData2Redis(jgUseRegistration.getInstanceId(), this.buildInstanceRuntimeData(jgUseRegistration));
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
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.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.module.jg.api.dto.ShCarDto;
import com.yeejoin.amos.boot.module.jg.api.entity.ShCar;
import com.yeejoin.amos.boot.module.jg.api.entity.ShCarEqu;
import com.yeejoin.amos.boot.module.jg.api.mapper.ShCarEquMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IShCarEquService;
import com.yeejoin.amos.boot.module.jg.api.vo.CarAndEquVo;
import com.yeejoin.amos.boot.module.jg.api.vo.ShCarEquVo;
import com.yeejoin.amos.boot.module.jg.biz.service.ICommonService;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
......@@ -49,7 +53,8 @@ public class ShCarEquServiceImpl extends BaseService<ShCarEqu, ShCarEqu, ShCarEq
return this.queryForList("", false);
}
public CarAndEquVo queryByCarId(String carId, ReginParams reginParams) {
public Map<String,Object> queryByCarId(String carId,String claimOneself, ReginParams reginParams) {
Map<String,Object> result = new HashMap<String,Object>();
// 根据carId获取Car
LambdaQueryWrapper<ShCar> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(ShCar::getSequenceNbr, carId);
......@@ -60,33 +65,98 @@ public class ShCarEquServiceImpl extends BaseService<ShCarEqu, ShCarEqu, ShCarEq
String companyType = reginParams.getCompany().getCompanyType();
AgencyUserModel userModel = reginParams.getUserModel();
shCarDto.setCompanyType(companyType);
shCarDto.setUseUnitName(reginParams.getCompany().getCompanyName());
shCarDto.setUseUnitCreditCode(reginParams.getCompany().getCompanyCode());
String[] code = reginParams.getCompany().getCompanyCode().split("_");
String useUnitCode = code.length > 1 ? code[1] : code[0];
if ("个人主体".equals(companyType)) {
shCarDto.setUseUnitAddress((String) commonService.getEnterpriseInfo(useUnitCode).get("address"));
} else {
shCarDto.setUseUnitAddress(reginParams.getCompany().getAddress());
if ("true".equals(claimOneself)){//认领自己的
shCarDto.setUseUnitName(reginParams.getCompany().getCompanyName());
shCarDto.setUseUnitCreditCode(reginParams.getCompany().getCompanyCode());
if ("个人主体".equals(companyType)) {
shCarDto.setUseUnitAddress((String) commonService.getEnterpriseInfo(useUnitCode).get("address"));
} else {
shCarDto.setUseUnitAddress(reginParams.getCompany().getAddress());
}
}
if ("false".equals(claimOneself)){//帮别人认领 取 原三环数据填充表单
shCarDto.setUseUnitName(shCar.getOwner());
shCarDto.setUseUnitCreditCode(shCar.getOwner());
shCarDto.setUseUnitAddress(shCar.getAddress());
}
shCarDto.setSafetyManagerId("个人主体".equals(companyType) ? userModel.getRealName() : null);
shCarDto.setPhone("个人主体".equals(companyType) ? userModel.getMobile() : null);
if (!ValidationUtil.isEmpty(shCarDto.getVehicleAttribute())){
switch (shCarDto.getVehicleAttribute()) {
case "A":
shCarDto.setVehicleAttribute("PRIVATE_CAR");
break;
case "B":
shCarDto.setVehicleAttribute("BUS");
break;
case "H":
shCarDto.setVehicleAttribute("SERVICE_VEHICLE");
break;
case "P":
shCarDto.setVehicleAttribute("SERVICE_CAR");
break;
case "V":
shCarDto.setVehicleAttribute("MINIVAN");
break;
case "X":
shCarDto.setVehicleAttribute("OTHER");
break;
case "T":
shCarDto.setVehicleAttribute("TAXI");
break;
case "J":
shCarDto.setVehicleAttribute("TRAINING_CAR");
break;
default:
shCarDto.setVehicleAttribute("OTHER");
}
}
if("原车".equals(shCarDto.getCylinderInstallationMethod())){
shCarDto.setCylinderInstallationMethod("ORIGINAL_CAR");
}else if("加装".equals(shCarDto.getCylinderInstallationMethod())){
shCarDto.setCylinderInstallationMethod("RELOADING");
}
// 根据carId获取设备列表
LambdaQueryWrapper<ShCarEqu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ShCarEqu::getCarId, carId);
List<ShCarEqu> list = this.list(queryWrapper);
// 将设备列表转换为前端可识别bean
List<ShCarEquVo> collect = list.stream()
.map(shCarEqu -> {
ShCarEquVo shCarEquVo = new ShCarEquVo(shCarEqu);
shCarEquVo.setUseInnerCode(shCarDto.getCarNumber());
shCarEquVo.setEquType(shCarEqu.getSequenceCode());
return shCarEquVo;
})
.collect(Collectors.toList());
List<ShCarEquVo> collect = list.stream().map(shCarEqu -> {
ShCarEquVo shCarEquVo = new ShCarEquVo(shCarEqu);
shCarEquVo.setWhetherVehicleCylinder("1");
shCarEquVo.setEquList("2000");
shCarEquVo.setEquCategory("2300");
shCarEquVo.setEquDefine("23T0");
return shCarEquVo;
}).collect(Collectors.toList());
// 封装返回VO
return new CarAndEquVo(shCarDto, collect);
HashMap<String ,Object> hashMap = JSONObject.parseObject(JSON.toJSONString(shCarDto), HashMap.class);
hashMap.put("equList", collect);
hashMap.put("identificationCode", shCarDto.getFrameNumber());
result.put("completeDataSanHuan", hashMap);
// 帮别人认领 + 单位变更给自己
if ("false".equals(claimOneself)){
HashMap<String, Object> gasCylinderChangeObj = new HashMap<>();
if ("个人主体".equals(companyType)) {
String[] companyName = reginParams.getCompany().getCompanyName().split("_");
String newUseUnitCreditCodeStr = companyName.length > 1 ? companyName[1] : companyName[0];
gasCylinderChangeObj.put("newUseUnitCreditCode", newUseUnitCreditCodeStr);// 使用单位
gasCylinderChangeObj.put("address",commonService.getEnterpriseInfo(useUnitCode).get("address"));
gasCylinderChangeObj.put("companyType", "person");
} else {
gasCylinderChangeObj.put("newUseUnitCreditCode", reginParams.getCompany().getCompanyName());// 使用单位
gasCylinderChangeObj.put("address",commonService.getEnterpriseInfo(reginParams.getCompany().getCompanyCode()).get("address"));
gasCylinderChangeObj.put("companyType", "company");
}
gasCylinderChangeObj.put("useRegistrationCode",shCarDto.getUseRegistrationCode());
gasCylinderChangeObj.put("carNumber",shCarDto.getCarNumber());
result.put("gasCylinderChange",gasCylinderChangeObj);
}
return result;
}
......
......@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
......@@ -21,24 +22,23 @@ import com.yeejoin.amos.boot.module.jg.api.enums.CompanyTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.ShCarMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IShCarService;
import com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgInspectionDetectionInfoService;
import com.yeejoin.amos.boot.module.ymt.api.entity.*;
import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
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.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
......@@ -99,6 +99,8 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
@Resource
private JgUseRegistrationManageServiceImpl useRegistrationManageService;
@Resource
private JgChangeVehicleRegistrationUnitServiceImpl changeVehicleRegistrationUnitService;
@Resource
private JgCertificateChangeRecordServiceImpl certificateChangeRecordService;
@Resource
private JgCertificateChangeRecordEqServiceImpl certificateChangeRecordEqService;
......@@ -187,10 +189,79 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
return this.baseMapper.alreadyExist(value) > 0;
}
public static void main(String[] args) {
System.out.println(Boolean.parseBoolean("false"));
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean claim(Map<String, Object> paramMap) {
public Boolean claim(String claimOneself, Map<String, Object> paramMap) {
List<String> records = new ArrayList<>();
try {
boolean isOneSelf = Boolean.parseBoolean(claimOneself);
HashMap<Object, Object> completeDataSanHuanMap = JSON.parseObject(toJSONString(paramMap.get("completeDataSanHuan")), HashMap.class);
// 自己认领
if (isOneSelf) {
records = this.claimOneselfMet(isOneSelf, completeDataSanHuanMap);
}
// 帮别人认领 + 单位变更登记到自己名下
if (!isOneSelf) {
HashMap<String, Object> gasCylinderChangeMap = JSON.parseObject(toJSONString(paramMap.get("gasCylinderChange")), HashMap.class);
this.claimOthersMet(isOneSelf, completeDataSanHuanMap, gasCylinderChangeMap);
}
} catch (Exception exception) {
this.handleClaimFailed(records);
throw new BadRequest(exception.getMessage());
}
return Boolean.TRUE;
}
/**
* 帮别人认领 + 单位变更登记到自己名下
*
* @param completeDataSanHuanMap 认领表单信息
* @param gasCylinderChangeMap 车用气瓶单位变更登记表单信息
* @return result
*/
private Boolean claimOthersMet(Boolean isOneSelf, HashMap<?, ?> completeDataSanHuanMap, HashMap<String, Object> gasCylinderChangeMap) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
// 认领设备及证管理信息完善
List<String> records = this.claimOneselfMet(isOneSelf, completeDataSanHuanMap);
// 发起车用气瓶单位变更登记
List<Map<String, Object>> equList = changeVehicleRegistrationUnitService.getBaseMapper().getEquList(records)
.stream()
.peek(x -> x.put("carNumber", completeDataSanHuanMap.get("carNumber")))
.collect(Collectors.toList());
gasCylinderChangeMap.put("useUnitCreditCode", String.format("%s_%s", completeDataSanHuanMap.get("useUnitName"), completeDataSanHuanMap.get("useUnitCreditCode")));
gasCylinderChangeMap.put("dataList", equList);
gasCylinderChangeMap.put("submit", "1");
gasCylinderChangeMap.put("formType", "add");
gasCylinderChangeMap.put("businessCode", ApplicationFormTypeEnum.DWBG.getBusinessCode());
gasCylinderChangeMap.put("receiveOrgCode", gasCylinderChangeMap.get("receiveOrgCode"));
gasCylinderChangeMap.put("receiveCompanyCode", gasCylinderChangeMap.get("receiveOrgCode"));
changeVehicleRegistrationUnitService.saveMessage(new JSONObject(gasCylinderChangeMap), reginParams);
// 保存字典值 原三环使用单位
List<DictionarieValueModel> oldUseUnit = Systemctl.dictionarieClient.dictValues("OLD_USE_UNIT").getResult();
boolean hasKey = oldUseUnit.stream().anyMatch(x -> x.getDictDataKey().equals(completeDataSanHuanMap.get("useUnitName")));
if (!hasKey) {
DictionarieValueModel dictionarieValueModel = new DictionarieValueModel();
dictionarieValueModel.setDictCode("OLD_USE_UNIT");
dictionarieValueModel.setDictDataValue((String) completeDataSanHuanMap.get("useUnitName"));
dictionarieValueModel.setDictDataKey((String) completeDataSanHuanMap.get("useUnitName"));
Systemctl.dictionarieClient.createValue(dictionarieValueModel);
}
return Boolean.TRUE;
}
/**
* 认领 设备 证 。。。
*
* @param isOneSelf 是否自己认领
* @param paramMap 入参
* @return 设备record集合
*/
private List<String> claimOneselfMet(Boolean isOneSelf, Map<?, ?> paramMap) {
// ShCar表的seq
String shCarSequenceNbr = String.valueOf(paramMap.get("sequenceNbr"));
if (ValidationUtil.isEmpty(shCarSequenceNbr)) {
......@@ -220,6 +291,19 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
throw new BadRequest("设备代码已存在系统中!");
}
});
// 0.3 出厂编号/产品编号的唯一校验
Set<String> factoryNumSet = equList.stream().map(equ -> {
JSONObject jsonObject = JSON.parseObject(toJSONString(equ));
return jsonObject.getString("factoryNum");
}).collect(Collectors.toSet());
if (factoryNumSet.size() < equList.size())
throw new BadRequest("出厂编号/产品编码重复!");
factoryNumSet.forEach(factoryNum -> {
Integer useFlag = commonService.checkFactoryNumUniquenessForVehicleCylinder(factoryNum, null);
if (useFlag > 0) {
throw new BadRequest("出厂编号/产品编码已存在系统中!");
}
});
try {
......@@ -227,28 +311,24 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
paramMap.remove("sequenceNbr");
// 1. 生成设备信息 + 保存es
this.claimGenEquInfo(useRegistrationCode, paramMap, equList, reginParams);
this.claimGenEquInfo(useRegistrationCode, paramMap, equList, reginParams, isOneSelf);
// 2. 生成车用气瓶使用登记证单据( JgVehicleInformation JgVehicleInformationEq )信息
JgVehicleInformation jgVehicleInformation = this.claimGenVehicleInfoAbout(paramMap, equList, reginParams);
JgVehicleInformation jgVehicleInformation = this.claimGenVehicleInfoAbout(paramMap, equList, reginParams, isOneSelf);
// 3. 生成 使用登记证管理表信息(JgUseRegistrationManage )证变更记录表信息 (JgCertificateChangeRecord)证变更记录对应设备表信息 (JgCertificateChangeRecordEq)
this.claimGenCertificateManageAndChange(jgVehicleInformation, equList);
this.claimGenCertificateManageAndChange(jgVehicleInformation, equList, reginParams, isOneSelf);
// 4. 修改三环车辆表的认领状态为已认领
ShCar shCar = ShCar.builder().claimedFlag("1").build();
shCar.setSequenceNbr(shCarSequenceNbr);
this.baseMapper.updateById(shCar);
return Boolean.TRUE;
return equList.stream().map(x -> (String) JSON.parseObject(toJSONString(x)).get("record")).collect(Collectors.toList());
} catch (Exception e) {
log.error("三环系统数据认领失败,使用登记证代码:{}", paramMap.get("useRegistrationCode"));
log.error("失败原因:{}", e.getMessage());
this.handleClaimFailed(equList);
throw new BadRequest("认领时出现异常,请联系管理员!");
}
}
/**
......@@ -257,10 +337,12 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
* @param jgVehicleInformation 车用气瓶使用登记证单据
* @param equList 设备集合
*/
private void claimGenCertificateManageAndChange(JgVehicleInformation jgVehicleInformation, JSONArray equList) {
private void claimGenCertificateManageAndChange(JgVehicleInformation jgVehicleInformation, JSONArray equList, ReginParams reginParams, Boolean isOneSelf) {
AgencyUserModel result = Privilege.agencyUserClient.queryByUserId(RequestContext.getExeUserId()).getResult();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
String changeContent = jgVehicleInformation.getUseUnitName() + "的" + result.getRealName() + "办理了【" + BusinessTypeEnum.JG_VEHICLE_GAS_APPLICATION.getName() + "】," + "单号【" + jgVehicleInformation.getApplyNo() + "】,申请日期" + simpleDateFormat.format(new Date());
String actor = isOneSelf ? jgVehicleInformation.getUseUnitName() + "的" + result.getRealName() + "办理了"
: reginParams.getCompany().getCompanyName() + "的" + reginParams.getUserModel().getRealName() + "认领了原三环系统中原" + jgVehicleInformation.getUseUnitName() + "的设备,并办理了";
String changeContent = actor + "【" + BusinessTypeEnum.JG_VEHICLE_GAS_APPLICATION.getName() + "】," + "单号【" + jgVehicleInformation.getApplyNo() + "】,申请日期" + simpleDateFormat.format(new Date());
// 3.1 生成使用登记证管理表信息(JgUseRegistrationManage )
Map<String, String> equType = new HashMap<>();
......@@ -336,7 +418,7 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
*
* @param equList 设备集合
*/
public void claimGenEquInfo(String useRegistrationCode, Map<String, Object> paramMap, JSONArray equList, ReginParams reginParams) {
public void claimGenEquInfo(String useRegistrationCode, Map<?, ?> paramMap, JSONArray equList, ReginParams reginParams, Boolean isOneSelf) {
CompanyBo company = reginParams.getCompany();
// 保存设备后 后续业务需要的设备信息
for (int i = 0; i < equList.size(); i++) {
......@@ -356,12 +438,17 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
useInfo.setDataSource("jg_his_sh");
useInfo.setIsIntoManagement(Boolean.TRUE);
useInfo.setEquState("1");
if (CompanyTypeEnum.INDIVIDUAL.getName().equals(company.getCompanyType())) {
useInfo.setUseUnitName(company.getCompanyName().split("_")[1]);
useInfo.setUseUnitCreditCode(company.getCompanyCode().split("_")[1]);
if (isOneSelf) {
if (CompanyTypeEnum.INDIVIDUAL.getName().equals(company.getCompanyType())) {
useInfo.setUseUnitName(company.getCompanyName().split("_")[1]);
useInfo.setUseUnitCreditCode(company.getCompanyCode().split("_")[1]);
} else {
useInfo.setUseUnitName(company.getCompanyName());
useInfo.setUseUnitCreditCode(company.getCompanyCode());
}
} else {
useInfo.setUseUnitName(company.getCompanyName());
useInfo.setUseUnitCreditCode(company.getCompanyCode());
useInfo.setUseUnitName((String) paramMap.get("useUnitName"));
useInfo.setUseUnitCreditCode((String) paramMap.get("useUnitCreditCode"));
}
useInfo.setORegUnit((String) paramMap.get("oRegUnit"));
useInfo.setORegDate((String) paramMap.get("oRegDate"));
......@@ -434,6 +521,8 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
IdxBizJgTechParamsVessel vessel = JSON.parseObject(JSON.toJSONString(equObj), IdxBizJgTechParamsVessel.class);
vessel.setRecord(equRecord);
vessel.setRecDate(date);
String VIN = ValidationUtil.isEmpty(paramMap.get("identificationCode")) ? "" : (String) paramMap.get("identificationCode");
vessel.setVin(VIN);
idxBizJgTechParamsVesselService.save(vessel);
// 检验检测信息
......@@ -466,7 +555,7 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
* @param equList 设备集合
* @return 车用气瓶使用登记证单据
*/
public JgVehicleInformation claimGenVehicleInfoAbout(Map<String, Object> paramMap, JSONArray equList, ReginParams reginParams) {
public JgVehicleInformation claimGenVehicleInfoAbout(Map<?, ?> paramMap, JSONArray equList, ReginParams reginParams, Boolean isOneSelf) {
// 车用气瓶登记表seq
Long vehicleInformationSeq = sequence.nextId();
CompanyBo company = reginParams.getCompany();
......@@ -483,13 +572,19 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
vehicleInformation.setSequenceNbr(vehicleInformationSeq);
vehicleInformation.setApplyNo(applyNo);
// 使用单位信息
if (CompanyTypeEnum.INDIVIDUAL.getName().equals(company.getCompanyType())) {
vehicleInformation.setUseUnitName(company.getCompanyName().split("_")[1]);
vehicleInformation.setUseUnitCreditCode(company.getCompanyCode().split("_")[1]);
if (isOneSelf) {
if (CompanyTypeEnum.INDIVIDUAL.getName().equals(company.getCompanyType())) {
vehicleInformation.setUseUnitName(company.getCompanyName().split("_")[1]);
vehicleInformation.setUseUnitCreditCode(company.getCompanyCode().split("_")[1]);
} else {
vehicleInformation.setUseUnitName(company.getCompanyName());
vehicleInformation.setUseUnitCreditCode(company.getCompanyCode());
}
} else {
vehicleInformation.setUseUnitName(company.getCompanyName());
vehicleInformation.setUseUnitCreditCode(company.getCompanyCode());
vehicleInformation.setUseUnitName((String) paramMap.get("useUnitName"));
vehicleInformation.setUseUnitCreditCode((String) paramMap.get("useUnitCreditCode"));
}
// 接收单位信息
if (!StringUtils.isEmpty(vehicleInformation.getReceiveOrgCode())) {
String[] splitReceiveOrgCode = vehicleInformation.getReceiveOrgCode().split("_");
......@@ -527,6 +622,12 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
vehicleInformation.setEstateUnitCreditCode(data[0]);
vehicleInformation.setEstateUnitName(data[1]);
}
// 检验单位
if (!StringUtils.isEmpty(vehicleInformation.getInspectUnitName())) {
String[] data = String.valueOf(paramMap.get("inspectUnitName")).split("_");
vehicleInformation.setInspectUnitCreditCode(data[0]);
vehicleInformation.setInspectUnitName(data[1]);
}
// 其他附件
if (!ObjectUtils.isEmpty(paramMap.get("otherAccessories"))) {
vehicleInformation.setOtherAccessories(JSONObject.toJSONString(paramMap.get("otherAccessories")));
......@@ -558,10 +659,9 @@ public class ShCarServiceImpl extends BaseService<ShCar, ShCar, ShCarMapper> imp
/**
* 认领过程中报错,回滚第一步的es数据
*/
public void handleClaimFailed(JSONArray equList) {
if (!equList.isEmpty()) {
equList.forEach(equ -> {
String record = JSON.parseObject(toJSONString(equ)).getString("record");
public void handleClaimFailed(List<String> records) {
if (!records.isEmpty()) {
records.forEach(record -> {
Optional<ESEquipmentCategoryDto> data = esEquipmentCategory.findById(record);
if (!ObjectUtils.isEmpty(data)) {
esEquipmentCategory.deleteById(record);
......
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.alibaba.fastjson.JSON;
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.yeejoin.amos.boot.biz.common.annotation.FieldDisplayDefine;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistration;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistrationEq;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistrationManage;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgUseRegistrationEqMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgUseRegistrationManageMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import com.yeejoin.amos.boot.module.jg.biz.service.*;
import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgDesignInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgFactoryInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgRegisterInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgDesignInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgFactoryInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgRegisterInfoMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import javax.annotation.PostConstruct;
import java.lang.reflect.Field;
import java.util.*;
/**
* 单个维护使用登记策略实现类
*/
@Component
public class SingleDataChangeProcessStrategy implements IChangeDataProcessStrategy {
private final IdxBizJgDesignInfoMapper idxBizJgDesignInfoMapper;
private final IdxBizJgFactoryInfoMapper jgFactoryInfoMapper;
private final IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper;
private final JgUseRegistrationServiceImpl useRegistrationService;
private final JgUseRegistrationEqMapper jgRelationEquipMapper;
private final CommonEquipDataProcessService commonEquipDataProcessService;
private final JgUseRegistrationManageMapper registrationManageMapper;
private final EquipmentCategoryMapper equipmentCategoryMapper;
private final List<String> jsonFields = new ArrayList<>();
public SingleDataChangeProcessStrategy(IdxBizJgDesignInfoMapper idxBizJgDesignInfoMapper, IdxBizJgFactoryInfoMapper jgFactoryInfoMapper, IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper, JgUseRegistrationServiceImpl useRegistrationService, JgUseRegistrationEqMapper jgRelationEquipMapper, IIdxBizJgTechParamsElevatorService iIdxBizJgTechParamsElevatorService, IIdxBizJgTechParamsVehicleService iIdxBizJgTechParamsVehicleService, IIdxBizJgTechParamsRopewayService iIdxBizJgTechParamsRopewayService, IIdxBizJgTechParamsRidesService iIdxBizJgTechParamsRidesService, IIdxBizJgTechParamsBoilerService iIdxBizJgTechParamsBoilerService, IIdxBizJgTechParamsVesselService iIdxBizJgTechParamsVesselService, IIdxBizJgTechParamsPipelineService iIdxBizJgTechParamsPipelineService, IIdxBizJgTechParamsLiftingService iIdxBizJgTechParamsLiftingService, EquipChangeDataUpdateService equipChangeDataUpdateService, CommonEquipDataProcessService commonEquipDataProcessService, JgUseRegistrationManageMapper registrationManageMapper, EquipmentCategoryMapper equipmentCategoryMapper) {
this.idxBizJgDesignInfoMapper = idxBizJgDesignInfoMapper;
this.jgFactoryInfoMapper = jgFactoryInfoMapper;
this.idxBizJgRegisterInfoMapper = idxBizJgRegisterInfoMapper;
this.useRegistrationService = useRegistrationService;
this.jgRelationEquipMapper = jgRelationEquipMapper;
this.commonEquipDataProcessService = commonEquipDataProcessService;
this.registrationManageMapper = registrationManageMapper;
this.equipmentCategoryMapper = equipmentCategoryMapper;
}
@PostConstruct
public void init() {
Field[] fields1 = EquipRegisterChangeDataDto.class.getDeclaredFields();
for (Field field : fields1) {
field.setAccessible(true);
FieldDisplayDefine fieldDisplayDefine = field.getAnnotation(FieldDisplayDefine.class);
if (fieldDisplayDefine != null && fieldDisplayDefine.type() == JSON.class) {
jsonFields.add(field.getName());
}
}
Field[] fields2 = EquipFactoryChangeDataDto.class.getDeclaredFields();
for (Field field : fields2) {
field.setAccessible(true);
FieldDisplayDefine fieldDisplayDefine = field.getAnnotation(FieldDisplayDefine.class);
if (fieldDisplayDefine != null && fieldDisplayDefine.type() == JSON.class) {
jsonFields.add(field.getName());
}
}
// 设计信息构建
Field[] fields3 = EquipDesignChangeDataDto.class.getDeclaredFields();
for (Field field : fields3) {
field.setAccessible(true);
FieldDisplayDefine fieldDisplayDefine = field.getAnnotation(FieldDisplayDefine.class);
if (fieldDisplayDefine != null && fieldDisplayDefine.type() == JSON.class) {
jsonFields.add(field.getName());
}
}
// 技术参数附件
Field[] fields4 = TechParamsLiftingChangeFieldDto.class.getDeclaredFields();
for (Field field : fields4) {
field.setAccessible(true);
FieldDisplayDefine fieldDisplayDefine = field.getAnnotation(FieldDisplayDefine.class);
if (fieldDisplayDefine != null && fieldDisplayDefine.type() == JSON.class) {
jsonFields.add(field.getName());
}
}
Field[] fields5 = TechParamsPipelineChangeFieldDto.class.getDeclaredFields();
for (Field field : fields5) {
field.setAccessible(true);
FieldDisplayDefine fieldDisplayDefine = field.getAnnotation(FieldDisplayDefine.class);
if (fieldDisplayDefine != null && fieldDisplayDefine.type() == JSON.class) {
jsonFields.add(field.getName());
}
}
}
@Override
public List<ChangeDataDto> handle(Map<String, Object> changeData, String defaultChangeId) {
String record = this.getRecord(defaultChangeId);
List<ChangeDataDto> allChangeColumns = new ArrayList<>();
// 新数据解析
EquipRegisterChangeDataDto registerChangeDataDto = commonEquipDataProcessService.castMap2Bean(changeData, EquipRegisterChangeDataDto.class);
EquipFactoryChangeDataDto factoryChangeDataDto = commonEquipDataProcessService.castMap2Bean(changeData, EquipFactoryChangeDataDto.class);
EquipDesignChangeDataDto designChangeDataDto = commonEquipDataProcessService.castMap2Bean(changeData, EquipDesignChangeDataDto.class);
commonEquipDataProcessService.buildChangeFields(record, designChangeDataDto, factoryChangeDataDto, registerChangeDataDto, allChangeColumns);
// 前置校验
commonEquipDataProcessService.checkValidField(record, registerChangeDataDto, null, null, null);
commonEquipDataProcessService.checkValidField(record, factoryChangeDataDto, registerChangeDataDto.getEquList(), registerChangeDataDto.getEquCategory(), registerChangeDataDto.getEquDefine());
commonEquipDataProcessService.checkValidField(record, designChangeDataDto, registerChangeDataDto.getEquList(), registerChangeDataDto.getEquCategory(), registerChangeDataDto.getEquDefine());
// 设备制造、设计、注册信息业务处理落库
commonEquipDataProcessService.dealBizDataForEquip(record, registerChangeDataDto);
commonEquipDataProcessService.dealBizDataForEquip(record, factoryChangeDataDto);
commonEquipDataProcessService.dealBizDataForEquip(record, designChangeDataDto);
// 设备技术参数入库处理
commonEquipDataProcessService.updateTechParamInfo(registerChangeDataDto, record, changeData, allChangeColumns);
// 更新单据对应的证信息
this.updateManagerCertInfo(defaultChangeId, record, registerChangeDataDto);
return allChangeColumns;
}
private void updateManagerCertInfo(String applyNo, String record, EquipRegisterChangeDataDto registerChangeDataDto) {
JgUseRegistration jgUseRegistration = useRegistrationService.getOne(new LambdaQueryWrapper<JgUseRegistration>()
.eq(JgUseRegistration::getApplyNo, applyNo).select(BaseEntity::getSequenceNbr, JgUseRegistration::getStatus, JgUseRegistration::getUseRegistrationCode));
if (FlowStatusEnum.TO_BE_FINISHED.getName().equals(jgUseRegistration.getStatus())) {
LambdaQueryWrapper<JgUseRegistrationManage> queryWrapper = new LambdaQueryWrapper<JgUseRegistrationManage>()
.eq(JgUseRegistrationManage::getUseRegistrationCode, jgUseRegistration.getUseRegistrationCode())
.eq(JgUseRegistrationManage::getIsDelete, 0).select(BaseEntity::getSequenceNbr,JgUseRegistrationManage::getVersion);
JgUseRegistrationManage jgUseRegistrationManage = registrationManageMapper.selectOne(queryWrapper);
if (jgUseRegistrationManage != null && !StringUtils.equals(jgUseRegistrationManage.getEquDefineCode(), registerChangeDataDto.getEquDefine())) {
LambdaUpdateWrapper<JgUseRegistrationManage> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(BaseEntity::getSequenceNbr, jgUseRegistrationManage.getSequenceNbr());
if (StringUtils.isNotEmpty(registerChangeDataDto.getEquDefine())) {
EquipmentCategory equipmentCategory = getEquipmentCategory(registerChangeDataDto);
updateWrapper.set(JgUseRegistrationManage::getEquDefineCode, registerChangeDataDto.getEquDefine());
updateWrapper.set(JgUseRegistrationManage::getEquDefine, equipmentCategory.getName());
} else {
updateWrapper.set(JgUseRegistrationManage::getEquDefineCode, null);
updateWrapper.set(JgUseRegistrationManage::getEquDefine, null);
}
updateWrapper.set(JgUseRegistrationManage::getVersion, jgUseRegistrationManage.getVersion() + 1);
updateWrapper.set(JgUseRegistrationManage::getRecDate, new Date());
updateWrapper.set(JgUseRegistrationManage::getChangeReason, "设备信息变更");
registrationManageMapper.update(null, updateWrapper);
}
}
}
private EquipmentCategory getEquipmentCategory(EquipRegisterChangeDataDto registerChangeDataDto) {
return equipmentCategoryMapper.selectOne(new LambdaQueryWrapper<EquipmentCategory>().eq(EquipmentCategory::getCode, registerChangeDataDto.getEquDefine()));
}
@Override
public Map<String, Object> getDetail(String applyNo, String bizId) {
if (StringUtils.isEmpty(applyNo) && StringUtils.isEmpty(bizId)) {
throw new BadRequest("applyNo and bizId can't be empty");
}
if (StringUtils.isNotEmpty(applyNo)) {
return this.getDetailByApplyNo(applyNo);
} else {
return this.getDetailByBizId(bizId);
}
}
private Map<String, Object> getDetailByBizId(String record) {
Map<String, Object> re = new HashMap<>();
// 注册信息(基本信息)构建
EquipRegisterChangeDataDto equipRegisterChangeDataDto = this.buildRegisterInfo(record);
// 制造信息构建
EquipFactoryChangeDataDto factoryChangeDataDto = this.buildFactoryInfo(record);
// 设计信息构建
EquipDesignChangeDataDto designChangeDataDto = this.buildDesignInfo(record);
// 技术参数构建
BaseTechParamsFieldDto techParamsFieldDto = commonEquipDataProcessService.buildTechParamInfo(equipRegisterChangeDataDto, record);
re.putAll(BeanUtil.beanToMap(equipRegisterChangeDataDto));
re.putAll(BeanUtil.beanToMap(factoryChangeDataDto));
re.putAll(BeanUtil.beanToMap(designChangeDataDto));
re.putAll(BeanUtil.beanToMap(techParamsFieldDto));
this.castJsonFields(re);
return this.cast2UnderCase(re);
}
private Map<String, Object> cast2UnderCase(Map<String, Object> re) {
// 由于历史遗留问题,和前端保存统一,要转成大写下滑线驼峰
Map<String, Object> result = new HashMap<>();
re.forEach((k, v) -> {
result.put(CharSequenceUtil.toUnderlineCase(k).toUpperCase(), v);
});
return result;
}
private void castJsonFields(Map<String, Object> re) {
jsonFields.forEach(field -> {
if (re.containsKey(field) && re.get(field) instanceof String) {
re.put(field, JSON.parse((String) re.get(field)));
}
});
}
private EquipDesignChangeDataDto buildDesignInfo(String record) {
EquipDesignChangeDataDto changeDataDto = new EquipDesignChangeDataDto();
IdxBizJgDesignInfo designInfo = idxBizJgDesignInfoMapper.selectOne(new LambdaQueryWrapper<IdxBizJgDesignInfo>().eq(IdxBizJgDesignInfo::getRecord, record));
BeanUtil.copyProperties(designInfo, changeDataDto);
changeDataDto.setDesignDate(DateUtil.formatDate(designInfo.getDesignDate()));
return changeDataDto;
}
private EquipFactoryChangeDataDto buildFactoryInfo(String record) {
EquipFactoryChangeDataDto changeDataDto = new EquipFactoryChangeDataDto();
IdxBizJgFactoryInfo factoryInfo = jgFactoryInfoMapper.selectOne(new LambdaQueryWrapper<IdxBizJgFactoryInfo>().eq(IdxBizJgFactoryInfo::getRecord, record));
BeanUtil.copyProperties(factoryInfo, changeDataDto);
changeDataDto.setProduceDate(DateUtil.formatDate(factoryInfo.getProduceDate()));
return changeDataDto;
}
private EquipRegisterChangeDataDto buildRegisterInfo(String record) {
EquipRegisterChangeDataDto changeDataDto = new EquipRegisterChangeDataDto();
IdxBizJgRegisterInfo registerInfo = idxBizJgRegisterInfoMapper.selectOne(new LambdaQueryWrapper<IdxBizJgRegisterInfo>().eq(IdxBizJgRegisterInfo::getRecord, record));
BeanUtil.copyProperties(registerInfo, changeDataDto);
return changeDataDto;
}
public Map<String, Object> getDetailByApplyNo(String bizId) {
String record = this.getRecord(bizId);
return getDetailByBizId(record);
}
public String getRecord(String applyNo) {
JgUseRegistration jgUseRegistration = useRegistrationService.getOne(new LambdaQueryWrapper<JgUseRegistration>()
.eq(JgUseRegistration::getApplyNo, applyNo).select(BaseEntity::getSequenceNbr));
LambdaQueryWrapper<JgUseRegistrationEq> eq = new QueryWrapper<JgUseRegistrationEq>().lambda()
.eq(JgUseRegistrationEq::getEquipTransferId, jgUseRegistration.getSequenceNbr())
.eq(JgUseRegistrationEq::getIsDelete, false).select(JgUseRegistrationEq::getEquId);
JgUseRegistrationEq jgUseRegistrationEq = jgRelationEquipMapper.selectOne(eq);
return jgUseRegistrationEq.getEquId();
}
@Override
public IBizDataChangeHandleStrategy.ModelType canHandleMode() {
return IBizDataChangeHandleStrategy.ModelType.single;
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.yeejoin.amos.boot.module.jg.api.dto.ChangeDataDto;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import com.yeejoin.amos.boot.module.jg.biz.context.DataProcessStrategyContext;
import com.yeejoin.amos.boot.module.jg.biz.event.ChangeDataEvent;
import com.yeejoin.amos.boot.module.jg.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.jg.biz.service.IChangeDataProcessStrategy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import java.util.List;
import java.util.Map;
@Service
public class UseRegisterDataChangeHandleImpl implements IBizDataChangeHandleStrategy {
private final EventPublisher publisher;
private final UseRegisterUpdateService useRegisterUpdateService;
public UseRegisterDataChangeHandleImpl(EventPublisher publisher, UseRegisterUpdateService useRegisterUpdateService) {
this.publisher = publisher;
this.useRegisterUpdateService = useRegisterUpdateService;
}
@Override
public String canHandleBizType() {
return "useRegister";
}
/**
* 保存
*
* @param applyNo 单据编号
* @param model single, batch
* @param changeData 前端不支持分组-目前为平铺数据结构
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void doSave(String applyNo, ModelType model, Map<String, Object> changeData) {
// 选择是台套、还是单位办理的方式,进行分类数据的解析
IChangeDataProcessStrategy dataProcessor = DataProcessStrategyContext.getStrategy(model);
List<ChangeDataDto> allChangeColumns = dataProcessor.handle(changeData, applyNo);
if (!allChangeColumns.isEmpty()) {
// 更新历史的JSON的数据
this.updateHistoryJson(applyNo);
this.buildLogData(allChangeColumns);
// 异步记录日志
publisher.publish(new ChangeDataEvent(this, allChangeColumns, RequestContext.cloneRequestContext()));
}
}
private void updateHistoryJson(String applyNo) {
useRegisterUpdateService.updateHisData(applyNo);
}
private void buildLogData(List<ChangeDataDto> allChangeColumns) {
allChangeColumns.forEach(column -> {
column.setBizType("使用登记");
});
}
@Override
public Map<String, ?> getDetail(String applyNo, ModelType model, String bizId) {
IChangeDataProcessStrategy dataProcessor = DataProcessStrategyContext.getStrategy(model);
// 兼容:台套类打开变更详情(使用applyNo) 和 单位办理批量时选择单个设备打开详情(使用record)
return dataProcessor.getDetail(applyNo, bizId);
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
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;
import com.yeejoin.amos.boot.module.jg.api.entity.JgRegistrationHistory;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistration;
import com.yeejoin.amos.boot.module.jg.api.enums.CylinderTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgRegisterInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgRegisterInfoMapper;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
@Service
public class UseRegisterUpdateService {
private final IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper;
private final JgUseRegistrationServiceImpl useRegistrationService;
private final JgRegistrationHistoryServiceImpl jgRegistrationHistoryService;
public UseRegisterUpdateService(IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper, JgUseRegistrationServiceImpl useRegistrationService, JgRegistrationHistoryServiceImpl jgRegistrationHistoryService) {
this.idxBizJgRegisterInfoMapper = idxBizJgRegisterInfoMapper;
this.useRegistrationService = useRegistrationService;
this.jgRegistrationHistoryService = jgRegistrationHistoryService;
}
public void updateHisData(String applyNo) {
JgUseRegistration jgUseRegistration = useRegistrationService.getOne(new LambdaQueryWrapper<JgUseRegistration>().eq(JgUseRegistration::getApplyNo, applyNo));
// 构建更新json数据
JSONObject hisData = this.buildLastDetailData(jgUseRegistration);
// 更新数据
useRegistrationService.updateHistory(hisData, null, jgUseRegistration.getSequenceNbr().toString(), jgUseRegistration.getSupervisoryCode());
}
public JSONObject buildLastDetailData(JgUseRegistration jgUseRegistration) {
LambdaQueryWrapper<JgRegistrationHistory> lambda = new QueryWrapper<JgRegistrationHistory>().lambda();
lambda.eq(JgRegistrationHistory::getCurrentDocumentId, jgUseRegistration.getSequenceNbr());
lambda.eq(JgRegistrationHistory::getIsDelete, false);
JgRegistrationHistory jgRegistrationHistory = jgRegistrationHistoryService.getBaseMapper().selectOne(lambda);
JSONObject jsonObject = JSONObject.parseObject(jgRegistrationHistory.getChangeData());
jsonObject.put("receiveOrgCode", jgUseRegistration.getReceiveCompanyCode() + "_" + jgUseRegistration.getReceiveOrgName());
jsonObject.put("status", jgUseRegistration.getStatus());
jsonObject.put("applyNo", jgUseRegistration.getApplyNo());
jsonObject.remove("submit");
jsonObject.remove("instanceId");
if (!ObjectUtils.isEmpty(jsonObject.get("factoryUseSiteStreet"))) {
jsonObject.put("factoryUseSiteStreet", String.valueOf(Long.valueOf(jsonObject.get("factoryUseSiteStreet").toString())));
}
if (!"unit".equals(jgUseRegistration.getManageType())) {
// 台套逻辑
String record = useRegistrationService.setDefaultRecord(jgUseRegistration, null);
// 更新 设计、制造、基本信息json
useRegistrationService.fillLastEquipBaseInfo(jsonObject, record);
// 补充"车牌号"字段
LambdaQueryWrapper<IdxBizJgRegisterInfo> wrapper = new QueryWrapper<IdxBizJgRegisterInfo>().lambda().eq(IdxBizJgRegisterInfo::getRecord, record);
IdxBizJgRegisterInfo idxBizJgRegisterInfo = idxBizJgRegisterInfoMapper.selectOne(wrapper);
jsonObject.put("carNumber", idxBizJgRegisterInfo.getCarNumber());
jsonObject.put("regType", jgUseRegistration.getRegType());
} else {
// 单位办理逻辑
List<Map<String, Object>> equipmentLists = (List<Map<String, Object>>) jsonObject.get("equipmentLists");
List<String> records = equipmentLists.stream().map(v -> (String) v.get("record")).collect(toList());
jsonObject.remove("equipmentLists");
if (CylinderTypeEnum.CYLINDER.getCode().equals(jsonObject.get("EQU_CATEGORY_CODE"))) {
List<DictionarieValueModel> fillingMedium = Systemctl.dictionarieClient.dictValues("FILLING_MEDIUM").getResult();
Map<String, Object> fillingMediumMap = fillingMedium.stream().collect(Collectors.toMap(DictionarieValueModel::getDictDataKey, DictionarieValueModel::getDictDataValue));
List<Map<String, Object>> result = useRegistrationService.getBaseMapper().queryForUnitVesselEquipment(records);
result.forEach(i -> {
i.put("chargingMedium", fillingMediumMap.get(i.get("chargingMedium")));
});
jsonObject.put("equipmentLists", result);
} else {
jsonObject.put("equipmentLists", useRegistrationService.getBaseMapper().queryForUnitPipelineEquipment(records));
}
}
jsonObject.put("useRegistrationCode", jgUseRegistration.getUseRegistrationCode());
// 转化 附件 字段
this.convertStringToJsonObject(jsonObject, JgUseRegistrationServiceImpl.jsonFields);
return jsonObject;
}
public void convertStringToJsonObject(Object obj, String[] jsonFields) {
if (obj instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) obj;
for (String field : jsonFields) {
if (jsonObject.get(field) != null && jsonObject.get(field) instanceof String) {
jsonObject.put(field, JSON.parse(JSONObject.toJSONString(jsonObject.get(field))));
}
}
} else if (obj instanceof Map) {
Map<String, Object> map = (Map<String, Object>) obj;
for (String field : jsonFields) {
if (map.containsKey(field) && map.get(field) instanceof String) {
map.put(field, JSON.parse(JSONObject.toJSONString(map.get(field))));
}
}
} else {
// 处理其他类型
System.out.println("Unsupported Object Type");
}
}
}
......@@ -18,4 +18,6 @@ public interface AlertUseUnitStatisticsMapper extends BaseMapper<AlertUseUnitSta
List<Map<String, String>> getStatisticsMessage(@Param("startDate") String startDate, @Param("endDate") String endDate);
AlertUseUnitStatistics getUseUnitMessage(@Param("unitCode") String unitCode, @Param("equipmentId") String equipmentId, @Param("startDate") String startDate, @Param("endDate") String endDate);
List<Map<String,Object>> countByUseUnitCode(@Param("useUnitCodeList") List<String> useUnitCodeList);
}
......@@ -43,6 +43,48 @@
and father_alert is null
) as faultNum
</select>
<select id="countByUseUnitCode" resultType="java.util.Map">
SELECT
tbei.use_unit_code AS useUnitCode,
l.expiry_date AS expiryDate,
IFNULL ( u."userCount", '0' ) AS userCount,
IFNULL ( e."equipCount", '0' ) AS equipCount
FROM
tz_base_enterprise_info tbei
LEFT JOIN ( SELECT * FROM tz_base_unit_licence GROUP BY unit_code ORDER BY expiry_date DESC ) AS l ON l.unit_code = tbei.use_unit_code
LEFT JOIN (
SELECT
tbei.use_unit_code AS useNnitCode,
COUNT ( 1 ) AS userCount
FROM
tz_base_enterprise_info tbei
INNER JOIN tzs_user_info ui ON tbei.use_unit_code = ui.unit_code
where tbei.use_unit_code IN
<foreach collection="useUnitCodeList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
GROUP BY
tbei.use_unit_code
) u ON u."useNnitCode" = tbei.use_unit_code
LEFT JOIN (
SELECT
tbei.use_unit_code AS useNnitCode,
COUNT ( 1 ) AS equipCount
FROM
tz_base_enterprise_info tbei
INNER JOIN idx_biz_jg_use_info jui ON tbei.use_unit_code = jui.USE_UNIT_CREDIT_CODE
LEFT JOIN idx_biz_jg_other_info joi ON joi.RECORD = jui.RECORD
AND joi.SUPERVISORY_CODE IS NOT NULL
AND joi.SUPERVISORY_CODE != ''
AND joi.SUPERVISORY_CODE != 'null'
where tbei.use_unit_code IN
<foreach collection="useUnitCodeList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
GROUP BY
tbei.use_unit_code
) e ON e."useNnitCode" = tbei.use_unit_code
</select>
</mapper>
......@@ -321,7 +321,7 @@ public class YJDPStatisticsController {
@ApiOperation(value = "月度困人故障高发使用单位-右上角更多-地市月度应急事件高发使用单位-表格",
notes = "月度困人故障高发使用单位-右上角更多-地市月度应急事件高发使用单位-表格")
@PostMapping("/alertUseUnitTable/dp")
public ResponseModel<IPage<AlertUseUnitStatistics>> alertUseUnitTableForDP(@Validated @RequestBody DPFilterParamForDetailDto detailDto,
public ResponseModel<IPage<Map<String,Object>>> alertUseUnitTableForDP(@Validated @RequestBody DPFilterParamForDetailDto detailDto,
@RequestParam(value = "current", defaultValue = "1") Integer current,
@RequestParam(value = "size", defaultValue = "20") Integer size) throws Exception {
detailDto.setCurrent(current);
......
package com.yeejoin.amos.boot.module.statistcs.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
......@@ -40,7 +41,9 @@ import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.foundation.utils.DateTimeUtil;
import org.typroject.tyboot.core.foundation.utils.DateUtil;
......@@ -714,14 +717,14 @@ public class YJDPStatisticsServiceImpl {
return ResponseHelper.buildResponse(res);
}
public ResponseModel<IPage<AlertUseUnitStatistics>> alertUseUnitTableForDP(DPFilterParamForDetailDto detailDto) throws Exception{
public ResponseModel<IPage<Map<String,Object>>> alertUseUnitTableForDP(DPFilterParamForDetailDto detailDto) throws Exception{
Page<AlertUseUnitStatistics> page = new Page<>();
page.setCurrent(detailDto.getCurrent());
page.setSize(detailDto.getSize());
String orgCode = stCommonService.getAndSetOrgCode(ValidationUtil.isEmpty(detailDto.getCityCode()) ? "610000" : detailDto.getCityCode());
if (orgCode == null) {
return ResponseHelper.buildResponse(page);
return ResponseHelper.buildResponse(new Page<>());
}
LambdaQueryWrapper<AlertUseUnitStatistics> lambda = new QueryWrapper<AlertUseUnitStatistics>().lambda();
......@@ -766,7 +769,30 @@ public class YJDPStatisticsServiceImpl {
lambda.le(AlertUseUnitStatistics::getEquipmentClassificationCode, detailDto.getEquListCode());
}
IPage<AlertUseUnitStatistics> alertUseUnitStatistics = alertUseUnitStatisticsMapper.selectPage(page, lambda);
return ResponseHelper.buildResponse(alertUseUnitStatistics);
List<AlertUseUnitStatistics> records = alertUseUnitStatistics.getRecords();
List<String> useUnitCodeList = records.stream().map(AlertUseUnitStatistics::getUseUnitCode).collect(Collectors.toList());
Map<String,Map<String,Object>> useUnitMap = new HashMap<>();
List<Map<String,Object>> resultList = new ArrayList<>();
if(!CollectionUtils.isEmpty(useUnitCodeList)){
List<Map<String, Object>> list = alertUseUnitStatisticsMapper.countByUseUnitCode(useUnitCodeList);
if(!CollectionUtils.isEmpty(list)){
list.forEach(map -> {
useUnitMap.put(map.get("useUnitCode").toString(),map);
});
}
}
records.forEach(t->{
Map<String, Object> map = BeanUtil.beanToMap(t);
map.putAll(useUnitMap.get(t.getUseUnitCode()));
resultList.add(map);
});
Page<Map<String,Object>> resultPage = new Page<>();
resultPage.setCurrent(page.getCurrent());
resultPage.setSize(page.getSize());
resultPage.setTotal(alertUseUnitStatistics.getTotal());
resultPage.setRecords(resultList);
return ResponseHelper.buildResponse(resultPage);
}
public List<JSONObject> getKeyPositionMonitor(DPFilterParamForDetailDto filterParamDto) {
......
......@@ -101,7 +101,32 @@ public class YwblpjsxtjServiceImpl implements IZBGLService {
@Override
public Page<Map<String, Object>> getPage(Page page,DPFilterParamForDetailDto dpFilterParamForDetailDto) {
List<RegionModel> regionModels = stCommonService.setRegionIfRootParent(dpFilterParamForDetailDto.getCityCode());
String orgCodeP = stCommonService.getAndSetOrgCode(dpFilterParamForDetailDto.getCityCode());
DPFilterParamDto dpFilterParamDto = new DPFilterParamDto();
//安装告知、维修告知、改造告知、移装告知
List<CountDto> noticCount = jgStatisticsMapper.queryNoticeAvgDayByReceiveCompany(dpFilterParamDto, orgCodeP);
//使用登记、车用气瓶使用登记
List<CountDto> useCount = jgStatisticsMapper.queryUseAvgDayByReceiveCompany(dpFilterParamDto, orgCodeP);
//更名变更登记、改造变更登记、移装变更登记、单位变更登记、气瓶单位变更登记
List<CountDto> changeCount = jgStatisticsMapper.queryChangeAvgDayByReceiveCompany(dpFilterParamDto, orgCodeP);
//启用停用
List<CountDto> disableCount = jgStatisticsMapper.queryDisableAvgDayByReceiveCompany(dpFilterParamDto, orgCodeP);
//注销报废
List<CountDto> cancelCount = jgStatisticsMapper.queryCancelAvgDayByReceiveCompany(dpFilterParamDto, orgCodeP);
List list = new ArrayList();
regionModels.forEach(r -> {
Map<String,Object> map = new HashMap<>();
map.put("regionName",r.getRegionName());
String orgCode = stCommonService.getAndSetOrgCode(r.getRegionCode().toString());
map.put("notic",this.avgAndSumDealDate(noticCount.stream().filter(c -> c.getKeyStr().contains(orgCode)).collect(Collectors.toList())));
map.put("use",this.avgAndSumDealDate(useCount.stream().filter(c -> c.getKeyStr().contains(orgCode)).collect(Collectors.toList())));
map.put("change",this.avgAndSumDealDate(changeCount.stream().filter(c -> c.getKeyStr().contains(orgCode)).collect(Collectors.toList())));
map.put("disable",this.avgAndSumDealDate(disableCount.stream().filter(c -> c.getKeyStr().contains(orgCode)).collect(Collectors.toList())));
map.put("cancel",this.avgAndSumDealDate(cancelCount.stream().filter(c -> c.getKeyStr().contains(orgCode)).collect(Collectors.toList())));
list.add(map);
});
page.setRecords(list);
page.setTotal(list.size());
return page;
}
......
......@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.tcm.api.dto.EquEnterDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.tcm.api.vo.BaseEnterpriseVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -57,6 +56,4 @@ public interface TzBaseEnterpriseInfoMapper extends BaseMapper<TzBaseEnterpriseI
List<Map<String, Object>> getEquipType(@Param("type")String type);
Map<String, Object> getProblemInfoBySourceId(@Param("sourceId")String sourceId);
List<BaseEnterpriseVo> queryBaseEnterpriseInIds(@Param("ids") List<String> ids);
}
......@@ -51,6 +51,4 @@ public interface ITzBaseEnterpriseInfoService extends IService<TzBaseEnterpriseI
BaseUnitLicence getUnitLicenceMessage(String unitCode);
Map<String, Object> getInfoByUseCodeMap(String useCode);
void export(HttpServletResponse response, List<String> ids);
}
package com.yeejoin.amos.boot.module.tcm.api.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* 监管账号下的人员列表
*/
@Data
public class JGUserInfoVo {
@ExcelProperty(value = "资质状态", index = 0)
String permissionStatus;
@ExcelProperty(value = "区域", index = 1)
String fullAddress;
@ExcelProperty(value = "人员类型", index = 2)
String postName;
@ExcelProperty(value = "姓名", index = 3)
String name;
@ExcelProperty(value = "证件编号", index = 4)
String certificateNum;
@ExcelProperty(value = "所在单位", index = 5)
String useUnit;
}
......@@ -176,22 +176,4 @@
select * from tzs_safety_problem_tracing where source_id = #{sourceId} order by rec_date desc limit 1
</select>
<select id="queryBaseEnterpriseInIds" resultType="com.yeejoin.amos.boot.module.tcm.api.vo.BaseEnterpriseVo">
SELECT
*,
CONCAT(province,'/',city,'/',district) AS region,
CONCAT(street,'/',address) AS full_address
FROM
tz_base_enterprise_info
<where>
<if test='ids != null'>
and sequence_nbr in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
</where>
order by rec_date desc
</select>
</mapper>
......@@ -297,12 +297,4 @@ public class TzBaseEnterpriseInfoController extends BaseController {
public ResponseModel<BaseUnitLicence> getUnitLicenceMessage(@RequestParam("unitCode") String unitCode) {
return ResponseHelper.buildResponse(iTzBaseEnterpriseInfoService.getUnitLicenceMessage(unitCode));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "企业信息列表数据导出", notes = "企业信息列表数据导出")
public void baseEnterpriseExport(HttpServletResponse response, String ids) {
Assert.hasText(ids,"未选择导出数据");
iTzBaseEnterpriseInfoService.export(response, Arrays.asList(ids.split(",")));
}
}
......@@ -8,6 +8,7 @@ import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.excel.ExcelUtil;
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.dto.UserPermissionDto;
......@@ -17,6 +18,7 @@ import com.yeejoin.amos.boot.module.tcm.api.dto.TzsEquipListDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsUserInfoDto;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.tcm.api.service.ITzsUserInfoService;
import com.yeejoin.amos.boot.module.tcm.api.vo.JGUserInfoVo;
import com.yeejoin.amos.boot.module.tcm.biz.service.impl.TzsUserInfoServiceImpl;
import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.feign.privilege.Privilege;
......@@ -331,9 +333,22 @@ public class TzsUserInfoController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "人员列表列表数据导出", notes = "人员列表列表数据导出")
@ApiOperation(httpMethod = "GET", value = "人员管理列表数据导出", notes = "人员管理列表数据导出")
public void userInfoExport(HttpServletResponse response, String ids) {
Assert.hasText(ids,"未选择导出数据");
tzsUserInfoService.userInfoExport(response, Arrays.asList(ids.split(",")));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "导出指定类型的下的人--监管账号下的人员列表", notes = "导出指定类型的下的人--监管账号下的人员列表")
@PostMapping(value = "/jg/export")
public void jgUserInfoExport(HttpServletResponse response,
@RequestParam(required = false, defaultValue = "all") String type,
@RequestBody UserPermissionDto filter) {
filter.setOrgCode(getSelectedOrgInfo().getCompany().getOrgCode());
filter.setCityCode(getSelectedOrgInfo().getCompany().getCompanyCode());
Page<UserPermissionDto> userPermissionDtos = tzsUserInfoServiceImpl.getUserByPermission(1, Long.MAX_VALUE, type, filter);
List<JGUserInfoVo> exportData = JSON.parseArray(JSON.toJSONString(userPermissionDtos.getRecords()), JGUserInfoVo.class);
ExcelUtil.createTemplate(response, "人员列表数据", "人员列表", exportData, JGUserInfoVo.class, null, false);
}
}
......@@ -29,7 +29,6 @@ import com.yeejoin.amos.boot.module.tcm.api.enums.UnitTypeEnum;
import com.yeejoin.amos.boot.module.tcm.api.mapper.TzBaseEnterpriseInfoMapper;
import com.yeejoin.amos.boot.module.tcm.api.mapper.TzsUserInfoMapper;
import com.yeejoin.amos.boot.module.tcm.api.service.ITzBaseEnterpriseInfoService;
import com.yeejoin.amos.boot.module.tcm.api.vo.BaseEnterpriseVo;
import com.yeejoin.amos.boot.module.tcm.biz.utils.RedisUtil;
import com.yeejoin.amos.boot.module.tcm.flc.api.dto.RegUnitIcDto;
import com.yeejoin.amos.boot.module.tcm.flc.api.dto.RegUnitInfoDto;
......@@ -60,6 +59,7 @@ import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.exception.instance.TooManyRequests;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.*;
......@@ -118,7 +118,6 @@ public class TzBaseEnterpriseInfoServiceImpl
private EquipmentCategoryServiceImpl equipmentCategoryService;
@Autowired
private TzsUserInfoServiceImpl userInfoService;
@Autowired
private RedissonClient redissonClient;
......@@ -128,15 +127,16 @@ public class TzBaseEnterpriseInfoServiceImpl
* 公司类型下的资质类型map:key为登录人的公司类型、value为包含的资质枚举
*/
private static final Map<String ,String> COMPANY_TYPE_CERT_TYPE_MAP = new HashMap<>();
// 数据来源cb_data_dictionary type='UNIT_TYPE_NEW'
/*
数据来源cb_data_dictionary type='UNIT_TYPE_NEW',目前登录身份分为3个如下
*/
static {
// 使用单位资质
COMPANY_TYPE_CERT_TYPE_MAP.put("使用单位", "1232");
COMPANY_TYPE_CERT_TYPE_MAP.put("充装单位", "1231");
// 注意检验检测机构资质细分为1233-1、1233-2
// 检验检测机构资质:细分为1233-1、1233-2
COMPANY_TYPE_CERT_TYPE_MAP.put("检验检测机构", "1233");
COMPANY_TYPE_CERT_TYPE_MAP.put("制造单位", "1236");
COMPANY_TYPE_CERT_TYPE_MAP.put("设计单位", "1235");
COMPANY_TYPE_CERT_TYPE_MAP.put("安装改造维修单位", "1234");
// 安装改造维修单位身份资质:充装单位-1231 制造单位-1236 设计单位-1235 安装改造维修单位-1234
COMPANY_TYPE_CERT_TYPE_MAP.put("安装改造维修单位", "1231,1234,1235,1236");
}
/**
......@@ -212,15 +212,8 @@ public class TzBaseEnterpriseInfoServiceImpl
if ("监管机构".equals(companyType)) {
unitLicencesCollect = unitLicences;
} else {
Predicate<BaseUnitLicence> certTypePredicate;
if (INSPECTION_AND_TESTING_INSTITUTIONS.equals(companyType)) {
certTypePredicate = baseUnitLicence -> INSPECTION_AGENCY.equals(baseUnitLicence.getCertType()) ||
TESTING_INSTITUTIONS.equals(baseUnitLicence.getCertType());
} else {
certTypePredicate = baseUnitLicence -> companyType.contains(baseUnitLicence.getCertType());
}
unitLicencesCollect = unitLicences.stream()
.filter(certTypePredicate)
.filter(baseUnitLicence -> COMPANY_TYPE_CERT_TYPE_MAP.get(companyType).contains((baseUnitLicence.getCertTypeCode())))
.collect(Collectors.toList());
}
if (!ValidationUtil.isEmpty(unitLicencesCollect)) {
......@@ -734,9 +727,15 @@ public class TzBaseEnterpriseInfoServiceImpl
private void removeLicenceDataBeforeSave(ReginParams reginParams, TzBaseEnterpriseInfo tzBaseEnterpriseInfo) {
String companyType = reginParams.getCompany().getCompanyType();
baseUnitLicenceService.remove(new LambdaQueryWrapper<BaseUnitLicence>()
.likeRight(BaseUnitLicence::getCertTypeCode, COMPANY_TYPE_CERT_TYPE_MAP.get(companyType))
.eq(BaseUnitLicence::getUnitCode,tzBaseEnterpriseInfo.getUseCode()));
LambdaQueryWrapper<BaseUnitLicence> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BaseUnitLicence::getUnitCode,tzBaseEnterpriseInfo.getUseCode());
wrapper.and(w-> {
String[] certTypeCodeArray = COMPANY_TYPE_CERT_TYPE_MAP.get(companyType).split(",");
for(String certTypeCode: certTypeCodeArray){
w.or().likeRight(BaseUnitLicence::getCertTypeCode, certTypeCode);
}
});
baseUnitLicenceService.remove(wrapper);
}
/**
......@@ -967,18 +966,4 @@ public class TzBaseEnterpriseInfoServiceImpl
}
/**
* 企业信息列表数据导出
*
* @param response 响应
* @param ids 数据id
*/
@Override
public void export(HttpServletResponse response, List<String> ids) {
List<BaseEnterpriseVo> exportData = this.baseMapper.queryBaseEnterpriseInIds(ids);
ExcelUtil.createTemplate(response, "企业信息列表数据", "企业信息列表", exportData, BaseEnterpriseVo.class, null, false);
}
}
......@@ -958,7 +958,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
@Override
public void userInfoExport(HttpServletResponse response, List<String> ids) {
List<UserInfoVo> exportData = tzsUserInfoMapper.queryUserInfoInIds(ids);
ExcelUtil.createTemplate(response, "人员列表列表数据", "人员列表列表", exportData, UserInfoVo.class, null, false);
ExcelUtil.createTemplate(response, "人员列表数据", "人员列表", exportData, UserInfoVo.class, null, false);
}
......
......@@ -57,7 +57,7 @@ public interface IdxBizJgRegisterInfoMapper extends BaseMapper<IdxBizJgRegisterI
*/
Boolean updateCylinderCategoryByEquCodeBatch(@Param("cylinderCategory") String cylinderCategory, @Param("equCodeList") List<String> equCodeList);
Integer selectByEquCodeAndClaimStatus(@Param("equCode") String equCode, @Param("sequenceNbr") String sequenceNbr);
Integer selectByEquCodeAndClaimStatus(@Param("equCode") String equCode, @Param("sequenceNbr") String sequenceNbr, @Param("record") String record);
Integer selectInstallNoticeEqByEquCode(@Param("equCode") String equCode, @Param("sequenceNbr") String sequenceNbr);
}
......@@ -26,6 +26,9 @@
<if test="sequenceNbr != null and sequenceNbr != ''">
AND jri.sequence_nbr != #{sequenceNbr}
</if>
<if test="record != null and record != ''">
AND jri.record != #{record}
</if>
AND joi.claim_status = '已认领'
</select>
......
......@@ -2142,6 +2142,12 @@ public class EquipmentCategoryServiceImpl extends BaseService<EquipmentCategoryD
meBuilder.must(QueryBuilders.matchPhraseQuery("SEQUENCE_NBR", "*" + test + "*"));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(map.getString("ORG_BRANCH_CODE"))) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("ORG_BRANCH_CODE"));
meBuilder.must(QueryBuilders.matchPhraseQuery("ORG_BRANCH_CODE", "*" + test + "*"));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(map.getString("USE_UNIT_NAME"))) {
BoolQueryBuilder query = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("USE_UNIT_NAME"));
......
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