From 5ec8d62c24fc5844d1b88a91398178856ec76b12 Mon Sep 17 00:00:00 2001
From: sfd <sun.sunshine@163.com>
Date: 星期四, 08 五月 2025 15:46:17 +0800
Subject: [PATCH] Merge branch 'dev' of http://192.168.50.149:8085/r/aps-backend into dev
---
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java | 276 +++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 239 insertions(+), 37 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 6ff0aa6..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,24 +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涓氬姟灞傚鐞�
@@ -26,6 +34,7 @@
* @author zhl
* @date 2025-04-17
*/
+@Slf4j
@Service
public class ApsWorkOrderJobServiceImpl implements IApsWorkOrderJobService
{
@@ -119,41 +128,234 @@
}
+ /**
+ * 鏍规嵁椤电爜鍏ㄩ噺鍚屾鏁版嵁
+ * */
@Override
public void batchInsertApsWorkOrderJob(ApsWorkOrderJobParam param) {
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
- Integer PageIndex = 1;
- Integer PageSize = 500;
- Boolean continueFlag = true;
- /* while (continueFlag){*/
- String requestString = JSONObject.toJSONString(param);
- HttpEntity<String> request = new HttpEntity<>(requestString, headers);
- ResponseEntity<String> response = restTemplate.postForEntity(getWorkOrderUrl, request, String.class);
- if (response.getStatusCode().is2xxSuccessful()) {
- JSONObject responseBodyJson = JSONObject.parseObject(response.getBody());
- if ("200".equals(responseBodyJson.getString("status"))) {
- JSONArray result = responseBodyJson.getJSONArray("data");
- if (result != null) {
- 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(PageIndex);
- order.setDelFlag("0");
- order.setProcessStatus("0");
- jobs.add(order);
- }
- apsWorkOrderJobMapper.batchInsertApsWorkOrderJob(jobs);
- }
-
+ /*鏍规嵁鍙傛暟涓綋鍓嶉〉闈� 鍜� 瑕佺洰鏍囬〉闈� 杩涜寰幆*/
+ for (int idx=param.getPageIndex(); idx<=param.getToPageIndex(); idx++){
+ param.setPageIndex(idx);
+ 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
+ @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;
+ }
+ }
+
+
+ @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