lyh
2025-06-25 4864c87d65e797d2ecd827b1eca9d46aec0950aa
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMajorPartialRepairServiceImpl.java
@@ -1,19 +1,135 @@
package org.jeecg.modules.eam.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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 org.apache.commons.lang3.StringUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.DataBaseConstant;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.eam.constant.MajorPartialRepairStatusEnum;
import org.jeecg.modules.eam.entity.EamMajorPartialRepair;
import org.jeecg.modules.eam.entity.EamMajorPartialRepairDetail;
import org.jeecg.modules.eam.mapper.EamMajorPartialRepairMapper;
import org.jeecg.modules.eam.request.EamMajorPartialRepairQuery;
import org.jeecg.modules.eam.service.IEamMajorPartialRepairDetailService;
import org.jeecg.modules.eam.service.IEamMajorPartialRepairService;
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
/**
 * @Description: 大修项修
 * @Description: eam_major_partial_repair
 * @Author: jeecg-boot
 * @Date:   2025-05-13
 * @Date:   2025-06-20
 * @Version: V1.0
 */
@Service
public class EamMajorPartialRepairServiceImpl extends ServiceImpl<EamMajorPartialRepairMapper, EamMajorPartialRepair> implements IEamMajorPartialRepairService {
    @Autowired
    private ISysBusinessCodeRuleService sysBusinessCodeRuleService;
    @Autowired
    private IEamMajorPartialRepairDetailService eamMajorPartialRepairDetailService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveMajorPartialRepair(EamMajorPartialRepair eamMajorPartialRepair) {
        BigDecimal totalPrice = eamMajorPartialRepair.getEamMajorPartialRepairDetailList().stream()
                .map(EamMajorPartialRepairDetail::getUnitPrice).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
        eamMajorPartialRepair.setRepairCode(sysBusinessCodeRuleService.generateBusinessCodeSeq("MajorPartialRepairRule"));
        eamMajorPartialRepair.setTotalAmount(totalPrice);
        eamMajorPartialRepair.setRepairStatus(MajorPartialRepairStatusEnum.PENDING_SUBMISSION.name());
        eamMajorPartialRepair.setDelFlag(CommonConstant.DEL_FLAG_0);
        save(eamMajorPartialRepair);
        eamMajorPartialRepair.getEamMajorPartialRepairDetailList().forEach(eamMajorPartialRepairDetail -> {
            eamMajorPartialRepairDetail.setRepairId(eamMajorPartialRepair.getId());
        });
        eamMajorPartialRepairDetailService.saveBatch(eamMajorPartialRepair.getEamMajorPartialRepairDetailList());
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateMajorPartialRepair(EamMajorPartialRepair eamMajorPartialRepair) {
        eamMajorPartialRepairDetailService.remove(new LambdaQueryWrapper<EamMajorPartialRepairDetail>()
                .eq(EamMajorPartialRepairDetail::getRepairId, eamMajorPartialRepair.getId()));
        BigDecimal totalPrice = eamMajorPartialRepair.getEamMajorPartialRepairDetailList().stream()
                .map(EamMajorPartialRepairDetail::getUnitPrice).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
        eamMajorPartialRepair.setTotalAmount(totalPrice);
        updateById(eamMajorPartialRepair);
        eamMajorPartialRepair.getEamMajorPartialRepairDetailList().forEach(eamMajorPartialRepairDetail -> {
            eamMajorPartialRepairDetail.setRepairId(eamMajorPartialRepair.getId());
        });
        eamMajorPartialRepairDetailService.saveBatch(eamMajorPartialRepair.getEamMajorPartialRepairDetailList());
    }
    @Override
    public IPage<EamMajorPartialRepair> queryPageList(Page<EamMajorPartialRepair> page, EamMajorPartialRepairQuery query) {
        QueryWrapper<EamMajorPartialRepair> queryWrapper = Wrappers.query();
        if (Objects.nonNull(query)) {
            if (StringUtils.isNotBlank(query.getRepairCode())) {
                queryWrapper.like("t.repair_code", query.getRepairCode());
            }
            if (StringUtils.isNotBlank(query.getRepairName())) {
                queryWrapper.like("t.repair_name", query.getRepairName());
            }
            if (StringUtils.isNotBlank(query.getRepairStatus())) {
                queryWrapper.eq("t.repair_status", query.getRepairStatus());
            }
            if (StringUtils.isNotBlank(query.getRepairType())) {
                queryWrapper.like("t.repair_type", query.getRepairType());
            }
            if (query.getPlanStartDate() != null && query.getPlanEndDate() != null) {
                queryWrapper.between("t.plan_start_date", query.getPlanStartDate(), query.getPlanEndDate());
            }
            //排序
            if (StringUtils.isNotBlank(query.getColumn()) && StringUtils.isNotBlank(query.getOrder())) {
                String column = query.getColumn();
                if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) {
                    column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
                }
                if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(query.getOrder())) {
                    queryWrapper.orderByAsc("t." + oConvertUtils.camelToUnderline(column));
                } else {
                    queryWrapper.orderByDesc("t." + oConvertUtils.camelToUnderline(column));
                }
            } else {
                queryWrapper.orderByDesc("t.create_time");
            }
        }
        return this.baseMapper.queryPageList(page, queryWrapper);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void fillResult(List<EamMajorPartialRepairDetail> detailList) {
        List<EamMajorPartialRepairDetail> result = CollectionUtil.newArrayList();
        detailList.forEach(eamMajorPartialRepairDetail -> {
            EamMajorPartialRepairDetail detail = new EamMajorPartialRepairDetail();
            detail.setId(eamMajorPartialRepairDetail.getId());
            detail.setRepairResult(eamMajorPartialRepairDetail.getRepairResult());
            detail.setRepairDescription(eamMajorPartialRepairDetail.getRepairDescription());
            result.add(detail);
        });
        eamMajorPartialRepairDetailService.updateBatchById(result);
        String repairId = detailList.get(0).getRepairId();
        EamMajorPartialRepair majorPartialRepair = getById(repairId);
        majorPartialRepair.setRepairStatus(MajorPartialRepairStatusEnum.COMPLETED.name());
        majorPartialRepair.setActualEndTime(new Date());
        updateById(majorPartialRepair);
    }
}