| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package com.persagy.proxy.migration.controller;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.util.StrUtil;
- import com.alibaba.excel.EasyExcel;
- import com.alibaba.excel.ExcelWriter;
- import com.alibaba.excel.write.metadata.WriteSheet;
- import com.persagy.dmp.common.constant.ResponseCode;
- import com.persagy.dmp.common.exception.BusinessException;
- import com.persagy.proxy.adm.request.AdmQueryCriteria;
- import com.persagy.proxy.adm.request.AdmResponse;
- import com.persagy.proxy.adm.utils.AdmContextUtil;
- import com.persagy.proxy.common.entity.InstanceUrlParam;
- import com.persagy.proxy.migration.handler.DataMigrationHandler;
- import com.persagy.proxy.migration.model.DataMigrationExcel;
- import com.persagy.proxy.migration.model.MigrationInfo;
- import com.persagy.proxy.object.model.AdmProject;
- import com.persagy.proxy.object.service.IAdmProjectService;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import javax.servlet.http.HttpServletResponse;
- import java.net.URLEncoder;
- import java.nio.charset.StandardCharsets;
- import java.util.List;
- import java.util.Map;
- /**
- * @author lvxianyun
- * @title: adm 交付的数据同步到现场,TODO 需要提供中台的连接,可以使用接口传,也可以配置在项目中
- * @projectName adm-middleware
- * @description: 该方式会覆盖被同步方数据(以adm交付为主)
- * @date 2021/12/1 16:07
- */
- @Slf4j
- @RestController
- @RequestMapping("/data/migration")
- @RequiredArgsConstructor
- public class DataMigrationController {
- private final DataMigrationHandler dataMigrationHandler;
- private final IAdmProjectService projectService;
- /**
- *
- * @param response
- * @migrationInfo :
- * targetUrl 现场中台调用的url, eg:http://develop.persagy.com/dmp-rwd
- * targetGroupCode 现场集团编码
- * targetProjectId 现场项目id
- */
- @GetMapping
- public void migrate(HttpServletResponse response, @RequestBody MigrationInfo migrationInfo) {
- //调用服务迁移数据,返回处理结果excel
- try {
- InstanceUrlParam context = AdmContextUtil.toDmpContext();
- context.setGroupCode(migrationInfo.getTargetGroupCode());
- response.setContentType("application/vnd.ms-excel");
- String encode = StandardCharsets.UTF_8.name();
- response.setCharacterEncoding(encode);
- if(migrationInfo == null || StrUtil.isBlank(migrationInfo.getTargetUrl())){
- throw new BusinessException(ResponseCode.A0402.getCode(), ResponseCode.A0402.getDesc());
- }
- if(StrUtil.isBlank(migrationInfo.getTargetGroupCode())){
- migrationInfo.setTargetGroupCode(context.getGroupCode());
- }
- if(StrUtil.isBlank(migrationInfo.getTargetProjectId())){
- migrationInfo.setTargetProjectId(context.getProjectId());
- }
- Map<String,List<DataMigrationExcel>> results = dataMigrationHandler.handle(context, migrationInfo);
- AdmQueryCriteria projectRequest = new AdmQueryCriteria();
- projectRequest.setName(AdmProject.OBJ_TYPE);
- projectRequest.setFilters("id = '" + context.getProjectId() + "';");
- AdmResponse responsePro = projectService.doQuery(AdmContextUtil.toDmpContext(), projectRequest, AdmProject.class);
- if (CollUtil.isEmpty(responsePro.getContent())) {
- throw new BusinessException(ResponseCode.A0402.getCode(), ResponseCode.A0402.getDesc());
- } else {
- AdmProject admProject = (AdmProject) responsePro.getContent().get(0);
- // 防止中文乱码
- String fileName = admProject.getLocalName() + "_数据迁移";
- fileName = URLEncoder.encode(fileName, encode);
- response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
- //每个迁移的表写成一个sheet
- if(CollUtil.isNotEmpty(results)){
- int sheetNo = 0;
- ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), DataMigrationExcel.class).build();
- try {
- for (String sheet : results.keySet()) {
- WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheet).build();
- excelWriter.write(results.get(sheet), writeSheet);
- sheetNo++;
- }
- } finally {
- if (excelWriter != null) {
- excelWriter.finish();
- }
- }
- }
- }
- } catch (Exception e) {
- log.error("数据迁移失败",e);
- }
- }
- }
|