当前位置:网站首页>车辆属性最近一次入库时间初始化生成sql脚本文件

车辆属性最近一次入库时间初始化生成sql脚本文件

2022-07-25 09:24:00 孰能生巧-LWP

package com.dst.modules.business.vehicle.workorderconfig.controller;

import com.dstcar.common.utils.poi.ExcelName;
import com.dstcar.common.utils.poi.ExcelVO;
import lombok.Data;

/**
 * 车辆数据值
 *
 * @author yuez
 * @date 2022/3/7 20:51
 */
@Data
public class VinCodeData implements ExcelVO {

   @ExcelName(name = "车架号")
   private String vinCode;

    @ExcelName(name = "属性值")
    private String attrValueName;
}



/**
     * 车辆数据导入
     *
     * @param file 文件
     * @return Results
     */
    @PostMapping("/importData")
    public Results importData(@RequestBody MultipartFile file) {
        Workbook work = null;
        InputStream in = null;
        // 导入新增的表头
        String[] workOrderBonusDetailInsertArr = {"vinCode", "attrValueName"};

        List<VinCodeData> list = null;
        try {
            in = file.getInputStream();
            work = ImportExcelUtil.getWorkbook(in, Objects.requireNonNull(file.getOriginalFilename()));
            list = ImportExcelUtil.getBankListByExcel(work,
                    VinCodeData.class, workOrderBonusDetailInsertArr
                            , "yyyy-MM-dd", 0);
        } catch (Exception e) {
            return failure("导入数据错误");
        } finally {
            ImportExcelUtil.closeInputStream(work, in);

        }
        if (CollectionUtils.isEmpty(list) && list.size() == 1) {
            return failure("数据错误");
        }
        String sql = "";
        for (VinCodeData vinCodeData : list) {
            sql ="INSERT INTO o_vehicle_attribute_manage (id,vin_code,attr_category,attr_id,attr_value_id,attr_value_name) " +
                    "VALUES (" + dstIdUtils.getPrimaryKey()+ ",'"+ vinCodeData.getVinCode() +"',103,562591737520992256,NULL,\n" +
                    "'"+  DateUtil.convert2String(DateUtil.convert2Date(vinCodeData.getAttrValueName(),"yyyy-MM-dd"),"yyyy-MM-dd")+"');";
            System.out.println(sql);
        }
        return  succeed();
    }
 



/**
     * 车辆车架号数据导入,修改最近一次入库时间,拿采购入库时间
     *
     * @param file 文件
     * @return Results
     */
    @PostMapping("/importVinCodeData")
    public Results importVinCodeData(@RequestBody MultipartFile file) throws  Exception {
        try (
                InputStream in = file.getInputStream()
        ) {
            ExcelUserReadConfig<VinCodeDatas> config = new ExcelUserReadConfig<>();
            config.setSheetIndex(1);
            config.setStartRowIndex(2);
            config.setTargetClass(VinCodeDatas.class);
            Map<String, String> fieldMap = new HashMap<>();
            // 车架号
            fieldMap.put("A", "vinCode");
            config.setColumn(fieldMap);
            List<VinCodeDatas> importList = ExcelTools.readExcel(in, config);
            if (org.springframework.util.CollectionUtils.isEmpty(importList)) {
                return failure("导入的数据不能为空!");
            }
        carAttributeDataSyncImpl.updateCarAttribute(importList);
        return succeed();
      }
    }
--- o_vehicle_attribute_manage 表有两个唯一索引,id和vin_code 加attr_id组合唯一索引,
--- 如果id存在更新,vin_code加attr_id存在更新, 同时两个唯一索引值不存在则进行新增
INSERT INTO `dst_vehicle`.`o_vehicle_attribute_manage`(`id`, `vin_code`, `attr_category`, `attr_id`, `attr_value_id`, `attr_value_name`) VALUES (620982230797261004, 'LR83STGTXMB107581', 103, 513752533924458496, NULL, '2021-09-29')
ON DUPLICATE KEY UPDATE attr_value_name= '2021-09-23';


-- 用excel表格用坐标替换变量
 ="INSERT INTO o_vehicle_attribute_manage (id,vin_code,attr_category,attr_id,attr_value_id,attr_value_name) VALUES (
--  (SELECT @maxid:=MAX(tt.`id`)+1 FROM o_vehicle_attribute_manage tt),'"&A2&"',103,513752533924458496,NULL,
--  '"&B2&"');"

-- 查询返回值处理精度丢失的问题

select  concat("\t",v.id) as id,v.vin_code,v.attr_category,concat("\t",v.attr_id) as attr_id,e.attr_name,concat("\t",v.attr_value_id) as attr_value_id, concat("\t",v.attr_value_name) as attr_value_name from                                                                                                                                                                                  dst_vehicle.o_vehicle_attribute_manage v,dst_goods.g_attribute_manage e  where v.attr_id = e.id  and   v.vin_code in (    'LR83STG6XHB350453');
--    20808 条没有最近入库时间
SELECT  count(o.vin_code) FROM  dst_vehicle.o_basic_car o   where o.vin_code not in (
    select v.vin_code  from `dst_vehicle`.`o_vehicle_attribute_manage` v  where v.attr_id = 562591737520992256
);

-- 处理雪花算法生成的id,跟机器di,work_id和当前的时间,生成的时间戳有关系

use dst_vehicle;
INSERT INTO o_vehicle_attribute_manage (id,vin_code,attr_category,attr_id,attr_value_id,attr_value_name) VALUES (
                                                                                                                    (SELECT @maxid:=MAX(tt.`id`)+1 FROM o_vehicle_attribute_manage tt),'LA9BBJBR4MKLM6043',103,513752533924458496,NULL, '2022-01-04');
-- 工单计件test、demo 数据初始化  两张表关联查询,根据工单编码分别修改场站id和工单的开始时间
UPDATE tbl_work_order_bonus s
SET s.station_id = ( SELECT b.station_id FROM  dst_work_order.tbl_work_order b WHERE s.work_order_code = b.CODE ),
    s.work_order_start_time = (
        SELECT
            b.create_time
        FROM
            dst_work_order.tbl_work_order b
        WHERE
                s.work_order_code = b.CODE);
use dst_work_order;
-- 工单展示表 工单为车载终端检修类型补充设备类型的数据
BEGIN;
SELECT @maxid := max(id)+ 1 FROM `dst_work_order`.`tbl_work_order_show` ;
INSERT INTO `dst_work_order`.`tbl_work_order_show` ( `id`, `work_order_id`, `name`, `value`, `type`, `sort` )
SELECT
    @maxid := @maxid + 1,
    w.id AS work_order_id,
    '设备类型',
    'T-Box',
    0,
    7
FROM
    (
        SELECT
            d.id
        FROM
            (
                SELECT
                    a.id
                FROM
                    (
                        SELECT
                            t.id
                        FROM
                            tbl_work_order t,
                            tbl_work_order_show b
                        WHERE
                                t.type = 4
                          AND t.id = b.work_order_id
                    ) a
                GROUP BY
                    a.id
            ) d
        WHERE
                d.id NOT IN (
                SELECT
                    d.id
                FROM
                    (
                        SELECT
                            a.id
                        FROM
                            (
                                SELECT
                                    t.id
                                FROM
                                    tbl_work_order t,
                                    tbl_work_order_show b
                                WHERE
                                        t.type = 4
                                  AND t.id = b.work_order_id
                                  AND b.NAME = '设备类型'
                            ) a
                        GROUP BY
                            a.id
                    ) d
            )
    ) w,
    ( SELECT @maxid := 0 ) ind,
    ( SELECT @maxid := max(id)+ 1 FROM `dst_work_order`.`tbl_work_order_show` ) tmp;
COMMIT;

-- 验证数据脚本
select d.id from 	(SELECT
                         a.id
                     FROM
                         (SELECT
                              t.id
                          FROM
                              tbl_work_order t,
                              tbl_work_order_show b
                          WHERE
                                  t.type = 4
                            AND t.id = b.work_order_id )  a
                     GROUP BY
                         a.id ) d where  d.id not in(

    select d.id from 	(SELECT
                             a.id
                         FROM
                             (SELECT
                                  t.id
                              FROM
                                  tbl_work_order t,
                                  tbl_work_order_show b
                              WHERE
                                      t.type = 4
                                AND t.id = b.work_order_id and  b.name ='设备类型' )  a
                         GROUP BY
                             a.id ) d );

1.先用车架号查找到对应的最近一次入库时间,共2万多条,再用excel表格生成两列。

2.再用导入接口把这两列值得到生成集合对象。

3.再用循环打印拼接sql,5000一次,分为5批生成sql语句,车架号和最近一次入库时间的属性id

去重,生成5个sql文件。

4.然后发送邮件给运维在生产库执行,执行ok。

原网站

版权声明
本文为[孰能生巧-LWP]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_33816292/article/details/125552475