| | |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | |
| | | @Service |
| | |
| | | } |
| | | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", finishedOperateLogMapper.getSelectFinishedOperateLogReport(offset, pageSize,startDate, endDate, finishedOperateLog,type)); |
| | | map.put("total", finishedOperateLogMapper.getSelectFinishedOperateLogReportPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog,type)); |
| | | map.put("data", finishedOperateLogMapper.getSelectFinishedOperateLogReport(offset, pageSize,startDate, endDate, finishedOperateLog,type,"date")); |
| | | map.put("total", finishedOperateLogMapper.getSelectFinishedOperateLogReportPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog,type,"date")); |
| | | List<String> list = new ArrayList<>(); |
| | | list.add(startDate); |
| | | list.add(endDate); |
| | |
| | | Order order = orderMapper.selectOne(new QueryWrapper<Order>().eq("order_id",orderId)); |
| | | if(order.getWarehousing()!=2){ |
| | | List<OrderDetail> orderDetailList=finishedGoodsInventoryMapper.getSelectOrderDetail(orderId); |
| | | for (OrderDetail orderDetail:orderDetailList){ |
| | | FlowCard flowCard =flowCardMapper.selectOne( |
| | | for (OrderDetail orderDetail:orderDetailList) { |
| | | List<FlowCard> flowCards = flowCardMapper.selectList( |
| | | new LambdaQueryWrapper<FlowCard>() |
| | | .eq(FlowCard::getOrderId, orderDetail.getOrderId()) |
| | | .eq(FlowCard::getOrderNumber, orderDetail.getOrderNumber()) |
| | | .groupBy(FlowCard::getOrderId,FlowCard::getOrderNumber)); |
| | | FinishedGoodsInventory finishedGoodsInventory = finishedGoodsInventoryMapper.findOrderNumberd(orderDetail.getOrderId(),orderDetail.getOrderNumber()); |
| | | .eq(FlowCard::getOrderId, orderDetail.getOrderId()) |
| | | .eq(FlowCard::getOrderNumber, orderDetail.getOrderNumber()) |
| | | .groupBy(FlowCard::getOrderId, FlowCard::getOrderNumber,FlowCard::getProcessId)); |
| | | FinishedGoodsInventory finishedGoodsInventory = finishedGoodsInventoryMapper.findOrderNumberd(orderDetail.getOrderId(), orderDetail.getOrderNumber()); |
| | | for (FlowCard flowCard:flowCards){ |
| | | |
| | | |
| | | // 计算剩余数量 |
| | | long quantity; |
| | | if (flowCard != null) { |
| | | quantity = flowCard.getQuantity() - flowCard.getReceivedQuantity(); |
| | | } else { |
| | | quantity = orderDetail.getQuantity() - orderDetail.getWarehouseNum(); |
| | | } |
| | | |
| | | if (quantity <= 0) continue ; |
| | | |
| | | int calculateType=order.getCalculateType(); |
| | | double deliveryDetailMoney = 0.0; |
| | | double deliveryDetailArea = 0.0; |
| | | |
| | | BigDecimal getComputeArea= BigDecimal.valueOf(orderDetail.getComputeArea()); |
| | | BigDecimal getQuantity= BigDecimal.valueOf(quantity); |
| | | BigDecimal getPrice= BigDecimal.valueOf(orderDetail.getPrice()); |
| | | BigDecimal getWidth= BigDecimal.valueOf(orderDetail.getWidth()); |
| | | BigDecimal getHeight= BigDecimal.valueOf(orderDetail.getHeight()); |
| | | BigDecimal singlePieceArea =getComputeArea.multiply(getQuantity).setScale(2, RoundingMode.HALF_UP) |
| | | .multiply(getPrice).setScale(2, RoundingMode.HALF_UP); |
| | | //根据订单计算方式进行金额计算 |
| | | if (calculateType==1){ |
| | | deliveryDetailMoney=singlePieceArea.doubleValue(); |
| | | deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); |
| | | |
| | | }else if (calculateType==2){ |
| | | //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 |
| | | if(Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea())&&Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())){ |
| | | deliveryDetailMoney=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP) |
| | | .multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | deliveryDetailArea=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); |
| | | }else{ |
| | | deliveryDetailMoney=singlePieceArea.doubleValue(); |
| | | deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); |
| | | // 计算剩余数量 |
| | | long quantity; |
| | | if (flowCard != null) { |
| | | quantity = flowCard.getQuantity() - flowCard.getReceivedQuantity(); |
| | | } else { |
| | | quantity = orderDetail.getQuantity() - orderDetail.getWarehouseNum(); |
| | | } |
| | | }else if (calculateType==3){ |
| | | deliveryDetailMoney=getQuantity.multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); |
| | | |
| | | }else if (calculateType==4){ |
| | | //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 |
| | | if(Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea())&&Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())){ |
| | | deliveryDetailMoney=getWidth.multiply(getHeight).multiply(getQuantity).multiply(getPrice). |
| | | divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); |
| | | deliveryDetailArea=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); |
| | | }else{ |
| | | deliveryDetailMoney=getComputeArea.multiply(getQuantity).multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); |
| | | if (quantity <= 0) continue; |
| | | |
| | | int calculateType = order.getCalculateType(); |
| | | double deliveryDetailMoney = 0.0; |
| | | double deliveryDetailArea = 0.0; |
| | | |
| | | BigDecimal getComputeArea = BigDecimal.valueOf(orderDetail.getComputeArea()); |
| | | BigDecimal getQuantity = BigDecimal.valueOf(quantity); |
| | | BigDecimal getPrice = BigDecimal.valueOf(orderDetail.getPrice()); |
| | | BigDecimal getWidth = BigDecimal.valueOf(orderDetail.getWidth()); |
| | | BigDecimal getHeight = BigDecimal.valueOf(orderDetail.getHeight()); |
| | | BigDecimal singlePieceArea = getComputeArea.multiply(getQuantity).setScale(2, RoundingMode.HALF_UP) |
| | | .multiply(getPrice).setScale(2, RoundingMode.HALF_UP); |
| | | //根据订单计算方式进行金额计算 |
| | | if (calculateType == 1) { |
| | | deliveryDetailMoney = singlePieceArea.doubleValue(); |
| | | deliveryDetailArea = getComputeArea.multiply(getQuantity).doubleValue(); |
| | | |
| | | } else if (calculateType == 2) { |
| | | //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 |
| | | if (Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea()) && Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())) { |
| | | deliveryDetailMoney = getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP) |
| | | .multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | deliveryDetailArea = getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); |
| | | } else { |
| | | deliveryDetailMoney = singlePieceArea.doubleValue(); |
| | | deliveryDetailArea = getComputeArea.multiply(getQuantity).doubleValue(); |
| | | } |
| | | } else if (calculateType == 3) { |
| | | deliveryDetailMoney = getQuantity.multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | deliveryDetailArea = getComputeArea.multiply(getQuantity).doubleValue(); |
| | | |
| | | } else if (calculateType == 4) { |
| | | //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 |
| | | if (Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea()) && Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())) { |
| | | deliveryDetailMoney = getWidth.multiply(getHeight).multiply(getQuantity).multiply(getPrice). |
| | | divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); |
| | | deliveryDetailArea = getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); |
| | | } else { |
| | | deliveryDetailMoney = getComputeArea.multiply(getQuantity).multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | deliveryDetailArea = getComputeArea.multiply(getQuantity).doubleValue(); |
| | | } |
| | | } |
| | | |
| | | // 更新订单明细 |
| | | orderDetail.setQuantity(quantity); |
| | | orderDetail.setGrossAmount(deliveryDetailMoney); |
| | | orderDetail.setComputeGrossArea(deliveryDetailArea); |
| | | |
| | | // 更新库存 |
| | | if (finishedGoodsInventory != null) { |
| | | finishedGoodsInventoryMapper.updateOrderInventory(orderDetail); |
| | | } else { |
| | | finishedGoodsInventoryMapper.insertOrderFinishedGoodsInventory(orderDetail); |
| | | } |
| | | |
| | | // 记录操作日志 |
| | | String processId = flowCard != null ? flowCard.getProcessId() : ""; |
| | | finishedOperateLogMapper.insertOrderFinishedOperateLog(orderDetail, userName, oddNumber, processId); |
| | | finishedGoodsInventoryMapper.updateOrderNumberConut(orderDetail.getOrderId(), orderDetail.getOrderNumber(), orderDetail.getQuantity()); |
| | | |
| | | // 更新流程卡 |
| | | if (flowCard != null) { |
| | | flowCard.setInventoryQuantity((int) quantity); |
| | | Order order1 = new Order(); |
| | | order1.setOrderId(flowCard.getOrderId()); |
| | | flowCard.setOrder(order1); |
| | | finishedGoodsInventoryMapper.updateflowcard(flowCard); |
| | | } |
| | | } |
| | | |
| | | // 更新订单明细 |
| | | orderDetail.setQuantity(quantity); |
| | | orderDetail.setGrossAmount(deliveryDetailMoney); |
| | | orderDetail.setComputeGrossArea(deliveryDetailArea); |
| | | |
| | | // 更新库存 |
| | | if (finishedGoodsInventory != null) { |
| | | finishedGoodsInventoryMapper.updateOrderInventory(orderDetail); |
| | | } else { |
| | | finishedGoodsInventoryMapper.insertOrderFinishedGoodsInventory(orderDetail); |
| | | } |
| | | |
| | | // 记录操作日志 |
| | | String processId = flowCard != null ? flowCard.getProcessId() : ""; |
| | | finishedOperateLogMapper.insertOrderFinishedOperateLog(orderDetail, userName, oddNumber, processId); |
| | | finishedGoodsInventoryMapper.updateOrderNumberConut(orderDetail.getOrderId(), orderDetail.getOrderNumber(), orderDetail.getQuantity()); |
| | | |
| | | // 更新流程卡 |
| | | if (flowCard != null) { |
| | | flowCard.setInventoryQuantity((int) quantity); |
| | | Order order1 = new Order(); |
| | | order1.setOrderId(flowCard.getOrderId()); |
| | | flowCard.setOrder(order1); |
| | | finishedGoodsInventoryMapper.updateflowcard(flowCard); |
| | | } |
| | | |
| | | } |
| | | finishedGoodsInventoryMapper.updateOrderWarehousingState(orderId,2); |
| | | } |
| | |
| | | |
| | | return map; |
| | | } |
| | | |
| | | public Map<String, Object> getSelectFinishedOperateLogReportByDateTime(String type, Integer pageNum, Integer pageSize, List<String> selectDate, String reportTime, FinishedOperateLog finishedOperateLog) { |
| | | Integer offset = (pageNum-1)*pageSize; |
| | | String startDate = toReportTime(LocalDate.now().minusDays(7).toString(), reportTime); |
| | | String endDate = toReportTime(LocalDate.now().toString(), reportTime); |
| | | |
| | | // 如果前端传了时间,就用前端日期 + reportTime |
| | | if (selectDate != null && selectDate.size() == 2) { |
| | | if (selectDate.get(0) != null && !selectDate.get(0).isEmpty()) { |
| | | startDate = toReportTime(selectDate.get(0), reportTime); |
| | | } |
| | | if (selectDate.get(1) != null && !selectDate.get(1).isEmpty()) { |
| | | endDate = toReportTime(selectDate.get(1), reportTime); |
| | | } |
| | | } |
| | | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", finishedOperateLogMapper.getSelectFinishedOperateLogReport(offset, pageSize,startDate, endDate, finishedOperateLog,type,"datetime")); |
| | | map.put("total", finishedOperateLogMapper.getSelectFinishedOperateLogReportPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog,type,"datetime")); |
| | | List<String> list = new ArrayList<>(); |
| | | list.add(startDate); |
| | | list.add(endDate); |
| | | map.put("selectDate",list); |
| | | return map; |
| | | } |
| | | |
| | | private static final DateTimeFormatter DATE_TIME_FMT = |
| | | DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | |
| | | private String toReportTime(String dateStr, String reportTime) { |
| | | if (dateStr == null || dateStr.isEmpty()) { |
| | | return null; |
| | | } |
| | | |
| | | // 只保留 yyyy-MM-dd,防止前端传完整时间导致 parse 异常 |
| | | String onlyDate = dateStr.length() > 10 ? dateStr.substring(0, 10) : dateStr; |
| | | |
| | | |
| | | String[] parts = reportTime.split(":"); |
| | | int hour = Integer.parseInt(parts[0]); |
| | | int minute = parts.length > 1 ? Integer.parseInt(parts[1]) : 0; |
| | | int second = parts.length > 2 ? Integer.parseInt(parts[2]) : 0; |
| | | |
| | | LocalDate date = LocalDate.parse(onlyDate); |
| | | LocalTime time = LocalTime.of(hour, minute, second); |
| | | |
| | | return LocalDateTime.of(date, time).format(DATE_TIME_FMT); |
| | | } |
| | | |
| | | public List<FinishedOperateLogDTO> exportFinishedOperateLogReportByDatetime(List<String> dates, String type) { |
| | | return finishedOperateLogMapper.exportFinishedOperateLogReportByDatetime(dates,type); |
| | | } |
| | | } |