Commit 6089fda8 authored by suhuiguang's avatar suhuiguang

1.使用登记单据变更功能,编辑保存接口

parent 6c13177a
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.Data;
@Data
public class BaseChangeDataDto {
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import io.swagger.annotations.ApiModel;
import lombok.Data;
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 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 lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class EquipDesignChangeDataDto extends BaseChangeDataDto {
private String designUnitCreditCode;
private String designUnitName;
private String designLicenseNum;
private String designUseDate;
private String designDate;
private String drawingDo;
private String designDoc;
private String appraisalUnit;
private String appraisalDate;
private String designStandard;
private String otherAccessoriesDes;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class EquipFactoryChangeDataDto extends BaseChangeDataDto {
private String produceUnitCreditCode;
private String produceUnitName;
private String produceLicenseNum;
private String factoryNum;
private String produceDate;
private String imported;
private String produceCountry;
private String productQualityYieldProve;
private String insUseMaintainExplain;
private String otherAccessoriesFact;
private String factoryStandard;
private String factSupervisionInspectionReport;
private String boilerEnergyEfficiencyCertificate;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class EquipRegisterChangeDataDto extends BaseChangeDataDto {
private String equCode;
private String equDefine;
private String productName;
private String equType;
private String equPrice;
private String productPhoto;
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 lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class UseRegisterChangeDataDto extends BaseChangeDataDto {
}
package com.yeejoin.amos.boot.module.jg.biz.context;
import com.yeejoin.amos.boot.module.jg.biz.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.biz.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.biz.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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
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
@RequestMapping(value = "/data-change")
@Api(tags = "业务数据变化处理控制器")
public class BizDataChangeController {
private BizDataChangeServiceImpl bizDataChangeService;
public BizDataChangeController(BizDataChangeServiceImpl bizDataChangeService) {
this.bizDataChangeService = bizDataChangeService;
}
@PostMapping(value = "/{bizType}/save")
@ApiOperation(value = "业务数据变更保存", httpMethod = "GET")
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);
return ResponseHelper.buildResponse("success");
}
}
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);
// 设备-技术参数
ITEM_FACTORY.put("equip_tech_param_info", EquipTechParamChangeDataDto.class);
}
public static Class<? extends BaseChangeDataDto> getItemGroupClass(String group) {
return ITEM_FACTORY.get(group);
}
}
package com.yeejoin.amos.boot.module.jg.biz.service;
import java.util.List;
import java.util.Map;
public interface IBizDataChangeHandleStrategy {
/**
* 可处理的业务类型(使用登记等)
*
* @return 业务类型
*/
String canHandleBizType();
/**
* 获取变更信息详情
*
* @param applyNo 单据编号
* @param model single, batch
* @return 变更信息详情
*/
Map<String, List<Map<String, Object>>> getChangeDetail(String applyNo, ModelType model);
/**
* 保存
*
* @param applyNo 单据编号
* @param model single, batch
* @param changeData 变更数据
*/
void doSave(String applyNo, ModelType model, Map<String, List<Map<String, Object>>> changeData);
/**
* 单据方式:单个处理、批量处理
*/
enum ModelType {
single,
batch
}
String DEFAULT_VALUE = "default";
}
package com.yeejoin.amos.boot.module.jg.biz.service;
import com.yeejoin.amos.boot.module.jg.api.dto.ChangeDataDto;
import java.util.List;
import java.util.Map;
/**
* 事件处理监听器,将前端数据解析为java对象格式
*/
public interface IChangeDataProcessStrategy {
/**
* 事件处理
*/
Map<String, List<ChangeDataDto>> handle(List<Map<String, Object>> changeData, String defaultChangeId);
/**
* 可处理类型
*
* @return 可处理的事件
*/
IBizDataChangeHandleStrategy.ModelType canHandleMode();
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.yeejoin.amos.boot.module.jg.api.dto.ChangeDataDto;
import com.yeejoin.amos.boot.module.jg.biz.service.IBizDataChangeHandleStrategy;
import com.yeejoin.amos.boot.module.jg.biz.service.IChangeDataProcessStrategy;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 批量维护使用登记策略实现类
*/
@Component
public class BatchDataChangeProcessStrategy implements IChangeDataProcessStrategy {
@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));
}
@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.biz.context.BizDataHandleStrategyContext;
import com.yeejoin.amos.boot.module.jg.biz.service.IBizDataChangeHandleStrategy;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
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) {
IBizDataChangeHandleStrategy handleStrategy = BizDataHandleStrategyContext.getStrategy(bizType);
handleStrategy.doSave(applyNo, model, changeData);
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.yeejoin.amos.boot.module.jg.api.dto.ChangeDataDto;
import com.yeejoin.amos.boot.module.jg.biz.service.IBizDataChangeHandleStrategy;
import com.yeejoin.amos.boot.module.jg.biz.service.IChangeDataProcessStrategy;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 单个维护使用登记策略实现类
*/
@Component
public class SingleDataChangeProcessStrategy implements IChangeDataProcessStrategy {
@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));
}
@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.*;
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.typroject.tyboot.core.foundation.context.RequestContext;
import java.lang.reflect.Field;
import java.util.*;
@Service
public class UseRegisterDataChangeHandleImpl implements IBizDataChangeHandleStrategy {
private final EventPublisher publisher;
private final EquipChangeDataUpdateService equipChangeDataUpdateService;
private final UseRegisterUpdateService useRegisterUpdateService;
public UseRegisterDataChangeHandleImpl(EventPublisher publisher, EquipChangeDataUpdateService equipChangeDataUpdateService, UseRegisterUpdateService useRegisterUpdateService) {
this.publisher = publisher;
this.equipChangeDataUpdateService = equipChangeDataUpdateService;
this.useRegisterUpdateService = useRegisterUpdateService;
}
@Override
public String canHandleBizType() {
return "useRegister";
}
@Override
public Map<String, List<Map<String, Object>>> getChangeDetail(String applyNo, ModelType model) {
return Collections.emptyMap();
}
/**
* 保存
*
* @param applyNo 单据编号
* @param model single, batch
* @param changeData 变更数据 key为不同的分组:如使用信息、设计信息、制造信息、技术参数
*/
@Override
public void doSave(String applyNo, ModelType model, Map<String, List<Map<String, Object>>> changeData) {
List<ChangeDataDto> allChangeColumns = new ArrayList<>();
// 选择是台套、还是单位办理的方式,进行数据的解析
IChangeDataProcessStrategy dataProcessor = DataProcessStrategyContext.getStrategy(model);
changeData.forEach((k, v) -> {
Map<String, List<ChangeDataDto>> columnsMap = new HashMap<>();
if (k.startsWith("biz")) {
// 单据信息变化
columnsMap = dataProcessor.handle(v, applyNo);
// 将前端json数据,格式化解析为java对象格式及数据比对去掉未变化的数据,key为record, 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);
}
});
}
});
// 更新历史的JSON的数据
this.updateHistoryJson(applyNo);
// 记录日志
if (!allChangeColumns.isEmpty()) {
publisher.publish(new ChangeDataEvent(this, allChangeColumns, RequestContext.cloneRequestContext()));
}
}
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);
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);
}
// 新定义-不同的技术参数要单独处理表
if (changeDataDto instanceof EquipTechParamChangeDataDto) {
EquipTechParamChangeDataDto techParamChangeDataDto = (EquipTechParamChangeDataDto) changeDataDto;
}
}
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;
}
}
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.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 CommonServiceImpl commonService;
private final JgRegistrationHistoryServiceImpl jgRegistrationHistoryService;
public UseRegisterUpdateService(IdxBizJgRegisterInfoMapper idxBizJgRegisterInfoMapper, JgUseRegistrationServiceImpl useRegistrationService, CommonServiceImpl commonService, JgRegistrationHistoryServiceImpl jgRegistrationHistoryService) {
this.idxBizJgRegisterInfoMapper = idxBizJgRegisterInfoMapper;
this.useRegistrationService = useRegistrationService;
this.commonService = commonService;
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);
// 需求:当申请信息由于设备信息错误被驳回及撤回时显示的数据还是旧设备数据,导致该申请单无法使用
// 解决方案:设备基本信息、制造信息、设计信息、安装信息、维保信息,已完成时显示历史数据、非完成时显示最新设备数据
useRegistrationService.fillHistoryDataWithNewEquip(jsonObject, jgUseRegistration, 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());
// 转化 附件 字段
commonService.convertStringToJsonobject(jsonObject, JgUseRegistrationServiceImpl.jsonFields);
return jsonObject;
}
}
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