| | |
| | | package com.aps.core.service.impl; |
| | | |
| | | import java.util.List; |
| | | |
| | | 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 钣金计划管理 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 查询钣金计划管理列表 |
| | | * |
| | | * |
| | | * @param apsPlatePlan 钣金计划管理 |
| | | * @return 钣金计划管理 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 新增钣金计划管理 |
| | | * |
| | | * |
| | | * @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 结果 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 批量删除钣金计划管理 |
| | | * |
| | | * |
| | | * @param ids 需要删除的钣金计划管理主键 |
| | | * @return 结果 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 删除钣金计划管理信息 |
| | | * |
| | | * |
| | | * @param id 钣金计划管理主键 |
| | | * @return 结果 |
| | | */ |
| | |
| | | |
| | | @Override |
| | | public int confirmPlan(ApsPlatePlanTemp tempPlan) { |
| | | //先删除所有 |
| | | apsPlatePlanMapper.removeAllPlatePlans(); |
| | | //查询临时表数据 |
| | | List<ApsPlatePlanTemp> apsPartPlanTemps=apsPlatePlanTempMapper.selectApsPlatePlanTempList(tempPlan); |
| | | int count=0; |
| | |
| | | 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); |
| | | count++; |
| | |
| | | String batchNum= IdUtils.fastUUID(); |
| | | //判断导入数据是否为空 |
| | | if (tempList.size() > 0) { |
| | | List<SysDictData> dictDataList = DictUtils.getDictCache("aps_is_suspended"); |
| | | /* |
| | | * 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); |
| | | for (int j = 0; j < dictDataList.size(); j++) { |
| | | if (planTemp.getIsSuspendedTxt().equals(dictDataList.get(j).getDictLabel())) { |
| | | planTemp.setIsSuspended(Integer.parseInt(dictDataList.get(j).getDictValue())); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | //插入临时表 |
| | |
| | | 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; |
| | | } |
| | | } |