|  |  | 
 |  |  | package com.vincent.rsf.server.manager.service.impl; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
 |  |  | import com.vincent.rsf.framework.common.R; | 
 |  |  | import com.vincent.rsf.framework.exception.CoolException; | 
 |  |  | import com.vincent.rsf.server.manager.controller.params.IsptOrderParam; | 
 |  |  | import com.vincent.rsf.server.manager.controller.params.QlyInspectAndItem; | 
 |  |  | import com.vincent.rsf.server.manager.entity.AsnOrder; | 
 |  |  | import com.vincent.rsf.server.manager.entity.AsnOrderItem; | 
 |  |  | import com.vincent.rsf.server.manager.entity.QlyIsptItem; | 
 |  |  | import com.vincent.rsf.server.manager.entity.*; | 
 |  |  | import com.vincent.rsf.server.manager.enums.QlyIsptStatus; | 
 |  |  | import com.vincent.rsf.server.manager.mapper.QlyInspectMapper; | 
 |  |  | import com.vincent.rsf.server.manager.entity.QlyInspect; | 
 |  |  | import com.vincent.rsf.server.manager.service.AsnOrderItemService; | 
 |  |  | import com.vincent.rsf.server.manager.service.AsnOrderService; | 
 |  |  | import com.vincent.rsf.server.manager.service.QlyInspectService; | 
 |  |  | import com.vincent.rsf.server.manager.service.*; | 
 |  |  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
 |  |  | import com.vincent.rsf.server.manager.service.QlyIsptItemService; | 
 |  |  | import com.vincent.rsf.server.system.constant.SerialRuleCode; | 
 |  |  | import com.vincent.rsf.server.system.utils.SerialRuleUtils; | 
 |  |  | import org.apache.commons.lang3.StringUtils; | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private QlyIsptItemService qlyIsptItemService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private CompanysService companysService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private WarehouseAreasItemService warehouseAreasItemService; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public List<AsnOrderItem> listByAsn(Map<String, Object> map) { | 
 |  |  |     public List<WkOrderItem> listByAsn(Map<String, Object> map) { | 
 |  |  |         if (Objects.isNull(map.get("asnCode"))) { | 
 |  |  |             throw new CoolException("收货单据明细编码不能为空!!"); | 
 |  |  |         } | 
 |  |  |         AsnOrder asnOrder = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>() | 
 |  |  |                 .eq(AsnOrder::getCode, map.get("asnCode")) | 
 |  |  |                 .ne(AsnOrder::getNtyStatus, 0)); | 
 |  |  |         if (Objects.isNull(asnOrder)) { | 
 |  |  |         WkOrder wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>() | 
 |  |  |                 .eq(WkOrder::getCode, map.get("asnCode")) | 
 |  |  |                 .ne(WkOrder::getNtyStatus, 0)); | 
 |  |  |         if (Objects.isNull(wkOrder)) { | 
 |  |  |             throw new CoolException("单据不存在!!"); | 
 |  |  |         } | 
 |  |  |         List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() | 
 |  |  |                 .eq(AsnOrderItem::getAsnCode, map.get("asnCode")) | 
 |  |  |                 .eq(AsnOrderItem::getNtyStatus, 1)); | 
 |  |  |         if (asnOrderItems.isEmpty()) { | 
 |  |  |         List<WkOrderItem> wkOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() | 
 |  |  |                 .eq(WkOrderItem::getOrderCode, map.get("asnCode")) | 
 |  |  |                 .eq(WkOrderItem::getNtyStatus, 1)); | 
 |  |  |         if (wkOrderItems.isEmpty()) { | 
 |  |  |             return new ArrayList<>(); | 
 |  |  |         } | 
 |  |  |         return asnOrderItems; | 
 |  |  |         return wkOrderItems; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  | 
 |  |  |     * @return | 
 |  |  |     * @time 2025/3/31 10:12 | 
 |  |  |     */ | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public List<AsnOrder> getUnInspect(Map<String, Object> params) { | 
 |  |  |         List<AsnOrder> asnOrders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>() | 
 |  |  |                 .eq(AsnOrder::getStatus, 1) | 
 |  |  |                 .eq(!Objects.isNull(params.get("asnCode")), AsnOrder::getCode, !Objects.isNull(params.get("asnCode")) ? params.get("asnCode").toString() : "") | 
 |  |  |                 .eq(AsnOrder::getNtyStatus, 0)); | 
 |  |  |         return asnOrders; | 
 |  |  |     public List<WarehouseAreasItem> getUnInspect(Map<String, String> params) { | 
 |  |  |         String code = params.get("asnCode"); | 
 |  |  |         List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService | 
 |  |  |                 .list(new QueryWrapper<WarehouseAreasItem>() | 
 |  |  |                         .select("asn_id as id, SUM(anfme) anfme, SUM(qty) qty, area_id, area_name, asn_code, asn_id, splr_id, splr_batch") | 
 |  |  |                         .eq(StringUtils.isNotBlank(code), "asn_code", code) | 
 |  |  |                         .lambda() | 
 |  |  | //                        .isNull(WarehouseAreasItem::getIsptResult) | 
 |  |  |                         .lt(WarehouseAreasItem::getWorkQty, 1) | 
 |  |  |                         .lt(WarehouseAreasItem::getQty, 1) | 
 |  |  |                 .groupBy(WarehouseAreasItem::getAsnCode)); | 
 |  |  |         return warehouseAreasItems; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |     * @author Ryan | 
 |  |  |     * @description 保存 | 
 |  |  |     * @param | 
 |  |  |     * @return | 
 |  |  |     * @time 2025/3/31 14:54 | 
 |  |  |     */ | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  | 
 |  |  |         if (Objects.isNull(param.getIds()) || param.getIds().isEmpty()) { | 
 |  |  |             throw new CoolException("单据ID不能为空!!"); | 
 |  |  |         } | 
 |  |  |         List<AsnOrder> asnOrders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, param.getIds()).eq(AsnOrder::getNtyStatus, 0)); | 
 |  |  |         if (asnOrders.isEmpty()) { | 
 |  |  |         List<WkOrder> wkOrders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>().in(WkOrder::getId, param.getIds())); | 
 |  |  |         if (wkOrders.isEmpty()) { | 
 |  |  |             throw new CoolException("单据不存在!!"); | 
 |  |  |         } | 
 |  |  |         List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getAsnId, param.getIds())); | 
 |  |  |         if (orderItems.isEmpty()) { | 
 |  |  |             throw new CoolException("单据明细不存在!!"); | 
 |  |  |         } | 
 |  |  |         Map<Long, List<AsnOrderItem>> listMap = orderItems.stream().collect(Collectors.groupingBy(AsnOrderItem::getAsnId)); | 
 |  |  |         for (AsnOrder asnOrder : asnOrders) { | 
 |  |  | //        List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getAsnId, param.getIds())); | 
 |  |  | //        if (orderItems.isEmpty()) { | 
 |  |  | //            throw new CoolException("单据明细不存在!!"); | 
 |  |  | //        } | 
 |  |  |  | 
 |  |  |         List<WarehouseAreasItem> orderItems = warehouseAreasItemService.list(new LambdaQueryWrapper<WarehouseAreasItem>() | 
 |  |  |                 .in(WarehouseAreasItem::getAsnId, param.getIds())); | 
 |  |  |         Map<Long, List<WarehouseAreasItem>> listMap = orderItems.stream().collect(Collectors.groupingBy(WarehouseAreasItem::getAsnId)); | 
 |  |  |         for (WkOrder wkOrder : wkOrders) { | 
 |  |  |             QlyInspect inspect = new QlyInspect(); | 
 |  |  |             String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_INSPECT_CODE, null); | 
 |  |  |             if (StringUtils.isBlank(ruleCode)) { | 
 |  |  |                 throw new CoolException("策略错误:请检查策略「" + SerialRuleCode.SYS_INSPECT_CODE + "」是否设置正确!!"); | 
 |  |  |             } | 
 |  |  |             inspect.setCode(ruleCode) | 
 |  |  |                     .setWkType(asnOrder.getWkType()) | 
 |  |  |                     .setWkType(wkOrder.getWkType()) | 
 |  |  |                     .setIsptStatus(QlyIsptStatus.QLY_ISPT_STAS_ING.val) | 
 |  |  |                     .setCreateBy(loginUserId) | 
 |  |  |                     .setAsnId(asnOrder.getId()) | 
 |  |  |                     .setAsnCode(asnOrder.getCode()); | 
 |  |  |                     .setAsnId(wkOrder.getId()) | 
 |  |  |                     .setAsnCode(wkOrder.getCode()); | 
 |  |  |             /**获取单据明细*/ | 
 |  |  |             List<AsnOrderItem> asnOrderItems = listMap.get(asnOrder.getId()); | 
 |  |  |             List<WarehouseAreasItem> asnOrderItems = listMap.get(wkOrder.getId()); | 
 |  |  |             if (Objects.isNull(asnOrderItems) || asnOrderItems.isEmpty()) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             double rcptQty = asnOrderItems.stream().mapToDouble(AsnOrderItem::getQty).sum(); | 
 |  |  |             double anfme = asnOrderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); | 
 |  |  |             inspect.setRcptQty(rcptQty).setDlyQty(anfme); | 
 |  |  |             double anfme = asnOrderItems.stream().mapToDouble(WarehouseAreasItem::getAnfme).sum(); | 
 |  |  |             inspect.setRcptQty(anfme); | 
 |  |  |             if (!this.save(inspect)) { | 
 |  |  |                 throw new CoolException("单据" + asnOrder.getCode() + "保存失败!!"); | 
 |  |  |                 throw new CoolException("单据" + wkOrder.getCode() + "保存失败!!"); | 
 |  |  |             } | 
 |  |  |             List<QlyIsptItem> items = new ArrayList<>(); | 
 |  |  |             for (AsnOrderItem orderItem : asnOrderItems) { | 
 |  |  |             for (WarehouseAreasItem orderItem : asnOrderItems) { | 
 |  |  |                 QlyIsptItem isptItem = new QlyIsptItem(); | 
 |  |  |                 BeanUtils.copyProperties(orderItem, isptItem); | 
 |  |  |                 isptItem.setAsnItemId(orderItem.getId()) | 
 |  |  |                         .setIspectId(inspect.getId()) | 
 |  |  |                         .setRcptQty(orderItem.getQty()) | 
 |  |  |                         .setRcptQty(orderItem.getAnfme()) | 
 |  |  |                         .setRcptId(orderItem.getId()) | 
 |  |  |                         .setPlatItemId(orderItem.getPlatItemId()) | 
 |  |  |                         .setPlatOrderCode(orderItem.getPlatOrderCode()) | 
 |  |  |                         .setPlatWorkCode(orderItem.getPlatWorkCode()) | 
 |  |  |                         .setProjectCode(orderItem.getProjectCode()) | 
 |  |  |                         .setAnfme(0.0) | 
 |  |  |                         .setFieldsIndex(orderItem.getFieldsIndex()) | 
 |  |  |                         .setSplrBatch(orderItem.getSplrBatch()) | 
 |  |  |                         .setSplrName(orderItem.getSplrId$()) | 
 |  |  |                         .setCreateBy(loginUserId) | 
 |  |  |                         .setUpdateBy(loginUserId) | 
 |  |  |                         .setDlyQty(orderItem.getAnfme()); | 
 |  |  |                 items.add(isptItem); | 
 |  |  |             } | 
 |  |  | 
 |  |  |                 throw new CoolException("明细保存失败!!"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | //        if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>().in(AsnOrder::getId, param.getIds()))) { | 
 |  |  | //            throw new CoolException("报检状态修改失败!!"); | 
 |  |  | //        } | 
 |  |  |         return R.ok("保存成功!!"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public boolean qlySave(QlyInspect qlyInspect) { | 
 |  |  |         String code = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_INSPECT_CODE, qlyInspect); | 
 |  |  |         if (Objects.isNull(code) || StringUtils.isBlank(code)) { | 
 |  |  |             throw new CoolException("编码规则错误:" + "请检查编码:" + "「SYS_INSPECT_CODE」" + "是否设置成功!!"); | 
 |  |  |         } | 
 |  |  |         qlyInspect.setCode(code); | 
 |  |  |         if (Objects.isNull(qlyInspect.getAsnCode()) || StringUtils.isBlank(qlyInspect.getAsnCode())) { | 
 |  |  |             throw new CoolException("收货单号不能为空!!"); | 
 |  |  |         } | 
 |  |  |         WkOrder wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getId, qlyInspect.getAsnCode())); | 
 |  |  |         if (Objects.isNull(wkOrder)) { | 
 |  |  |             throw new CoolException("收货单不存在!!"); | 
 |  |  |         } | 
 |  |  |         qlyInspect.setAsnCode(wkOrder.getCode()).setAsnId(wkOrder.getId()); | 
 |  |  |  | 
 |  |  |         return this.save(qlyInspect); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * @author Ryan | 
 |  |  |      * @date 2025/5/14 | 
 |  |  |      * @description: 质检审核确认 | 
 |  |  |      * @version 1.0 | 
 |  |  |      */ | 
 |  |  |     @Override | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public R verifyComplate(Long id) { | 
 |  |  |         if (Objects.isNull(id)) { | 
 |  |  |             throw new CoolException("参数不能为空!!"); | 
 |  |  |         } | 
 |  |  |         QlyInspect inspect = this.getById(id); | 
 |  |  |         if (Objects.isNull(inspect)) { | 
 |  |  |             throw new CoolException("质检单据不存在!!"); | 
 |  |  |         } | 
 |  |  |         inspect.setIsptStatus(QlyIsptStatus.QLY_ISPT_STAS_DONE.val); | 
 |  |  |         if (!this.saveOrUpdate(inspect)) { | 
 |  |  |             throw new CoolException("单据修改失败!!"); | 
 |  |  |         } | 
 |  |  |         List<QlyIsptItem> items = qlyIsptItemService.selectIsptResult(new LambdaQueryWrapper<QlyIsptItem>().eq(QlyIsptItem::getIspectId, inspect.getId())); | 
 |  |  |         if (items.isEmpty()) { | 
 |  |  |             throw new CoolException("质检单据明细不存在!!"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         for (QlyIsptItem isptItem : items) { | 
 |  |  |             if (isptItem.getSafeQty().compareTo(0.0) <= 0 && isptItem.getDisQty().compareTo(0.0) <= 0 ) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             WarehouseAreasItem item = warehouseAreasItemService.getById(isptItem.getRcptId()); | 
 |  |  |             if (Objects.isNull(item)) { | 
 |  |  |                 throw new CoolException("库存明细不存在!!"); | 
 |  |  |             } | 
 |  |  |             qlyIsptItemService.confirmReceipt(isptItem, item); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return R.ok("审核完成!!"); | 
 |  |  |     } | 
 |  |  | } |