于杰
2025-11-04 7cf8f8fc1abca63423c1fb4618363f8a9d283f9d
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
@@ -10,6 +10,7 @@
import com.example.erp.dto.mm.FinishedOperateLogDTO;
import com.example.erp.entity.mm.FinishedGoodsInventory;
import com.example.erp.entity.mm.FinishedOperateLog;
import com.example.erp.entity.mm.MaterialInventory;
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.sd.Delivery;
import com.example.erp.entity.sd.DeliveryDetail;
@@ -32,6 +33,7 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.SQLOutput;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -1025,15 +1027,74 @@
                                .eq(FinishedGoodsInventory::getOrderNumber, finishedOperateLog.getOperationNumber())
                                .eq(FinishedGoodsInventory::getBoxNo, finishedOperateLog.getRemarks())
                        );
                if(delivery!=null){
                /*if(delivery!=null){
                    return "false1";
                }
                if(existFinishedGoodsInventory.getQuantityAvailable()<finishedOperateLog.getQuantity()){
                }*/
                if(existFinishedGoodsInventory.getQuantityAvailable()<finishedOperateLog.getCancelAvailable()){
                    return "false2";
                }
                    //修改记录表
                    finishedOperateLogMapper.updateFinishedOperateLogState(finishedOperateLog,"已作废");
                    if(existFinishedGoodsInventory.getQuantityAvailable()>finishedOperateLog.getCancelAvailable()
                        && finishedOperateLog.getQuantity()>finishedOperateLog.getCancelAvailable()){
                        Order order=orderMapper.selectOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderId,finishedOperateLog.getOrderId()));
                        OrderDetail orderDetail=orderDetailMapper.selectOne(new LambdaQueryWrapper<OrderDetail>()
                                .eq(OrderDetail::getOrderId,finishedOperateLog.getOrderId())
                                .eq(OrderDetail::getOrderNumber,finishedOperateLog.getOperationNumber())
                        );
                        if(order != null && orderDetail != null){
                            Integer calculateType=order.getCalculateType();
                            double deliveryDetailMoney = 0.0;
                            double deliveryDetailArea = 0.0;
                            BigDecimal getComputeArea= BigDecimal.valueOf(orderDetail.getComputeArea());
                            BigDecimal getQuantity= BigDecimal.valueOf(finishedOperateLog.getCancelAvailable());
                            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();
                                }
                            }
                            finishedOperateLogMapper.updateFinishedOperateLogQuantity(finishedOperateLog,deliveryDetailMoney,deliveryDetailArea);
                        }else{
                            return "false3";
                        }
                    }else{
                        finishedOperateLogMapper.updateFinishedOperateLogState(finishedOperateLog,"已作废");
                    }
                    //修改库存表入库数量
                    finishedGoodsInventoryMapper.updateInventoryOut(finishedOperateLog);
                    if(finishedOperateLog.getProcessId()!=null){
@@ -1042,7 +1103,7 @@
                    }
                    //修改订单明细表入库数量
                    finishedGoodsInventoryMapper.updateOutOrderNumberConut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),finishedOperateLog.getQuantity());
                    finishedGoodsInventoryMapper.updateOutOrderNumberConut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),finishedOperateLog.getCancelAvailable());
                    //判断订单是否全部入库
                    if (Objects.equals(ordersum, ordernumbersum)) {
                        //修改订单表入库状态
@@ -1274,4 +1335,34 @@
        map.put("data", list);
        return map;
    }
    public Map<String, Object> appFinishedGoodsInventoryList() {
        Map<String, Object> map = new HashMap<>();
        Map<String, Object> totalSum  = new HashMap<>();
        Integer inventory = 0;
        Integer quantityAvailable = 0;
        Double area = 0.00;
        Double computeGrossArea = 0.00;
        List<FinishedGoodsInventory> finishedGoodsInventoryList=finishedGoodsInventoryMapper.getFinishedGoodsInventoryList();
        if(!finishedGoodsInventoryList.isEmpty()){
            for(FinishedGoodsInventory finishedGoodsInventory:finishedGoodsInventoryList){
                inventory += finishedGoodsInventory.getInventory();
                quantityAvailable += finishedGoodsInventory.getQuantityAvailable();
                area += finishedGoodsInventory.getArea();
                computeGrossArea+=finishedGoodsInventory.getComputeGrossArea();
            }
            DecimalFormat df = new DecimalFormat("#.00");
            totalSum.put("inventory",inventory);
            totalSum.put("quantityAvailable",quantityAvailable);
            totalSum.put("area", df.format(area));
            totalSum.put("computeGrossArea", df.format(computeGrossArea));
            map.put("data", finishedGoodsInventoryList);
            map.put("total", totalSum);
        }
        return map;
    }
}