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<ApsMaterialManagementJob> 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<String> 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<String> 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<ApsMaterialManagementJob> 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<ApsMaterialManagementJob> temp = new ArrayList<>();
|
for(int i=0;i<materialList.size();i++){
|
temp.add(materialList.get(i));
|
if(temp.size()>=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);
|
}
|
}
|
}
|