Commit 0636fa70 authored by suhuiguang's avatar suhuiguang

1.使用登记单据变更功能

parent b2b4b1fd
......@@ -6,4 +6,6 @@ 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 {
}
......@@ -14,6 +14,9 @@ public class EquipRegisterChangeDataDto extends BaseChangeDataDto {
@FieldDisplayDefine(value = "设备种类" ,isExist = false)
private String equList;
@FieldDisplayDefine(value = "设备类别" ,isExist = false)
private String equCategory;
@FieldDisplayDefine(value = "设备代码")
private String equCode;
......
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> data;
}
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;
}
}
......@@ -7,6 +7,8 @@ import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 安全追溯-锅炉
*
......@@ -16,7 +18,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Group(value = "tech_params_boiler")
public class TechParamsBoilerChangeFieldDto {
public class TechParamsBoilerChangeFieldDto extends BaseTechParamsFieldDto {
@FieldDisplayDefine(value = "设备级别")
private String deviceLevel;
......
......@@ -14,7 +14,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Group(value = "tech_params_elevator")
public class TechParamsElevatorChangeFieldDto {
public class TechParamsElevatorChangeFieldDto extends BaseTechParamsFieldDto{
@FieldDisplayDefine(value = "设备级别")
private String ratedSpeedUp;
......
......@@ -16,7 +16,7 @@ import java.util.Date;
@Data
@Accessors(chain = true)
@Group(value = "tech_params_lifting")
public class TechParamsLiftingChangeFieldDto {
public class TechParamsLiftingChangeFieldDto extends BaseTechParamsFieldDto{
private String jurisdictionalAgency;
......
......@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Group(value = "tech_params_pipeline")
public class TechParamsPipelineChangeFieldDto {
public class TechParamsPipelineChangeFieldDto extends BaseTechParamsFieldDto{
/**
......
......@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Group(value = "tech_params_rides")
public class TechParamsRidesChangeFieldDto {
public class TechParamsRidesChangeFieldDto extends BaseTechParamsFieldDto{
/**
*
......
......@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Group(value = "tech_params_ropeway")
public class TechParamsRopewayChangeFieldDto {
public class TechParamsRopewayChangeFieldDto extends BaseTechParamsFieldDto{
/**
......
......@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Group(value = "tech_params_vehicle")
public class TechParamsVehicleChangeFieldDto {
public class TechParamsVehicleChangeFieldDto extends BaseTechParamsFieldDto{
/**
......
......@@ -18,7 +18,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@Group(value = "tech_params_vessel")
public class TechParamsVesselChangeFieldDto {
public class TechParamsVesselChangeFieldDto extends BaseTechParamsFieldDto {
@TableField("\"INSTANCE_ID\"")
......
package com.yeejoin.amos.boot.module.jg.biz.service;
package com.yeejoin.amos.boot.module.jg.api.service;
import java.util.List;
import java.util.Map;
......@@ -17,10 +17,10 @@ public interface IBizDataChangeHandleStrategy {
*
* @param applyNo 单据编号
* @param model single, batch
* @param bizId
* @param bizId 设备record
* @return 变更信息详情
*/
Map<String, List<Map<String, Object>>> getChangeDetail(String applyNo, ModelType model, String bizId);
Map<String, ?> getChangeDetail(String applyNo, ModelType model, String bizId);
/**
* 保存
......@@ -29,7 +29,7 @@ public interface IBizDataChangeHandleStrategy {
* @param model single, batch
* @param changeData 变更数据
*/
void doSave(String applyNo, ModelType model, Map<String, List<Map<String, Object>>> changeData);
void doSave(String applyNo, ModelType model, Map<String, Object> changeData);
/**
......
package com.yeejoin.amos.boot.module.jg.biz.context;
import com.yeejoin.amos.boot.module.jg.biz.service.IBizDataChangeHandleStrategy;
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;
......
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.biz.service.IBizDataChangeHandleStrategy;
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;
......
package com.yeejoin.amos.boot.module.jg.biz.controller;
import com.yeejoin.amos.boot.module.jg.biz.service.IBizDataChangeHandleStrategy;
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;
......@@ -10,7 +11,6 @@ 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.List;
import java.util.Map;
@RestController
......@@ -19,7 +19,7 @@ import java.util.Map;
public class BizDataChangeController {
private BizDataChangeServiceImpl bizDataChangeService;
private final BizDataChangeServiceImpl bizDataChangeService;
public BizDataChangeController(BizDataChangeServiceImpl bizDataChangeService) {
this.bizDataChangeService = bizDataChangeService;
......@@ -30,9 +30,8 @@ public class BizDataChangeController {
@ApiOperation(value = "业务数据变更保存", httpMethod = "POST")
public ResponseModel<String> save(String applyNo,
@PathVariable String bizType,
IBizDataChangeHandleStrategy.ModelType model,
Map<String, List<Map<String, Object>>> changeData) {
bizDataChangeService.save(applyNo, bizType, model, changeData);
@RequestBody RequestChangeData changeData) {
bizDataChangeService.save(applyNo, bizType, changeData);
return ResponseHelper.buildResponse("success");
}
......@@ -40,12 +39,11 @@ public class BizDataChangeController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{bizType}/detail")
@ApiOperation(value = "查询可业务变更的字段及默认值", httpMethod = "GET")
public ResponseModel<Map<String, List<Map<String, Object>>>> getDetail(@RequestParam(required = false) String applyNo,
public ResponseModel<Map<String, ?>> getDetail(@RequestParam(required = false) String applyNo,
@PathVariable String bizType,
IBizDataChangeHandleStrategy.ModelType model,
@RequestParam(required = false) String bizId) {
Map<String, List<Map<String, Object>>> re = bizDataChangeService.queryDetail(applyNo, bizType, model, bizId);
return ResponseHelper.buildResponse(re);
return ResponseHelper.buildResponse(bizDataChangeService.queryDetail(applyNo, bizType, model, bizId));
}
......
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;
......@@ -13,10 +14,10 @@ public interface IChangeDataProcessStrategy {
/**
* 事件处理
*/
Map<String, List<ChangeDataDto>> handle(List<Map<String, Object>> changeData, String defaultChangeId);
List<ChangeDataDto> handle(Map<String, Object> changeData, String defaultChangeId);
Map<String, List<Map<String, Object>>> getDetail(String applyNo, String bizId);
Map<String, ?> getDetail(String applyNo, String bizId);
/**
* 可处理类型
......
package com.yeejoin.amos.boot.module.jg.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;
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.ChangeDataDto;
import com.yeejoin.amos.boot.module.jg.api.dto.MultiChangeItemData;
import com.yeejoin.amos.boot.module.jg.api.dto.RequestChangeData;
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.biz.service.IBizDataChangeHandleStrategy;
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.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -36,17 +38,28 @@ public class BatchDataChangeProcessStrategy implements IChangeDataProcessStrateg
private final JgUseRegistrationMapper jgUseRegistrationMapper;
public BatchDataChangeProcessStrategy(JgUseRegistrationServiceImpl useRegistrationService, JgRegistrationHistoryServiceImpl jgRegistrationHistoryService, JgUseRegistrationMapper jgUseRegistrationMapper) {
private final SingleDataChangeProcessStrategy singleDataChangeProcessStrategy;
public BatchDataChangeProcessStrategy(JgUseRegistrationServiceImpl useRegistrationService, JgRegistrationHistoryServiceImpl jgRegistrationHistoryService, JgUseRegistrationMapper jgUseRegistrationMapper, SingleDataChangeProcessStrategy singleDataChangeProcessStrategy) {
this.useRegistrationService = useRegistrationService;
this.jgRegistrationHistoryService = jgRegistrationHistoryService;
this.jgUseRegistrationMapper = jgUseRegistrationMapper;
this.singleDataChangeProcessStrategy = singleDataChangeProcessStrategy;
}
@Override
public Map<String, List<ChangeDataDto>> handle(List<Map<String, Object>> changeData, String defaultChangeId) {
List<ChangeDataDto> changeDataDtos = BeanUtil.copyToList(changeData, ChangeDataDto.class);
changeDataDtos = changeDataDtos.stream().filter(c -> !StringUtils.equals(c.getColumnNewValue(), c.getColumnOldValue())).collect(Collectors.toList());
return changeDataDtos.stream().collect(Collectors.groupingBy(ChangeDataDto::getChangeId));
public List<ChangeDataDto> handle(Map<String, Object> changeData, String defaultChangeId) {
JSONObject data = (JSONObject) changeData.get("data");
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.getData();
List<ChangeDataDto> oneEquipChangeColumns = singleDataChangeProcessStrategy.handle(itemData, record);
allChangeColumns.addAll(oneEquipChangeColumns);
});
return allChangeColumns;
}
@Override
......
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.biz.service.IBizDataChangeHandleStrategy;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import org.springframework.stereotype.Service;
import java.util.List;
......@@ -15,18 +16,17 @@ public class BizDataChangeServiceImpl {
*
* @param applyNo 单据编号
* @param bizType 业务类型
* @param model 单个维护、批量维护
* @param changeData 变化后的数据
*/
public void save(String applyNo,
String bizType,
IBizDataChangeHandleStrategy.ModelType model,
Map<String, List<Map<String, Object>>> changeData) {
RequestChangeData changeData) {
IBizDataChangeHandleStrategy.ModelType model = changeData.getModelType();
IBizDataChangeHandleStrategy handleStrategy = BizDataHandleStrategyContext.getStrategy(bizType);
handleStrategy.doSave(applyNo, model, changeData);
}
public Map<String, List<Map<String, Object>>> queryDetail(String applyNo, String bizType, IBizDataChangeHandleStrategy.ModelType model, String bizId) {
public Map<String, ?> queryDetail(String applyNo, String bizType, IBizDataChangeHandleStrategy.ModelType model, String bizId) {
IBizDataChangeHandleStrategy handleStrategy = BizDataHandleStrategyContext.getStrategy(bizType);
return handleStrategy.getChangeDetail(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 cn.hutool.core.util.StrUtil;
import com.alibaba.druid.support.jconsole.util.TableDataProcessor;
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.mapper.CommonMapper;
import com.yeejoin.amos.boot.module.jg.biz.service.IBizDataChangeHandleStrategy;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
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.mapper.IdxBizJgDesignInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgFactoryInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.IdxBizJgRegisterInfoMapper;
import net.sf.jsqlparser.schema.Column;
import org.springframework.stereotype.Service;
import java.util.List;
......
......@@ -13,6 +13,7 @@ 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.mapper.JgUseRegistrationEqMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IBizDataChangeHandleStrategy;
import com.yeejoin.amos.boot.module.jg.api.vo.ChangeDataVo;
import com.yeejoin.amos.boot.module.jg.biz.service.*;
import com.yeejoin.amos.boot.module.ymt.api.entity.*;
......@@ -24,6 +25,7 @@ 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.*;
import java.util.stream.Collectors;
......@@ -60,8 +62,12 @@ public class SingleDataChangeProcessStrategy implements IChangeDataProcessStrate
private final IIdxBizJgTechParamsLiftingService iIdxBizJgTechParamsLiftingService;
private final EquipChangeDataUpdateService equipChangeDataUpdateService;
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) {
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) {
this.idxBizJgDesignInfoMapper = idxBizJgDesignInfoMapper;
this.jgFactoryInfoMapper = jgFactoryInfoMapper;
this.idxBizJgRegisterInfoMapper = idxBizJgRegisterInfoMapper;
......@@ -75,18 +81,105 @@ public class SingleDataChangeProcessStrategy implements IChangeDataProcessStrate
this.iIdxBizJgTechParamsVesselService = iIdxBizJgTechParamsVesselService;
this.iIdxBizJgTechParamsPipelineService = iIdxBizJgTechParamsPipelineService;
this.iIdxBizJgTechParamsLiftingService = iIdxBizJgTechParamsLiftingService;
this.equipChangeDataUpdateService = equipChangeDataUpdateService;
}
@Override
public Map<String, List<ChangeDataDto>> handle(List<Map<String, Object>> changeData, String defaultChangeId) {
List<ChangeDataDto> changeDataDtos = BeanUtil.copyToList(changeData, ChangeDataDto.class);
changeDataDtos = changeDataDtos.stream().filter(c -> !StringUtils.equals(c.getColumnNewValue(), c.getColumnOldValue())).collect(Collectors.toList());
return changeDataDtos.stream().collect(Collectors.groupingBy(ChangeDataDto::getChangeId));
public List<ChangeDataDto> handle(Map<String, Object> changeData, String defaultChangeId) {
String record = this.getRecord(defaultChangeId);
return handleOne(changeData, record);
}
@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());
}
}
}
public List<ChangeDataDto> handleOne(Map<String, Object> changeData, String record) {
List<ChangeDataDto> allChangeColumns = new ArrayList<>();
// 新数据解析
EquipRegisterChangeDataDto registerChangeDataDto = new EquipRegisterChangeDataDto();
EquipDesignChangeDataDto equipDesignChangeDataDto = new EquipDesignChangeDataDto();
EquipFactoryChangeDataDto equipFactoryChangeDataDto = new EquipFactoryChangeDataDto();
BeanUtil.copyProperties(changeData, registerChangeDataDto);
BeanUtil.copyProperties(changeData, equipFactoryChangeDataDto);
BeanUtil.copyProperties(changeData, equipDesignChangeDataDto);
buildChangeFields(record, equipDesignChangeDataDto, equipFactoryChangeDataDto, registerChangeDataDto, allChangeColumns);
// 设备制造、设计、注册信息业务处理落库
this.dealBizDataForEquip(record, registerChangeDataDto);
this.dealBizDataForEquip(record, equipFactoryChangeDataDto);
this.dealBizDataForEquip(record, equipDesignChangeDataDto);
// 设备技术参数入库处理
this.updateTechParamInfo(registerChangeDataDto, record, changeData, allChangeColumns);
return allChangeColumns;
}
private 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 变更后数据
*/
private void dealBizDataForEquip(String record, BaseChangeDataDto changeDataDto) {
// 制造信息
if (changeDataDto instanceof EquipFactoryChangeDataDto) {
EquipFactoryChangeDataDto equipFactoryChangeDataDto = (EquipFactoryChangeDataDto) changeDataDto;
equipChangeDataUpdateService.updateFactoryChangeData(record, equipFactoryChangeDataDto);
}
// 设计信息
if (changeDataDto instanceof EquipDesignChangeDataDto) {
EquipDesignChangeDataDto equipDesignChangeDataDto = (EquipDesignChangeDataDto) changeDataDto;
equipChangeDataUpdateService.updateDesignChangeData(record, equipDesignChangeDataDto);
}
// 注册信息
if (changeDataDto instanceof EquipRegisterChangeDataDto) {
EquipRegisterChangeDataDto registerChangeDataDto = (EquipRegisterChangeDataDto) changeDataDto;
equipChangeDataUpdateService.updateRegisterChangeData(record, registerChangeDataDto);
}
}
@Override
public Map<String, List<Map<String, Object>>> getDetail(String applyNo, String bizId) {
if(StringUtils.isEmpty(applyNo) && StringUtils.isEmpty(bizId)) {
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)) {
......@@ -96,52 +189,96 @@ public class SingleDataChangeProcessStrategy implements IChangeDataProcessStrate
}
}
private Map<String, List<Map<String, Object>>> getDetailByBizId(String record) {
Map<String, List<Map<String, Object>>> re = new HashMap<>();
private Map<String, Object> getDetailByBizId(String record) {
Map<String, Object> re = new HashMap<>();
// 注册信息(基本信息)构建
EquipRegisterChangeDataDto equipRegisterChangeDataDto = this.buildRegisterInfo(record, re);
EquipRegisterChangeDataDto equipRegisterChangeDataDto = this.buildRegisterInfo(record);
// 制造信息构建
this.buildFactoryInfo(record, re);
EquipFactoryChangeDataDto factoryChangeDataDto = this.buildFactoryInfo(record);
// 设计信息构建
this.buildDesignInfo(record, re);
EquipDesignChangeDataDto designChangeDataDto = this.buildDesignInfo(record);
// 技术参数构建
this.buildTechParamInfo(equipRegisterChangeDataDto, record, re);
BaseTechParamsFieldDto techParamsFieldDto = this.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 re;
}
private void buildDesignInfo(String record, Map<String, List<Map<String, Object>>> re) {
private void castJsonFields(Map<String, Object> re) {
jsonFields.forEach(field -> {
if (re.containsKey(field)) {
re.put(field, JSON.parse((String) re.get(field)));
}
});
}
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()));
buildColumns(record, re, changeDataDto);
return this.convertBeanField2Column2(changeDataDto, record);
}
private void buildFactoryInfo(String record, Map<String, List<Map<String, Object>>> re) {
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()));
buildColumns(record, re, changeDataDto);
return this.convertBeanField2Column2(changeDataDto, record);
}
private EquipRegisterChangeDataDto buildRegisterInfo(String record, Map<String, List<Map<String, Object>>> re) {
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);
buildColumns(record, re, changeDataDto);
return this.convertBeanField2Column2(changeDataDto, record);
}
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 void buildColumns(String record, Map<String, List<Map<String, Object>>> re, Object beanData) {
List<ChangeDataVo> changeData = this.convertBeanField2Column(beanData, record);
Group group = beanData.getClass().getAnnotation(Group.class);
List<Map<String, Object>> columnList = changeData.stream().map(BeanUtil::beanToMap).collect(Collectors.toList());
re.put(group.value(), columnList);
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;
}
private List<ChangeDataVo> convertBeanField2Column(Object beanData, String record) {
List<ChangeDataVo> changeData = new ArrayList<>();
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);
......@@ -149,20 +286,15 @@ public class SingleDataChangeProcessStrategy implements IChangeDataProcessStrate
try {
if (displayDefine != null && displayDefine.isExist()) {
String fieldName = displayDefine.value();
ChangeDataVo changeDataVo = new ChangeDataVo();
changeDataVo.setColumnKey(field.getName());
changeDataVo.setColumnLabel(fieldName);
changeDataVo.setChangeId(record);
ChangeDataDto changeDataDto = new ChangeDataDto();
changeDataDto.setColumnKey(field.getName());
changeDataDto.setColumnFamily(group.value());
changeDataDto.setColumnLabel(fieldName);
changeDataDto.setChangeId(record);
String value = (String) field.get(beanData);
if (displayDefine.type() == JSON.class) {
changeDataVo.setColumnNewValue(JSONObject.parseArray(value));
changeDataVo.setColumnOldValue(changeDataVo.getColumnNewValue());
} else {
changeDataVo.setColumnNewValue(value);
changeDataVo.setColumnOldValue(value);
}
changeData.add(changeDataVo);
changeDataDto.setColumnNewValue(value);
changeDataDto.setColumnOldValue(value);
changeData.add(changeDataDto);
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
......@@ -171,80 +303,223 @@ public class SingleDataChangeProcessStrategy implements IChangeDataProcessStrate
return changeData;
}
private void buildTechParamInfo(EquipRegisterChangeDataDto equipRegisterChangeDataDto, String record, Map<String, List<Map<String, Object>>> re) {
private BaseTechParamsFieldDto buildTechParamInfo(EquipRegisterChangeDataDto equipRegisterChangeDataDto, String record) {
EquipmentClassifityEnum equipmentClassifityEnum = EquipmentClassifityEnum.getOne(equipRegisterChangeDataDto.getEquList());
switch (Objects.requireNonNull(equipmentClassifityEnum)) {
case GL:
// 锅炉
IdxBizJgTechParamsBoiler boiler = iIdxBizJgTechParamsBoilerService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsBoilerChangeFieldDto boilerChangeFieldDto = BeanUtil.copyProperties(boiler, TechParamsBoilerChangeFieldDto.class);
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;
}
private String buildTableName(Class<?> clazz) {
Group group = clazz.getAnnotation(Group.class);
return String.format("%s_%s", "idx_biz_jg", group);
}
private 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);
// 字段行转列
buildColumns(record, re, boilerChangeFieldDto);
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(changeData, newVessel);
IdxBizJgTechParamsVessel techParamsVessel = iIdxBizJgTechParamsVesselService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsVesselChangeFieldDto vesselChangeFieldDto = BeanUtil.copyProperties(techParamsVessel, TechParamsVesselChangeFieldDto.class);
TechParamsVesselChangeFieldDto oldVessel = BeanUtil.copyProperties(techParamsVessel, TechParamsVesselChangeFieldDto.class);
// 字段行转列
buildColumns(record, re, vesselChangeFieldDto);
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(changeData, newElevator);
IdxBizJgTechParamsElevator techParamsElevator = iIdxBizJgTechParamsElevatorService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsElevatorChangeFieldDto elevatorChangeFieldDto = BeanUtil.copyProperties(techParamsElevator, TechParamsElevatorChangeFieldDto.class);
TechParamsElevatorChangeFieldDto oldElevator = BeanUtil.copyProperties(techParamsElevator, TechParamsElevatorChangeFieldDto.class);
// 字段行转列
buildColumns(record, re, elevatorChangeFieldDto);
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(changeData, newLifting);
IdxBizJgTechParamsLifting techParamsLifting = iIdxBizJgTechParamsLiftingService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsLiftingChangeFieldDto liftingChangeFieldDto = BeanUtil.copyProperties(techParamsLifting, TechParamsLiftingChangeFieldDto.class);
TechParamsLiftingChangeFieldDto oldLifting = BeanUtil.copyProperties(techParamsLifting, TechParamsLiftingChangeFieldDto.class);
// 字段行转列
buildColumns(record, re, liftingChangeFieldDto);
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(changeData, newVehicle);
IdxBizJgTechParamsVehicle techParamsVehicle = iIdxBizJgTechParamsVehicleService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsVehicleChangeFieldDto vehicleChangeFieldDto = BeanUtil.copyProperties(techParamsVehicle, TechParamsVehicleChangeFieldDto.class);
TechParamsVehicleChangeFieldDto oldVehicle = BeanUtil.copyProperties(techParamsVehicle, TechParamsVehicleChangeFieldDto.class);
// 字段行转列
buildColumns(record, re, vehicleChangeFieldDto);
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(changeData, newRides);
IdxBizJgTechParamsRides techParamsRides = iIdxBizJgTechParamsRidesService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsRidesChangeFieldDto ridesChangeFieldDto = BeanUtil.copyProperties(techParamsRides, TechParamsRidesChangeFieldDto.class);
TechParamsRidesChangeFieldDto oldRides = BeanUtil.copyProperties(techParamsRides, TechParamsRidesChangeFieldDto.class);
// 字段行转列
buildColumns(record, re, ridesChangeFieldDto);
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(changeData, newPipeline);
IdxBizJgTechParamsPipeline techParamsPipeline = iIdxBizJgTechParamsPipelineService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsPipelineChangeFieldDto pipelineChangeFieldDto = BeanUtil.copyProperties(techParamsPipeline, TechParamsPipelineChangeFieldDto.class);
TechParamsPipelineChangeFieldDto oldPipeline = BeanUtil.copyProperties(techParamsPipeline, TechParamsPipelineChangeFieldDto.class);
// 字段行转列
buildColumns(record, re, pipelineChangeFieldDto);
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(changeData, newRopeway);
IdxBizJgTechParamsRopeway techParamsRopeway = iIdxBizJgTechParamsRopewayService.getOneData(record);
// 技术参数对象转换为全部技术参数 ,其他无用字段去掉
TechParamsRopewayChangeFieldDto ropewayChangeFieldDto = BeanUtil.copyProperties(techParamsRopeway, TechParamsRopewayChangeFieldDto.class);
TechParamsRopewayChangeFieldDto oldRopeway = BeanUtil.copyProperties(techParamsRopeway, TechParamsRopewayChangeFieldDto.class);
// 字段行转列
buildColumns(record, re, ropewayChangeFieldDto);
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> mergeChangeFields(List<ChangeDataDto> changeDataNew, List<ChangeDataDto> changeDataOld) {
return changeDataNew.stream().filter(n -> changeDataOld.stream().noneMatch(o -> o.getColumnKey().equals(n.getColumnKey()) && StringUtils.equals(n.getColumnNewValue(), o.getColumnNewValue()))).collect(Collectors.toList());
}
private static TechParamsBoilerChangeFieldDto getTechParamsBoilerChangeField(Map<String, Object> changeData) {
TechParamsBoilerChangeFieldDto newBoiler = new TechParamsBoilerChangeFieldDto();
BeanUtil.copyProperties(changeData, newBoiler);
return newBoiler;
}
private TechParamsBoilerChangeFieldDto getTechParamsBoilerChangeField(String record) {
IdxBizJgTechParamsBoiler boiler = iIdxBizJgTechParamsBoilerService.getOneData(record);
TechParamsBoilerChangeFieldDto oldBoiler = new TechParamsBoilerChangeFieldDto();
BeanUtil.copyProperties(boiler, oldBoiler);
return oldBoiler;
}
public Map<String, List<Map<String, Object>>> getDetailByApplyNo(String bizId) {
public Map<String, Object> getDetailByApplyNo(String bizId) {
String record = this.getRecord(bizId);
return getDetailByBizId(record);
}
......
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.yeejoin.amos.boot.module.jg.api.dto.*;
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.factory.ChangeItemFactory;
import com.yeejoin.amos.boot.module.jg.biz.service.IBizDataChangeHandleStrategy;
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.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -22,14 +18,12 @@ public class UseRegisterDataChangeHandleImpl implements IBizDataChangeHandleStra
private final EventPublisher publisher;
private final EquipChangeDataUpdateService equipChangeDataUpdateService;
private final UseRegisterUpdateService useRegisterUpdateService;
public UseRegisterDataChangeHandleImpl(EventPublisher publisher, EquipChangeDataUpdateService equipChangeDataUpdateService, UseRegisterUpdateService useRegisterUpdateService) {
public UseRegisterDataChangeHandleImpl(EventPublisher publisher, UseRegisterUpdateService useRegisterUpdateService) {
this.publisher = publisher;
this.equipChangeDataUpdateService = equipChangeDataUpdateService;
this.useRegisterUpdateService = useRegisterUpdateService;
}
......@@ -39,150 +33,45 @@ public class UseRegisterDataChangeHandleImpl implements IBizDataChangeHandleStra
return "useRegister";
}
@Override
public Map<String, List<Map<String, Object>>> getChangeDetail(String applyNo, ModelType model, String bizId) {
IChangeDataProcessStrategy dataProcessor = DataProcessStrategyContext.getStrategy(model);
// 兼容:台套类打开变更详情(使用applyNo) 和 单位办理批量时选择单个设备打开详情(使用record)
return dataProcessor.getDetail(applyNo, bizId);
}
/**
* 保存
*
* @param applyNo 单据编号
* @param model single, batch
* @param changeData 变更数据 key为不同的分组:如使用信息、设计信息、制造信息、技术参数
* @param changeData 前端不支持分组-目前为平铺数据结构
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void doSave(String applyNo, ModelType model, Map<String, List<Map<String, Object>>> changeData) {
List<ChangeDataDto> allChangeColumns = new ArrayList<>();
public void doSave(String applyNo, ModelType model, Map<String, Object> changeData) {
// 选择是台套、还是单位办理的方式,进行分类数据的解析
IChangeDataProcessStrategy dataProcessor = DataProcessStrategyContext.getStrategy(model);
changeData.forEach((k, v) -> {
Map<String, List<ChangeDataDto>> columnsMap = new HashMap<>();
if (k.startsWith("biz")) {
// TODO 单据信息变化 目前预览但是未使用到
columnsMap = dataProcessor.handle(v, applyNo);
// 将前端json数据,格式化解析为java对象格式及数据比对去掉未变化的数据,key为applyNo, value为字段数组
columnsMap.forEach((a, columns) -> {
if (!columns.isEmpty()) {
// 将json列转为java-bean
BaseChangeDataDto changeDataDto = castColum2Bean(k, columns);
// 业务处理
this.dealBizDataForDoc(applyNo, changeDataDto);
// 日志数据构建
this.buildLogData(allChangeColumns, columns, a, k);
}
});
} else if (k.startsWith("equip")) {
// 设备信息变化
columnsMap = dataProcessor.handle(v, null);
// 将前端json数据,格式化解析为java对象格式及数据比对去掉未变化的数据,key为record, value为字段数组,代表设备所有发生变化的业务字段集合
columnsMap.forEach((record, columns) -> {
if (!columns.isEmpty()) {
// 将json列转为java-bean
BaseChangeDataDto changeDataDto = castColum2Bean(k, columns);
// 业务处理
this.dealBizDataForEquip(record, changeDataDto);
// 日志数据构建
this.buildLogData(allChangeColumns, columns, record, k);
}
});
} else if (k.startsWith("tech")) {
// 技术信息变化
columnsMap = dataProcessor.handle(v, null);
// 将前端json数据,格式化解析为java对象格式及数据比对去掉未变化的数据,key为record, value为字段数组,代表所有变化的技术参数字段集合
columnsMap.forEach((record, columns) -> {
if (!columns.isEmpty()) {
// 技术参数入库
equipChangeDataUpdateService.updateTechParamByRecord(this.buildTableName(k), record, columns);
// 日志数据构建
this.buildLogData(allChangeColumns, columns, record, k);
}
});
}
});
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 String buildTableName(String group) {
return String.format("%s_%s", "idx_biz_jg", group);
}
private void updateHistoryJson(String applyNo) {
useRegisterUpdateService.updateHisData(applyNo);
}
private void dealBizDataForDoc(String record, BaseChangeDataDto changeDataDto) {
if (changeDataDto instanceof UseRegisterChangeDataDto) {
// todo 字段待定- 暂无需变更数据
UseRegisterChangeDataDto useRegisterChangeDataDto = (UseRegisterChangeDataDto) changeDataDto;
}
}
private void buildLogData(List<ChangeDataDto> allChangeColumns, List<ChangeDataDto> columns, String changeId, String groupKey) {
columns.forEach(column -> {
column.setChangeId(changeId);
column.setColumnFamily(groupKey);
private void buildLogData(List<ChangeDataDto> allChangeColumns) {
allChangeColumns.forEach(column -> {
column.setBizType("使用登记");
});
allChangeColumns.addAll(columns);
}
/**
* 业务处理-业务对象
*
* @param record 设备主键
* @param changeDataDto 变更后数据
*/
private void dealBizDataForEquip(String record, BaseChangeDataDto changeDataDto) {
// 制造信息
if (changeDataDto instanceof EquipFactoryChangeDataDto) {
EquipFactoryChangeDataDto equipFactoryChangeDataDto = (EquipFactoryChangeDataDto) changeDataDto;
equipChangeDataUpdateService.updateFactoryChangeData(record, equipFactoryChangeDataDto);
}
// 设计信息
if (changeDataDto instanceof EquipDesignChangeDataDto) {
EquipDesignChangeDataDto equipDesignChangeDataDto = (EquipDesignChangeDataDto) changeDataDto;
equipChangeDataUpdateService.updateDesignChangeData(record, equipDesignChangeDataDto);
}
// 注册信息
if (changeDataDto instanceof EquipRegisterChangeDataDto) {
EquipRegisterChangeDataDto registerChangeDataDto = (EquipRegisterChangeDataDto) changeDataDto;
equipChangeDataUpdateService.updateRegisterChangeData(record, registerChangeDataDto);
}
}
private BaseChangeDataDto castColum2Bean(String group, List<ChangeDataDto> columns) {
Class<? extends BaseChangeDataDto> t = ChangeItemFactory.getItemGroupClass(group);
BaseChangeDataDto changeDataDto;
try {
changeDataDto = t.newInstance();
for (Field field : changeDataDto.getClass().getDeclaredFields()) {
field.setAccessible(true);
// 设置默认值,用来控制default时,数据未变化,不进行此字段的更新
field.set(changeDataDto, IBizDataChangeHandleStrategy.DEFAULT_VALUE);
// 匹配赋值
for (ChangeDataDto colum : columns) {
if (colum.getColumnKey().equals(field.getName())) {
field.set(changeDataDto, colum.getColumnNewValue());
break;
}
}
}
} catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
return changeDataDto;
@Override
public Map<String, ?> getChangeDetail(String applyNo, ModelType model, String bizId) {
IChangeDataProcessStrategy dataProcessor = DataProcessStrategyContext.getStrategy(model);
// 兼容:台套类打开变更详情(使用applyNo) 和 单位办理批量时选择单个设备打开详情(使用record)
return dataProcessor.getDetail(applyNo, bizId);
}
}
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