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) { 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); } } 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); } 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(); } 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)); } } 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"; /*设置æ¥å¿æ´æ°æ¶é´ï¼Retryåä¸å建æ¶é´ä¸å*/ 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; } // è§£æååºä½ 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(); } } 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">