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