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 | 295 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 247 insertions(+), 48 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 ac9fb54..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,22 +1,32 @@ 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; import com.aps.common.core.utils.StringUtils; +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; import com.aps.job.service.IApsWorkOrderProcessService; -import jakarta.annotation.Resource; +import com.github.pagehelper.PageHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +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 org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,11 +45,20 @@ private final Logger logger = LoggerFactory.getLogger(ApsWorkOrderProcessServiceImpl.class); - @Resource + @Autowired private RestTemplate restTemplate; - @Resource + @Autowired private ApsWorkOrderProcessMapper apsWorkOrderProcessMapper; + + @Autowired + private ApsWorkOrderJobMapper apsWorkOrderJobMapper; + + @Autowired + private IApsWorkOrderJobLogService apsWorkOrderJobLogService; + + @Autowired + private ApsWorkOrderJobLogMapper apsWorkOrderJobLogMapper; /** * 鏌ヨ宸ュ崟宸ュ簭 @@ -113,64 +132,244 @@ 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); - // 鍒涘缓HttpEntity瀵硅薄 - HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers); - // 鍙戦�丳OST璇锋眰 - ResponseEntity<String> response = restTemplate.postForEntity(u9WorkOrderProcessUrl, request, String.class); - if (response.getStatusCode().is2xxSuccessful()) { + 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(); - if(StringUtils.isEmpty(responseBody)){ - JSONObject responseBodyJson = JSONObject.parseObject(responseBody); - if(!"200".equals(responseBodyJson.getString("status"))){ - JSONArray jsonArray = responseBodyJson.getJSONArray("data"); - if (jsonArray != null) { - jsonArray.forEach(jsonObject -> { - JSONObject process = (JSONObject) jsonObject; - 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); - apsWorkOrderProcessMapper.updateApsWorkOrderProcess(apsWorkOrderProcess); - logger.info("銆怳PDATE銆戣幏鍙栧苟鏇存柊U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}锛屽伐搴忓彿锛歿}銆�", docNos, apsWorkOrderProcess.getOpNum()); - }else{ - apsWorkOrderProcessMapper.insertApsWorkOrderProcess(apsWorkOrderProcess); - logger.info("銆怚NSERT銆戣幏鍙栧苟鎻掑叆U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}, 宸ュ簭鍙凤細{}銆�", docNos, apsWorkOrderProcess.getOpNum()); + 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"); + } } - }); + 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(!addList.isEmpty()){ + apsWorkOrderProcessMapper.insertApsWorkOrderProcessBatch(addList); + apsWorkOrderJobLog.setResult("ok insert "+addList.size()); + apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate()); + apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); + logger.info("銆怚NSERT銆戣幏鍙栧苟鎻掑叆U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}銆�", docNos); + } + } + if(jsonArray.size()<1000){ + break; + } + 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")); } }else{ - logger.error("銆怑RROR銆戞煡璇9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛歿}, 閿欒鐮侊細{}锛岄敊璇俊鎭細{}銆�", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message")); + 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") +"}銆�"); + } + } + 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); + } + } + + @Override + public void syncWorkOrderProcessData(String status, Integer pageSize) { + try{ + Integer pageNum = 1; + //鍒嗛〉鏌ヨ宸ュ崟 + ApsWorkOrderJob apsWorkOrderJob = new ApsWorkOrderJob(); + 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); + } + pageNum++; } }else{ - logger.warn("銆怶ARNING銆戞湭鏌ヨ鍒癠9宸ュ簭锛併�愬伐鍗曞彿锛歿}銆�", docNos); + 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++; + } } - } else { - throw new Exception("銆怑RROR銆戣幏鍙朥9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛�"+ docNos +"銆�"); + }catch (Exception e){ + e.printStackTrace(); + logger.error(e.getMessage()); } } + + @Override + public void insertIntoApsProcessRoute() { + apsWorkOrderProcessMapper.insertIntoApsProcessRoute(); + } + + @Override + 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