SqlProvider.java 2.8 KB
package com.huaheng.api.erp.service;

import org.apache.ibatis.jdbc.SQL;

import java.time.LocalDate;
import java.util.Calendar;

public class SqlProvider {
    public String selectCustomQuery(final String boxCode, final String chipCode) {
        //获取当前年 取尾数决定去那个service做处理
        LocalDate currentDate = LocalDate.now(); // 获取当前日期
        int currentYear = currentDate.getYear(); // 获取当前年份
        int lastDigit = currentYear % 10; // 取尾数

        String table1 = "receipt_container_detail_" + (lastDigit-1);
        String table2 = "receipt_container_detail_" + lastDigit;

        return new SQL() {{
            SELECT("e.customerCode AS customerCode",
                    "e.customerName AS customerName",
                    "e.referCode AS invoiceNumber",
                    "e.shipmentNote AS shipmentNote",
                    "e.driver_leave_time AS confirmedArrivalTime",
                    "e.driverName AS driverInformation");
            FROM("(SELECT * FROM " + table1 + " WHERE containerType='J' AND (chipCode1=#{chipCode} OR boxCode=#{boxCode}) " +
                    "UNION ALL " +
                    "SELECT * FROM " + table2 + " WHERE containerType='J' AND (chipCode1=#{chipCode} OR boxCode=#{boxCode})) a");
            LEFT_OUTER_JOIN("(SELECT a.boxCode, a.chipCode1, a.materialCode, a.materialName, a.containerCode, " +
                    "CASE WHEN b.num=1 THEN '否' ELSE '是' END AS mix, '箱' AS Package, d.customerCode, d.customerName, " +
                    "d.referCode, d.shipmentNote, " +
                    "CONCAT(d.driverName, '/', IFNULL(e.car_number, ''), '/', IFNULL(e.driver_name, ''), '/', IFNULL(e.phone_number, '')) AS driverName, " +
                    "e.driver_leave_time " +
                    "FROM inventory_history_detail a " +
                    "LEFT JOIN (SELECT containerCode, count(1) AS num FROM (SELECT DISTINCT containerCode, materialCode, `level`, color " +
                    "FROM inventory_history_detail " +
                    "WHERE containerCode IN (SELECT DISTINCT containerCode " +
                    "FROM inventory_history_detail " +
                    "WHERE left(containerCode, 1) <> 'J' AND (chipCode1=#{chipCode} OR boxCode=#{boxCode}))) a GROUP BY containerCode) b " +
                    "ON b.containerCode = a.containerCode " +
                    "LEFT JOIN receipt_header c ON c.code = a.receiptCode " +
                    "LEFT JOIN shipment_header d ON d.code = c.shipmentCode " +
                    "LEFT JOIN reservation_submission e ON e.order_number = d.referCode " +
                    "WHERE left(a.containerCode, 1) <> 'J' AND (a.chipCode1=#{chipCode} OR a.boxCode=#{boxCode})) e " +
                    "ON e.boxCode = a.boxCode AND e.chipCode1 = a.chipCode1");
        }}.toString();
    }
}