/*
|
* 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<ProcessConfigMapper, ProcessConfig> 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<ProcessConfig> processConfigBySearch = processConfigMapper.selectList(Wrappers.<ProcessConfig>lambdaQuery()
|
.eq(ProcessConfig::getOrderNumber, processConfigDTO.getOrderNumber()));
|
List<Long> customerOrderIdList = processConfigBySearch.stream().map(ProcessConfig::getOrderId).collect(Collectors.toList());
|
List<CustomerOrder> customerOrderList = customerOrderMapper.selectList(Wrappers.<CustomerOrder>lambdaQuery()
|
.eq(CustomerOrder::getCustomerOrderNo, processConfigDTO.getOrderNumber())
|
.notIn(CollectionUtil.isNotEmpty(customerOrderIdList),CustomerOrder::getId,customerOrderIdList));
|
/* 排除已经配置过工艺配置单的订单行 end */
|
if(CollectionUtil.isNotEmpty(customerOrderList)) {
|
//批量新增新工艺配置单主表
|
List<ProcessConfig> 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<ProcessConfigData> 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<ProcessConfigData> 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<ProcessConfigData> processConfigDataList = processConfigDTO.getProcessConfigDataList();
|
if(CollectionUtil.isNotEmpty(processConfigDataList)){
|
//新增新工艺配置副表信息
|
saveProcessConfigData(processConfigDataList,processConfigDTO.getId());
|
}
|
return true;
|
}
|
|
/**
|
* 新工艺配置单应用至所选订单行
|
*
|
* @param processConfigDTO
|
* @return R
|
*/
|
@Override
|
public boolean updateBatch(ProcessConfigDTO processConfigDTO) {
|
List<CustomerOrder> customerOrderList = customerOrderMapper.selectList(Wrappers.<CustomerOrder>lambdaQuery()
|
.in(CustomerOrder::getId, processConfigDTO.getOrderIdList()));
|
for (CustomerOrder customerOrder:customerOrderList) {
|
//订单行审核状态处于审批中或通过,配置单不可编辑
|
judgeIsAudit(customerOrder.getId());
|
}
|
List<ProcessConfig> processConfigList = baseMapper.selectList(Wrappers.<ProcessConfig>lambdaQuery()
|
.in(ProcessConfig::getOrderId,processConfigDTO.getOrderIdList()));
|
if(CollectionUtil.isNotEmpty(processConfigList)) {
|
for (ProcessConfig processConfig : processConfigList) {
|
//根据订单号删除新工艺配置单副表信息
|
deleteProcessConfigData(processConfig.getId());
|
}
|
//根据新工艺配置单主表id批量删除主表信息
|
List<Long> processConfigIds = processConfigList.stream().map(ProcessConfig::getId).collect(Collectors.toList());
|
baseMapper.deleteBatchIds(processConfigIds);
|
}
|
//新增新工艺配置单主表信息
|
List<ProcessConfig> 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<ProcessConfigData> 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<ProcessConfigData> processConfigDataList = processConfigDataMapper.selectList(Wrappers.<ProcessConfigData>lambdaQuery()
|
.eq(ProcessConfigData::getConfigId, configId));
|
if(CollectionUtil.isNotEmpty(processConfigDataList)){
|
List<Long> dataIdList = processConfigDataList.stream().map(ProcessConfigData::getId).collect(Collectors.toList());
|
processConfigDataMapper.deleteBatchIds(dataIdList);
|
}
|
}
|
|
/**
|
* 批量新增新工艺配置单副表信息
|
*
|
* @param processConfigDataList
|
* @param configId
|
*/
|
public void saveProcessConfigData(List<ProcessConfigData> 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<ProcessConfigData> processConfigDataList = processConfigDataMapper.selectList(Wrappers.<ProcessConfigData>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> processConfigDTO) {
|
IPage iPage = baseMapper.getProcessConfigPage(page,processConfigDTO);
|
return iPage;
|
}
|
}
|