package com.aps.job.service.impl; import cn.hutool.core.collection.ListUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.aps.common.core.utils.StringUtils; import com.aps.common.security.utils.SecurityUtils; import com.aps.job.domain.ApsWeldSeamStandardJob; import com.aps.job.mapper.ApsWeldSeamStandardMapper; import com.aps.job.mapper.ApsWeldSeamStandardJobMapper; import com.aps.job.service.IApsWeldSeamStandardJobService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; /** * 焊缝标准Job Service业务层处理 * * @author user * @date 2023-11-05 */ @Slf4j @Service public class ApsWeldSeamStandardJobServiceImpl implements IApsWeldSeamStandardJobService { @Autowired private ApsWeldSeamStandardJobMapper apsWeldSeamStandardJobMapper; @Autowired private ApsWeldSeamStandardMapper apsWeldSeamStandardMapper; @Autowired private RestTemplate restTemplate; @Value("${pipingIntegrationplatform.apsWeldSeamStandard}") private String apsWeldSeamStandardUrl; /** * 查询焊缝标准列表 * * @param apsWeldSeamStandardJob 焊缝标准 * @return 焊缝标准集合 */ @Override public List selectApsWeldSeamStandardJobList(ApsWeldSeamStandardJob apsWeldSeamStandardJob) { return apsWeldSeamStandardJobMapper.selectApsWeldSeamStandardJobList(apsWeldSeamStandardJob); } /** * 删除所有焊缝标准Job数据 * * @return 结果 */ @Override public int deleteAllApsWeldSeamStandardJob() { return apsWeldSeamStandardJobMapper.deleteAllApsWeldSeamStandardJob(); } /** * 批量新增焊缝标准Job * * @param list 焊缝标准Job列表 * @return 结果 */ @Override public int batchInsertApsWeldSeamStandardJob(List list) { return apsWeldSeamStandardJobMapper.batchInsertApsWeldSeamStandardJob(list); } /** * 同步物料标准焊缝数据 * * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) public boolean syncWeldSeamStandardData() { try { log.info("开始同步物料标准焊缝数据"); // 使用POST方法调用接口 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); // 准备请求参数 - 传递工厂代码字符串数组,设置为空数组 String[] plantCodeArray = new String[0]; // 直接使用字符串数组作为请求体 HttpEntity requestEntity = new HttpEntity<>(plantCodeArray, headers); ResponseEntity responseEntity = restTemplate.postForEntity(apsWeldSeamStandardUrl, requestEntity, String.class); if (!responseEntity.getStatusCode().is2xxSuccessful()) { log.error("获取物料标准焊缝数据失败"); return false; } String responseBody = responseEntity.getBody(); if (StringUtils.isEmpty(responseBody)) { return false; } JSONObject responseJson = JSON.parseObject(responseBody); // 检查返回码 if (responseJson.getIntValue("code") != 0) { return false; } // 获取接口返回的数据 JSONArray weldSeamList = responseJson.getJSONArray("ok"); if (weldSeamList == null || weldSeamList.isEmpty()) { return false; } // 解析数据并转换为实体对象 List jobList = new ArrayList<>(); AtomicLong idCounter = new AtomicLong(System.currentTimeMillis()); // 使用当前时间戳作为起始ID for (int i = 0; i < weldSeamList.size(); i++) { JSONObject item = weldSeamList.getJSONObject(i); // 使用正确的字段名称 plantCode String plantCode = item.getString("plantCode"); // 获取UHP和LOD数量 BigDecimal uhpCount = null; BigDecimal lodCount = null; try { uhpCount = item.getBigDecimal("uhpCount"); } catch (Exception e) { // 忽略异常 } try { lodCount = item.getBigDecimal("lodCount"); } catch (Exception e) { // 忽略异常 } // 判断数据是否完整 if (StringUtils.isEmpty(plantCode)) { continue; } ApsWeldSeamStandardJob job = new ApsWeldSeamStandardJob(); // 为id赋值,使用自增长整型 job.setId(idCounter.incrementAndGet()); job.setItemCode(plantCode); // 映射关系: plantCode -> itemCode job.setHupQty(uhpCount); // 映射关系: uhpCount -> hupQty job.setLodQty(lodCount); // 映射关系: lodCount -> lodQty job.setDelFlag(0); // 不再设置createBy和createTime jobList.add(job); } if (jobList.isEmpty()) { return false; } log.info("清空旧数据 deleteAllApsWeldSeamStandardJob"); // 清空旧数据 deleteAllApsWeldSeamStandardJob(); // 批量插入新数据 List> dataGroup = ListUtil.split(jobList, 1000); for (List data : dataGroup) { batchInsertApsWeldSeamStandardJob(data); } // 删除业务表数据(全量覆盖) deleteAllApsWeldSeamStandard(); // 同步数据到业务表 for (List data : dataGroup) { syncToBizTable(data); } return true; } catch (Exception e) { log.error("同步物料标准焊缝数据异常", e); throw e; } } private void deleteAllApsWeldSeamStandard() { apsWeldSeamStandardMapper.deleteAllApsWeldSeamStandard(); } /** * 同步数据到业务表 * * @param jobList 焊缝标准Job数据列表 */ private void syncToBizTable(List jobList) { try { if (jobList == null || jobList.isEmpty()) { return; } // 批量插入数据到业务表 apsWeldSeamStandardMapper.batchInsertApsWeldSeamStandard(jobList); } catch (Exception e) { log.error("同步物料标准焊缝数据到业务表异常", e); throw e; } } }