From 2a64b537e8e3bce9ce030585a3da17d48379c0ad Mon Sep 17 00:00:00 2001 From: sfd <sun.sunshine@163.com> Date: 星期一, 26 五月 2025 15:04:45 +0800 Subject: [PATCH] 修改json类型转换错误 --- aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java | 310 ++++++++++++++++++++++++++++++++++----------------- 1 files changed, 205 insertions(+), 105 deletions(-) diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java index 39ea457..1a13dac 100644 --- a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java +++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java @@ -1,5 +1,6 @@ package com.aps.job.service.impl; +import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aps.common.core.utils.DateUtils; @@ -7,6 +8,7 @@ import com.aps.job.domain.ApsWorkOrderJob; import com.aps.job.domain.ApsWorkOrderJobLog; import com.aps.job.domain.ApsWorkOrderProcess; +import com.aps.job.mapper.ApsWorkOrderJobLogMapper; import com.aps.job.mapper.ApsWorkOrderJobMapper; import com.aps.job.mapper.ApsWorkOrderProcessMapper; import com.aps.job.service.IApsWorkOrderJobLogService; @@ -21,6 +23,7 @@ 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.util.ArrayList; @@ -53,6 +56,9 @@ @Autowired private IApsWorkOrderJobLogService apsWorkOrderJobLogService; + + @Autowired + private ApsWorkOrderJobLogMapper apsWorkOrderJobLogMapper; /** * 鏌ヨ宸ュ崟宸ュ簭 @@ -126,135 +132,196 @@ return apsWorkOrderProcessMapper.deleteApsWorkOrderProcessById(id); } + @Transactional(rollbackFor = Exception.class) @Override public void getWorkOrderProcessFromU9(List<String> docNos) throws Exception { + List<String> noProcessDocNos = new ArrayList<>(docNos); + List<String> haveProcessDocNos = new ArrayList<>(); + ApsWorkOrderJobLog apsWorkOrderJobLog = new ApsWorkOrderJobLog(); // 璁剧疆璇锋眰澶� HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); // 璁剧疆璇锋眰浣� - JSONObject requestBody = new JSONObject(); - requestBody.put("DocList", docNos); - requestBody.put("PageIndex", 1); - requestBody.put("PageSize", 1000); - // 鍒涘缓HttpEntity瀵硅薄 - HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers); - // 鍙戦�丳OST璇锋眰 - ResponseEntity<String> response = restTemplate.postForEntity(u9WorkOrderProcessUrl, request, String.class); - String responseBody = response.getBody(); - JSONObject responseBodyJson = JSONObject.parseObject(responseBody); - ApsWorkOrderJobLog apsWorkOrderJobLog = new ApsWorkOrderJobLog(); - apsWorkOrderJobLog.setRequestData(requestBody.toJSONString()); - apsWorkOrderJobLog.setCreateTime(DateUtils.getNowDate()); - apsWorkOrderJobLog.setBizType("work_order_process"); - apsWorkOrderJobLog.setResult("SUCCESS"); - apsWorkOrderJobLogService.insertApsWorkOrderJobLog(apsWorkOrderJobLog); - List<String> haveProcessDocNos = new ArrayList<>(); - if (response.getStatusCode().is2xxSuccessful()) { - if(!StringUtils.isEmpty(responseBody)){ - if("200".equals(responseBodyJson.getString("status"))){ - JSONArray jsonArray = responseBodyJson.getJSONArray("data"); - if (!jsonArray.isEmpty()) { - List<ApsWorkOrderProcess> addList = new ArrayList<>(); - List<ApsWorkOrderProcess> updateList = new ArrayList<>(); - String nowDocNo = null; - for (Object o : jsonArray) { - JSONObject process = (JSONObject) o; - if (nowDocNo == null) { - nowDocNo = process.getString("DocNo"); - docNos.remove(nowDocNo); - haveProcessDocNos.add(nowDocNo); + int pageSize = 1000; + int pageIndex = 1; + while (true){ + JSONObject requestBody = new JSONObject(); + requestBody.put("DocList", docNos); + requestBody.put("PageIndex", pageIndex); + requestBody.put("PageSize", pageSize); + // 鍒涘缓HttpEntity瀵硅薄 + HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers); + // 鍙戦�丳OST璇锋眰 + ResponseEntity<String> response = restTemplate.postForEntity(u9WorkOrderProcessUrl, request, String.class); + String responseBody = response.getBody(); + JSONObject responseBodyJson = JSONObject.parseObject(responseBody); + apsWorkOrderJobLog.setRequestData(requestBody.toJSONString()); + apsWorkOrderJobLog.setCreateTime(DateUtils.getNowDate()); + apsWorkOrderJobLog.setBizType("work_order_process"); + apsWorkOrderJobLog.setResult("SUCCESS"); + apsWorkOrderJobLogService.insertApsWorkOrderJobLog(apsWorkOrderJobLog); + if (response.getStatusCode().is2xxSuccessful()) { + if(!StringUtils.isEmpty(responseBody)){ + if("200".equals(responseBodyJson.getString("status"))){ + JSONArray jsonArray = responseBodyJson.getJSONArray("data"); + if (!jsonArray.isEmpty()) { + List<ApsWorkOrderProcess> addList = new ArrayList<>(); + List<ApsWorkOrderProcess> updateList = new ArrayList<>(); + String nowDocNo = null; + for (int i = 0,size=jsonArray.size();i<size;i++) { + JSONObject process = jsonArray.getJSONObject(i); + if (nowDocNo == null) { + nowDocNo = process.getString("DocNo"); + noProcessDocNos.remove(nowDocNo); + haveProcessDocNos.add(nowDocNo); + } +// Map<String, Object> params = new HashMap<>(); +// params.put("docNo", process.getString("DocNo")); +// params.put("opNum", process.getString("OpNum")); +// params.put("opId", process.getString("OpID")); +// Long existsId = apsWorkOrderProcessMapper.existsByDocNoOpNumOpId(params); + ApsWorkOrderProcess apsWorkOrderProcess = new ApsWorkOrderProcess(); + apsWorkOrderProcess.setItemCode(process.getString("ItemCode")); + apsWorkOrderProcess.setDocNo(process.getString("DocNo")); + apsWorkOrderProcess.setOpNum(process.getString("OpNum")); + apsWorkOrderProcess.setOpId(process.getString("OpID")); + apsWorkOrderProcess.setProcessName(process.getString("StdOp")); + apsWorkOrderProcess.setStandardTime(process.getBigDecimal("StandardTime")); + apsWorkOrderProcess.setPalnStartDate(process.getDate("PlanStartDate")); + apsWorkOrderProcess.setPlanCompleteDate(process.getDate("PlanCompleteDate")); + apsWorkOrderProcess.setProcessQty(process.getBigDecimal("ProcessQty")); + apsWorkOrderProcess.setScrapQty(process.getBigDecimal("ScrapQty")); + apsWorkOrderProcess.setOpStatus(process.getString("OpStatus")); + apsWorkOrderProcess.setOrg(process.getString("Org")); + apsWorkOrderProcess.setOrgCode(process.getString("OrgCode")); + apsWorkOrderProcess.setWorkCenter(process.getString("WorkCenter")); +// if (existsId != null) { +// apsWorkOrderProcess.setId(existsId); +// apsWorkOrderProcess.setUpdateBy("task"); +// apsWorkOrderProcess.setUpdateTime(DateUtils.getNowDate()); +// updateList.add(apsWorkOrderProcess); +// } else { + apsWorkOrderProcess.setId(IdUtil.getSnowflakeNextId()); + apsWorkOrderProcess.setCreateBy("task"); + apsWorkOrderProcess.setCreateTime(DateUtils.getNowDate()); + addList.add(apsWorkOrderProcess); +// } + if(!nowDocNo.equals(process.getString("DocNo")) || i==size-1){ + //鏇存柊宸ュ崟鍚屾宸ュ簭鐘舵�� + noProcessDocNos.remove(nowDocNo); + haveProcessDocNos.add(nowDocNo); + nowDocNo = process.getString("DocNo"); + } } - Map<String, Object> params = new HashMap<>(); - params.put("docNo", process.getString("DocNo")); - params.put("opNum", process.getString("OpNum")); - params.put("opId", process.getString("OpID")); - Long existsId = apsWorkOrderProcessMapper.existsByDocNoOpNumOpId(params); - ApsWorkOrderProcess apsWorkOrderProcess = new ApsWorkOrderProcess(); - apsWorkOrderProcess.setItemCode(process.getString("ItemCode")); - apsWorkOrderProcess.setDocNo(process.getString("DocNo")); - apsWorkOrderProcess.setOpNum(process.getString("OpNum")); - apsWorkOrderProcess.setOpId(process.getString("OpID")); - apsWorkOrderProcess.setProcessName(process.getString("WorkCenter")); - apsWorkOrderProcess.setStandardTime(process.getFloat("StandardTime")); - apsWorkOrderProcess.setPalnStartDate(process.getDate("PlanStartDate")); - apsWorkOrderProcess.setPlanCompleteDate(process.getDate("PlanCompleteDate")); - apsWorkOrderProcess.setProcessQty(process.getFloat("ProcessQty")); - apsWorkOrderProcess.setScrapQty(process.getFloat("ScrapQty")); - apsWorkOrderProcess.setOpStatus(process.getString("OpStatus")); - apsWorkOrderProcess.setOrg(process.getString("Org")); - apsWorkOrderProcess.setOrgCode(process.getString("OrgCode")); - if (existsId != null) { - apsWorkOrderProcess.setId(existsId); - updateList.add(apsWorkOrderProcess); - } else { - addList.add(apsWorkOrderProcess); + if(!updateList.isEmpty()){ + apsWorkOrderProcessMapper.updateApsWorkOrderProcessBatch(updateList); + apsWorkOrderJobLog.setResult("ok update "+updateList.size()); + apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate()); + apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); + logger.info("銆怳PDATE銆戣幏鍙栧苟鏇存柊U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}銆�", docNos); } - if(!nowDocNo.equals(process.getString("DocNo"))){ - //鏇存柊宸ュ崟鍚屾宸ュ簭鐘舵�� - docNos.remove(nowDocNo); - haveProcessDocNos.add(nowDocNo); - nowDocNo = process.getString("DocNo"); + if(!addList.isEmpty()){ + apsWorkOrderProcessMapper.insertApsWorkOrderProcessBatch(addList); + apsWorkOrderJobLog.setResult("ok insert "+addList.size()); + apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate()); + apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); + logger.info("銆怚NSERT銆戣幏鍙栧苟鎻掑叆U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}銆�", docNos); } } - if(!updateList.isEmpty()){ - apsWorkOrderProcessMapper.updateApsWorkOrderProcessBatch(updateList); - apsWorkOrderJobLog.setResult("ok update "+updateList.size()); - apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); - logger.info("銆怳PDATE銆戣幏鍙栧苟鏇存柊U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}銆�", docNos); + if(jsonArray.size()<1000){ + break; } - if(!addList.isEmpty()){ - apsWorkOrderProcessMapper.insertApsWorkOrderProcessBatch(addList); - apsWorkOrderJobLog.setResult("ok insert "+updateList.size()); - apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); - logger.info("銆怚NSERT銆戣幏鍙栧苟鎻掑叆U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}銆�", docNos); - } - Map<String, Object> param = new HashMap<>(); - param.put("status", "1"); - param.put("docNos", haveProcessDocNos); - apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param); + pageIndex++; + }else{ + apsWorkOrderJobLog.setResponseData(response.getBody()); + apsWorkOrderJobLog.setResult("fail"); + apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate()); + apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); + logger.error("銆怑RROR銆戞煡璇9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛歿}, 閿欒鐮侊細{}锛岄敊璇俊鎭細{}銆�", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message")); } - Map<String, Object> param = new HashMap<>(); - param.put("status", "2"); - param.put("docNos", docNos); - apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param); }else{ - apsWorkOrderJobLog.setResponseData(response.getBody()); - apsWorkOrderJobLog.setResult("fail"); - apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); - logger.error("銆怑RROR銆戞煡璇9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛歿}, 閿欒鐮侊細{}锛岄敊璇俊鎭細{}銆�", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message")); + logger.warn("銆怶ARNING銆戞湭鏌ヨ鍒癠9宸ュ簭锛併�愬伐鍗曞彿锛歿}銆�", docNos); } - }else{ - logger.warn("銆怶ARNING銆戞湭鏌ヨ鍒癠9宸ュ簭锛併�愬伐鍗曞彿锛歿}銆�", docNos); + } else { + apsWorkOrderJobLog.setResponseData(response.getBody()); + apsWorkOrderJobLog.setResult("fail"); + apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate()); + apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); + throw new Exception("銆怑RROR銆戞煡璇9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛歿"+ docNos +"}, 閿欒鐮侊細{"+ responseBodyJson.getString("status") +"}锛岄敊璇俊鎭細{"+ responseBodyJson.getString("message") +"}銆�"); } - } else { - apsWorkOrderJobLog.setResponseData(response.getBody()); - apsWorkOrderJobLog.setResult("fail"); + } + if(!haveProcessDocNos.isEmpty()){ + Map<String, Object> param = new HashMap<>(); + param.put("status", "1"); + param.put("docNos", haveProcessDocNos); + apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param); + } + if(!noProcessDocNos.isEmpty()){ + Map<String, Object> param = new HashMap<>(); + param.put("status", "2"); + param.put("docNos", noProcessDocNos); + apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param); + apsWorkOrderJobLog.setRequestData(noProcessDocNos.toString()); + apsWorkOrderJobLog.setResponseData(""); + apsWorkOrderJobLog.setResult("empty"); + apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate()); apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); - throw new Exception("銆怑RROR銆戞煡璇9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛歿"+ docNos +"}, 閿欒鐮侊細{"+ responseBodyJson.getString("status") +"}锛岄敊璇俊鎭細{"+ responseBodyJson.getString("message") +"}銆�"); } } @Override - public void syncWorkOrderProcessData() { + public void syncWorkOrderProcessData(String status, Integer pageSize) { try{ + Integer pageNum = 1; //鍒嗛〉鏌ヨ宸ュ崟 ApsWorkOrderJob apsWorkOrderJob = new ApsWorkOrderJob(); - apsWorkOrderJob.setProcessStatus("0"); - while (true){ - PageHelper.startPage(1, 100); - List<ApsWorkOrderJob> pageList = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob); - if(!pageList.isEmpty()){ - long startTime = System.currentTimeMillis(); - List<String> docNos = new ArrayList<>(); - for (ApsWorkOrderJob apsWorkOrderJob1 : pageList){ - docNos.add(apsWorkOrderJob1.getDocNo()); + if("".equals(status)){ + status = "0"; + } + apsWorkOrderJob.setProcessStatus(status); + // 琛ユ煡涔嬪墠娌℃湁鏌ュ埌宸ュ簭鐨勫伐鍗� + if("2".equals(status)){ + String lastDocNos = ""; + while (true){ + PageHelper.startPage(1, pageSize); + List<ApsWorkOrderJob> pageList = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob); + PageHelper.clearPage(); + if(!pageList.isEmpty()){ + long startTime = System.currentTimeMillis(); + List<String> docNos = new ArrayList<>(); + for (ApsWorkOrderJob apsWorkOrderJob1 : pageList){ + docNos.add(apsWorkOrderJob1.getDocNo()); + } + getWorkOrderProcessFromU9(docNos); + if(String.join(",", docNos).equals(lastDocNos)){ + break; + } + lastDocNos = String.join(",", docNos); } - getWorkOrderProcessFromU9(docNos); - long endTime = System.currentTimeMillis(); // 璁板綍缁撴潫鏃堕棿 - long duration = endTime - startTime; // 璁$畻杩愯鏃堕棿 - System.out.println("杩愯鏃堕棿锛�"+ duration +"姣"); - }else{ - break; + pageNum++; + } + }else{ + while (true){ + PageHelper.startPage(1, pageSize); + List<ApsWorkOrderJob> pageList = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob); + PageHelper.clearPage(); + if(!pageList.isEmpty()){ + long startTime = System.currentTimeMillis(); + List<String> docNos = new ArrayList<>(); + for (ApsWorkOrderJob apsWorkOrderJob1 : pageList){ + if(apsWorkOrderJob1.getDocNo()!=null){ + docNos.add(apsWorkOrderJob1.getDocNo()); + } + } + if(!docNos.isEmpty()){ + getWorkOrderProcessFromU9(docNos); + }else{ + break; + } + }else{ + break; + } + pageNum++; } } }catch (Exception e){ @@ -272,4 +339,37 @@ public void deleteApsProcessRoute() { apsWorkOrderProcessMapper.deleteApsProcessRoute(); } + + @Override + public boolean retryRequestWorkOrderProcessByLogId(Long id) { + try { + ApsWorkOrderJobLog apsWorkOrderJobLog = apsWorkOrderJobLogMapper.selectApsWorkOrderJobLogById(id); + JSONObject requestBodyJson = JSONObject.parseObject(apsWorkOrderJobLog.getRequestData()); + JSONArray docListArray = requestBodyJson.getJSONArray("DocList"); + List<String> docNos = new ArrayList<>(); + for (int i = 0; i < docListArray.size(); i++) { + if(docListArray.getString(i)!=null){ + docNos.add(docListArray.getString(i)); + } + } + if(!docNos.isEmpty()){ + getWorkOrderProcessFromU9(docNos); + } + }catch (Exception e){ + e.printStackTrace(); + return false; + } + return true; + } + + @Override + public void syncProcessRouteData() { + apsWorkOrderProcessMapper.deleteApsProcessRoute(); + apsWorkOrderProcessMapper.insertIntoApsProcessRoute(); + } + + @Override + public void deleteApsWorkOrderProcess() { + apsWorkOrderProcessMapper.deleteApsWorkOrderProcess(); + } } -- Gitblit v1.9.3