|
@@ -1,12 +1,10 @@
|
|
|
package cn.ezhizao.project.business.controller;
|
|
|
|
|
|
+import cn.ezhizao.common.utils.uuid.SnowflakeIdWorker;
|
|
|
import cn.ezhizao.framework.web.controller.BaseController;
|
|
|
import cn.ezhizao.framework.web.domain.AjaxResult;
|
|
|
import cn.ezhizao.project.business.domain.*;
|
|
|
-import cn.ezhizao.project.business.service.IBizProductService;
|
|
|
-import cn.ezhizao.project.business.service.IBizPullP2TimeService;
|
|
|
-import cn.ezhizao.project.business.service.IBizShaftCategoryService;
|
|
|
-import cn.ezhizao.project.business.service.IInc10100Service;
|
|
|
+import cn.ezhizao.project.business.service.*;
|
|
|
import cn.ezhizao.project.system.domain.SysDictData;
|
|
|
import cn.ezhizao.project.system.domain.SysUser;
|
|
|
import cn.ezhizao.project.system.service.ISysDeptService;
|
|
@@ -14,11 +12,13 @@ import cn.ezhizao.project.system.service.ISysDictDataService;
|
|
|
import cn.ezhizao.project.system.service.ISysUserService;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import org.springframework.security.access.prepost.PreAuthorize;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import javax.xml.ws.FaultAction;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
@@ -50,6 +50,21 @@ public class Inc10100Controller extends BaseController {
|
|
|
|
|
|
@Resource
|
|
|
private IBizShaftCategoryService bizShaftCategoryService;
|
|
|
+ @Resource
|
|
|
+ private ISfc10300Service sfc10300Service;
|
|
|
+ @Resource
|
|
|
+ private IBizProcessService processService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private ISfc10401Service sfc10401Service;
|
|
|
+ @Resource
|
|
|
+ private ISfc10400Service sfc10400Service;
|
|
|
+ @Resource
|
|
|
+ private IBizTechnologicalProcessDetailService technologicalProcessDetailService;
|
|
|
+ @Resource
|
|
|
+ private IBizTechnologicalProcessService technologicalProcessService;
|
|
|
+ @Resource
|
|
|
+ private SnowflakeIdWorker snowflakeIdWorker;
|
|
|
|
|
|
/**
|
|
|
* 获取inc10100详细信息
|
|
@@ -58,6 +73,9 @@ public class Inc10100Controller extends BaseController {
|
|
|
@PreAuthorize("@ss.hasPermi('business:product:sync')")
|
|
|
@GetMapping(value = "/getP2Product")
|
|
|
public AjaxResult getP2Product() {
|
|
|
+ boolean result;
|
|
|
+// result = true;
|
|
|
+ result = getP2Process();
|
|
|
// 先从新系统中的 biz_pull_p2_time 中获取最新数据
|
|
|
BizPullP2Time pullDetail = new BizPullP2Time();
|
|
|
pullDetail.setType("product");
|
|
@@ -214,9 +232,206 @@ public class Inc10100Controller extends BaseController {
|
|
|
bizPullP2Time.setType("product");
|
|
|
// 保存数据
|
|
|
pullP2TimeService.saveOrUpdate(bizPullP2Time);
|
|
|
- return toAjax(true);
|
|
|
+ result = result && pullP2TimeService.saveOrUpdate(bizPullP2Time);
|
|
|
+ } else {
|
|
|
+ result = false;
|
|
|
+ }
|
|
|
+ // 先从新系统中的 biz_pull_p2_time 中获取最新数据
|
|
|
+ BizPullP2Time pullProcess = new BizPullP2Time();
|
|
|
+ pullProcess.setType("productProcess");
|
|
|
+ List<BizPullP2Time> pullProcesses = pullP2TimeService.getList(pullProcess);
|
|
|
+ /*
|
|
|
+ * 如果 pullDetails 不为空,则获取最后一条数据,做为查询P2的生产计划明细的条件。
|
|
|
+ * 这里有个细节,每次从P2中获取生产计划明细,不能都从头开始,否则随着数据量增加,将会重复拉取大量的数据,性能很差
|
|
|
+ * 拉取数据后,存入新系统中,每次拉取前,将新系统中 biz_pull_p2_time 的最后一条数据记录的时间,做为条件传递过去
|
|
|
+ * P2中,获取领料时间大于上一次拉取时间的新数据,再存入新系统中。
|
|
|
+ */
|
|
|
+ BizPullP2Time lastPullProcess = null;
|
|
|
+ if (pullProcesses.size() > 0) {
|
|
|
+ int lastIndex = pullProcesses.size() - 1;
|
|
|
+ lastPullProcess = pullProcesses.get(lastIndex);
|
|
|
+ }
|
|
|
+ QueryWrapper<Sfc10401> sfc10401QueryWrapper = new QueryWrapper<>();
|
|
|
+ if (lastPullProcess != null) {
|
|
|
+ Date newCondition = lastPullProcess.getPullTime();
|
|
|
+ /*
|
|
|
+ * 这里应该根据新系统中记录的最大的拉取日期
|
|
|
+ * modate:P2中的修改日期,为了避免重复拉取,需要做条件判断。modate必须大于上一次拉取时间
|
|
|
+ */
|
|
|
+ sfc10401QueryWrapper.apply("modate IS NOT NULL AND modate > {0}", newCondition);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Sfc10401> sfc10401List = sfc10401Service.getList(sfc10401QueryWrapper);
|
|
|
+ List<BizProcess> bases = processService.list();
|
|
|
+ List<BizTechnologicalProcessDetail> processDetails = technologicalProcessDetailService.query().list();
|
|
|
+ List<BizTechnologicalProcess> processes = technologicalProcessService.list();
|
|
|
+ List<Sfc10400> sfc10400List = sfc10400Service.getList(new QueryWrapper<>());
|
|
|
+ List<BizTechnologicalProcess> saveProcess = new ArrayList<>();
|
|
|
+ List<BizTechnologicalProcess> updateProcess = new ArrayList<>();
|
|
|
+ List<BizTechnologicalProcessDetail> saveProcessDetail = new ArrayList<>();
|
|
|
+ List<BizTechnologicalProcessDetail> updateProcessDetail = new ArrayList<>();
|
|
|
+ sfc10401List.forEach(l -> {
|
|
|
+ // 判断是否有对应的technologicalProcessDetail
|
|
|
+ BizTechnologicalProcessDetail old = processDetails.stream().filter(v -> v.getTechnologyVersion().equals(l.getPrver().trim()) && v.getProductCode().equals(l.getCpart().trim()) && v.getProcessStepNumber().equals(l.getPrseq().trim()) && v.getProcessCode().equals(l.getPrcode().trim())).findFirst().orElse(null);
|
|
|
+ if (old != null) {
|
|
|
+ old.setProcessKey(l.getFinkey());
|
|
|
+ old.setProcessAlias(l.getPrna());
|
|
|
+ old.setProductShaftCategory(l.getZtype());
|
|
|
+ old.setProductShaftCategoryName(l.getZtydm());
|
|
|
+ old.setProductDescription(l.getDescr());
|
|
|
+ updateProcessDetail.add(old);
|
|
|
+ } else {
|
|
|
+ BizTechnologicalProcessDetail newProcess = new BizTechnologicalProcessDetail();
|
|
|
+ newProcess.setTechnologyVersion(l.getPrver().trim());
|
|
|
+ newProcess.setProductCode(l.getCpart().trim());
|
|
|
+ newProcess.setProcessCode(l.getPrcode().trim());
|
|
|
+ newProcess.setProcessStepNumber(l.getPrseq());
|
|
|
+ newProcess.setProcessKey(l.getFinkey());
|
|
|
+ newProcess.setProcessAlias(l.getPrna());
|
|
|
+ newProcess.setProductShaftCategory(l.getZtype());
|
|
|
+ newProcess.setProductShaftCategoryName(l.getZtydm());
|
|
|
+ newProcess.setProductDescription(l.getDescr());
|
|
|
+ newProcess.setTenantId(1L);
|
|
|
+ if (newProcess.getProductCode() != null && !newProcess.getProductCode().isEmpty()) {
|
|
|
+ BizProduct bizProduct = products.stream().filter(v -> v.getProductCode().equals(l.getCpart().trim())).findFirst().orElse(null);
|
|
|
+ if (bizProduct != null) {
|
|
|
+ newProcess.setProductId(bizProduct.getId());
|
|
|
+ }
|
|
|
+ bizProduct = newProducts.stream().filter(v -> v.getProductCode().equals(l.getCpart().trim())).findFirst().orElse(null);
|
|
|
+ if (bizProduct != null && newProcess.getProductId() == null) {
|
|
|
+ newProcess.setProductId(bizProduct.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (newProcess.getProcessCode() != null && !newProcess.getProcessCode().isEmpty()) {
|
|
|
+ BizProcess bizProcess = bases.stream().filter(v -> v.getProcessCode().equals(l.getPrcode().trim())).findFirst().orElse(null);
|
|
|
+ newProcess.setProcessId(bizProcess == null ? null : bizProcess.getId());
|
|
|
+ }
|
|
|
+ // 判断下是否有对用工艺
|
|
|
+
|
|
|
+ Sfc10400 sfc10400 = sfc10400List.stream().filter(v -> v.getPrver().trim().equals(l.getPrver().trim()) && v.getCpart().trim().equals(l.getCpart().trim())).findFirst().orElse(null);
|
|
|
+ BizTechnologicalProcess oldTech = processes.stream().filter(v -> v.getTechnologyVersion().trim().equals(l.getPrver().trim()) && v.getProductCode().trim().equals(l.getCpart().trim())).findFirst().orElse(null);
|
|
|
+ if (oldTech != null) {
|
|
|
+ if (sfc10400 != null) {
|
|
|
+ oldTech.setProductShaftCategory(sfc10400.getZtype());
|
|
|
+ oldTech.setProductShaftCategoryName(sfc10400.getZtydm());
|
|
|
+ oldTech.setProductSpecification(sfc10400.getSpec());
|
|
|
+ oldTech.setProductDrawingNumber(sfc10400.getDraw());
|
|
|
+ oldTech.setProductDescription(sfc10400.getDescr());
|
|
|
+ updateProcess.add(oldTech);
|
|
|
+ newProcess.setTechnologicalProcessId(oldTech.getId());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (sfc10400 != null) {
|
|
|
+ BizTechnologicalProcess newTech = new BizTechnologicalProcess();
|
|
|
+ newTech.setProductCode(sfc10400.getCpart());
|
|
|
+ newTech.setTechnologyVersion(l.getPrver());
|
|
|
+ newTech.setTenantId(1L);
|
|
|
+ if (newTech.getProductCode() != null && !newTech.getProductCode().isEmpty()) {
|
|
|
+ BizProduct bizProduct = products.stream().filter(v -> v.getProductCode().equals(sfc10400.getCpart())).findFirst().orElse(null);
|
|
|
+ if (bizProduct != null) {
|
|
|
+ newProcess.setProductId(bizProduct.getId());
|
|
|
+ }
|
|
|
+ bizProduct = newProducts.stream().filter(v -> v.getProductCode().equals(sfc10400.getCpart())).findFirst().orElse(null);
|
|
|
+ if (bizProduct != null && newProcess.getProductId() == null) {
|
|
|
+ newProcess.setProductId(bizProduct.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ newTech.setProductShaftCategory(sfc10400.getZtype());
|
|
|
+ newTech.setProductShaftCategoryName(sfc10400.getZtydm());
|
|
|
+ newTech.setProductSpecification(sfc10400.getSpec());
|
|
|
+ newTech.setProductDrawingNumber(sfc10400.getDraw());
|
|
|
+ newTech.setProductDescription(sfc10400.getDescr());
|
|
|
+ newTech.setId(snowflakeIdWorker.nextId());
|
|
|
+ saveProcess.add(newTech);
|
|
|
+ newProcess.setTechnologicalProcessId(newTech.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ saveProcessDetail.add(newProcess);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if ((saveProcess.isEmpty() || technologicalProcessService.saveBatch(saveProcess)) && (updateProcess.isEmpty() || technologicalProcessService.updateBatchById(updateProcess)) && (saveProcessDetail.isEmpty() || technologicalProcessDetailService.saveBatch(saveProcessDetail)) && (updateProcessDetail.isEmpty() || technologicalProcessDetailService.updateBatchById(updateProcessDetail))) {
|
|
|
+ BizPullP2Time bizPullP2Time = new BizPullP2Time();
|
|
|
+ // 将当前时间赋值给 pullTime 属性
|
|
|
+ bizPullP2Time.setPullTime(new Date());
|
|
|
+ bizPullP2Time.setType("productProcess");
|
|
|
+ // 保存数据
|
|
|
+ pullP2TimeService.saveOrUpdate(bizPullP2Time);
|
|
|
+ result = result && pullP2TimeService.saveOrUpdate(bizPullP2Time);
|
|
|
+ } else {
|
|
|
+ result = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return toAjax(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean getP2Process() {
|
|
|
+ // 先从新系统中的 biz_pull_p2_time 中获取最新数据
|
|
|
+ BizPullP2Time pullDetail = new BizPullP2Time();
|
|
|
+ pullDetail.setType("process");
|
|
|
+ List<BizPullP2Time> pullDetails = pullP2TimeService.getList(pullDetail);
|
|
|
+ /*
|
|
|
+ * 如果 pullDetails 不为空,则获取最后一条数据,做为查询P2的生产计划明细的条件。
|
|
|
+ * 这里有个细节,每次从P2中获取生产计划明细,不能都从头开始,否则随着数据量增加,将会重复拉取大量的数据,性能很差
|
|
|
+ * 拉取数据后,存入新系统中,每次拉取前,将新系统中 biz_pull_p2_time 的最后一条数据记录的时间,做为条件传递过去
|
|
|
+ * P2中,获取领料时间大于上一次拉取时间的新数据,再存入新系统中。
|
|
|
+ */
|
|
|
+ BizPullP2Time lastPullDetail = null;
|
|
|
+ if (pullDetails.size() > 0) {
|
|
|
+ int lastIndex = pullDetails.size() - 1;
|
|
|
+ lastPullDetail = pullDetails.get(lastIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<Sfc10300> queryWrapper = new QueryWrapper<>();
|
|
|
+ if (lastPullDetail != null) {
|
|
|
+ Date newCondition = lastPullDetail.getPullTime();
|
|
|
+ /*
|
|
|
+ * 这里应该根据新系统中记录的最大的拉取日期
|
|
|
+ * modate:P2中的修改日期,为了避免重复拉取,需要做条件判断。modate必须大于上一次拉取时间
|
|
|
+ */
|
|
|
+ queryWrapper.apply("modate IS NOT NULL AND modate > {0}", newCondition);
|
|
|
+ }
|
|
|
+ List<Sfc10300> sfc10300List = sfc10300Service.getList(queryWrapper);
|
|
|
+ List<BizProcess> processes = processService.query().list();
|
|
|
+ List<BizProcess> newProcess = new ArrayList<>();
|
|
|
+ List<BizProcess> changeProcess = new ArrayList<>();
|
|
|
+ List<SysUser> userList = sysUserService.getList();
|
|
|
+ SysDictData conditions = new SysDictData();
|
|
|
+ conditions.setDictType("process_status");
|
|
|
+ List<SysDictData> dictList = sysDictDataService.selectDictDataList(conditions);
|
|
|
+ List<BizShaftCategory> categories = bizShaftCategoryService.query().list();
|
|
|
+ sfc10300List.forEach(l -> {
|
|
|
+ if (processes.stream().anyMatch(v -> v.getProcessCode().equals(l.getPrcode().trim()))) {
|
|
|
+ // 已插入产品
|
|
|
+ BizProcess old = processes.stream().filter(v -> v.getProcessCode().equals(l.getPrcode().trim())).findFirst().orElse(null);
|
|
|
+ if (old != null) {
|
|
|
+ old.setProcessKey(l.getFinkey());
|
|
|
+ old.setProcessAlias(l.getPrna());
|
|
|
+ old.setType(l.getType());
|
|
|
+ old.setStatus(l.getStatus());
|
|
|
+ changeProcess.add(old);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 新产品
|
|
|
+ BizProcess bizProcess = new BizProcess();
|
|
|
+ bizProcess.setProcessCode(l.getPrcode());
|
|
|
+
|
|
|
+ bizProcess.setProcessKey(l.getFinkey());
|
|
|
+ bizProcess.setProcessAlias(l.getPrna());
|
|
|
+ bizProcess.setType(l.getType());
|
|
|
+ bizProcess.setStatus(l.getStatus());
|
|
|
+ newProcess.add(bizProcess);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if ((newProcess.isEmpty() || processService.saveBatch(newProcess)) && (changeProcess.isEmpty() || processService.updateBatchById(changeProcess))) {
|
|
|
+ BizPullP2Time bizPullP2Time = new BizPullP2Time();
|
|
|
+ // 将当前时间赋值给 pullTime 属性
|
|
|
+ bizPullP2Time.setPullTime(new Date());
|
|
|
+ bizPullP2Time.setType("process");
|
|
|
+ // 保存数据
|
|
|
+ pullP2TimeService.saveOrUpdate(bizPullP2Time);
|
|
|
+ return true;
|
|
|
}
|
|
|
- return toAjax(false);
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
/**
|