diff --git a/src/main/java/com/spring/modules/part/dao/PartCatalogDao.java b/src/main/java/com/spring/modules/part/dao/PartCatalogDao.java new file mode 100644 index 00000000..06ca76a0 --- /dev/null +++ b/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 ifsPartCatalogs); + + +} diff --git a/src/main/java/com/spring/modules/part/dao/impl/PartCatalogDaoImpl.java b/src/main/java/com/spring/modules/part/dao/impl/PartCatalogDaoImpl.java new file mode 100644 index 00000000..3c13b544 --- /dev/null +++ b/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 paramMap = new HashMap(); + sql.append("SELECT MAX(ifs_row_version) ifsRowVersion FROM part_catalog"); + //查询结果集 + List 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 paramMap = new HashMap(); + sql.append("TRUNCATE TABLE part_catalog_cache"); + parameterJdbcTemplate.update(sql.toString(), paramMap); + } + + @Override + public void batchInsertPartCatalogs(List 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())); + } +} diff --git a/src/main/java/com/spring/modules/part/entity/IfsPartCatalog.java b/src/main/java/com/spring/modules/part/entity/IfsPartCatalog.java new file mode 100644 index 00000000..cac542ad --- /dev/null +++ b/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; + } +} diff --git a/src/main/java/com/spring/modules/part/service/PartService.java b/src/main/java/com/spring/modules/part/service/PartService.java new file mode 100644 index 00000000..4092dc58 --- /dev/null +++ b/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(); +} diff --git a/src/main/java/com/spring/modules/part/service/impl/PartServiceImpl.java b/src/main/java/com/spring/modules/part/service/impl/PartServiceImpl.java new file mode 100644 index 00000000..16393d3d --- /dev/null +++ b/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 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 params = new ArrayList<>(); + //调用存储过程 + procedureDao.execProduceData("refreshPlmPartCatalogs", params); + } +} diff --git a/src/main/java/com/spring/modules/part/task/PartRelatedTask.java b/src/main/java/com/spring/modules/part/task/PartRelatedTask.java index e1753202..bcc49b96 100644 --- a/src/main/java/com/spring/modules/part/task/PartRelatedTask.java +++ b/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 "()"; diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index cde41abb..992e7d32 100644 --- a/src/main/resources/application-dev.yml +++ b/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 # 单点登录