package com.aps.job.service.impl;
|
|
import cn.hutool.core.util.IdUtil;
|
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.job.domain.ApsBomHeaderJob;
|
import com.aps.job.domain.ApsBomLineJob;
|
import com.aps.job.domain.ApsWorkOrderJobLog;
|
import com.aps.job.mapper.ApsBomHeaderJobMapper;
|
import com.aps.job.mapper.ApsBomLineJobMapper;
|
import com.aps.job.mapper.ApsWorkOrderJobLogMapper;
|
import com.aps.job.service.IApsBomHeaderJobService;
|
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;
|
|
/**
|
* BOM Header 数据管理Service业务层处理
|
*
|
* @author hjy
|
* @date 2025-05-08
|
*/
|
@Service
|
public class ApsBomHeaderJobServiceImpl implements IApsBomHeaderJobService
|
{
|
@Autowired
|
private ApsBomHeaderJobMapper apsBomHeaderJobMapper;
|
|
@Autowired
|
private ApsBomLineJobMapper apsBomLineJobMapper;
|
|
@Value("${u9.bomJobUrl}")
|
private String getBomUrl;
|
|
@Autowired
|
private ApsWorkOrderJobLogMapper jobLogMapper;
|
|
@Autowired
|
private RestTemplate restTemplate;
|
|
/**
|
* 查询BOM Header 数据管理
|
*
|
* @param id BOM Header 数据管理主键
|
* @return BOM Header 数据管理
|
*/
|
@Override
|
public ApsBomHeaderJob selectApsBomHeaderJobById(Long id)
|
{
|
return apsBomHeaderJobMapper.selectApsBomHeaderJobById(id);
|
}
|
|
/**
|
* 查询BOM Header 数据管理列表
|
*
|
* @param apsBomHeaderJob BOM Header 数据管理
|
* @return BOM Header 数据管理
|
*/
|
@Override
|
public List<ApsBomHeaderJob> selectApsBomHeaderJobList(ApsBomHeaderJob apsBomHeaderJob)
|
{
|
return apsBomHeaderJobMapper.selectApsBomHeaderJobList(apsBomHeaderJob);
|
}
|
|
/**
|
* 新增BOM Header 数据管理
|
*
|
* @param apsBomHeaderJob BOM Header 数据管理
|
* @return 结果
|
*/
|
@Override
|
public int insertApsBomHeaderJob(ApsBomHeaderJob apsBomHeaderJob)
|
{
|
apsBomHeaderJob.setCreateTime(DateUtils.getNowDate());
|
return apsBomHeaderJobMapper.insertApsBomHeaderJob(apsBomHeaderJob);
|
}
|
|
/**
|
* 修改BOM Header 数据管理
|
*
|
* @param apsBomHeaderJob BOM Header 数据管理
|
* @return 结果
|
*/
|
@Override
|
public int updateApsBomHeaderJob(ApsBomHeaderJob apsBomHeaderJob)
|
{
|
apsBomHeaderJob.setUpdateTime(DateUtils.getNowDate());
|
return apsBomHeaderJobMapper.updateApsBomHeaderJob(apsBomHeaderJob);
|
}
|
|
/**
|
* 批量删除BOM Header 数据管理
|
*
|
* @param ids 需要删除的BOM Header 数据管理主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteApsBomHeaderJobByIds(Long[] ids)
|
{
|
return apsBomHeaderJobMapper.deleteApsBomHeaderJobByIds(ids);
|
}
|
|
/**
|
* 删除BOM Header 数据管理信息
|
*
|
* @param id BOM Header 数据管理主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteApsBomHeaderJobById(Long id)
|
{
|
return apsBomHeaderJobMapper.deleteApsBomHeaderJobById(id);
|
}
|
|
@Override
|
public boolean syncBomData(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList) {
|
try {
|
// 设置请求头
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
// 设置请求体
|
while (true) {
|
ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog();
|
JSONObject 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请求
|
ResponseEntity<String> response = restTemplate.postForEntity(getBomUrl, 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<ApsBomHeaderJob> headerList = new ArrayList<>();
|
List<ApsBomLineJob> lineList = new ArrayList<>();
|
for (Object o : jsonArray) {
|
//o对象中的属性赋值给ApsBomHeaderJob对象
|
JSONObject bomHeader = (JSONObject) o;
|
JSONArray bomLines = bomHeader.getJSONArray("BOMLines");
|
ApsBomHeaderJob insertBomHeader = new ApsBomHeaderJob();
|
insertBomHeader.setId(IdUtil.getSnowflakeNextId());
|
insertBomHeader.setBomHeaderId(bomHeader.getString("HID"));
|
insertBomHeader.setItemCode(bomHeader.getString("HItemCode"));
|
insertBomHeader.setItemName(bomHeader.getString("HItemName"));
|
insertBomHeader.setStartDate(DateUtils.parseDate(bomHeader.getString("HEffectiveDate")));
|
insertBomHeader.setEndDate(DateUtils.parseDate(bomHeader.getString("HDisableDate")));
|
insertBomHeader.setOrgCode(bomHeader.getString("HOrgName").contains("沈阳")?"FORTUNE":bomHeader.getString("HOrgName").contains("南通")?"FORTUNA":bomHeader.getString("HOrgName").contains("北京")?"FORTUBE":bomHeader.getString("HOrgName"));
|
headerList.add(insertBomHeader);
|
for(Object line : bomLines){
|
JSONObject lineJson = (JSONObject) line;
|
ApsBomLineJob bomLine = new ApsBomLineJob();
|
bomLine.setId(IdUtil.getSnowflakeNextId());
|
bomLine.setBomHeaderId(lineJson.getString("HID"));
|
bomLine.setBomLineId(lineJson.getString("LID"));
|
bomLine.setItemCode(lineJson.getString("LItemCode"));
|
bomLine.setItemName(lineJson.getString("LItemName"));
|
bomLine.setNum(lineJson.getBigDecimal("UsageQty"));
|
bomLine.setStartDate(DateUtils.parseDate(lineJson.getString("LEffectiveDate")));
|
bomLine.setEndDate(DateUtils.parseDate(lineJson.getString("LDisableDate")));
|
bomLine.setOrgCode(lineJson.getString("LOrgName").contains("沈阳")?"FORTUNE":lineJson.getString("LOrgName").contains("南通")?"FORTUNA":lineJson.getString("LOrgName").contains("北京")?"FORTUBE":lineJson.getString("LOrgName"));
|
lineList.add(bomLine);
|
}
|
}
|
List<ApsBomHeaderJob> temp1 = new ArrayList<>();
|
for(int i=0;i<headerList.size();i++){
|
temp1.add(headerList.get(i));
|
if(temp1.size()>=20){
|
apsBomHeaderJobMapper.insertApsBomHeaderJobBatch(temp1);
|
temp1 = new ArrayList<>();
|
}
|
}
|
List<ApsBomLineJob> temp2 = new ArrayList<>();
|
for(int j=0;j<lineList.size();j++){
|
temp2.add(lineList.get(j));
|
if(temp2.size()>=20){
|
apsBomLineJobMapper.insertApsBomLineJobBatch(temp2);
|
temp2 = new ArrayList<>();
|
}
|
}
|
jobLog.setRequestData(requestBody.toJSONString());
|
jobLog.setPageNum(Long.valueOf(pageIndex));
|
jobLog.setPageCount(Long.valueOf(pageSize));
|
jobLog.setCreateTime(DateUtils.getNowDate());
|
jobLog.setBizType("bom");
|
jobLog.setResult("header:"+headerList.size() + " line:"+lineList.size());
|
jobLogMapper.insertApsWorkOrderJobLog(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("bom");
|
jobLog.setResult("error");
|
jobLogMapper.insertApsWorkOrderJobLog(jobLog);
|
break;
|
}
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
return false;
|
}
|
return true;
|
}
|
|
/**
|
* 全量同步BOM数据定时任务
|
* @param pageIndex
|
* @param pageSize
|
* @param orgCode
|
* @param itemCodeList
|
* @return
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public boolean syncBomDataJob(Integer pageIndex, Integer pageSize, String orgCode, String itemCodeList){
|
try {
|
apsBomHeaderJobMapper.deleteApsBomHeaderJob();
|
apsBomLineJobMapper.deleteApsBomLineJob();
|
boolean res = syncBomData(pageIndex, pageSize, orgCode, itemCodeList);
|
if(!res){
|
return false;
|
}
|
apsBomHeaderJobMapper.deleteApsBomHeader();
|
apsBomLineJobMapper.deleteApsBomLine();
|
apsBomHeaderJobMapper.insertIntoApsBomHeader();
|
apsBomLineJobMapper.insertIntoApsBomLine();
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException(e);
|
}
|
return true;
|
}
|
}
|