package com.aps.core.service.mainPlan.impl;
|
|
import com.aps.common.core.utils.DateUtils;
|
import com.aps.common.core.utils.uuid.IdUtils;
|
import com.aps.common.core.web.page.TableDataInfo;
|
import com.aps.common.security.utils.SecurityUtils;
|
import com.aps.core.controller.basicData.ApsGasPipelineCapacityPlanController;
|
import com.aps.core.domain.ApsGasPipelineCapacityPlan;
|
import com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2;
|
import com.aps.core.mapper.mainPlan.ApsWeldSeamStatisticsV2Mapper;
|
import com.aps.core.service.IApsGasPipelineCapacityPlanService;
|
import com.aps.core.service.mainPlan.IApsWeldSeamStatisticsV2Service;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 焊缝统计表V2Service业务层处理
|
*
|
* @date 2023-08-01
|
*/
|
@Service
|
public class ApsWeldSeamStatisticsV2ServiceImpl implements IApsWeldSeamStatisticsV2Service {
|
@Autowired
|
private ApsWeldSeamStatisticsV2Mapper apsWeldSeamStatisticsV2Mapper;
|
|
@Autowired
|
private ApsGasPipelineCapacityPlanController apsGasPipelineCapacityPlanController;
|
|
/**
|
* 查询焊缝统计表V2列表
|
*
|
* @param apsWeldSeamStatisticsV2 焊缝统计表V2
|
* @return 焊缝统计表V2
|
*/
|
@Override
|
public List<ApsWeldSeamStatisticsV2> selectApsWeldSeamStatisticsV2List(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2) {
|
return apsWeldSeamStatisticsV2Mapper.selectApsWeldSeamStatisticsV2List(apsWeldSeamStatisticsV2);
|
}
|
|
/**
|
* 修改焊缝统计表V2
|
*
|
* @param apsWeldSeamStatisticsV2 焊缝统计表V2
|
* @return 更新后的记录
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public ApsWeldSeamStatisticsV2 updateApsWeldSeamStatisticsV2(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2)
|
{
|
// 设置更新时间
|
apsWeldSeamStatisticsV2.setUpdateTime(DateUtils.getNowDate());
|
apsWeldSeamStatisticsV2.setUpdateBy(SecurityUtils.getUsername());
|
|
// 1. 从数据库获取原始记录,以保留其他字段不变
|
ApsWeldSeamStatisticsV2 originalData = apsWeldSeamStatisticsV2Mapper.selectApsWeldSeamStatisticsV2ById(apsWeldSeamStatisticsV2.getId());
|
if (originalData == null) {
|
throw new RuntimeException("记录不存在,ID: " + apsWeldSeamStatisticsV2.getId());
|
}
|
|
// 2. 只更新reserveEmergencyOrderOutput和days两个字段
|
originalData.setReserveEmergencyOrderOutput(apsWeldSeamStatisticsV2.getReserveEmergencyOrderOutput());
|
originalData.setDays(apsWeldSeamStatisticsV2.getDays());
|
originalData.setUpdateTime(apsWeldSeamStatisticsV2.getUpdateTime());
|
originalData.setUpdateBy(apsWeldSeamStatisticsV2.getUpdateBy());
|
|
// 3. 确保所有用于计算的BigDecimal字段不为null
|
java.math.BigDecimal pipingOrderReq = (originalData.getPipingOrderRequirement() != null)
|
? originalData.getPipingOrderRequirement() : java.math.BigDecimal.ZERO;
|
|
java.math.BigDecimal pipingPredictionReq = (originalData.getPipingPredictionRequirement() != null)
|
? originalData.getPipingPredictionRequirement() : java.math.BigDecimal.ZERO;
|
|
java.math.BigDecimal gasOrderReq = (originalData.getGasOrderRequirement() != null)
|
? originalData.getGasOrderRequirement() : java.math.BigDecimal.ZERO;
|
|
java.math.BigDecimal gasPredictionReq = (originalData.getGasPredictionRequirement() != null)
|
? originalData.getGasPredictionRequirement() : java.math.BigDecimal.ZERO;
|
|
java.math.BigDecimal reserveEmergencyOutput = (originalData.getReserveEmergencyOrderOutput() != null)
|
? originalData.getReserveEmergencyOrderOutput() : java.math.BigDecimal.ZERO;
|
|
// 4. 属性1:重新计算total(合计)
|
java.math.BigDecimal total = pipingOrderReq
|
.add(pipingPredictionReq)
|
.add(gasOrderReq)
|
.add(gasPredictionReq)
|
.add(reserveEmergencyOutput);
|
|
originalData.setTotal(total);
|
|
// 5. 如果days不为空且大于0,重新计算requirementDayWeldSeam和isSatisfy
|
if(originalData.getDays() != null && originalData.getDays().doubleValue() > 0) {
|
// 属性2:计算需求日焊缝 = 合计/天数,四舍五入
|
double result = total.doubleValue() / originalData.getDays().doubleValue();
|
java.math.BigDecimal requirementDayWeldSeam = new java.math.BigDecimal(result).setScale(0, java.math.RoundingMode.HALF_UP);
|
originalData.setRequirementDayWeldSeam(requirementDayWeldSeam);
|
|
// 属性3:判断是否满足
|
if(originalData.getProductionDayWeldSeam() != null) {
|
if(originalData.getProductionDayWeldSeam().compareTo(requirementDayWeldSeam) >= 0) {
|
originalData.setIsSatisfy("1"); // 满足
|
} else {
|
originalData.setIsSatisfy("0"); // 不满足
|
}
|
} else {
|
originalData.setIsSatisfy("0"); // 默认不满足
|
}
|
} else {
|
// 如果天数为空或为0,设置为不满足
|
originalData.setIsSatisfy("0");
|
}
|
|
// 6. 更新数据库
|
apsWeldSeamStatisticsV2Mapper.updateApsWeldSeamStatisticsV2(originalData);
|
|
// 7. 返回更新后的完整记录
|
return originalData;
|
}
|
|
/**
|
* 刷新焊缝统计表数据
|
*
|
* @param username 操作用户
|
* @return 受影响的记录数
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public int refreshWeldSeamStatistics(String username) {
|
// 1. 清空统计表
|
apsWeldSeamStatisticsV2Mapper.truncateTable();
|
|
// 2. 获取最新的统计数据
|
List<ApsWeldSeamStatisticsV2> statisticsList = apsWeldSeamStatisticsV2Mapper.queryWeldSeamStatistics();
|
|
// 3. 设置创建信息和ID,并获取生产日焊缝数据
|
Date now = new Date();
|
for (ApsWeldSeamStatisticsV2 statistics : statisticsList) {
|
// 使用UUID作为ID
|
statistics.setId(IdUtils.fastUUID());
|
statistics.setCreateBy(username);
|
statistics.setCreateTime(now);
|
|
// 先计算需求日焊缝(requirementDayWeldSeam)
|
if(statistics.getDays() != null && statistics.getDays().doubleValue() > 0 && statistics.getTotal() != null) {
|
// 计算需求日焊缝 = 合计/天数,四舍五入
|
double result = statistics.getTotal().doubleValue() / statistics.getDays().doubleValue();
|
BigDecimal requirementDayWeldSeam = new BigDecimal(result).setScale(0, java.math.RoundingMode.HALF_UP);
|
statistics.setRequirementDayWeldSeam(requirementDayWeldSeam);
|
} else if (statistics.getRequirementDayWeldSeam() == null) {
|
// 如果无法计算且之前没有值,设置默认值
|
statistics.setRequirementDayWeldSeam(BigDecimal.ZERO);
|
}
|
|
// 设置生产日焊缝(productionDayWeldSeam)
|
// 根据year、month、productionBase查询对应的生产日焊缝数据
|
if (statistics.getYear() != null && statistics.getMonth() != null && statistics.getProductionBase() != null) {
|
// 创建查询条件
|
ApsGasPipelineCapacityPlan queryParam = new ApsGasPipelineCapacityPlan();
|
queryParam.setYear(statistics.getYear().toString());
|
queryParam.setMonth(statistics.getMonth().toString());
|
queryParam.setOrgCode(statistics.getProductionBase());
|
|
// 直接调用Controller的list方法获取数据
|
TableDataInfo tableDataInfo = apsGasPipelineCapacityPlanController.list(queryParam);
|
List<ApsGasPipelineCapacityPlan> capacityPlans = (List<ApsGasPipelineCapacityPlan>) tableDataInfo.getRows();
|
|
// 遍历找到processName为"气体管路轨道焊接组"的记录
|
for (ApsGasPipelineCapacityPlan plan : capacityPlans) {
|
if ("气体管路轨道焊接组".equals(plan.getProcessName()) && plan.getDayProduceAllNum() != null) {
|
// 设置生产日焊缝值
|
statistics.setProductionDayWeldSeam(plan.getDayProduceAllNum());
|
break; // 找到匹配记录后退出循环
|
}
|
}
|
}
|
|
// 如果没有找到匹配的产能规划数据,设置默认状态
|
if (statistics.getProductionDayWeldSeam() == null) {
|
statistics.setProductionDayWeldSeam(BigDecimal.ZERO);
|
}
|
|
// 最后统一计算isSatisfy(是否满足)
|
// 当生产日焊缝 >= 需求日焊缝时为满足,否则为不满足
|
if (statistics.getRequirementDayWeldSeam() != null &&
|
statistics.getProductionDayWeldSeam() != null &&
|
statistics.getProductionDayWeldSeam().compareTo(statistics.getRequirementDayWeldSeam()) >= 0) {
|
statistics.setIsSatisfy("1"); // 满足
|
} else {
|
statistics.setIsSatisfy("0"); // 不满足
|
}
|
}
|
|
// 4. 批量插入数据
|
int count = 0;
|
if (!statisticsList.isEmpty()) {
|
count = apsWeldSeamStatisticsV2Mapper.batchInsert(statisticsList);
|
}
|
|
return count;
|
}
|
}
|