package com.aps.job.service.impl; 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.ApsWorkOrderJobMapper; import com.aps.job.mapper.ApsWorkOrderProcessMapper; import com.aps.job.service.IApsWorkOrderJobLogService; import com.aps.job.service.IApsWorkOrderProcessService; 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.web.client.RestTemplate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 工单工序Service业务层处理 * * @author hjy * @date 2025-04-17 */ @Service public class ApsWorkOrderProcessServiceImpl implements IApsWorkOrderProcessService { @Value("${u9.workOrderProcessUrl}") private String u9WorkOrderProcessUrl; private final Logger logger = LoggerFactory.getLogger(ApsWorkOrderProcessServiceImpl.class); @Autowired private RestTemplate restTemplate; @Autowired private ApsWorkOrderProcessMapper apsWorkOrderProcessMapper; @Autowired private ApsWorkOrderJobMapper apsWorkOrderJobMapper; @Autowired private IApsWorkOrderJobLogService apsWorkOrderJobLogService; /** * 查询工单工序 * * @param id 工单工序主键 * @return 工单工序 */ @Override public ApsWorkOrderProcess selectApsWorkOrderProcessById(Long id) { return apsWorkOrderProcessMapper.selectApsWorkOrderProcessById(id); } /** * 查询工单工序列表 * * @param apsWorkOrderProcess 工单工序 * @return 工单工序 */ @Override public List selectApsWorkOrderProcessList(ApsWorkOrderProcess apsWorkOrderProcess) { return apsWorkOrderProcessMapper.selectApsWorkOrderProcessList(apsWorkOrderProcess); } /** * 新增工单工序 * * @param apsWorkOrderProcess 工单工序 * @return 结果 */ @Override public int insertApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess) { return apsWorkOrderProcessMapper.insertApsWorkOrderProcess(apsWorkOrderProcess); } /** * 修改工单工序 * * @param apsWorkOrderProcess 工单工序 * @return 结果 */ @Override public int updateApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess) { return apsWorkOrderProcessMapper.updateApsWorkOrderProcess(apsWorkOrderProcess); } /** * 批量删除工单工序 * * @param ids 需要删除的工单工序主键 * @return 结果 */ @Override public int deleteApsWorkOrderProcessByIds(Long[] ids) { return apsWorkOrderProcessMapper.deleteApsWorkOrderProcessByIds(ids); } /** * 删除工单工序信息 * * @param id 工单工序主键 * @return 结果 */ @Override public int deleteApsWorkOrderProcessById(Long id) { return apsWorkOrderProcessMapper.deleteApsWorkOrderProcessById(id); } @Override public void getWorkOrderProcessFromU9(List docNos) throws Exception { // 设置请求头 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 request = new HttpEntity<>(requestBody.toJSONString(), headers); // 发送POST请求 ResponseEntity 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); if (response.getStatusCode().is2xxSuccessful()) { if(!StringUtils.isEmpty(responseBody)){ if("200".equals(responseBodyJson.getString("status"))){ JSONArray jsonArray = responseBodyJson.getJSONArray("data"); if (!jsonArray.isEmpty()) { List addList = new ArrayList<>(); List updateList = new ArrayList<>(); String nowDocNo = null; for (Object o : jsonArray) { JSONObject process = (JSONObject) o; if (nowDocNo == null) { nowDocNo = process.getString("DocNo"); } Map 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(!nowDocNo.equals(process.getString("DocNo"))){ //更新工单同步工序状态 apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(nowDocNo); nowDocNo = process.getString("DocNo"); } } if(!updateList.isEmpty()){ apsWorkOrderProcessMapper.updateApsWorkOrderProcessBatch(updateList); apsWorkOrderJobLog.setResult("ok update "+updateList.size()); apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); logger.info("【UPDATE】获取并更新U9工序成功!【工单号:{}】", docNos); } if(!addList.isEmpty()){ apsWorkOrderProcessMapper.insertApsWorkOrderProcessBatch(addList); apsWorkOrderJobLog.setResult("ok insert "+updateList.size()); apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); logger.info("【INSERT】获取并插入U9工序成功!【工单号:{}】", docNos); } } }else{ apsWorkOrderJobLog.setResponseData(response.getBody()); apsWorkOrderJobLog.setResult("fail"); apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); logger.error("【ERROR】查询U9工序失败!【工单号:{}, 错误码:{},错误信息:{}】", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message")); } }else{ logger.warn("【WARNING】未查询到U9工序!【工单号:{}】", docNos); } } else { apsWorkOrderJobLog.setResponseData(response.getBody()); apsWorkOrderJobLog.setResult("fail"); apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog); throw new Exception("【ERROR】查询U9工序失败!【工单号:{"+ docNos +"}, 错误码:{"+ responseBodyJson.getString("status") +"},错误信息:{"+ responseBodyJson.getString("message") +"}】"); } } @Override public void syncWorkOrderProcessData() { try{ //分页查询工单 ApsWorkOrderJob apsWorkOrderJob = new ApsWorkOrderJob(); apsWorkOrderJob.setProcessStatus("0"); List list = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob); int pageSize = 100; int allPage = list.size()/pageSize; // int allPage = 1; for (int i = 1; i <= allPage; i++) { long startTime = System.currentTimeMillis(); PageHelper.startPage(i, pageSize); List pageList = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob); if(!pageList.isEmpty()){ List docNos = new ArrayList<>(); for (ApsWorkOrderJob apsWorkOrderJob1 : pageList){ docNos.add(apsWorkOrderJob1.getDocNo()); } getWorkOrderProcessFromU9(docNos); } long endTime = System.currentTimeMillis(); // 记录结束时间 long duration = endTime - startTime; // 计算运行时间 System.out.println("运行时间:"+ duration +"毫秒"); } }catch (Exception e){ e.printStackTrace(); logger.error(e.getMessage()); } } }