Commit 9c274978 authored by tianbo's avatar tianbo

feat(jg): 数据对接服务优化与设备信息更新

- 修改注册信息默认产品名为"电梯" - 重构 saveOtherInfo 方法返回 IdxBizJgOtherInfo 对象 - 调整 updateHistoryInfo 参数列表并优化执行逻辑 - 异步批量保存电梯数据增加结果反馈和异常处理 - 设备接收单位字段注解类型处理器变更 - PieLineDataChangeServiceImpl 注入懒加载 CommonEquipDataProcessService - SingleEquipChangeProcess 过滤空值并调整日期排序规则
parent 5c5a665e
......@@ -12,7 +12,7 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
@FeignClient(name = "TZS-JG-tb", path = "/jg", configuration = {FeignConfiguration.class})
@FeignClient(name = "TZS-JG", path = "/jg", configuration = {FeignConfiguration.class})
public interface TzsJgServiceFeignClient {
/**
......
......@@ -25,10 +25,7 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.io.InputStream;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.concurrent.*;
import java.util.stream.Stream;
@Slf4j
......@@ -567,8 +564,8 @@ public class XiAnDataDockServiceImpl {
} catch (Exception e) {
return ResponseHelper.buildFailureResponse(e.getMessage(), "参数校验失败,详细请看返回信息", HttpStatus.BAD_REQUEST);
}
this.batchSaveElevatorData(elevatorExcelDtos);
return ResponseHelper.buildResponse("设备保存成功!");
return ResponseHelper.buildResponse(this.batchSaveElevatorData(elevatorExcelDtos));
}
/**
......@@ -778,13 +775,14 @@ public class XiAnDataDockServiceImpl {
*
* @param elevatorExcelDtos
*/
public void batchSaveElevatorData(List<XiAnElevatorExcelDto> elevatorExcelDtos) {
public Map<String, String> batchSaveElevatorData(List<XiAnElevatorExcelDto> elevatorExcelDtos) {
log.info("解析成功,准备上传数据,条数:{}", elevatorExcelDtos.size());
int batchSize = 5000;
int totalSize = elevatorExcelDtos.size();
Map<String, String> rMap = new HashMap<>();
// 主线程中获取登录信息传递到异步线程中
RequestContextWrapper contextWrapper = RequestContextWrapper.capture();
Set<String> importResult = ConcurrentHashMap.newKeySet(); // 使用线程安全的Set
// 分批处理,但限制同时运行的批次数
int maxConcurrentBatches = 5; // 最大并发批次数
Semaphore semaphore = new Semaphore(maxConcurrentBatches);
......@@ -793,8 +791,17 @@ public class XiAnDataDockServiceImpl {
List<XiAnElevatorExcelDto> batch = elevatorExcelDtos.subList(i, Math.min(totalSize, i + batchSize));
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
try {
semaphore.acquire(); // 获取许可
contextWrapper.apply();
jgServiceFeignClient.saveElevatorData(batch);
Object result = jgServiceFeignClient.saveElevatorData(batch);
LinkedHashMap<String, Object> resultMap = (LinkedHashMap<String, Object>) result;
if (resultMap.containsKey("result") && resultMap.get("result") instanceof Collection) {
Collection<?> data = (Collection<?>) resultMap.get("result");
data.stream()
.filter(item -> item instanceof String)
.forEach(item -> importResult.add((String) item));
}
} catch (Exception e) {
log.error("西安数据上传,保存数据失败: ", e);
} finally {
......@@ -805,5 +812,15 @@ public class XiAnDataDockServiceImpl {
}
// 等待所有异步任务完成
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
if (!ValidationUtil.isEmpty(importResult)) {
rMap.put("result", "success");
rMap.put("message", "设备已做过后续业务或被编辑,更新失败:" + String.join(",", importResult));
log.info("设备已做过后续业务或被编辑,更新失败:{}", String.join(",", importResult));
return rMap;
}
log.info("设备保存成功");
rMap.put("result", "success");
rMap.put("message", "设备保存成功");
return rMap;
}
}
......@@ -25,6 +25,7 @@ import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.SuperviseInfoMapper;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
......@@ -54,6 +55,7 @@ public class PieLineDataChangeServiceImpl {
private final SuperviseInfoMapper superviseInfoMapper;
@Lazy
private final CommonEquipDataProcessService commonEquipDataProcessService;
......
......@@ -36,6 +36,7 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/**
* 单个维护设备-策略实现类
......@@ -320,7 +321,8 @@ public class SingleEquipChangeProcess implements IEquipChangeDataProcessStrategy
List<Map<String, String>> recentlyReceiveCompanyCode = commonEquipDataProcessService.getCommonMapper().queryRecentlyReceiveCompanyCode(registerInfoNew.getRecord());
if (!recentlyReceiveCompanyCode.isEmpty()) {
// 按passedDate倒叙排序后取最新的一个
recentlyReceiveCompanyCode.sort(Comparator.comparing(map -> map.get("passedDate"), Comparator.reverseOrder()));
recentlyReceiveCompanyCode = recentlyReceiveCompanyCode.stream().filter(map -> !ValidationUtil.isEmpty(map)).collect(Collectors.toList());
recentlyReceiveCompanyCode.sort(Comparator.comparing(map -> map.get("passedDate")));
receiveCompanyCode = commonEquipDataProcessService.getJgUseRegistrationService().getCodeUtil().getCityRegionCode(recentlyReceiveCompanyCode.get(0).get("receiveCompanyCode"));
}
}
......
......@@ -16,7 +16,6 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.google.common.collect.Sets;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
......@@ -26,7 +25,9 @@ import com.yeejoin.amos.boot.module.common.api.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.common.api.dao.ExcelImportErrorLogDao;
import com.yeejoin.amos.boot.module.common.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.common.api.dto.ExcelImportErrorLogDto;
import com.yeejoin.amos.boot.module.common.api.enums.ConstructionTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.common.DataDockTemplateVersionUtils;
import com.yeejoin.amos.boot.module.jg.api.common.PipLenCalUtils;
import com.yeejoin.amos.boot.module.jg.api.converter.DictParamsConverter;
import com.yeejoin.amos.boot.module.jg.api.converter.EquCategoryConverter;
import com.yeejoin.amos.boot.module.jg.api.converter.EquDefineConverter;
......@@ -49,7 +50,6 @@ import com.yeejoin.amos.boot.module.jg.biz.reminder.core.event.EquipCreateOrEdit
import com.yeejoin.amos.boot.module.jg.biz.service.*;
import com.yeejoin.amos.boot.module.jg.biz.utils.CodeUtil;
import com.yeejoin.amos.boot.module.jg.biz.utils.JsonUtils;
import com.yeejoin.amos.boot.module.jg.api.common.PipLenCalUtils;
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.EquimentEnum;
......@@ -80,7 +80,6 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
......@@ -501,6 +500,7 @@ public class DataDockServiceImpl {
registerInfo.setRegisterState("6045");
registerInfo.setIsCompleteXa("1");
registerInfo.setInInspectionPeriod("1");
registerInfo.setProductName("电梯");
idxBizJgRegisterInfoServiceImpl.saveOrUpdateData(registerInfo);
}
return registerInfo;
......@@ -594,7 +594,7 @@ public class DataDockServiceImpl {
* @param equ
* @param record
*/
private void saveOtherInfo(Map<String, Object> equ, String record, String equList) {
private IdxBizJgOtherInfo saveOtherInfo(Map<String, Object> equ, String record, String equList) {
log.error("数据===>{}", toJSONString(equ));
IdxBizJgOtherInfo oldOtherInfo = idxBizJgOtherInfoService.lambdaQuery()
.eq(IdxBizJgOtherInfo::getRecord, record).one();
......@@ -611,6 +611,7 @@ public class DataDockServiceImpl {
}
idxBizJgOtherInfoService.saveOrUpdate(otherInfo);
}
return otherInfo;
}
/**
......@@ -2666,7 +2667,7 @@ public class DataDockServiceImpl {
// 西安导入电梯属地监管部门处理
handleSupervisionOffice(equ);
saveSupervisionInfo(equ, record);
saveOtherInfo(equ, record, equList);
IdxBizJgOtherInfo otherInfo = saveOtherInfo(equ, record, equList);
saveInspectInfo(equ, record);
saveTechParams(equ, record, equList);
saveEquInfoToEs(record, isCompleteXa);
......@@ -2678,7 +2679,7 @@ public class DataDockServiceImpl {
}
// oldUseInfo不为空表示是平台已有设备,已有历史设备则更新历史单据信息。
if (!ValidationUtil.isEmpty(oldUseInfo)) {
updateHistoryInfo(equ, oldUseInfo, registerInfo);
updateHistoryInfo(equ, registerInfo, otherInfo);
}
} else if (!businessId.isEmpty()) {
this.saveResumeInfo(equ);
......@@ -2704,7 +2705,7 @@ public class DataDockServiceImpl {
}
}
private void updateHistoryInfo(Map<String, Object> equ, IdxBizJgUseInfo oldUseInfo, IdxBizJgRegisterInfo registerInfo) {
private void updateHistoryInfo(Map<String, Object> equ, IdxBizJgRegisterInfo registerInfo, IdxBizJgOtherInfo otherInfo) {
// 更新历史登记单数据、登记单对应历史表数据
// 安全管理员
if (equ.containsKey("safetyManager")) {
......@@ -2730,7 +2731,8 @@ public class DataDockServiceImpl {
jgUseRegistration.setReceiveOrgName(receiveCompanyName);
equ.put("receiveOrgName", receiveCompanyName);
jgUseRegistrationServiceImpl.saveOrUpdate(jgUseRegistration);
this.updateRegistrationManagementInfo(equ, jgUseRegistration.getSupervisoryCode());
this.updateEsData2(equ, otherInfo);
this.updateRegistrationManagementInfo(equ, jgUseRegistration.getUseRegistrationCode());
this.updateHistory(equ, equ.get("record").toString(), String.valueOf(jgUseRegistration.getSequenceNbr()), jgUseRegistration.getSupervisoryCode());
}
......@@ -2745,7 +2747,7 @@ public class DataDockServiceImpl {
jgUseRegistrationManagement.setUseUnitName(equ.get("useUnitName").toString());
jgUseRegistrationManagement.setUseUnitCreditCode(equ.get("useUnitCode").toString());
jgUseRegistrationManagement.setSuperviseOrgCode(equ.get("orgBranchCode").toString());
jgUseRegistrationManagement.setSuperviseOrgName(equ.get("orgBranchName").toString().split("_", 2)[1]);
jgUseRegistrationManagement.setSuperviseOrgName(equ.get("orgBranchCode").toString().split("_", 2)[1]);
jgUseRegistrationManagement.setIsDoBusiness("1");
jgUseRegistrationManageService.saveOrUpdate(jgUseRegistrationManagement);
......@@ -3185,6 +3187,7 @@ public class DataDockServiceImpl {
constructionInfo.setUscUnitCreditCode(ValidationUtil.isEmpty(equ.get("installUnitCreditCode")) ? null : String.valueOf(equ.get("installUnitCreditCode")));
constructionInfo.setConstructionLeaderName(ValidationUtil.isEmpty(equ.get("installLeaderName")) ? null : String.valueOf(equ.get("installLeaderName")));
constructionInfo.setConstructionLeaderPhone(ValidationUtil.isEmpty(equ.get("installLeaderPhone")) ? null : String.valueOf(equ.get("installLeaderPhone")));
constructionInfo.setConstructionType(ConstructionTypeEnum.AZ.getCode());
try {
constructionInfo.setUscDate(ValidationUtil.isEmpty(equ.get("installStartDate")) ? null : DateUtils.dateParse((String) equ.get("installStartDate"), DateUtils.DATE_PATTERN));
} catch (ParseException e) {
......
......@@ -349,6 +349,6 @@ public class IdxBizJgUseInfo extends TzsBaseEntity implements IBaseChangeData {
private String USC_UNIT_NAME;
@TableField(exist = false)
@FieldDisplayDefine(value = "接收单位code")
@FieldDisplayDefine(value = "接收单位", typeHandler = "companyCodeTypeHandler")
private String receiveCompanyCode;
}
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