廖井涛
4 天以前 4955996ab044bc275ac78da3543b9d9f5ad7f8d9
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java
@@ -29,6 +29,7 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
@@ -48,8 +49,10 @@
    private final WorkOrderMapper workOrderMapper;
    private final FlowCardMapper flowCardMapper;
    private final BasicOtherMoneyMapper basicOtherMoneyMapper;
    private final OrderProcessDetailMapper orderProcessDetailMapper;
    public OrderService(OrderMapper orderMapper, OrderDetailMapper orderDetailMapper, OrderGlassDetailMapper orderGlassDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, SysErrorService sysErrorService, OrderOtherMoneyMapper orderOtherMoneyMapper, ProductMapper productMapper, LogService logService, WorkOrderMapper workOrderMapper, FlowCardMapper flowCardMapper) {
    public OrderService(OrderMapper orderMapper, OrderDetailMapper orderDetailMapper, OrderGlassDetailMapper orderGlassDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, SysErrorService sysErrorService, OrderOtherMoneyMapper orderOtherMoneyMapper, ProductMapper productMapper, LogService logService, WorkOrderMapper workOrderMapper, FlowCardMapper flowCardMapper, BasicOtherMoneyMapper basicOtherMoneyMapper) {
        this.orderMapper = orderMapper;
        this.orderDetailMapper = orderDetailMapper;
        this.orderGlassDetailMapper = orderGlassDetailMapper;
@@ -60,11 +63,14 @@
        this.logService = logService;
        this.workOrderMapper = workOrderMapper;
        this.flowCardMapper = flowCardMapper;
        this.basicOtherMoneyMapper = basicOtherMoneyMapper;
    }
    public boolean saveOrder(Map<String,Object> orderMap) throws Exception {
        JSONObject orderJson = new JSONObject(orderMap);
        String orderIdType = orderJson.getString("orderIdType");
        String orderIdTypeLetter = orderJson.getString("orderIdTypeLetter");
        Integer orderIdTypeMantissa = orderJson.getInteger("orderIdTypeMantissa");
        Order order = JSONObject.parseObject(JSONObject.toJSONString(orderJson.get("title")), Order.class);
        List<OrderDetail> OrderDetails = JSONArray.parseArray(JSONObject.toJSONString(orderJson.get("detail")), OrderDetail.class);
        List<OrderOtherMoney> orderOtherMoneyList = JSONArray.parseArray(JSONObject.toJSONString(orderJson.get("otherMoney")), OrderOtherMoney.class);
@@ -83,7 +89,12 @@
            log.setContent(orderMap.toString());
            if(order.getOrderId() == null || order.getOrderId().isEmpty()){
                insertOrder(order,OrderDetails,orderOtherMoneyList,orderIdType, (Map<String, String>) orderMap.get("position"));
                insertOrder(order,
                        OrderDetails,orderOtherMoneyList,orderIdType,
                        (Map<String, String>) orderMap.get("position"),
                        orderIdTypeLetter,
                        orderIdTypeMantissa
                );
                log.setFunction("saveOrder创建:"+order.getOrderId());
            }else {
                updateOrder(order,OrderDetails,orderOtherMoneyList,(Map<String, String>) orderMap.get("position"));
@@ -163,9 +174,9 @@
        return map;
    }
    //生成订单数据
    public void insertOrder(Order order, List<OrderDetail> OrderDetails, List<OrderOtherMoney> orderOtherMoneyList, String orderIdType, Map<String,String> position) {
    public void insertOrder(Order order, List<OrderDetail> OrderDetails, List<OrderOtherMoney> orderOtherMoneyList, String orderIdType, Map<String,String> position, String orderIdTypeLetter, Integer orderIdTypeMantissa) {
        //根据传入的当前月份或者当天生成订单id
        String orderId =  getOrderId(orderIdType);
        String orderId =  getOrderId(orderIdType,orderIdTypeLetter,orderIdTypeMantissa);
        //往主表插数据
        order.setOrderId(orderId);
        order.setCreateOrder(2);
@@ -173,32 +184,34 @@
        insertOtherDetail(orderId,OrderDetails,orderOtherMoneyList,position);
    }
    private String getOrderId(String dateType){
    private String getOrderId(String dateType, String orderIdTypeLetter, Integer orderIdTypeMantissa){
        String orderId = null;
        Integer orderIdTypeLetterLen = orderIdTypeLetter.length();
        Integer count = orderIdTypeLetterLen+orderIdTypeMantissa;
        if(dateType==null || dateType.equals("day")){
            Integer maxOrderId = orderMapper.selectMaxOrderId();
            //查询订单id,并且自增
            String formattedNumber = String.format("%02d", maxOrderId+1);
            String formattedNumber = String.format("%0"+orderIdTypeMantissa+"d", maxOrderId+1);
            //格式化当前日期
            Date currentDate = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
            String formattedDate = dateFormat.format(currentDate);
            orderId =  "NG"+formattedDate+formattedNumber;
            orderId =  orderIdTypeLetter+formattedDate+formattedNumber;
        }else if(dateType.equals("month")){
            Integer maxOrderId = orderMapper.selectMaxOrderIdByMonth();
            String formattedNumber = String.format("%04d", maxOrderId+1);
            String formattedNumber = String.format("%0"+(orderIdTypeMantissa+2)+"d", maxOrderId+1);
            Date currentDate = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyMM");
            String formattedDate = dateFormat.format(currentDate);
            orderId =  "NG"+formattedDate+formattedNumber;
            orderId =  orderIdTypeLetter+formattedDate+formattedNumber;
        }else if(dateType.equals("year")){
            Integer maxOrderId = orderMapper.selectMaxOrderIdByYear();
            String formattedNumber = String.format("%06d", maxOrderId+1);
            String formattedNumber = String.format("%0"+(orderIdTypeMantissa+4)+"d", maxOrderId+1);
            Date currentDate = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yy");
            String formattedDate = dateFormat.format(currentDate);
            orderId =  "NG"+formattedDate+formattedNumber;
            orderId =  orderIdTypeLetter+formattedDate+formattedNumber;
        }
        return orderId;
    }
@@ -585,7 +598,7 @@
    public Map<String,Object> getOrderReport(Integer pageNum, Integer pageSize, List<String> selectDate, OrderDetail orderDetail, Integer model, Integer scope) {
        Integer offset = (pageNum-1)*pageSize;
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(15).toString();
        String startDate = LocalDate.now().minusDays(30).toString();
        if(selectDate !=null && selectDate.size()==2){
            if(!selectDate.get(0).isEmpty()){
                startDate = selectDate.get(0);
@@ -594,8 +607,28 @@
                endDate = selectDate.get(1);
            }
        }
        List<OrderDetail> orderDetailList = orderDetailMapper.getOrderReport(offset, pageSize, startDate, endDate, orderDetail,model,scope);
        List<BasicOtherMoney> basicOtherMoneyList=basicOtherMoneyMapper.selectList(new QueryWrapper<BasicOtherMoney>());
        ObjectMapper objectMapper = new ObjectMapper();
        for (OrderDetail detail : orderDetailList) {
            String otherColumnsStr = detail.getOtherColumns();
            if (otherColumnsStr == null || otherColumnsStr.trim().isEmpty()||otherColumnsStr.equals("{}")) {
                continue; // 跳过空值
            }
            try {
                // 解析为Map(也可解析为自定义实体类,如OtherColumnsDTO)
                Map<String, Object> otherColumnsJson = objectMapper.readValue(otherColumnsStr, Map.class);
                 detail.setOtherColumnsJson(otherColumnsJson);
            } catch (JsonProcessingException e) {
                System.err.println("解析otherColumns失败,数据:" + otherColumnsStr + ",错误:" + e.getMessage());
            }
        }
        Map<String,Object> map = new HashMap<>();
        map.put("data",orderDetailMapper.getOrderReport(offset, pageSize, startDate, endDate, orderDetail,model,scope));
        map.put("data",orderDetailList);
        map.put("title",basicOtherMoneyList);
        map.put("total",orderDetailMapper.getOrderReportTotal(offset, pageSize, startDate, endDate, orderDetail,"order"));
        List<String> list = new ArrayList<>();
        list.add(startDate);
@@ -612,7 +645,7 @@
    public Map<String,Object> getOrderSummaryReport(Integer pageNum, Integer pageSize, List<String> selectDate, Order order) {
        Integer offset = (pageNum-1)*pageSize;
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(15).toString();
        String startDate = LocalDate.now().minusDays(30).toString();
        if(selectDate !=null && selectDate.size()==2){
            if(!selectDate.get(0).isEmpty()){
                startDate = selectDate.get(0);
@@ -640,7 +673,7 @@
    public Map<String,Object> getOrderProductSummary(Integer pageNum, Integer pageSize, List<String> selectDate, OrderDetail orderDetail) {
        Integer offset = (pageNum-1)*pageSize;
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(15).toString();
        String startDate = LocalDate.now().minusDays(30).toString();
        if(selectDate !=null && selectDate.size()==2){
            if(!selectDate.get(0).isEmpty()){
                startDate = selectDate.get(0);
@@ -1023,4 +1056,61 @@
        }
        return true;
    }
    public Map<String,Object> appGetOrderList(List<String> dates) {
        //设置当前时间
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(30).toString();
        if(dates !=null && dates.size()==2){
            if(dates.get(0) != null){
                startDate = String.valueOf(dates.get(0));
            }
            if(dates.get(1) != null){
                endDate = String.valueOf(dates.get(1));
            }
        }
        List<String> date = new ArrayList<>();
        date.add(startDate);
        date.add(endDate);
        List<Order> list = orderMapper.selectList(new LambdaQueryWrapper<Order>()
                .apply("create_order > 0")
                .apply("date(create_time) between {0} and {1}",startDate, endDate)
                .orderByDesc(Order::getOrderId)
        );
        Integer quantity = 0;
        Double area = 0.00;
        Double perimeter = 0.00;
        for(Order order:list){
            quantity += Integer.parseInt(String.valueOf(order.getQuantity()));
            area += Double.parseDouble(String.valueOf(order.getArea()));
            perimeter += order.getPerimeter();
        }
        Map<String, Object> totalSum  = new HashMap<>();
        DecimalFormat df = new DecimalFormat("#.00");
        totalSum.put("quantity",quantity);
        totalSum.put("area", df.format(area));
        totalSum.put("perimeter", df.format(perimeter));
        totalSum.put("count", list.size());
        Map<String,Object> map = new HashMap<>();
        map.put("data",list);
        map.put("date",date);
        map.put("totalSum",totalSum);
        return map;
    }
    //工艺属性配置查询
    public Map<String,Object> processAttributeConfig() {
        Map<String,Object> map = new HashMap<>();
        List<Map<String,Object>> processList = orderMapper.selectProcessAttributeConfigOne();
        for (Map<String,Object> objectMap:processList){
            objectMap.put("detail",orderMapper.selectProcessAttributeConfigTow(objectMap.get("input_type").toString()));
        }
        map.put("data",processList);
        return map;
    }
}