Browse Source

物料件同步

master
DouDou 1 year ago
parent
commit
2a3b0a3b47
  1. 40
      src/main/java/com/spring/modules/part/dao/PartCatalogDao.java
  2. 55
      src/main/java/com/spring/modules/part/dao/impl/PartCatalogDaoImpl.java
  3. 81
      src/main/java/com/spring/modules/part/entity/IfsPartCatalog.java
  4. 18
      src/main/java/com/spring/modules/part/service/PartService.java
  5. 63
      src/main/java/com/spring/modules/part/service/impl/PartServiceImpl.java
  6. 26
      src/main/java/com/spring/modules/part/task/PartRelatedTask.java
  7. 1
      src/main/resources/application-dev.yml

40
src/main/java/com/spring/modules/part/dao/PartCatalogDao.java

@ -0,0 +1,40 @@
package com.spring.modules.part.dao;
import com.spring.modules.part.entity.IfsPartCatalog;
import java.util.List;
/**
* @description: 物料件的dao
* @author LR
* @date 2024/9/23 10:21
* @version 1.0
*/
public interface PartCatalogDao {
/**
* @description: 查询最大的版本号
* @author LR
* @date 2024/9/23 10:27
* @version 1.0
*/
String getMaxIfsRowVersion();
/**
* @description: 清空缓存表
* @author LR
* @date 2024/9/23 10:39
* @version 1.0
*/
void truncatePartCatalogCacheTable();
/**
* @description: 批量保存到数据库
* @author LR
* @date 2024/9/23 10:36
* @version 1.0
*/
void batchInsertPartCatalogs(List<IfsPartCatalog> ifsPartCatalogs);
}

55
src/main/java/com/spring/modules/part/dao/impl/PartCatalogDaoImpl.java

@ -0,0 +1,55 @@
package com.spring.modules.part.dao.impl;
import com.spring.modules.part.dao.PartCatalogDao;
import com.spring.modules.part.entity.IfsPartCatalog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @description: 物料件的dao实现
* @author LR
* @date 2024/9/23 10:22
* @version 1.0
*/
@Repository
public class PartCatalogDaoImpl implements PartCatalogDao {
@Autowired
private NamedParameterJdbcTemplate parameterJdbcTemplate;
@Override
public String getMaxIfsRowVersion() {
StringBuilder sql = new StringBuilder();
Map<String, Object> paramMap = new HashMap<String, Object>();
sql.append("SELECT MAX(ifs_row_version) ifsRowVersion FROM part_catalog");
//查询结果集
List<String> resultList = parameterJdbcTemplate.query(sql.toString(), paramMap, (rs, rowNum) -> rs.getString("ifsRowVersion"));
//判断结果集
if(resultList.size() > 0) {
return resultList.get(0);
}
return null;
}
@Override
public void truncatePartCatalogCacheTable() {
StringBuilder sql = new StringBuilder();
Map<String, Object> paramMap = new HashMap<String, Object>();
sql.append("TRUNCATE TABLE part_catalog_cache");
parameterJdbcTemplate.update(sql.toString(), paramMap);
}
@Override
public void batchInsertPartCatalogs(List<IfsPartCatalog> ifsPartCatalogs) {
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO part_catalog_cache(part_no, part_desc, ifs_row_id, ifs_row_version, status)");
sql.append(" VALUES(:partNo, :partDesc, :ifsRowId, :ifsRowVersion, :status)");
parameterJdbcTemplate.batchUpdate(sql.toString(), SqlParameterSourceUtils.createBatch(ifsPartCatalogs.toArray()));
}
}

81
src/main/java/com/spring/modules/part/entity/IfsPartCatalog.java

@ -0,0 +1,81 @@
package com.spring.modules.part.entity;
import java.util.Date;
/**
*
* @ClassName: PartIfsCatalog
* @Description:物料目录
* @author: LR
* @date: 2023年12月22日 上午10:14:06
* @Copyright:
*/
public class IfsPartCatalog {
private int id;//
private String contract;//
private String partNo;//
private String partDesc;//
private String ifsRowId;
private String ifsRowVersion;
private int status;// 状态
public IfsPartCatalog() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContract() {
return contract;
}
public void setContract(String contract) {
this.contract = contract;
}
public String getPartNo() {
return partNo;
}
public void setPartNo(String partNo) {
this.partNo = partNo;
}
public String getPartDesc() {
return partDesc;
}
public void setPartDesc(String partDesc) {
this.partDesc = partDesc;
}
public String getIfsRowId() {
return ifsRowId;
}
public void setIfsRowId(String ifsRowId) {
this.ifsRowId = ifsRowId;
}
public String getIfsRowVersion() {
return ifsRowVersion;
}
public void setIfsRowVersion(String ifsRowVersion) {
this.ifsRowVersion = ifsRowVersion;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}

18
src/main/java/com/spring/modules/part/service/PartService.java

@ -0,0 +1,18 @@
package com.spring.modules.part.service;
/**
* @description: 物料件接口
* @author LR
* @date 2024/9/23 10:13
* @version 1.0
*/
public interface PartService {
/**
* @description: 刷新物料件的方法
* @author LR
* @date 2024/9/23 10:15
* @version 1.0
*/
void syncPartCatalogToPlm();
}

63
src/main/java/com/spring/modules/part/service/impl/PartServiceImpl.java

@ -0,0 +1,63 @@
package com.spring.modules.part.service.impl;
import com.alibaba.fastjson.JSON;
import com.spring.modules.base.utils.HttpClientUtil;
import com.spring.modules.base.utils.ResponseData;
import com.spring.modules.part.dao.PartCatalogDao;
import com.spring.modules.part.entity.IfsPartCatalog;
import com.spring.modules.part.service.PartService;
import com.spring.modules.report.dao.ProcedureDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class PartServiceImpl implements PartService {
@Autowired
private PartCatalogDao partCatalogDao;
@Autowired
private ProcedureDao procedureDao;
@Value("${ifs-api.api-url}")
private String apiUrl;
@Override
public void syncPartCatalogToPlm() {
//查询最大的版本号
String ifsRowVersion = partCatalogDao.getMaxIfsRowVersion();
IfsPartCatalog searchData = new IfsPartCatalog();
searchData.setIfsRowVersion(ifsRowVersion);
// 调用接口获得IFS数据
String getIfsLocationsURL = apiUrl + "/base/ifs/getIfsPartCatalogs";
ResponseData ifsResponse = HttpClientUtil.doPostByRawWithPLM(getIfsLocationsURL, searchData);
if (!"200".equals(ifsResponse.getCode())) {
throw new RuntimeException("同步物料件异常:" + ifsResponse.getMsg());
}
String ifsObj = String.valueOf(ifsResponse.getObj());
List<IfsPartCatalog> ifsPartCatalogs = JSON.parseArray(ifsObj, IfsPartCatalog.class);
//清空缓存表
partCatalogDao.truncatePartCatalogCacheTable();
//数据批量保存到缓存的数据表
partCatalogDao.batchInsertPartCatalogs(ifsPartCatalogs);
//调用存储过程 刷新物料件的数据
this.refreshPlmPartCatalogs();
}
/**
* @description: 调用存储过程刷新ifs的物料件的数据
* @author LR
* @date 2024/9/23 10:46
* @version 1.0
*/
public void refreshPlmPartCatalogs() {
List<Object> params = new ArrayList<>();
//调用存储过程
procedureDao.execProduceData("refreshPlmPartCatalogs", params);
}
}

26
src/main/java/com/spring/modules/part/task/PartRelatedTask.java

@ -1,11 +1,15 @@
package com.spring.modules.part.task;
import com.spring.common.utils.DateUtils;
import com.spring.modules.base.vo.PersonnelLevelVo;
import com.spring.modules.part.service.PartService;
import com.spring.modules.part.service.RoutingManagementService;
import com.spring.modules.part.service.impl.RoutingManagementServiceImpl;
import com.spring.modules.part.vo.LocationInformationVo;
import com.spring.modules.part.vo.WorkCenterVo;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@ -21,9 +25,12 @@ public class PartRelatedTask {
@Value("${use-site}")
private String useSite;
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private RoutingManagementService routingManagementService;
@Autowired
private PartService partService;
@Scheduled(cron = "${task.data.syncDataToPLM}")
public void executeDeviceCollect() {
@ -42,6 +49,25 @@ public class PartRelatedTask {
routingManagementService.syncWorkCenterToPLM(workCenterVo);
}
/**
* @description: 刷新物料件的方法
* @author LR
* @date 2024/9/23 10:15
* @version 1.0
*/
@Scheduled(cron = "${task.data.sync_part_catalog_to_plm}")
public void syncPartCatalogToPlm(){
try {
//获取处理的文件数
logger.info("同步物料件的操作 的开始时间:"+ DateUtils.getStringNow());
partService.syncPartCatalogToPlm();
logger.info("同步物料件的操作 的结束时间:"+DateUtils.getStringNow());
} catch (Exception e) {
logger.error("异常时间:"+DateUtils.getStringNow()+",同步物料件的操作 ,错误信息为:"+e.getMessage());
}
}
private static String convertToSQLString(String input) {
if (input == null || input.isEmpty()) {
return "()";

1
src/main/resources/application-dev.yml

@ -79,6 +79,7 @@ task:
# initGather: * * * 31 2 ? # 每分钟执行
# syncDataToPLM: 0 0/30 * * * ? # 每30分钟执行
syncDataToPLM: 0 0 0 29 2 ? # 没4年执行
sync_part_catalog_to_plm: 0 */1 * * * ? # 每1分钟执行
flag: false
# 单点登录

Loading…
Cancel
Save