hongjli
2025-05-16 7cd52b112a2e7da06aa8cfebf19a337be858762f
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlatePlanServiceImpl.java
@@ -1,45 +1,52 @@
package com.aps.core.service.impl;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson2.JSONArray;
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 com.aps.core.mapper.ApsPlatePlanMapper;
import com.aps.core.domain.ApsPlatePlan;
import com.aps.core.service.IApsPlatePlanService;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 钣金计划管理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;
    /**
     * 查询钣金计划管理
     *
     *
     * @param id 钣金计划管理主键
     * @return 钣金计划管理
     */
@@ -51,7 +58,7 @@
    /**
     * 查询钣金计划管理列表
     *
     *
     * @param apsPlatePlan 钣金计划管理
     * @return 钣金计划管理
     */
@@ -63,21 +70,21 @@
    /**
     * 新增钣金计划管理
     *
     *
     * @param apsPlatePlan 钣金计划管理
     * @return 结果
     */
    @Override
    public int insertApsPlatePlan(ApsPlatePlan apsPlatePlan)
    {
        apsPlatePlan.setId(IdUtils.fastUUID());
        apsPlatePlan.setId(IdUtil.getSnowflakeNextId());
        apsPlatePlan.setCreateTime(DateUtils.getNowDate());
        return apsPlatePlanMapper.insertApsPlatePlan(apsPlatePlan);
    }
    /**
     * 修改钣金计划管理
     *
     *
     * @param apsPlatePlan 钣金计划管理
     * @return 结果
     */
@@ -89,7 +96,7 @@
    /**
     * 批量删除钣金计划管理
     *
     *
     * @param ids 需要删除的钣金计划管理主键
     * @return 结果
     */
@@ -101,7 +108,7 @@
    /**
     * 删除钣金计划管理信息
     *
     *
     * @param id 钣金计划管理主键
     * @return 结果
     */
@@ -124,7 +131,7 @@
            ids[i]=apsPartPlanTemps.get(i).getId();
            ApsPlatePlan platePlan=new ApsPlatePlan();
            BeanUtils.copyProperties(apsPartPlanTemps.get(i), platePlan);
            platePlan.setId(IdUtils.fastUUID());
            platePlan.setId(IdUtil.getSnowflakeNextId());
            platePlan.setCreateTime(DateUtils.getNowDate());
            //插入正式表,并记录
            apsPlatePlanMapper.insertApsPlatePlan(platePlan);
@@ -183,4 +190,65 @@
           return Strings.EMPTY;
        }
    }
    /**
     * 钣金冗余工单报表
     * @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> planOptional = subPlanList.stream().filter(x -> x.getUnmatchedQuantity().compareTo(BigDecimal.ZERO) > 0).findFirst();
           return planOptional.orElse(null);
       }else {
           List<ApsPlatePlan> plans = getSubPlansFromRedis(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;
        }
    }
    public List<ApsPlatePlan> getSubPlansFromRedis(String itemNumber) {
        List<ApsPlatePlan> subPlans=new ArrayList<>();
        JSONArray jsonArray =(JSONArray) redisTemplate.opsForValue().get("PLATE_SUB_PLAN:" + itemNumber);
        if (jsonArray != null && !jsonArray.isEmpty()) {
            subPlans = jsonArray.stream().map(obj -> JSONObject.parseObject(String.valueOf(obj), ApsPlatePlan.class)).toList();
            subPlans.forEach(subPlan -> subPlan.setVersion(0));
        }
        return subPlans;
    }
}