chenlu
2025-03-21 7ec26ace7100b90b87603acd9dbbc8012a51eed0
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java
@@ -1,5 +1,6 @@
package com.example.erp.service.sd;
import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -15,6 +16,8 @@
import com.example.erp.entity.userInfo.Log;
import com.example.erp.entity.userInfo.SysError;
import com.example.erp.exception.ServiceException;
import com.example.erp.mapper.pp.FlowCardMapper;
import com.example.erp.mapper.pp.WorkOrderMapper;
import com.example.erp.mapper.sd.*;
import com.example.erp.service.userInfo.LogService;
import com.example.erp.service.userInfo.SysErrorService;
@@ -31,6 +34,8 @@
import java.util.*;
import java.util.stream.Collectors;
import static org.apache.coyote.http11.Constants.a;
@Service
@DS("sd")
@Transactional(rollbackFor = Exception.class)
@@ -42,9 +47,11 @@
    private final OrderOtherMoneyMapper orderOtherMoneyMapper;
    private final ProductMapper productMapper;
    private final LogService logService;
    private final WorkOrderMapper workOrderMapper;
    private final FlowCardMapper flowCardMapper;
    private final OrderProcessDetailMapper orderProcessDetailMapper;
    public OrderService(OrderMapper orderMapper, OrderDetailMapper orderDetailMapper, OrderGlassDetailMapper orderGlassDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, SysErrorService sysErrorService, OrderOtherMoneyMapper orderOtherMoneyMapper, ProductMapper productMapper, LogService logService) {
    public OrderService(OrderMapper orderMapper, OrderDetailMapper orderDetailMapper, OrderGlassDetailMapper orderGlassDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, SysErrorService sysErrorService, OrderOtherMoneyMapper orderOtherMoneyMapper, ProductMapper productMapper, LogService logService, WorkOrderMapper workOrderMapper, FlowCardMapper flowCardMapper) {
        this.orderMapper = orderMapper;
        this.orderDetailMapper = orderDetailMapper;
        this.orderGlassDetailMapper = orderGlassDetailMapper;
@@ -53,6 +60,8 @@
        this.orderOtherMoneyMapper = orderOtherMoneyMapper;
        this.productMapper = productMapper;
        this.logService = logService;
        this.workOrderMapper = workOrderMapper;
        this.flowCardMapper = flowCardMapper;
    }
    public boolean saveOrder(Map<String,Object> orderMap) throws Exception {
@@ -114,7 +123,15 @@
            log.setFunction("saveOrderTitle保存表头:"+order.getOrderId());
            Order order1 = orderMapper.selectOrderId(order.getOrderId());
            //使用订单原本的状态和计算方式
            order.setCalculateType(order1.getCalculateType());
            order.setCreateOrder(order1.getCreateOrder());
            order.setProcessReview(order1.getProcessReview());
            order.setOrderReview(order1.getOrderReview());
            order.setProductionOrder(order1.getProductionOrder());
            order.setProcessingCard(order1.getProcessingCard());
            order.setWarehousing(order1.getWarehousing());
            order.setDelivery(order1.getDelivery());
            LambdaUpdateWrapper<Order> updateWrapper = new LambdaUpdateWrapper<>();
            updateWrapper.eq(Order::getOrderId, order.getOrderId());
@@ -316,7 +333,7 @@
    }
    //查询获取列表
    public Map<String,Object> getOrderList(Integer pageNum, Integer pageSize, List<String> selectDate, Order order,Integer orderType) {
    public Map<String,Object> getOrderList(Integer pageNum, Integer pageSize, List<String> selectDate, Map<String,Object> config,Integer orderType) {
        Integer offset = (pageNum-1)*pageSize;
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(15).toString();
@@ -328,9 +345,14 @@
                endDate = selectDate.get(1);
            }
        }
        JSONObject orderJson = new JSONObject(config);
        Order order = JSONObject.parseObject(JSONObject.toJSONString(orderJson.get("filter")), Order.class);
        Map<String,String> sortDate = (Map<String, String>) config.get("sort");
        String field = sortDate.get("field").replaceAll("(?<!^)([A-Z])", "_$1").toLowerCase();
        String orderBy = sortDate.get("order");
        Map<String,Object> map = new HashMap<>();
        map.put("data",orderMapper.getOrderList(offset, pageSize, startDate, endDate, order,orderType));
        map.put("data",orderMapper.getOrderList(offset, pageSize, startDate, endDate, order,orderType, field, orderBy));
        map.put("total",orderMapper.getPageTotal(offset, pageSize, startDate, endDate, order,orderType));
        List<String> list = new ArrayList<>();
        list.add(startDate);
@@ -480,9 +502,21 @@
        BigDecimal getPrice= BigDecimal.valueOf(orderDetail.getPrice());
        BigDecimal getQuantity= BigDecimal.valueOf(orderDetail.getQuantity());
        BigDecimal getComputeGrossArea= BigDecimal.valueOf(orderDetail.getComputeGrossArea());
        BigDecimal getComputeArea= BigDecimal.valueOf(orderDetail.getComputeArea());
        BigDecimal getWidth= BigDecimal.valueOf(orderDetail.getWidth());
        BigDecimal getHeight= BigDecimal.valueOf(orderDetail.getHeight());
        if (calculateType == 3) {
            orderDetail.setGrossAmount(getPrice.multiply(getQuantity).setScale(2, RoundingMode.HALF_UP).doubleValue());
        } else {
        }else if (calculateType == 4) {
            if(Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea())&&Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())){
                orderDetail.setGrossAmount(getWidth.multiply(getHeight).multiply(getQuantity).multiply(getPrice).
                        divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue());
            }else{
                orderDetail.setGrossAmount(getPrice.multiply(getComputeGrossArea).setScale(2, RoundingMode.HALF_UP).doubleValue());
            }
        }else if (calculateType == 1){
            orderDetail.setGrossAmount(getPrice.multiply(getComputeArea).multiply(getQuantity).setScale(2, RoundingMode.HALF_UP).doubleValue());
        }else{
            orderDetail.setGrossAmount(getPrice.multiply(getComputeGrossArea).setScale(2, RoundingMode.HALF_UP).doubleValue());
        }
        return orderDetail;
@@ -600,6 +634,19 @@
            orderProductDetailMap.put("productId",map.get("productId"));
            orderProductDetailMap.put("productName",map.get("productName"));
            List<OrderDetail> orderDetails = orderDetailMapper.getOrderProductByProductId(map.get("productId"),orderId);
            orderDetails.forEach(orderDetail->{
                List<OrderGlassDetail> orderGlassDetails =
                        orderGlassDetailMapper.selectList(
                                new QueryWrapper<OrderGlassDetail>().
                                        eq("order_id",orderId).
                                        eq("order_number",orderDetail.getOrderNumber())
                        );
                Integer differentSize = orderGlassDetailMapper.getDifferentSizeNumber(orderId,orderDetail.getOrderNumber());
                orderDetail.setDifferentSize(differentSize);
                orderDetail.setOrderGlassDetails(orderGlassDetails);
            });
            orderProductDetailMap.put("productDetail",orderDetails);
            orderProductDetail.add(orderProductDetailMap);
        });
@@ -618,13 +665,24 @@
        }else{
            orderProductDistinct = orderDetailMapper.getOrderProductDistinctById(orderId);
        }
        List<Map<String,Object>> orderProductDetail = new ArrayList<>();
        orderProductDistinct.forEach(map->{
            Map<String,Object> orderProductDetailMap = new HashMap<>();
            orderProductDetailMap.put("productId",map.get("productId"));
            orderProductDetailMap.put("productName",map.get("productName"));
            List<OrderDetail> orderDetails = orderDetailMapper.getOrderProductByProductId(map.get("productId"),orderId);
            orderDetails.forEach(orderDetail->{
                List<OrderGlassDetail> orderGlassDetails =
                        orderGlassDetailMapper.selectList(
                                new QueryWrapper<OrderGlassDetail>().
                                        eq("order_id",orderId).
                                        eq("order_number",orderDetail.getOrderNumber())
                        );
                Integer differentSize = orderGlassDetailMapper.getDifferentSizeNumber(orderId,orderDetail.getOrderNumber());
                orderDetail.setDifferentSize(differentSize);
                orderDetail.setOrderGlassDetails(orderGlassDetails);
            });
            orderProductDetailMap.put("productDetail",orderDetails);
@@ -801,4 +859,67 @@
    public Boolean selectDifferentSize(String orderId) {
        return !orderMapper.selectDifferentSize(orderId).isEmpty();
    }
    public Object processBack(String orderId,Integer status)  {
        //判断是否转优化
        if(flowCardMapper.flowCardToOptimizeCount(orderId)>0){
            return "false1";
        }
        //判断是否有报工
        if(flowCardMapper.reportingWorkCountByOrderId(orderId)>0){
            return "false2";
        }
        //判断是否有库存
        if(orderMapper.searchOrderWarehousing(orderId)>0){
            return "false3";
        }
        //退回到生产加工单
        if(status<5){
            //更新小片明细表分架状态
            flowCardMapper.updateDeleteState(orderId,"all");
            //删除此订单小片流程报工明细
            flowCardMapper.deleteReportingWorkByOrderId(orderId);
            //删除流程卡
            flowCardMapper.deleteFlowCardMp(orderId,"all");
            //删除流程卡排序
            flowCardMapper.deleteflowCardSortByOrderId(orderId);
            flowCardMapper.updateProcessingCard(orderId, 0);
        }
        //退回到订单审核后
        if(status<4){
            workOrderMapper.deleteOrderWorkMp(orderId, null);
            workOrderMapper.updateWorkType(orderId, 0);
        }
        //退回到工艺审核后
        if(status<3){
            orderMapper.backReviewOrderById(orderId);
        }
        //退回到下单后
        if(status<2){
            orderMapper.reviewProcessById(orderId,0);
        }
        //日志传入
        Log log = new Log();
        log.setOperator((String) StpUtil.getLoginId());
        log.setOperatorId((String) StpUtil.getLoginId());
        log.setContent(String.valueOf(status));
        log.setFunction("updateOrderMoney金额重置:"+orderId);
        return true;
    }
    public Object scannerGlassInfo(String projectNo) {
        try{
            String projectId = "P" + projectNo.substring(0,8);
            //炉号
            Integer heatNo = Integer.valueOf(projectNo.substring(8,11));
            //炉内序号
            Integer sortNo = Integer.valueOf(projectNo.substring(11,14));
            String processId = orderMapper.getProcessIdByOptimizeHeatDetail(projectId,heatNo,sortNo);
            String orderId = flowCardMapper.getOrderIdByProcessId(processId);
            return orderMapper.scannerGlassInfo(projectId,heatNo,sortNo,orderId);
        }catch (Exception e){
            return null;
        }
    }
}