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: eam_major_partial_repair * @Author: jeecg-boot * @Date: 2025-06-20 * @Version: V1.0 */ @Service public class EamMajorPartialRepairServiceImpl extends ServiceImpl 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() .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 queryPageList(Page page, EamMajorPartialRepairQuery query) { QueryWrapper 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 detailList) { List 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); } }