package com.vincent.rsf.server.manager.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.IsptItemsParams; import com.vincent.rsf.server.manager.controller.params.QlyInspectAndItem; import com.vincent.rsf.server.manager.entity.QlyInspect; import com.vincent.rsf.server.manager.enums.QlyIsptResult; import com.vincent.rsf.server.manager.enums.QlyIsptStatus; import com.vincent.rsf.server.manager.mapper.QlyIsptItemMapper; import com.vincent.rsf.server.manager.entity.QlyIsptItem; import com.vincent.rsf.server.manager.service.QlyInspectService; import com.vincent.rsf.server.manager.service.QlyIsptItemService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @Service("qlyIsptItemService") public class QlyIsptItemServiceImpl extends ServiceImpl implements QlyIsptItemService { @Autowired private QlyInspectService qlyInspectService; /** * @author Ryan * @description 批量修改 * @param * @return * @time 2025/4/1 09:40 */ @Override @Transactional(rollbackFor = Exception.class) public boolean batchUpdate(IsptItemsParams params) { if (Objects.isNull(params.getIsptItem()) || params.getIsptItem().isEmpty()) { throw new CoolException("ID不能为空!!"); } List isptItem = params.getIsptItem(); List list = isptItem.stream().map(QlyIsptItem::getId).collect(Collectors.toList()); if (Short.parseShort(params.getType()) == QlyIsptResult.QLY_ISPT_RESULT_EXCELLENT.val || Short.parseShort(params.getType()) == QlyIsptResult.QLY_ISPT_RESULT_DEFECT.val) { //1:合格, 2:不合格, 0: 其它(默认) isptItem.forEach(item -> { if (Short.parseShort(params.getType()) == QlyIsptResult.QLY_ISPT_RESULT_EXCELLENT.val) { //TODO 先捡后收为送货数量,先收后捡为收货数量 item.setSafeQty(item.getDlyQty()); item.setDisQty(0.0); } else { item.setSafeQty(0.0); item.setDisQty(item.getDlyQty()); } if (!this.update(new LambdaUpdateWrapper() .set(QlyIsptItem::getSafeQty, item.getSafeQty()) .set(QlyIsptItem::getIsptResult, Short.parseShort(params.getType())) .set(QlyIsptItem::getDisQty, item.getDisQty()) .in(QlyIsptItem::getId, item.getId()))) { throw new CoolException("修改失败!!"); } }); } else { if (!this.updateBatchById(isptItem)) { throw new CoolException("明细修改失败"); } } List isptItems = this.list(new LambdaQueryWrapper().in(QlyIsptItem::getId, list)); if (isptItems.isEmpty()) { throw new CoolException("数据错误:明细不存在!!"); } Map> listMap = isptItems.stream().collect(Collectors.groupingBy(QlyIsptItem::getIspectId)); for (Long key : listMap.keySet()) { QlyInspect inspect = qlyInspectService.getById(key); List items = listMap.get(key); Double safeQty = items.stream().mapToDouble(QlyIsptItem::getSafeQty).sum(); Double disQty = items.stream().mapToDouble(QlyIsptItem::getDisQty).sum(); Double qlyQty = safeQty + disQty; //安全数量,质检数量 inspect.setSafeQty(safeQty) .setIsptQty(qlyQty); if (Double.compare(disQty, 0) > 0) { inspect.setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_SECTION.val); } if (Double.compare(safeQty, inspect.getDlyQty()) == 0) { // inspect.setIsptStatus(QlyIsptStatus.QLY_ISPT_STAS_DONE.val); inspect.setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_EXCELLENT.val); } if (!qlyInspectService.updateById(inspect)) { throw new CoolException("质检数量修改失败!!"); } } return true; } }