/* * Copyright (c) 2018-2025, ztt All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the pig4cloud.com developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: ztt */ package com.chinaztt.mes.plan.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.druid.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.chinaztt.mes.common.wrapper.QueryWrapperUtil; import com.chinaztt.mes.plan.dto.ProcessConfigDTO; import com.chinaztt.mes.plan.entity.CustomerOrder; import com.chinaztt.mes.plan.entity.ProcessConfig; import com.chinaztt.mes.plan.entity.ProcessConfigData; import com.chinaztt.mes.plan.mapper.CustomerOrderMapper; import com.chinaztt.mes.plan.mapper.ProcessConfigDataMapper; import com.chinaztt.mes.plan.mapper.ProcessConfigMapper; import com.chinaztt.mes.plan.service.ProcessConfigDataService; import com.chinaztt.mes.plan.service.ProcessConfigService; import com.chinaztt.mes.plan.state.auditstate.constant.AuditStateStringValues; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 销售订单新工艺配置单 * * @author yangyao * @date 2022-10-20 15:17:39 */ @Service @AllArgsConstructor @Transactional(rollbackFor = Exception.class) public class ProcessConfigServiceImpl extends ServiceImpl implements ProcessConfigService { private CustomerOrderMapper customerOrderMapper; private ProcessConfigDataMapper processConfigDataMapper; private ProcessConfigDataService processConfigDataService; private ProcessConfigMapper processConfigMapper; /** * 批量新增新工艺配置单 * * @param processConfigDTO * @return */ @Override public boolean fullSave(ProcessConfigDTO processConfigDTO) { /* 排除已经配置过工艺配置单的订单行 start */ List processConfigBySearch = processConfigMapper.selectList(Wrappers.lambdaQuery() .eq(ProcessConfig::getOrderNumber, processConfigDTO.getOrderNumber())); List customerOrderIdList = processConfigBySearch.stream().map(ProcessConfig::getOrderId).collect(Collectors.toList()); List customerOrderList = customerOrderMapper.selectList(Wrappers.lambdaQuery() .eq(CustomerOrder::getCustomerOrderNo, processConfigDTO.getOrderNumber()) .notIn(CollectionUtil.isNotEmpty(customerOrderIdList),CustomerOrder::getId,customerOrderIdList)); /* 排除已经配置过工艺配置单的订单行 end */ if(CollectionUtil.isNotEmpty(customerOrderList)) { //批量新增新工艺配置单主表 List processConfigList = new ArrayList<>(); customerOrderList.stream().forEach(customerOrder -> { ProcessConfig processConfig = new ProcessConfig(); BeanUtils.copyProperties(processConfigDTO, processConfig); processConfig.setOrderId(customerOrder.getId()); processConfigList.add(processConfig); }); saveBatch(processConfigList); //批量新增新工艺配置单副表 List processConfigDataList = processConfigDTO.getProcessConfigDataList(); if (CollectionUtil.isNotEmpty(processConfigDataList)) { processConfigList.stream().forEach(processConfig -> { saveProcessConfigData(processConfigDataList, processConfig.getId()); }); } } return true; } /** * 新工艺配置单单条新增 * * @param processConfigDTO * @return */ @Override public boolean saveOneProcessConfig(ProcessConfigDTO processConfigDTO) { //新增新工艺配置单主表 save(processConfigDTO); List processConfigDataList = processConfigDTO.getProcessConfigDataList(); if (CollectionUtil.isNotEmpty(processConfigDataList)) { //新增新工艺配置单副表 saveProcessConfigData(processConfigDataList, processConfigDTO.getId()); } return true; } /** * 根据订单id查询新工艺配置单信息 * * @param orderId * @return */ @Override public ProcessConfigDTO getProcessConfig(Long orderId) { ProcessConfigDTO processConfigDTO = baseMapper.selectByOrderId(orderId); return getProcessConfigDTO(processConfigDTO); } /** * 根据订单号和otc行号查询新工艺配置单信息 * * @param orderNo * @param otcLineNo * @return */ @Override public ProcessConfigDTO getByOrderNoAndOtcNo(String orderNo, String otcLineNo) { ProcessConfigDTO processConfigDTO = baseMapper.selectByOrderNoAndOtcNo(orderNo,otcLineNo); return getProcessConfigDTO(processConfigDTO); } /** * 新工艺配置单单条编辑 * * @param processConfigDTO * @return R */ @Override public boolean updateById(ProcessConfigDTO processConfigDTO) { //订单行审核状态处于审批中或通过,配置单不可编辑 judgeIsAudit(processConfigDTO.getOrderId()); baseMapper.updateById(processConfigDTO); //删除新工艺配置副表信息 deleteProcessConfigData(processConfigDTO.getId()); List processConfigDataList = processConfigDTO.getProcessConfigDataList(); if(CollectionUtil.isNotEmpty(processConfigDataList)){ //新增新工艺配置副表信息 saveProcessConfigData(processConfigDataList,processConfigDTO.getId()); } return true; } /** * 新工艺配置单应用至所选订单行 * * @param processConfigDTO * @return R */ @Override public boolean updateBatch(ProcessConfigDTO processConfigDTO) { List customerOrderList = customerOrderMapper.selectList(Wrappers.lambdaQuery() .in(CustomerOrder::getId, processConfigDTO.getOrderIdList())); for (CustomerOrder customerOrder:customerOrderList) { //订单行审核状态处于审批中或通过,配置单不可编辑 judgeIsAudit(customerOrder.getId()); } List processConfigList = baseMapper.selectList(Wrappers.lambdaQuery() .in(ProcessConfig::getOrderId,processConfigDTO.getOrderIdList())); if(CollectionUtil.isNotEmpty(processConfigList)) { for (ProcessConfig processConfig : processConfigList) { //根据订单号删除新工艺配置单副表信息 deleteProcessConfigData(processConfig.getId()); } //根据新工艺配置单主表id批量删除主表信息 List processConfigIds = processConfigList.stream().map(ProcessConfig::getId).collect(Collectors.toList()); baseMapper.deleteBatchIds(processConfigIds); } //新增新工艺配置单主表信息 List newProcessConfigList = new ArrayList<>(); customerOrderList.stream().forEach(customerOrder -> { ProcessConfig processConfig = new ProcessConfig(); BeanUtils.copyProperties(processConfigDTO, processConfig); processConfig.setOrderId(customerOrder.getId()); newProcessConfigList.add(processConfig); }); saveBatch(newProcessConfigList); //新增新工艺配置单副表信息 List processConfigDataList = processConfigDTO.getProcessConfigDataList(); if (CollectionUtil.isNotEmpty(processConfigDataList)) { newProcessConfigList.stream().forEach(newProcessConfig -> { saveProcessConfigData(processConfigDataList, newProcessConfig.getId()); }); } return true; } /** * 删除新工艺配置单 * * @param id */ @Override public boolean deleteById(Long id) { ProcessConfig processConfig = baseMapper.selectById(id); //订单行审核状态处于审批中或通过,配置单不可编辑 judgeIsAudit(processConfig.getOrderId()); //删除新工艺配置单主表信息 baseMapper.deleteById(id); //删除新工艺配置单副表信息 deleteProcessConfigData(id); return true; } /** * 根据新工艺配置单主表id删除副表信息 * * @param configId */ public void deleteProcessConfigData(Long configId){ List processConfigDataList = processConfigDataMapper.selectList(Wrappers.lambdaQuery() .eq(ProcessConfigData::getConfigId, configId)); if(CollectionUtil.isNotEmpty(processConfigDataList)){ List dataIdList = processConfigDataList.stream().map(ProcessConfigData::getId).collect(Collectors.toList()); processConfigDataMapper.deleteBatchIds(dataIdList); } } /** * 批量新增新工艺配置单副表信息 * * @param processConfigDataList * @param configId */ public void saveProcessConfigData(List processConfigDataList,Long configId){ processConfigDataList.stream().forEach( processConfigData -> { processConfigData.setConfigId(configId); }); processConfigDataService.saveBatch(processConfigDataList); } /** * 订单行审核状态处于审批中或通过,配置单不可编辑 * * @param orderId * @return */ public void judgeIsAudit(Long orderId){ CustomerOrder customerOrder = customerOrderMapper.selectById(orderId); if(StringUtils.equals(customerOrder.getIsAudit(),AuditStateStringValues.PENDING)|| StringUtils.equals(customerOrder.getIsAudit(),AuditStateStringValues.ACCEPTED)){ throw new RuntimeException("订单行审核状态处于审批中或通过,配置单不可编辑"); } } /** * 根据新工艺配置单主表信息带出副表信息 * * @param processConfigDTO * @return */ public ProcessConfigDTO getProcessConfigDTO(ProcessConfigDTO processConfigDTO){ if(processConfigDTO!=null) { List processConfigDataList = processConfigDataMapper.selectList(Wrappers.lambdaQuery() .eq(ProcessConfigData::getConfigId, processConfigDTO.getId())); processConfigDTO.setProcessConfigDataList(processConfigDataList); return processConfigDTO; } return null; } /** * 工艺配置单分页查询 * * @param page * @param processConfigDTO */ @Override public IPage getProcessConfigPage(Page page, QueryWrapper processConfigDTO) { IPage iPage = baseMapper.getProcessConfigPage(page,processConfigDTO); return iPage; } }