package com.aps.job.service.impl; import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson2.JSON; 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.ApsMaterialManagementJob; import com.aps.job.domain.ApsWorkOrderJobLog; import com.aps.job.mapper.ApsMaterialManagementJobMapper; import com.aps.job.mapper.ApsWorkOrderJobLogMapper; import com.aps.job.service.IApsMaterialManagementJobService; 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; /** * 物料管理Service业务层处理 * * @author hjy * @date 2025-05-10 */ @Service @Slf4j public class ApsMaterialManagementJobServiceImpl implements IApsMaterialManagementJobService { @Autowired private ApsMaterialManagementJobMapper apsMaterialManagementJobMapper; @Value("${u9.materialUrl}") private String getMaterialUrl; @Autowired private ApsWorkOrderJobLogMapper jobLogMapper; @Autowired private RestTemplate restTemplate; /** * 查询物料管理 * * @param id 物料管理主键 * @return 物料管理 */ @Override public ApsMaterialManagementJob selectApsMaterialManagementJobById(String id) { return apsMaterialManagementJobMapper.selectApsMaterialManagementJobById(id); } /** * 查询物料管理列表 * * @param apsMaterialManagementJob 物料管理 * @return 物料管理 */ @Override public List selectApsMaterialManagementJobList(ApsMaterialManagementJob apsMaterialManagementJob) { return apsMaterialManagementJobMapper.selectApsMaterialManagementJobList(apsMaterialManagementJob); } /** * 新增物料管理 * * @param apsMaterialManagementJob 物料管理 * @return 结果 */ @Override public int insertApsMaterialManagementJob(ApsMaterialManagementJob apsMaterialManagementJob) { apsMaterialManagementJob.setCreateTime(DateUtils.getNowDate()); return apsMaterialManagementJobMapper.insertApsMaterialManagementJob(apsMaterialManagementJob); } /** * 修改物料管理 * * @param apsMaterialManagementJob 物料管理 * @return 结果 */ @Override public int updateApsMaterialManagementJob(ApsMaterialManagementJob apsMaterialManagementJob) { apsMaterialManagementJob.setUpdateTime(DateUtils.getNowDate()); return apsMaterialManagementJobMapper.updateApsMaterialManagementJob(apsMaterialManagementJob); } /** * 批量删除物料管理 * * @param ids 需要删除的物料管理主键 * @return 结果 */ @Override public int deleteApsMaterialManagementJobByIds(String[] ids) { return apsMaterialManagementJobMapper.deleteApsMaterialManagementJobByIds(ids); } /** * 删除物料管理信息 * * @param id 物料管理主键 * @return 结果 */ @Override public int deleteApsMaterialManagementJobById(String id) { return apsMaterialManagementJobMapper.deleteApsMaterialManagementJobById(id); } @Override public boolean syncApsMaterialData(int pageIndex, int 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(getMaterialUrl, 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 materialList = new ArrayList<>(); for (Object o : jsonArray) { JSONObject materialObj = (JSONObject) o; ApsMaterialManagementJob material = new ApsMaterialManagementJob(); material.setId(IdUtil.getSnowflakeNextId()); material.setItemNumber(materialObj.getString("ItemCode")); material.setMaterialDescription(materialObj.getString("ItemName")); material.setMaterialStatus(materialObj.getString("Status")); material.setMaterialType(materialObj.getString("ItemFormAttribute")); material.setDrawingNo(materialObj.getString("ItemFigure")); material.setVersionNumber(materialObj.getString("ItemFigureVersion")); material.setAdvanceProductionDays(materialObj.getBigDecimal("FixedLT")); material.setSplitBatch(materialObj.getInteger("CFPL")); material.setApplicableFactories(materialObj.getString("OrgCode")); material.setEffectiveDate(DateUtils.parseDate(materialObj.getString("EffectiveDate"))); material.setExpiringDate(DateUtils.parseDate(materialObj.getString("DisableDate"))); material.setCreateBy(batchNum); materialList.add(material); } List temp = new ArrayList<>(); for(int i=0;i=20){ apsMaterialManagementJobMapper.insertApsMaterialBatch(temp); temp = new ArrayList<>(); } } jobLog.setRequestData(requestBody.toJSONString()); jobLog.setPageNum(Long.valueOf(pageIndex)); jobLog.setPageCount(Long.valueOf(pageSize)); jobLog.setCreateTime(DateUtils.getNowDate()); jobLog.setBizType("material"); jobLog.setResult("material:"+materialList.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("storage"); jobLog.setResult("error"); jobLog.setCreateBy(batchNum); jobLogMapper.insertApsWorkOrderJobLog(jobLog); log.info("物料同步:"+ JSON.toJSONString(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("storage"); jobLog.setResult("error"); jobLog.setCreateBy(batchNum); jobLogMapper.insertApsWorkOrderJobLog(jobLog); log.info("物料同步:"+ JSON.toJSONString(jobLog)); return false; } return true; } @Transactional(rollbackFor = Exception.class) @Override public boolean syncApsMaterialDataJob(int pageIndex, int pageSize, String orgCode, String itemCodeList) { try { log.info("开始清除物料中间表aps_material_management_job"); apsMaterialManagementJobMapper.deleteApsMaterialJob(); log.info("开始同步物料信息"); boolean res = syncApsMaterialData(pageIndex, pageSize, orgCode, itemCodeList); if(!res){ return false; } log.info("开始清除物料表 aps_material_management"); apsMaterialManagementJobMapper.deleteApsMaterial(); log.info("插入数据到 aps_material_management"); apsMaterialManagementJobMapper.insertIntoApsMaterialManagement(); return true; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } }