|  |  |  | 
|---|
|  |  |  | import com.vincent.rsf.server.api.entity.dto.PoItemsDto; | 
|---|
|  |  |  | import com.vincent.rsf.server.api.service.ReceiveMsgService; | 
|---|
|  |  |  | import com.vincent.rsf.server.api.service.ReportMsgService; | 
|---|
|  |  |  | import com.vincent.rsf.server.common.utils.DateUtils; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.controller.dto.DashboardDto; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.controller.dto.StockTrandDto; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.controller.dto.StockTransItemDto; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.controller.params.BatchUpdateParam; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.entity.*; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.enums.AsnExceStatus; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.enums.POExceStatus; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.enums.*; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.mapper.AsnOrderMapper; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.service.*; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
|---|
|  |  |  | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.annotation.Resource; | 
|---|
|  |  |  | import java.text.DateFormat; | 
|---|
|  |  |  | import java.text.ParsePosition; | 
|---|
|  |  |  | import java.text.SimpleDateFormat; | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | private PurchaseService purchaseService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private PurchaseItemService purchaseItemService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AsnOrderService asnOrderService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private TaskService taskService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public boolean notifyInspect(List<WkOrder> orders) { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (Objects.isNull(params)) { | 
|---|
|  |  |  | throw new CoolException("查询条件不能为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() | 
|---|
|  |  |  | .like(!Objects.isNull(params.get("maktx")), AsnOrderItem::getMaktx, params.get("maktx")) | 
|---|
|  |  |  | .eq(!Objects.isNull(params.get("matnrCode")), AsnOrderItem::getMatnrCode, params.get("matnrCode"))); | 
|---|
|  |  |  | List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() | 
|---|
|  |  |  | .like(!Objects.isNull(params.get("maktx")), WkOrderItem::getMaktx, params.get("maktx")) | 
|---|
|  |  |  | .eq(!Objects.isNull(params.get("matnrCode")), WkOrderItem::getMatnrCode, params.get("matnrCode"))); | 
|---|
|  |  |  | if (orderItems.isEmpty()) { | 
|---|
|  |  |  | return new ArrayList<>(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Long> longList = orderItems.stream().map(AsnOrderItem::getAsnId).collect(Collectors.toList()); | 
|---|
|  |  |  | List<Long> longList = orderItems.stream().map(WkOrderItem::getOrderId).collect(Collectors.toList()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return this.listByIds(longList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | public void svaeOrUpdateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) throws Exception { | 
|---|
|  |  |  | WkOrder orders = params.getOrders(); | 
|---|
|  |  |  | params.getItems().forEach(item -> { | 
|---|
|  |  |  | item.put("asnId", orders.getId()); | 
|---|
|  |  |  | item.put("asnCode", orders.getCode()); | 
|---|
|  |  |  | item.put("orderId", orders.getId()); | 
|---|
|  |  |  | item.put("orderCode", orders.getCode()); | 
|---|
|  |  |  | item.put("poCode", orders.getPoCode()); | 
|---|
|  |  |  | item.put("createBy", loginUserId); | 
|---|
|  |  |  | item.put("updateBy", loginUserId); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new CoolException("明细保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() | 
|---|
|  |  |  | .eq(AsnOrderItem::getAsnId, params.getOrders().getId())); | 
|---|
|  |  |  | double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); | 
|---|
|  |  |  | List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() | 
|---|
|  |  |  | .eq(WkOrderItem::getOrderId, params.getOrders().getId())); | 
|---|
|  |  |  | double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum(); | 
|---|
|  |  |  | orders.setAnfme(sum); | 
|---|
|  |  |  | if (!this.updateById(orders)) { | 
|---|
|  |  |  | throw new CoolException("计划收货数量修改失败!!"); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!this.save(order)) { | 
|---|
|  |  |  | throw new CoolException("ASN单据保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<AsnOrderItem> orderItems = new ArrayList<>(); | 
|---|
|  |  |  | List<WkOrderItem> orderItems = new ArrayList<>(); | 
|---|
|  |  |  | for (PurchaseItem item : itemList) { | 
|---|
|  |  |  | AsnOrderItem orderItem = new AsnOrderItem(); | 
|---|
|  |  |  | WkOrderItem orderItem = new WkOrderItem(); | 
|---|
|  |  |  | Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, item.getMatnrCode())); | 
|---|
|  |  |  | if (Objects.isNull(matnr)) { | 
|---|
|  |  |  | throw new CoolException("数据错误:当前物料不存在!!"); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new CoolException("新建单据数量不能大于计划数量!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | orderItem.setAnfme(item.getAnfme()) | 
|---|
|  |  |  | .setAsnId(order.getId()) | 
|---|
|  |  |  | .setOrderId(order.getId()) | 
|---|
|  |  |  | .setSplrName(item.getSplrName()) | 
|---|
|  |  |  | .setAsnCode(code) | 
|---|
|  |  |  | .setOrderCode(code) | 
|---|
|  |  |  | .setSplrBatch(item.getSplrBatch()) | 
|---|
|  |  |  | .setSplrCode(item.getSplrCode()) | 
|---|
|  |  |  | .setPoDetlId(item.getId()) | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); | 
|---|
|  |  |  | double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!asnOrderItemService.saveBatch(orderItems)) { | 
|---|
|  |  |  | throw new CoolException(("Asn单据明细保存失败!!")); | 
|---|
|  |  |  | 
|---|
|  |  |  | @Transactional(rollbackFor = Exception.class) | 
|---|
|  |  |  | public R removeOrders(List<Long> ids) { | 
|---|
|  |  |  | for (Long id : ids) { | 
|---|
|  |  |  | List<AsnOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() | 
|---|
|  |  |  | .eq(AsnOrderItem::getAsnId, id)); | 
|---|
|  |  |  | List<WkOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() | 
|---|
|  |  |  | .eq(WkOrderItem::getOrderId, id)); | 
|---|
|  |  |  | if (list.isEmpty()) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | double sum = list.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); | 
|---|
|  |  |  | double sum = list.stream().mapToDouble(WkOrderItem::getAnfme).sum(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>() | 
|---|
|  |  |  | .eq(Purchase::getCode, list.stream().findFirst().get().getPoCode())); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new CoolException("任务中单据不可删除!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>() | 
|---|
|  |  |  | .in(AsnOrderItem::getAsnId, ids))) { | 
|---|
|  |  |  | if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>() | 
|---|
|  |  |  | .in(WkOrderItem::getOrderId, ids))) { | 
|---|
|  |  |  | //            throw new CoolException("Details Delete Fail"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return R.ok("操作成功!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取首页表头数据 | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R getDashbord() { | 
|---|
|  |  |  | DashboardDto dto = new DashboardDto(); | 
|---|
|  |  |  | //获取入库数量 | 
|---|
|  |  |  | DashboardDto trandDto = this.baseMapper.getDashbord(OrderType.ORDER_IN.type, TaskType.TASK_TYPE_IN.type + ""); | 
|---|
|  |  |  | dto.setInAnf(trandDto.getAnfme()).setTaskIn(trandDto.getRealAnfme()).setTotalIn(trandDto.getAnfme() + trandDto.getRealAnfme()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取出库单数量 | 
|---|
|  |  |  | DashboardDto outTrand = this.baseMapper.getDashbord(OrderType.ORDER_OUT.type, TaskType.TASK_TYPE_OUT.type + ""); | 
|---|
|  |  |  | dto.setOutAnf(outTrand.getAnfme()).setTaskOut(outTrand.getRealAnfme()).setTotalOut(outTrand.getAnfme() + outTrand.getRealAnfme()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取执行中任务数量 | 
|---|
|  |  |  | List<Task> tasks = taskService.list(new LambdaQueryWrapper<>()); | 
|---|
|  |  |  | if (!tasks.isEmpty()) { | 
|---|
|  |  |  | dto.setTaskQty(tasks.size()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok().add(dto); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取出入库趋势 | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R getStockTrand() { | 
|---|
|  |  |  | List<String> days = DateUtils.getLastMonthDays("yyyy-MM-dd"); | 
|---|
|  |  |  | LambdaQueryWrapper<StockStatistic> queryWrapper = new LambdaQueryWrapper<StockStatistic>() | 
|---|
|  |  |  | .in(StockStatistic::getTaskType, Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type)); | 
|---|
|  |  |  | List<StockTransItemDto> items = this.baseMapper.getStockTrand(queryWrapper); | 
|---|
|  |  |  | if (items.isEmpty()) { | 
|---|
|  |  |  | return R.ok(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<StockTransItemDto> stockDtos = new ArrayList<>(); | 
|---|
|  |  |  | days.forEach(day -> { | 
|---|
|  |  |  | StockTransItemDto itemDto = new StockTransItemDto(); | 
|---|
|  |  |  | itemDto.setInQty(0).setOutQty(0).setOutAnfme(0).setOutAnfme(0); | 
|---|
|  |  |  | items.forEach(item -> { | 
|---|
|  |  |  | if (item.getOrderTime().equals(day)) { | 
|---|
|  |  |  | BeanUtils.copyProperties(item, itemDto); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | itemDto.setOrderTime(day); | 
|---|
|  |  |  | stockDtos.add(itemDto); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取最大值 | 
|---|
|  |  |  | Optional<Integer> max = stockDtos.stream().map(StockTransItemDto::getInQty).filter(Objects::nonNull).max(Comparator.naturalOrder()); | 
|---|
|  |  |  | Optional<Integer> maxOut = stockDtos.stream().map(StockTransItemDto::getOutQty).filter(Objects::nonNull).max(Comparator.naturalOrder()); | 
|---|
|  |  |  | int maxed = Math.max(max.orElse(Integer.MIN_VALUE), maxOut.orElse(Integer.MIN_VALUE)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | StockTrandDto trandDto = new StockTrandDto(); | 
|---|
|  |  |  | trandDto.setMaxQty(maxed).setTrandItem(stockDtos); | 
|---|
|  |  |  | return R.ok().add(trandDto); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!this.updateById(asrder)) { | 
|---|
|  |  |  | throw new CoolException("单据关闭失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, asrder.getId())); | 
|---|
|  |  |  | List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, asrder.getId())); | 
|---|
|  |  |  | if (orderItems.isEmpty()) { | 
|---|
|  |  |  | throw new CoolException("收货明细为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new CoolException("主单历史档添加失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<AsnOrderItemLog> logs = new ArrayList<>(); | 
|---|
|  |  |  | List<AsnOrderItem> items = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId())); | 
|---|
|  |  |  | List<WkOrderItem> items = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId())); | 
|---|
|  |  |  | items.forEach(item -> { | 
|---|
|  |  |  | AsnOrderItemLog itemLog = new AsnOrderItemLog(); | 
|---|
|  |  |  | BeanUtils.copyProperties(item, itemLog); | 
|---|
|  |  |  | itemLog.setAsnItemId(itemLog.getId()) | 
|---|
|  |  |  | .setLogId(orderLog.getId()) | 
|---|
|  |  |  | .setAsnId(item.getAsnId()); | 
|---|
|  |  |  | .setAsnId(item.getOrderId()); | 
|---|
|  |  |  | logs.add(itemLog); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!asnOrderItemLogService.saveBatch(logs)) { | 
|---|
|  |  |  | throw new CoolException("通知单明细历史档保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId()))) { | 
|---|
|  |  |  | if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()))) { | 
|---|
|  |  |  | throw new CoolException("原单据明细删除失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!this.removeById(asrder.getId())) { | 
|---|