package com.aps.job.service.impl; import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aps.common.core.constant.SecurityConstants; import com.aps.common.core.utils.DateUtils; import com.aps.common.core.utils.StringUtils; import com.aps.common.core.utils.uuid.IdUtils; import com.aps.job.domain.ApsStandardProcessRouteHeaderJob; import com.aps.job.domain.ApsStandardProcessRouteLineJob; import com.aps.job.domain.ApsWorkOrderJobLog; import com.aps.job.mapper.ApsStandardProcessRouteHeaderJobMapper; import com.aps.job.mapper.ApsStandardProcessRouteLineJobMapper; import com.aps.job.mapper.ApsWorkOrderJobLogMapper; import com.aps.job.service.IApsStandardProcessRouteHeaderJobService; import com.aps.system.api.RemoteCoreService; import lombok.extern.slf4j.Slf4j; 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.List; /** * 标准工艺路线HeaderService业务层处理 * * @author hjy * @date 2025-05-09 */ @Slf4j @Service public class ApsStandardProcessRouteHeaderJobServiceImpl implements IApsStandardProcessRouteHeaderJobService { @Autowired private ApsStandardProcessRouteHeaderJobMapper apsStandardProcessRouteHeaderJobMapper; @Autowired private ApsStandardProcessRouteLineJobMapper apsStandardProcessRouteLineJobMapper; @Value("${u9.processRouteUrl}") private String getProcessRouteUrl; @Autowired private ApsWorkOrderJobLogMapper jobLogMapper; @Autowired private RestTemplate restTemplate; @Autowired private RemoteCoreService remoteCoreService; /** * 查询标准工艺路线Header * * @param id 标准工艺路线Header主键 * @return 标准工艺路线Header */ @Override public ApsStandardProcessRouteHeaderJob selectApsStandardProcessRouteHeaderJobById(Long id) { return apsStandardProcessRouteHeaderJobMapper.selectApsStandardProcessRouteHeaderJobById(id); } /** * 查询标准工艺路线Header列表 * * @param apsStandardProcessRouteHeaderJob 标准工艺路线Header * @return 标准工艺路线Header */ @Override public List selectApsStandardProcessRouteHeaderJobList(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob) { return apsStandardProcessRouteHeaderJobMapper.selectApsStandardProcessRouteHeaderJobList(apsStandardProcessRouteHeaderJob); } /** * 新增标准工艺路线Header * * @param apsStandardProcessRouteHeaderJob 标准工艺路线Header * @return 结果 */ @Override public int insertApsStandardProcessRouteHeaderJob(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob) { apsStandardProcessRouteHeaderJob.setCreateTime(DateUtils.getNowDate()); return apsStandardProcessRouteHeaderJobMapper.insertApsStandardProcessRouteHeaderJob(apsStandardProcessRouteHeaderJob); } /** * 修改标准工艺路线Header * * @param apsStandardProcessRouteHeaderJob 标准工艺路线Header * @return 结果 */ @Override public int updateApsStandardProcessRouteHeaderJob(ApsStandardProcessRouteHeaderJob apsStandardProcessRouteHeaderJob) { apsStandardProcessRouteHeaderJob.setUpdateTime(DateUtils.getNowDate()); return apsStandardProcessRouteHeaderJobMapper.updateApsStandardProcessRouteHeaderJob(apsStandardProcessRouteHeaderJob); } /** * 批量删除标准工艺路线Header * * @param ids 需要删除的标准工艺路线Header主键 * @return 结果 */ @Override public int deleteApsStandardProcessRouteHeaderJobByIds(Long[] ids) { return apsStandardProcessRouteHeaderJobMapper.deleteApsStandardProcessRouteHeaderJobByIds(ids); } /** * 删除标准工艺路线Header信息 * * @param id 标准工艺路线Header主键 * @return 结果 */ @Override public int deleteApsStandardProcessRouteHeaderJobById(Long id) { return apsStandardProcessRouteHeaderJobMapper.deleteApsStandardProcessRouteHeaderJobById(id); } @Override public boolean syncProcessRouteData(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList) { JSONObject requestBody = new JSONObject(); ResponseEntity response = null; ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog(); String batchNum = ""; try { // 设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); // 设置请求体 while (true) { batchNum = IdUtils.fastSimpleUUID(); jobLog = new ApsWorkOrderJobLog(); requestBody = new JSONObject(); requestBody.put("PageIndex", pageIndex); requestBody.put("PageSize", pageSize); if(!StringUtils.isEmpty(orgCode)){ requestBody.put("OrgCode", orgCode); } // 创建HttpEntity对象 HttpEntity request = new HttpEntity<>(requestBody.toJSONString(), headers); // 发送POST请求 response = restTemplate.postForEntity(getProcessRouteUrl, request, String.class); JSONObject responseBodyJson = JSONObject.parseObject(response.getBody()); if (response.getStatusCode().is2xxSuccessful() && "200".equals(responseBodyJson.getString("status"))) { JSONArray jsonArray = responseBodyJson.getJSONArray("data"); if (!jsonArray.isEmpty()) { List headerList = new ArrayList<>(); List lineList = new ArrayList<>(); for (Object o : jsonArray) { //o对象中的属性赋值给ApsBomHeaderJob对象 JSONObject routeHeader = (JSONObject) o; JSONArray routeLines = routeHeader.getJSONArray("RoutingLines"); ApsStandardProcessRouteHeaderJob insertRouteHeader = new ApsStandardProcessRouteHeaderJob(); insertRouteHeader.setId(IdUtil.getSnowflakeNextId()); insertRouteHeader.setRouteId(routeHeader.getString("HID")); insertRouteHeader.setItemCode(routeHeader.getString("HItemCode")); insertRouteHeader.setVersion(routeHeader.getString("RoutingVersionCode")); insertRouteHeader.setStartDate(DateUtils.parseDate(routeHeader.getString("HEffectiveDate"))); insertRouteHeader.setEndDate(DateUtils.parseDate(routeHeader.getString("HDisableDate"))); insertRouteHeader.setOrgCode(routeHeader.getString("HOrgCode")); insertRouteHeader.setCreateBy(batchNum); headerList.add(insertRouteHeader); for(Object line : routeLines){ JSONObject lineJson = (JSONObject) line; ApsStandardProcessRouteLineJob routeLine = new ApsStandardProcessRouteLineJob(); routeLine.setId(IdUtil.getSnowflakeNextId()); routeLine.setRouteId(lineJson.getString("HID")); routeLine.setRouteNum(lineJson.getString("Sequence")); routeLine.setRouteName(lineJson.getString("WorkCenterName")); routeLine.setRouteCode(lineJson.getString("WorkCenterCode")); routeLine.setStartDate(DateUtils.parseDate(lineJson.getString("LEffectiveDate"))); routeLine.setEndDate(DateUtils.parseDate(lineJson.getString("LDisableDate"))); routeLine.setOrgCode(lineJson.getString("LOrgCode")); routeLine.setStandardTime(lineJson.getBigDecimal("StandardTime")); routeLine.setCreateBy(batchNum); lineList.add(routeLine); } } List temp1 = new ArrayList<>(); for(int i=0;i=20){ apsStandardProcessRouteHeaderJobMapper.insertProcessRouteHeaderBatch(temp1); temp1 = new ArrayList<>(); } } List temp2 = new ArrayList<>(); for(int j=0;j=20){ apsStandardProcessRouteLineJobMapper.insertProcessRouteLineBatch(temp2); temp2 = new ArrayList<>(); } } jobLog.setRequestData(requestBody.toJSONString()); jobLog.setPageNum(Long.valueOf(pageIndex)); jobLog.setPageCount(Long.valueOf(pageSize)); jobLog.setCreateTime(DateUtils.getNowDate()); jobLog.setBizType("processRoute"); jobLog.setResult("header:"+headerList.size() + " line:"+lineList.size()); jobLog.setCreateBy(batchNum); jobLogMapper.insertApsWorkOrderJobLog(jobLog); log.info("标准工艺路线同步:"+ JSON.toJSONString(jobLog)); pageIndex++; }else{ break; } }else{ jobLog.setRequestData(requestBody.toJSONString()); jobLog.setResponseData(response.getBody()); jobLog.setPageNum(Long.valueOf(pageIndex)); jobLog.setPageCount(Long.valueOf(pageSize)); jobLog.setCreateTime(DateUtils.getNowDate()); jobLog.setBizType("processRoute"); jobLog.setResult("error"); jobLog.setCreateBy(batchNum); log.info("标准工艺路线同步:"+ JSON.toJSONString(jobLog)); jobLogMapper.insertApsWorkOrderJobLog(jobLog); break; } } }catch (Exception e){ e.printStackTrace(); jobLog.setRequestData(requestBody.toJSONString()); jobLog.setResponseData(response.getBody()); jobLog.setPageNum(Long.valueOf(pageIndex)); jobLog.setPageCount(Long.valueOf(pageSize)); jobLog.setCreateTime(DateUtils.getNowDate()); jobLog.setBizType("processRoute"); jobLog.setResult("error"); jobLog.setCreateBy(batchNum); log.info("标准工艺路线同步:"+ JSON.toJSONString(jobLog)); jobLogMapper.insertApsWorkOrderJobLog(jobLog); return false; } return true; } @Transactional(rollbackFor = Exception.class) @Override public boolean syncProcessRouteDataJob(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList) { try { apsStandardProcessRouteHeaderJobMapper.deleteProcessRouteHeaderJob(); apsStandardProcessRouteLineJobMapper.deleteProcessRouteLineJob(); boolean res = syncProcessRouteData(pageIndex, pageSize, orgCode, itemCodeList); if(!res){ return false; } remoteCoreService.setProcessRouteDataToRedis(SecurityConstants.INNER); apsStandardProcessRouteHeaderJobMapper.deleteProcessRouteHeader(); apsStandardProcessRouteLineJobMapper.deleteProcessRouteLine(); apsStandardProcessRouteHeaderJobMapper.insertIntoProcessRouteHeader(); apsStandardProcessRouteLineJobMapper.insertIntoProcessRouteLine(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } return true; } }