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.AsnOrderItem; import com.vincent.rsf.server.manager.entity.QlyInspect; import com.vincent.rsf.server.manager.entity.QlyInspectResult; 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.AsnOrderItemService; import com.vincent.rsf.server.manager.service.QlyInspectResultService; 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.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; 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; @Autowired private AsnOrderItemService asnOrderItemService; @Autowired private QlyInspectResultService qlyInspectResultService; /** * @param * @return * @author Ryan * @description 批量修改 * @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()); List isptItems = this.list(new LambdaQueryWrapper().in(QlyIsptItem::getId, list)); if (isptItems.isEmpty()) { throw new CoolException("数据错误:明细不存在!!"); } for (QlyIsptItem item : isptItems) { List results = qlyInspectResultService.list(new LambdaQueryWrapper() .eq(QlyInspectResult::getIsptId, item.getIspectId()) .eq(QlyInspectResult::getIsptItemId, item.getId())); if (!results.isEmpty()) { //不为空做更新操作 } else { //为空做新增操作 QlyInspectResult result = new QlyInspectResult(); result.setIsptId(item.getIspectId()) .setAnfme(item.getSafeQty()) .setIsptItemId(item.getId()); if (item.getDisQty().compareTo(0.00) < 1) { continue; } result.setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_DEFECT.val); result.setAnfme(item.getDisQty()); if (!qlyInspectResultService.save(result)) { throw new CoolException("质检结论保存失败!!"); } if (item.getSafeQty().compareTo(0.00) < 1) { continue; } result.setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_EXCELLENT.val) .setAnfme(item.getSafeQty()); if (!qlyInspectResultService.save(result)) { throw new CoolException("质检结论保存失败!!"); } } } 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("明细修改失败"); } } Map> listMap = isptItems.stream().collect(Collectors.groupingBy(QlyIsptItem::getIspectId)); for (Long key : listMap.keySet()) { QlyInspect inspect = qlyInspectService.getById(key); List items = listMap.get(key); items.forEach(qlyIsptItem -> { AsnOrderItem orderItem = asnOrderItemService.getById(qlyIsptItem.getAsnItemId()); // if (qlyIsptItem.getSafeQty().compareTo(orderItem.getAnfme()) >= 0.00) { // orderItem.setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_EXCELLENT.val) // .setIsptStatus(QlyIsptStatus.QLY_ISPT_STAS_DONE.val); // } else if (qlyIsptItem.getSafeQty().compareTo(0.00) > 0.00 && qlyIsptItem.getSafeQty().compareTo(orderItem.getAnfme()) < 0.00) { // orderItem.setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_SECTION.val); // if (Double.compare(qlyIsptItem.getSafeQty() + qlyIsptItem.getDisQty(), orderItem.getAnfme()) >= 0.00 ) { // orderItem.setIsptStatus(QlyIsptStatus.QLY_ISPT_STAS_DONE.val); // } else { // orderItem.setIsptStatus(QlyIsptStatus.QLY_ISPT_STAS_ING.val); // } // } else { // orderItem.setIsptResult(QlyIsptResult.QLY_ISPT_RESULT_DEFECT.val) // .setIsptStatus(QlyIsptStatus.QLY_ISPT_STAS_DONE.val); // } if (!asnOrderItemService.updateById(orderItem)) { throw new CoolException("收货单明细修改失败!!"); } }); // 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; } }