From 6e2533f366a28e5f0147f8c8b62a1593acc2a61c Mon Sep 17 00:00:00 2001 From: huangjiayang <5265313@qq.com> Date: 星期五, 09 五月 2025 13:25:24 +0800 Subject: [PATCH] 【UPDATE】补充刷新BOM数据任务 --- aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java | 294 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 229 insertions(+), 65 deletions(-) diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java index ca8dfd4..fc2078b 100644 --- a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java +++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java @@ -1,26 +1,32 @@ package com.aps.job.service.impl; -import java.util.ArrayList; -import java.util.List; - +import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aps.common.core.utils.DateUtils; +import com.aps.job.domain.ApsWorkOrderJob; import com.aps.job.domain.ApsWorkOrderJobLog; import com.aps.job.mapper.ApsWorkOrderJobLogMapper; +import com.aps.job.mapper.ApsWorkOrderJobMapper; import com.aps.job.param.ApsWorkOrderJobParam; -import org.springframework.beans.factory.annotation.Value; +import com.aps.job.service.IApsWorkOrderJobService; +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 com.aps.job.mapper.ApsWorkOrderJobMapper; -import com.aps.job.domain.ApsWorkOrderJob; -import com.aps.job.service.IApsWorkOrderJobService; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * 宸ュ崟鍚屾Service涓氬姟灞傚鐞� @@ -28,6 +34,7 @@ * @author zhl * @date 2025-04-17 */ +@Slf4j @Service public class ApsWorkOrderJobServiceImpl implements IApsWorkOrderJobService { @@ -121,77 +128,234 @@ } - @Transactional + /** + * 鏍规嵁椤电爜鍏ㄩ噺鍚屾鏁版嵁 + * */ @Override public void batchInsertApsWorkOrderJob(ApsWorkOrderJobParam param) { - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); + /*鏍规嵁鍙傛暟涓綋鍓嶉〉闈� 鍜� 瑕佺洰鏍囬〉闈� 杩涜寰幆*/ for (int idx=param.getPageIndex(); idx<=param.getToPageIndex(); idx++){ - /*璁剧疆褰撳墠椤甸潰*/ param.setPageIndex(idx); - ApsWorkOrderJobLog log = new ApsWorkOrderJobLog(); - String requestString = JSONObject.toJSONString(param); - HttpEntity<String> request = new HttpEntity<>(requestString, headers); - ResponseEntity<String> response = restTemplate.postForEntity(getWorkOrderUrl, request, String.class); - log.setRequestData(requestString); - log.setPageNum(Long.valueOf(param.getPageIndex())); - log.setPageCount(Long.valueOf(param.getPageSize())); - log.setCreateTime(DateUtils.getNowDate()); - log.setBizType("work_order"); - jobLogMapper.insertApsWorkOrderJobLog(log); - if (response.getStatusCode().is2xxSuccessful()) { - JSONObject responseBodyJson = JSONObject.parseObject(response.getBody()); - if ("200".equals(responseBodyJson.getString("status"))) { - JSONArray result = responseBodyJson.getJSONArray("data"); - if (result != null&& !result.isEmpty()) { - int ct= batchSave(param, result); - if(ct>0){ - log.setResult("ok save "+ct); - jobLogMapper.updateApsWorkOrderJobLog(log); - return; - }else{ - - log.setResult("ok save 0"); - jobLogMapper.updateApsWorkOrderJobLog(log); - return; - } - }else { - log.setResult("ok receive 0"); - jobLogMapper.updateApsWorkOrderJobLog(log); - return; - } - } else { - log.setResponseData(response.getBody()); - log.setResult("fail"); - jobLogMapper.updateApsWorkOrderJobLog(log); - return; - } - } else { - log.setResponseData(response.getBody()); - log.setResult("fail"); - jobLogMapper.updateApsWorkOrderJobLog(log); + if (!batchSaveByPager(param)) { return; } } } + /** + * 鏍规嵁鏃堕棿娈垫瘡鏃ユ洿鏂帮紝椤甸潰鑷姩閫掑寰幆鍚屾鏁版嵁 + * */ + @Override + public void SyncWorkOrderByTime(){ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime today = LocalDateTime.now(); + LocalDate yesterday = LocalDate.now().minusDays(1); + LocalDateTime yesterdayMidnight = yesterday.atStartOfDay(); + boolean continueFlag = true; + Integer currentPage = 1; + ApsWorkOrderJobParam param=new ApsWorkOrderJobParam(); + param.setPageIndex(currentPage); + param.setDocState(Arrays.asList(0,1,2,4)); + param.setBeginDate(yesterdayMidnight.format(formatter)); + param.setEndDate(today.format(formatter)); + param.setPageSize(100); + while (continueFlag){ + param.setPageIndex(currentPage); + continueFlag= batchSaveByPager(param); + currentPage++; + } + } @Transactional - public int batchSave(ApsWorkOrderJobParam param, JSONArray result) { - List<ApsWorkOrderJob> jobs = new ArrayList<>(); - for (int i = 0; i < result.size(); i++) { - ApsWorkOrderJob order = result.getObject(i, ApsWorkOrderJob.class); - JSONObject jsonObject = result.getJSONObject(i); - order.setOrderId(jsonObject.get("ID").toString()); - order.setCreateTime(DateUtils.getNowDate()); - order.setPageIndex(i); - order.setPageNum(param.getPageIndex()); - order.setDelFlag("0"); - order.setProcessStatus("0"); - jobs.add(order); + @Override + public boolean batchSaveByPager(ApsWorkOrderJobParam param) { + + String requestString = JSONObject.toJSONString(param); + ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog(); + jobLog.setRequestData(requestString); + jobLog.setPageNum(Long.valueOf(param.getPageIndex())); + jobLog.setPageCount(Long.valueOf(param.getPageSize())); + jobLog.setCreateTime(DateUtils.getNowDate()); + jobLog.setBizType("work_order"); + jobLogMapper.insertApsWorkOrderJobLog(jobLog); + log.info("work_order_request锛歿}", JSONObject.toJSONString(jobLog)); + return requestOnePage(jobLog); + } + /** + * 璇锋眰涓�椤垫暟鎹繘琛屼繚瀛� + * */ + @Transactional + @Override + public boolean requestOnePage(ApsWorkOrderJobLog jobLog) { + // 瀹氫箟甯搁噺锛岄伩鍏嶇‖缂栫爜 + final String STATUS_KEY = "status"; + final String DATA_KEY = "data"; + final String SUCCESS_STATUS = "200"; + /*璁剧疆鏃ュ織鏇存柊鏃堕棿锛孯etry鍚庝笌鍒涘缓鏃堕棿涓嶅悓*/ + jobLog.setUpdateTime(DateUtils.getNowDate()); + try { + // 璁剧疆璇锋眰澶� + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity<String> request = new HttpEntity<>(jobLog.getRequestData(), headers); + + // 鍙戣捣HTTP璇锋眰 + ResponseEntity<String> response; + try { + response = restTemplate.postForEntity(getWorkOrderUrl, request, String.class); + } catch (Exception e) { + // 鎹曡幏缃戠粶寮傚父鎴栧叾浠栧紓甯� + String msg = String.format("Error occurred while making HTTP request: {}", e.getMessage()); + log.error(msg); + jobLog.setResponseData(msg); + jobLog.setResult("fail:"+e.getMessage()); + jobLogMapper.updateApsWorkOrderJobLog(jobLog); + return false; + } + // 瑙f瀽鍝嶅簲浣� + String responseBody = response.getBody(); + // 妫�鏌ュ搷搴旂姸鎬佺爜 + if (!response.getStatusCode().is2xxSuccessful()) { + String msg = String.format("Non-2xx response received: {}", response.getStatusCode()); + log.warn(msg); + jobLog.setResponseData(responseBody); + jobLog.setResult("fail"); + jobLogMapper.updateApsWorkOrderJobLog(jobLog); + return false; + } + + if (responseBody == null) { + String responseBodyIsNull = "Response body is null"; + log.warn(responseBodyIsNull); + jobLog.setResponseData(responseBodyIsNull); + jobLog.setResult("fail"); + jobLogMapper.updateApsWorkOrderJobLog(jobLog); + return false; + } + + JSONObject responseBodyJson = JSONObject.parseObject(responseBody); + String status = responseBodyJson.getString(STATUS_KEY); + if (!SUCCESS_STATUS.equals(status)) { + + log.warn("Unexpected status in response: {}", status); + jobLog.setResponseData(responseBody); + jobLog.setResult("fail"); + jobLogMapper.updateApsWorkOrderJobLog(jobLog); + return false; + } + + // 澶勭悊鏁版嵁 + JSONArray result = responseBodyJson.getJSONArray(DATA_KEY); + if (result == null || result.isEmpty()) { + jobLog.setResult("ok receive 0"); + jobLogMapper.updateApsWorkOrderJobLog(jobLog); + return false; + } + + int ct = batchInsertApsWorkOrderJob(jobLog.getPageNum().intValue(), result); + jobLog.setResult("ok save " + ct); + jobLogMapper.updateApsWorkOrderJobLog(jobLog); + return true; + + } catch (Exception e) { + // 鎹曡幏鎵�鏈夊紓甯稿苟璁板綍鏃ュ織 + log.error("An unexpected error occurred: {}", e.getMessage(), e); + jobLog.setResponseData(null); + jobLog.setResult("fail"); + jobLogMapper.updateApsWorkOrderJobLog(jobLog); + return false; } - return apsWorkOrderJobMapper.batchInsertApsWorkOrderJob(jobs); + } + + + @Transactional(rollbackFor = Exception.class) + public int batchInsertApsWorkOrderJob(Integer pageNum, JSONArray result) { + // 杈圭晫鏉′欢妫�鏌� + if (result == null || result.isEmpty()) { + log.warn("Result is empty or null, no data to process."); + return 0; + } + if (pageNum == null) { + log.warn("PageNum is null, setting default value to 1."); + pageNum = 1; + } + + List<ApsWorkOrderJob> jobs = new ArrayList<>(); + List<String> orderIds = new ArrayList<>(); + + for (int i = 0; i < result.size(); i++) { + try { + JSONObject jsonObject = result.getJSONObject(i); + // 鏍¢獙蹇呰瀛楁鏄惁瀛樺湪 + if (!jsonObject.containsKey("ID")) { + log.error("Missing 'ID' field in result at index: {}", i); + continue; // 璺宠繃鏃犳晥鏁版嵁 + } + + ApsWorkOrderJob order = result.getObject(i, ApsWorkOrderJob.class); + order.setId(IdUtil.getSnowflakeNextId()); + order.setOrderId(jsonObject.getString("ID")); + order.setCreateTime(DateUtils.getNowDate()); + order.setPageIndex(i); + order.setPageNum(pageNum); + order.setDelFlag("0"); + order.setProcessStatus("0"); + order.setOpStatus(jsonObject.getString("OpStatus")); + order.setNextOpName(jsonObject.getString("NextOpName")); + jobs.add(order); + orderIds.add(order.getOrderId()); + } catch (Exception e) { + log.error("Error processing result at index {}: {}", i, e.getMessage(), e); + // 缁х画澶勭悊鍏朵粬鏁版嵁 + } + } + + if (!orderIds.isEmpty()) { + // 鍒犻櫎鏃ф暟鎹� + apsWorkOrderJobMapper.deleteWorkOrderJobByOrderIds(orderIds); + } + + // 鎵归噺鎻掑叆鏂版暟鎹� + int affectedRows = apsWorkOrderJobMapper.batchInsertApsWorkOrderJob(jobs); + + if (affectedRows != jobs.size()) { + log.warn("Not all records were inserted successfully. Expected: {}, Actual: {}", jobs.size(), affectedRows); + } + + return affectedRows; + } + + + /** + * 鍚屾闆朵欢宸ュ崟淇℃伅 + * */ + @Transactional + @Override + public void syncPartOrderData() { + apsWorkOrderJobMapper.deleteAllPartPlan(); + apsWorkOrderJobMapper.batchInsertPartPlan(); + } + + /** + * 鍚屾閽i噾宸ュ崟淇℃伅 + * */ + @Transactional + @Override + public void syncPlateOrderData() { + apsWorkOrderJobMapper.deleteAllPlatePlan(); + apsWorkOrderJobMapper.batchInsertPlatePlan(); + } + + + /** + * 鍚屾閽i噾宸ュ崟淇℃伅 + * */ + @Transactional + @Override + public void syncGasPipingData() { + apsWorkOrderJobMapper.deleteAllGasPiping(); + apsWorkOrderJobMapper.batchInsertGasPiping(); } } -- Gitblit v1.9.3