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.utils.DateUtils; import com.aps.common.core.utils.StringUtils; import com.aps.common.core.utils.uuid.IdUtils; import com.aps.job.domain.ApsMaterialStorageManagementJob; import com.aps.job.domain.ApsWorkOrderJobLog; import com.aps.job.mapper.ApsMaterialStorageManagementJobMapper; import com.aps.job.mapper.ApsWorkOrderJobLogMapper; import com.aps.job.service.IApsMaterialStorageManagementJobService; 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-08 */ @Service @Slf4j public class ApsMaterialStorageManagementJobServiceImpl implements IApsMaterialStorageManagementJobService { @Autowired private ApsMaterialStorageManagementJobMapper apsMaterialStorageManagementJobMapper; @Value("${u9.materialStorageUrl}") private String getMaterialStorageUrl; @Autowired private ApsWorkOrderJobLogMapper jobLogMapper; @Autowired private RestTemplate restTemplate; /** * 查询物料库存管理 * * @param id 物料库存管理主键 * @return 物料库存管理 */ @Override public ApsMaterialStorageManagementJob selectApsMaterialStorageManagementJobById(Long id) { return apsMaterialStorageManagementJobMapper.selectApsMaterialStorageManagementJobById(id); } /** * 查询物料库存管理列表 * * @param apsMaterialStorageManagementJob 物料库存管理 * @return 物料库存管理 */ @Override public List selectApsMaterialStorageManagementJobList(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob) { return apsMaterialStorageManagementJobMapper.selectApsMaterialStorageManagementJobList(apsMaterialStorageManagementJob); } /** * 新增物料库存管理 * * @param apsMaterialStorageManagementJob 物料库存管理 * @return 结果 */ @Override public int insertApsMaterialStorageManagementJob(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob) { apsMaterialStorageManagementJob.setCreateTime(DateUtils.getNowDate()); return apsMaterialStorageManagementJobMapper.insertApsMaterialStorageManagementJob(apsMaterialStorageManagementJob); } /** * 修改物料库存管理 * * @param apsMaterialStorageManagementJob 物料库存管理 * @return 结果 */ @Override public int updateApsMaterialStorageManagementJob(ApsMaterialStorageManagementJob apsMaterialStorageManagementJob) { apsMaterialStorageManagementJob.setUpdateTime(DateUtils.getNowDate()); return apsMaterialStorageManagementJobMapper.updateApsMaterialStorageManagementJob(apsMaterialStorageManagementJob); } /** * 批量删除物料库存管理 * * @param ids 需要删除的物料库存管理主键 * @return 结果 */ @Override public int deleteApsMaterialStorageManagementJobByIds(Long[] ids) { return apsMaterialStorageManagementJobMapper.deleteApsMaterialStorageManagementJobByIds(ids); } /** * 删除物料库存管理信息 * * @param id 物料库存管理主键 * @return 结果 */ @Override public int deleteApsMaterialStorageManagementJobById(Long id) { return apsMaterialStorageManagementJobMapper.deleteApsMaterialStorageManagementJobById(id); } @Override public boolean syncApsMaterialStorageData(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(getMaterialStorageUrl, 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 storageList = new ArrayList<>(); for (Object o : jsonArray) { JSONObject storage = (JSONObject) o; ApsMaterialStorageManagementJob materialStorage = new ApsMaterialStorageManagementJob(); materialStorage.setId(IdUtil.getSnowflakeNextId()); materialStorage.setItemNumber(storage.getString("ItemCode")); materialStorage.setNum(storage.getBigDecimal("StoreQty")); materialStorage.setApplicableFactories(storage.getString("OrgCode")); materialStorage.setCreateBy(batchNum); storageList.add(materialStorage); } List temp = new ArrayList<>(); for(int i=0;i=20){ apsMaterialStorageManagementJobMapper.insertApsMaterialStorageBatch(temp); temp = new ArrayList<>(); } } jobLog.setRequestData(requestBody.toJSONString()); jobLog.setPageNum(Long.valueOf(pageIndex)); jobLog.setPageCount(Long.valueOf(pageSize)); jobLog.setCreateTime(DateUtils.getNowDate()); jobLog.setBizType("storage"); jobLog.setResult("storage:"+storageList.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 syncApsMaterialStorageDataJob(int pageIndex, int pageSize, String orgCode, String itemCodeList) { try { log.info("开始同步库存数据"); log.info("delete ApsMaterialStorageJob"); apsMaterialStorageManagementJobMapper.deleteApsMaterialStorageJob(); log.info("sync ApsMaterialStorageData"); boolean res = syncApsMaterialStorageData(pageIndex, pageSize, orgCode, itemCodeList); if(!res){ return false; } log.info("delete ApsMaterialStorage"); apsMaterialStorageManagementJobMapper.deleteApsMaterialStorage(); log.info("insertInto ApsMaterialStorage "); apsMaterialStorageManagementJobMapper.insertIntoApsMaterialStorage(); return true; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } }