From 41dc7239db3cd2021db7d44f9872df9573d2f255 Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期一, 21 四月 2025 17:27:17 +0800
Subject: [PATCH] 工单同步功能:增加根据日志重试接口,日志查看接口
---
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobLogService.java | 2
aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobService.java | 4
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobLogServiceImpl.java | 10 ++
aps-modules/aps-job/src/main/java/com/aps/job/controller/ApsWorkOrderJobController.java | 6
aps-modules/aps-job/src/main/java/com/aps/job/controller/ApsWorkOrderJobLogController.java | 73 ++++++++++++++
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java | 172 ++++++++++++++++++++++++++--------
aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderJobLogMapper.xml | 13 +-
7 files changed, 232 insertions(+), 48 deletions(-)
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/controller/ApsWorkOrderJobController.java b/aps-modules/aps-job/src/main/java/com/aps/job/controller/ApsWorkOrderJobController.java
index 62e6c9e..f0caf2f 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/controller/ApsWorkOrderJobController.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/controller/ApsWorkOrderJobController.java
@@ -39,7 +39,7 @@
/**
* 鏌ヨ宸ュ崟鍚屾鍒楄〃
*/
- @RequiresPermissions("ApsWorkOrderJob:ApsWorkOrderJob:list")
+ @RequiresPermissions("apsWorkOrderJob:list")
@GetMapping("/list")
public TableDataInfo list(ApsWorkOrderJob apsWorkOrderJob)
{
@@ -51,7 +51,7 @@
/**
* 瀵煎嚭宸ュ崟鍚屾鍒楄〃
*/
- @RequiresPermissions("ApsWorkOrderJob:ApsWorkOrderJob:export")
+ @RequiresPermissions("apsWorkOrderJob:export")
@Log(title = "宸ュ崟鍚屾", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ApsWorkOrderJob apsWorkOrderJob)
@@ -64,7 +64,7 @@
/**
* 鑾峰彇宸ュ崟鍚屾璇︾粏淇℃伅
*/
- @RequiresPermissions("ApsWorkOrderJob:ApsWorkOrderJob:query")
+ @RequiresPermissions("apsWorkOrderJob:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/controller/ApsWorkOrderJobLogController.java b/aps-modules/aps-job/src/main/java/com/aps/job/controller/ApsWorkOrderJobLogController.java
new file mode 100644
index 0000000..f255173
--- /dev/null
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/controller/ApsWorkOrderJobLogController.java
@@ -0,0 +1,73 @@
+package com.aps.job.controller;
+
+import com.aps.common.core.utils.poi.ExcelUtil;
+import com.aps.common.core.web.controller.BaseController;
+import com.aps.common.core.web.domain.AjaxResult;
+import com.aps.common.core.web.page.TableDataInfo;
+import com.aps.common.log.annotation.Log;
+import com.aps.common.log.enums.BusinessType;
+import com.aps.common.security.annotation.RequiresPermissions;
+import com.aps.job.domain.ApsWorkOrderJobLog;
+import com.aps.job.service.IApsWorkOrderJobLogService;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 宸ュ崟鍚屾鏃ュ織Controller
+ *
+ * @author zhl
+ * @date 2025-04-17
+ */
+@RestController
+@RequestMapping("/apsWorkOrderJobLog")
+public class ApsWorkOrderJobLogController extends BaseController {
+ @Autowired
+ private IApsWorkOrderJobLogService apsWorkOrderJobLogService;
+
+ /**
+ * 鏌ヨ宸ュ崟鍚屾鏃ュ織鍒楄〃
+ */
+// @RequiresPermissions("apsWorkOrderJobLog:list")
+ @GetMapping("/list")
+ public TableDataInfo list(ApsWorkOrderJobLog apsWorkOrderJobLog) {
+// startPage();
+ List<ApsWorkOrderJobLog> list = apsWorkOrderJobLogService.selectApsWorkOrderJobLogList(apsWorkOrderJobLog);
+ return getDataTable(list);
+ }
+
+ /**
+ * 瀵煎嚭宸ュ崟鍚屾鏃ュ織鍒楄〃
+ */
+ @RequiresPermissions("apsWorkOrderJobLog:export")
+ @Log(title = "宸ュ崟鍚屾鏃ュ織", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, ApsWorkOrderJobLog apsWorkOrderJobLog) {
+ List<ApsWorkOrderJobLog> list = apsWorkOrderJobLogService.selectApsWorkOrderJobLogList(apsWorkOrderJobLog);
+ ExcelUtil<ApsWorkOrderJobLog> util = new ExcelUtil<ApsWorkOrderJobLog>(ApsWorkOrderJobLog.class);
+ util.exportExcel(response, list, "宸ュ崟鍚屾鏃ュ織鏁版嵁");
+ }
+
+ /**
+ * 鑾峰彇宸ュ崟鍚屾鏃ュ織璇︾粏淇℃伅
+ */
+ @RequiresPermissions("apsWorkOrderJobLog:query")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id) {
+ return success(apsWorkOrderJobLogService.selectApsWorkOrderJobLogById(id));
+ }
+
+ /**
+ * 淇敼宸ュ崟鍚屾鏃ュ織
+ */
+ @RequiresPermissions("apsWorkOrderJobLog:edit")
+ @Log(title = "宸ュ崟鍚屾鏃ュ織", businessType = BusinessType.UPDATE)
+ @PostMapping("/sync")
+ public AjaxResult edit(@RequestBody ApsWorkOrderJobLog apsWorkOrderJobLog) {
+ apsWorkOrderJobLogService.retryRequestWorkOrderByLogId(apsWorkOrderJobLog.getId());
+ return toAjax(true);
+ }
+
+}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobLogService.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobLogService.java
index d44ebb5..1591232 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobLogService.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobLogService.java
@@ -58,4 +58,6 @@
* @return 缁撴灉
*/
public int deleteApsWorkOrderJobLogById(Long id);
+
+ boolean retryRequestWorkOrderByLogId(Long id);
}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobService.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobService.java
index 8194fe8..acf7468 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobService.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/IApsWorkOrderJobService.java
@@ -2,6 +2,7 @@
import java.util.List;
import com.aps.job.domain.ApsWorkOrderJob;
+import com.aps.job.domain.ApsWorkOrderJobLog;
import com.aps.job.param.ApsWorkOrderJobParam;
import org.springframework.transaction.annotation.Transactional;
@@ -70,5 +71,8 @@
boolean batchSaveByPager(ApsWorkOrderJobParam param);
@Transactional
+ boolean requestOnePage( ApsWorkOrderJobLog jobLog);
+
+ @Transactional
void syncPartOrderData();
}
diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobLogServiceImpl.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobLogServiceImpl.java
index d5d477f..44c8c9b 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobLogServiceImpl.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobLogServiceImpl.java
@@ -1,6 +1,8 @@
package com.aps.job.service.impl;
import java.util.List;
+
+import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aps.job.mapper.ApsWorkOrderJobLogMapper;
@@ -18,6 +20,9 @@
{
@Autowired
private ApsWorkOrderJobLogMapper apsWorkOrderJobLogMapper;
+
+ @Resource
+ private ApsWorkOrderJobServiceImpl apsWorkOrderJobService;
/**
* 鏌ヨ宸ュ崟鍚屾鏃ュ織
@@ -90,4 +95,9 @@
{
return apsWorkOrderJobLogMapper.deleteApsWorkOrderJobLogById(id);
}
+
+ @Override
+ public boolean retryRequestWorkOrderByLogId(Long id){
+ return apsWorkOrderJobService.requestOnePage(apsWorkOrderJobLogMapper.selectApsWorkOrderJobLogById(id));
+ }
}
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 8f1ad5b..e7ef207 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
@@ -169,68 +169,159 @@
@Transactional
@Override
public boolean batchSaveByPager(ApsWorkOrderJobParam param) {
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
- /*璁剧疆褰撳墠椤甸潰*/
- ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog();
+
String requestString = JSONObject.toJSONString(param);
- HttpEntity<String> request = new HttpEntity<>(requestString, headers);
- ResponseEntity<String> response = restTemplate.postForEntity(getWorkOrderUrl, request, String.class);
+ 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);
- 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= batchInsertApsWorkOrderJob(param, result);
- jobLog.setResult("ok save "+ct);
- jobLogMapper.updateApsWorkOrderJobLog(jobLog);
- return true;
- }else {
- jobLog.setResult("ok receive 0");
- jobLogMapper.updateApsWorkOrderJobLog(jobLog);
- return false;
- }
- } else {
- jobLog.setResponseData(response.getBody());
+ 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;
}
- } else {
- jobLog.setResponseData(response.getBody());
+ 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);
- log.info(JSONObject.toJSONString(jobLog));
return false;
}
-
}
- @Transactional
- public int batchInsertApsWorkOrderJob(ApsWorkOrderJobParam param, JSONArray result) {
+
+
+ @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++) {
- 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);
- orderIds.add(order.getOrderId());
+ try {
+ JSONObject jsonObject = result.getJSONObject(i);
+ // 鏍¢獙蹇呰瀛楁鏄惁瀛樺湪
+ if (!jsonObject.containsKey("ID")) {
+ log.error("Missing 'ID' field in result at index: {}", i);
+ continue; // 璺宠繃鏃犳晥鏁版嵁
+ }
+
+ ApsWorkOrderJob order = new ApsWorkOrderJob();
+ order.setOrderId(jsonObject.getString("ID"));
+ order.setCreateTime(DateUtils.getNowDate());
+ order.setPageIndex(i);
+ order.setPageNum(pageNum);
+ order.setDelFlag("0");
+ order.setProcessStatus("0");
+
+ jobs.add(order);
+ orderIds.add(order.getOrderId());
+ } catch (Exception e) {
+ log.error("Error processing result at index {}: {}", i, e.getMessage(), e);
+ // 缁х画澶勭悊鍏朵粬鏁版嵁
+ }
}
- apsWorkOrderJobMapper.deleteWorkOrderJobByOrderIds(orderIds);
- return apsWorkOrderJobMapper.batchInsertApsWorkOrderJob(jobs);
+
+ 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;
}
+
/**
* 鍚屾闆朵欢宸ュ崟淇℃伅
@@ -241,4 +332,5 @@
apsWorkOrderJobMapper.deleteAllPartPlan();
apsWorkOrderJobMapper.batchInsertPartPlan();
}
+
}
diff --git a/aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderJobLogMapper.xml b/aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderJobLogMapper.xml
index 5424f24..7257f66 100644
--- a/aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderJobLogMapper.xml
+++ b/aps-modules/aps-job/src/main/resources/mapper/job/ApsWorkOrderJobLogMapper.xml
@@ -14,6 +14,7 @@
<result property="requestData" column="request_data" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
+ <result property="bizType" column="biz_type" />
</resultMap>
<sql id="selectApsWorkOrderJobLogVo">
@@ -24,15 +25,17 @@
<select id="selectApsWorkOrderJobLogList" parameterType="ApsWorkOrderJobLog" resultMap="ApsWorkOrderJobLogResult">
<include refid="selectApsWorkOrderJobLogVo"/>
- <where>
+ <where>
<if test="pageNum != null "> and page_num = #{pageNum}</if>
<if test="pageCount != null "> and page_count = #{pageCount}</if>
- <if test="responseData != null and responseData != ''"> and response_data = #{responseData}</if>
- <if test="result != null and result != ''"> and result = #{result}</if>
- <if test="orderId != null and orderId != ''"> and order_id = #{orderId}</if>
- <if test="requestData != null and requestData != ''"> and request_data = #{requestData}</if>
+ <if test="responseData != null and responseData != ''"> and response_data like '%' || #{responseData}|| '%'</if>
+ <if test="result != null and result != ''"> and result like '%' || #{result} ||'%' </if>
+ <if test="requestData != null and requestData != ''"> and request_data like '%' || #{requestData} || '%'</if>
+ <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''"> and create_time between #{params.beginCreateTime} and #{params.endCreateTime}</if>
<if test="bizType != null and bizType != ''"> and biz_type = #{bizType}</if>
+ and ( biz_type is not null and biz_type !='' )
</where>
+ order by id desc
</select>
<select id="selectApsWorkOrderJobLogById" parameterType="Long" resultMap="ApsWorkOrderJobLogResult">
--
Gitblit v1.9.3