From 728621ba2f24bb9f41c7f2cd1c6cdc990247928c Mon Sep 17 00:00:00 2001
From: zhanghl <253316343@qq.com>
Date: 星期四, 15 五月 2025 16:58:36 +0800
Subject: [PATCH] 优化同步WorkOrder:先全部删除,再进行同步
---
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlatePlanServiceImpl.java | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 162 insertions(+), 12 deletions(-)
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlatePlanServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlatePlanServiceImpl.java
index 8ef46ca..3792967 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlatePlanServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlatePlanServiceImpl.java
@@ -1,27 +1,51 @@
package com.aps.core.service.impl;
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.aps.core.mapper.ApsPlatePlanMapper;
+import cn.hutool.core.util.IdUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.aps.common.core.utils.DateUtils;
+import com.aps.common.core.utils.uuid.IdUtils;
+import com.aps.common.security.utils.DictUtils;
import com.aps.core.domain.ApsPlatePlan;
+import com.aps.core.domain.ApsPlatePlanTemp;
+import com.aps.core.mapper.ApsPartPlanTempMapper;
+import com.aps.core.mapper.ApsPlatePlanMapper;
+import com.aps.core.mapper.ApsPlatePlanTempMapper;
import com.aps.core.service.IApsPlatePlanService;
+import com.aps.system.api.domain.SysDictData;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* 閽i噾璁″垝绠$悊Service涓氬姟灞傚鐞�
- *
+ *
* @author ruoyi
* @date 2025-04-08
*/
@Service
-public class ApsPlatePlanServiceImpl implements IApsPlatePlanService
+public class ApsPlatePlanServiceImpl implements IApsPlatePlanService
{
@Autowired
private ApsPlatePlanMapper apsPlatePlanMapper;
+ @Autowired
+ private ApsPartPlanTempMapper apsPartPlanTempMapper;
+
+ @Autowired
+ private ApsPlatePlanTempMapper apsPlatePlanTempMapper;
+
+ @Autowired
+ public RedisTemplate redisTemplate;
+
/**
* 鏌ヨ閽i噾璁″垝绠$悊
- *
+ *
* @param id 閽i噾璁″垝绠$悊涓婚敭
* @return 閽i噾璁″垝绠$悊
*/
@@ -33,7 +57,7 @@
/**
* 鏌ヨ閽i噾璁″垝绠$悊鍒楄〃
- *
+ *
* @param apsPlatePlan 閽i噾璁″垝绠$悊
* @return 閽i噾璁″垝绠$悊
*/
@@ -45,19 +69,21 @@
/**
* 鏂板閽i噾璁″垝绠$悊
- *
+ *
* @param apsPlatePlan 閽i噾璁″垝绠$悊
* @return 缁撴灉
*/
@Override
public int insertApsPlatePlan(ApsPlatePlan apsPlatePlan)
{
+ apsPlatePlan.setId(IdUtil.getSnowflakeNextId());
+ apsPlatePlan.setCreateTime(DateUtils.getNowDate());
return apsPlatePlanMapper.insertApsPlatePlan(apsPlatePlan);
}
/**
* 淇敼閽i噾璁″垝绠$悊
- *
+ *
* @param apsPlatePlan 閽i噾璁″垝绠$悊
* @return 缁撴灉
*/
@@ -69,7 +95,7 @@
/**
* 鎵归噺鍒犻櫎閽i噾璁″垝绠$悊
- *
+ *
* @param ids 闇�瑕佸垹闄ょ殑閽i噾璁″垝绠$悊涓婚敭
* @return 缁撴灉
*/
@@ -81,7 +107,7 @@
/**
* 鍒犻櫎閽i噾璁″垝绠$悊淇℃伅
- *
+ *
* @param id 閽i噾璁″垝绠$悊涓婚敭
* @return 缁撴灉
*/
@@ -90,4 +116,128 @@
{
return apsPlatePlanMapper.deleteApsPlatePlanById(id);
}
+
+ @Override
+ public int confirmPlan(ApsPlatePlanTemp tempPlan) {
+ //鍏堝垹闄ゆ墍鏈�
+ apsPlatePlanMapper.removeAllPlatePlans();
+ //鏌ヨ涓存椂琛ㄦ暟鎹�
+ List<ApsPlatePlanTemp> apsPartPlanTemps=apsPlatePlanTempMapper.selectApsPlatePlanTempList(tempPlan);
+ int count=0;
+ String[] ids=new String[apsPartPlanTemps.size()];
+ for (int i = 0; i <apsPartPlanTemps.size() ; i++) {
+ //璁板綍涓存椂琛╥d
+ ids[i]=apsPartPlanTemps.get(i).getId();
+ ApsPlatePlan platePlan=new ApsPlatePlan();
+ BeanUtils.copyProperties(apsPartPlanTemps.get(i), platePlan);
+ platePlan.setId(IdUtil.getSnowflakeNextId());
+ platePlan.setCreateTime(DateUtils.getNowDate());
+ //鎻掑叆姝e紡琛紝骞惰褰�
+ apsPlatePlanMapper.insertApsPlatePlan(platePlan);
+ count++;
+ }
+ //鎻掑叆鏁伴噺涓庝复鏃惰〃鏌ヨ涓�鐩村垯鍒犻櫎涓存椂琛ㄦ暟鎹�
+ if (count==apsPartPlanTemps.size()) {
+ apsPlatePlanTempMapper.deleteApsPlatePlanTempByIds(ids);
+ }
+ return 1;
+ }
+ @Override
+ public String importData(List<ApsPlatePlanTemp> tempList) throws Exception {
+
+ String batchNum= IdUtils.fastUUID();
+ //鍒ゆ柇瀵煎叆鏁版嵁鏄惁涓虹┖
+ if (tempList.size() > 0) {
+ /*
+ * aps_business_type aps_document_status aps_is_suspended aps_account
+ * */
+
+ List<SysDictData> suspendedDic = DictUtils.getDictCache("aps_is_suspended");
+ List<SysDictData> businessTypeDic = DictUtils.getDictCache("aps_business_type");
+ List<SysDictData> documentStatusDic = DictUtils.getDictCache("aps_document_status");
+ List<SysDictData> accountDic = DictUtils.getDictCache("aps_account");
+ for (int i = 0; i < tempList.size(); i++) {
+
+ ApsPlatePlanTemp planTemp = tempList.get(i);
+
+ String isSuspendedTxt = planTemp.getIsSuspended().trim();
+ String businessType = planTemp.getBusinessType().trim();
+ String documentStatusText = planTemp.getDocumentStatus().trim();
+ String account = planTemp.getAccount().trim();
+
+ Optional<SysDictData> documentStatusFirst = documentStatusDic.stream().filter(x -> x.getDictLabel().equals(documentStatusText)).findFirst();
+ documentStatusFirst.ifPresent(sysDictData -> planTemp.setDocumentStatus(sysDictData.getDictValue()));
+
+ Optional<SysDictData> accountFirst = accountDic.stream().filter(x -> x.getDictLabel().equals(account)).findFirst();
+ accountFirst.ifPresent(sysDictData -> planTemp.setAccount(sysDictData.getDictValue()));
+
+ Optional<SysDictData> businessTypeFirst = businessTypeDic.stream().filter(x -> x.getDictLabel().equals(businessType)).findFirst();
+ businessTypeFirst.ifPresent(sysDictData -> planTemp.setBusinessType(sysDictData.getDictValue()));
+
+
+ Optional<SysDictData> isSuspendedFirst = suspendedDic.stream().filter(x -> x.getDictLabel().equals(isSuspendedTxt)).findFirst();
+ isSuspendedFirst.ifPresent(sysDictData -> planTemp.setIsSuspended(sysDictData.getDictValue()));
+
+ planTemp.setId(IdUtils.fastUUID());
+ //鎻掑叆鐗堟湰鍙�
+ planTemp.setBatchNumber(batchNum);
+ //鎻掑叆涓存椂琛�
+ apsPlatePlanTempMapper.insertApsPlatePlanTemp(planTemp);
+ }
+ return batchNum ;
+ } else {
+ return Strings.EMPTY;
+ }
+ }
+
+ /**
+ * 閽i噾鍐椾綑宸ュ崟鎶ヨ〃
+ * @param apsPlatePlan
+ * @return
+ */
+ @Override
+ public List<ApsPlatePlan> selectPlateRedundantOrderList(ApsPlatePlan apsPlatePlan) {
+ return apsPlatePlanMapper.selectPlateRedundantOrderList(apsPlatePlan);
+ }
+
+ @Override
+ public ApsPlatePlan selectUnMatchPlateSubPlan(String plant, String itemNumber, Hashtable<String, List<ApsPlatePlan>> subPlans) {
+ if(subPlans.containsKey(itemNumber)) {
+ List<ApsPlatePlan> subPlanList = subPlans.get(itemNumber);
+ Optional<ApsPlatePlan> firstPlant = subPlanList.stream().filter(x -> x.getUnmatchedQuantity().compareTo(BigDecimal.ZERO) > 0).findFirst();
+ return firstPlant.orElse(null);
+ }else {
+ List<ApsPlatePlan> plans = apsPlatePlanMapper.selectUnMatchPlateSubPlanList(plant, itemNumber);
+ if (!plans.isEmpty()) {
+ subPlans.put(itemNumber, plans);
+ return selectUnMatchPlateSubPlan(plant, itemNumber, subPlans);
+ } else {
+ return null;
+ }
+ }
+ }
+
+ @Override
+ public boolean setSubPlansToRedis() {
+ try {
+ Set<String> keys = redisTemplate.keys("PLATE_SUB_PLAN:*");
+ if (keys != null && !keys.isEmpty()) {
+ redisTemplate.delete(keys);
+ }
+ List<JSONObject> subPlans = apsPlatePlanMapper.selectApsSubPlatePlan();
+// ApsPlatePlan a = JSONObject.parseObject(String.valueOf(subPlans.get(0)), ApsPlatePlan.class);
+ Map<String, List<JSONObject>> groupByItemNumber = subPlans.stream().collect(Collectors.groupingBy(obj -> obj.getString("itemNumber")));
+ Map<String, Object> bulkData = new HashMap<>();
+ for (Map.Entry<String, List<JSONObject>> entry : groupByItemNumber.entrySet()) {
+ String key = entry.getKey();
+ List<JSONObject> value = entry.getValue();
+ bulkData.put("PLATE_SUB_PLAN:"+key, value);
+ }
+ redisTemplate.opsForValue().multiSet(bulkData);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
}
--
Gitblit v1.9.3