guoyujie
2025-11-11 71a4444510d9067654705f0c5803d5f12a21a092
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,8 +33,10 @@
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;
import java.util.*;
@Service
@@ -102,6 +105,11 @@
            if (object.get("decValue") != null) {
                decValue = Integer.parseInt(object.get("decValue").toString());
            }
            String createTime = null;
            if(object.get("createTime")!=null){
                createTime =  object.get("createTime").toString();
            }
            Log log = new Log();
            log.setOperator(userName);
            log.setOperatorId(userId);
@@ -112,6 +120,8 @@
            //获取对象集合循环进行新增修改
            List<FlowCard> flowCardlist = JSONArray.parseArray(JSONObject.toJSONString(object.get("flowCard")), FlowCard.class);
            if (!flowCardlist.isEmpty()){
                //删除一年前且发货的订单库存信息
                finishedGoodsInventoryMapper.deleteFinishedGoodsInventoryDate();
                //获取单号
                String oddNumber= orderNumberSetting("入库");
                for (FlowCard flowCards : flowCardlist) {
@@ -162,7 +172,7 @@
                    //添加出入库记录
                    finishedOperateLogMapper.insertIntFinishedOperateLog(flowCard,userName,oddNumber,container,deliveryDetailMoney,deliveryDetailArea);
                    finishedOperateLogMapper.insertIntFinishedOperateLog(flowCard,userName,oddNumber,container,deliveryDetailMoney,deliveryDetailArea,createTime,getComputeArea.doubleValue());
                    Integer finishedGoodsInventorycount = 0;
                    finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdContainercount(flowCard.getOrder().getOrderId(),flowCard.getOrderNumber(),container);
@@ -189,7 +199,7 @@
                                finishedGoodsInventoryMapper.updateOrderWarehousingState(flowCard.getOrder().getOrderId(),2);
                            }
                        } else {
                            if (finishedGoodsInventoryMapper.insertFinishedGoodsInventory(flowCard, storageRegion, remark,container)) {
                            if (finishedGoodsInventoryMapper.insertFinishedGoodsInventory(flowCard, storageRegion, remark,container,getComputeArea.doubleValue())) {
                                //修改流程卡表入库数量
                                finishedGoodsInventoryMapper.updateflowcard(flowCard);
                                //修改订单明细表入库数量
@@ -912,6 +922,8 @@
                    findOrderDetailNumberd(
                            orderDetail.getDeliveryDetail().getOrderId(),
                            orderDetail.getDeliveryDetail().getOrderNumber());
            //添加出入库记录
            finishedOperateLogMapper.insertOutFinishedOperateLog(orderDetail,userName,oddNumber,orderDetail.getDeliveryDetail().getBoxNo());
            orderDetailMapper.update(null,
@@ -1015,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){
@@ -1032,7 +1103,7 @@
                    }
                    //修改订单明细表入库数量
                    finishedGoodsInventoryMapper.updateOutOrderNumberConut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),finishedOperateLog.getQuantity());
                    finishedGoodsInventoryMapper.updateOutOrderNumberConut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),finishedOperateLog.getCancelAvailable());
                    //判断订单是否全部入库
                    if (Objects.equals(ordersum, ordernumbersum)) {
                        //修改订单表入库状态
@@ -1134,11 +1205,13 @@
            oldFinishedGoodsInventory.setInventory(oldFinishedGoodsInventory.getInventory()-finishedGoodsInventory.getQuantityAvailable());
            oldFinishedGoodsInventory.setQuantityAvailable(oldFinishedGoodsInventory.getQuantityAvailable()-finishedGoodsInventory.getQuantityAvailable());
            oldFinishedGoodsInventory.setArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getActualSignalArea());
            oldFinishedGoodsInventory.setComputeGrossArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getComputeArea());
            //新库存数据增加
            finishedGoodsInventory.setId(null);
            finishedGoodsInventory.setInventory(finishedGoodsInventory.getQuantityAvailable());
            finishedGoodsInventory.setArea(finishedGoodsInventory.getQuantityAvailable()*finishedGoodsInventory.getActualSignalArea());
            finishedGoodsInventory.setComputeGrossArea(finishedGoodsInventory.getQuantityAvailable()*finishedGoodsInventory.getComputeArea());
            finishedGoodsInventory.setEnterStorageTime(null);
            finishedGoodsInventoryMapper.
                    update(oldFinishedGoodsInventory,
@@ -1150,6 +1223,8 @@
            //往操作日志表添加数据
            finishedOperateLog.setQuantity(finishedGoodsInventory.getQuantityAvailable());
            finishedOperateLog.setArea(finishedGoodsInventory.getQuantityAvailable()*finishedGoodsInventory.getComputeArea());
            finishedOperateLog.setComputeArea(finishedGoodsInventory.getComputeArea());
            finishedOperateLog.setRemarks(oldFinishedGoodsInventory.getBoxNo()+"->"+finishedGoodsInventory.getBoxNo());
            finishedOperateLogMapper.insert(finishedOperateLog);
@@ -1170,10 +1245,12 @@
                oldFinishedGoodsInventory.setInventory(oldFinishedGoodsInventory.getInventory()-finishedGoodsInventory.getQuantityAvailable());
                oldFinishedGoodsInventory.setQuantityAvailable(oldFinishedGoodsInventory.getQuantityAvailable()-finishedGoodsInventory.getQuantityAvailable());
                oldFinishedGoodsInventory.setArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getActualSignalArea());
                oldFinishedGoodsInventory.setComputeGrossArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getComputeArea());
                existFinishedGoodsInventory.setInventory(existFinishedGoodsInventory.getInventory()+finishedGoodsInventory.getQuantityAvailable());
                existFinishedGoodsInventory.setQuantityAvailable(existFinishedGoodsInventory.getQuantityAvailable()+finishedGoodsInventory.getQuantityAvailable());
                existFinishedGoodsInventory.setArea(existFinishedGoodsInventory.getInventory()*existFinishedGoodsInventory.getActualSignalArea());
                existFinishedGoodsInventory.setComputeGrossArea(existFinishedGoodsInventory.getInventory()*existFinishedGoodsInventory.getComputeArea());
                finishedGoodsInventoryMapper.
                        update(oldFinishedGoodsInventory,
@@ -1188,6 +1265,7 @@
                //往操作日志表添加数据
                finishedOperateLog.setQuantity(finishedGoodsInventory.getQuantityAvailable());
                finishedOperateLog.setComputeArea(existFinishedGoodsInventory.getComputeArea());
                finishedOperateLog.setRemarks(oldFinishedGoodsInventory.getBoxNo()+"->"+existFinishedGoodsInventory.getBoxNo());
                finishedOperateLogMapper.insert(finishedOperateLog);
@@ -1257,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;
    }
}