洞车系统常见问题解决指南

洞车常见问题解决指南

    • 1.研发脚本处理问题
      • 1.1 WMS出库单无法审核
      • 1.2 OMS入库单无法提交,提示更新中心库存失败
      • 1.3 当出现OMS下发成功WMS/TMS/DMS还没有任务的情况时处理方案
      • 1.4 调度波次生成或者添加任务系统异常
      • 1.5 东鹏出库单部分出库回传之后要求重传
      • 1.6 更新订单商品分类
      • 1.7 中心库存查询
      • 1.8 运输单全部任务已经签收,但是运输单仍是在途状态
    • 2.常用查询脚本
      • 2.1 查看主数据,导出主数据
      • 2.2 导出三级分类
      • 2.3 查询回传失败脚本
      • 2.4 查询订单商品行号重复脚本
      • 2.5 查询重复商品分类
      • 2.6 查询客户当日库存快照
    • 3 程序修复类
      • 3.1修复主数据
      • 3.1.1修复主数据的商品分类
      • 3.2 修改主数据的长宽高体积重量并下发
      • 3.3 订单签收状态重传

以下记录问题为常见的需要修改数据库才能解决的问题

1.研发脚本处理问题

1.1 WMS出库单无法审核

在这里插入图片描述
处理脚本

update wm_so_header set IS_SCHEDULE = 'N'  where SO_NO = 'SO单号'

1.2 OMS入库单无法提交,提示更新中心库存失败

导致这类问题的原因是中心库存的计划出库存大于在库库存
在这里插入图片描述
处理脚本,查看此账户是否存在计划出数量大于在库库存,查询脚本为:

select * from eo_virtual_inv_item where EOVI_OWNER_CODE = '客户编码' and  EOVI_QTY < P_OUT_QTY

EOVI_QTY :在库库存
P_OUT_QTY:计划出库存

1.3 当出现OMS下发成功WMS/TMS/DMS还没有任务的情况时处理方案

  • 第一步,需要将任务处理为新增状态
    在这里插入图片描述
    执行脚本:
update jrwl_oms2c.eo_c_work_order set EOWO_ISSUE_STATUS = null,EOWO_STATUS_CODE = '00' where EOWO_ORDER_NO = '物联单号';
  • 第二步,删除TMS的订单
select * from et_order where ETOR_EXTERNAL_ORDER_NO = '物联单号'; ## 选中之后手动删除
delete et_order where ETOR_EXTERNAL_ORDER_NO = '物联单号';
  • 第三步,操作下发
    在这里插入图片描述
    注意TMS和DMS的任务都需要删除对应的系统的订单,DMS订单,TMS订单

造成此问题的根本原因是:商品分类重复导致执行一下SQL报错
单行记录返回多行

SELECT
	(
	CASE
			( SELECT ( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) IS NULL FROM DUAL ) 
			WHEN 1 THEN
			( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =( SELECT EBMG_PARENT_PM_CODE FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) ) ELSE ( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) 
		END 
		) AS EBMG_STANDARD_HOURS 
	FROM
		DUALSELECT (
		CASE
				( SELECT ( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) IS NULL FROM DUAL ) 
				WHEN 1 THEN
				( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =( SELECT EBMG_PARENT_PM_CODE FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) ) ELSE ( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) 
			END 
			) AS EBMG_STANDARD_HOURS 
		FROM
			DUALSELECT (
			CASE
					( SELECT ( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) IS NULL FROM DUAL ) 
					WHEN 1 THEN
					( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =( SELECT EBMG_PARENT_PM_CODE FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) ) ELSE ( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) 
				END 
				) AS EBMG_STANDARD_HOURS 
			FROM
				DUALSELECT (
				CASE
						( SELECT ( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) IS NULL FROM DUAL ) 
						WHEN 1 THEN
						( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =( SELECT EBMG_PARENT_PM_CODE FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) ) ELSE ( SELECT EBMG_STANDARD_HOURS FROM EB_MATERIAL_GROUP WHERE EBMG_CODE =? ) 
					END 
					) AS EBMG_STANDARD_HOURS 
			FROM
DUAL

1.4 调度波次生成或者添加任务系统异常

问题原因:地址里面有特殊字符,需要手动的将收货地址中的特殊字符去掉,例如空格,引号等

select * from et_task where ETTA_SO_NO = 'YXSA23042400007' and  ETTA_ETOR_FROM_EBRG_ADDRESS like '%"%';
select * from et_task where ETTA_ETOR_TO_EBRG_ADDRESS like '%"%'

ETTA_ETOR_FROM_EBRG_ADDRESS :发货地址
ETTA_ETOR_TO_EBRG_ADDRESS :收货地址

1.5 东鹏出库单部分出库回传之后要求重传

按照常理订单出入库回传之后不可再次回传,但是有些时候仓库要求帮助回传,执行方案如下

  • 1、根据需要回传的数量更新订单的出库数量
    在这里插入图片描述
    处理脚本为:
select * from eo_c_order_item where eooi_order_no = '物联单行';

更新 EOOI_ALLOCATED_QTY
在这里插入图片描述

将实发数量修改为需要回传的数量
千万注意:由于东鹏回传数量是累加的,因此这里的面数据需要修改为需要回传的数量,回传完成之后,EOOI_ALLOCATED_QTY需要修改为原来的值,如果有多条数据,但是不用回传的,可以暂时将无需回传的数据rec_status=1,等待回传完成之后,在修改rec_status=0

  • 第二步,操作回传

总订单查询->接口重传
在这里插入图片描述

1.6 更新订单商品分类

先更新订单商品分类编码
在更新分类名称

# 更新编码
update eo_c_order_item eooi set  
EOOI_ITEM_TYPE_CODE =  (select CDCM_TYPE_CODE from cd_common_material where cdcm_material_no = eooi_code limit 1) 
where eooi.CREATE_TIME>'2023-04-27'
select 
eooi.EOOI_ITEM_TYPE_CODE,
eooi.EOOI_ITEM_TYPE_NAME
from eo_c_order_item eooi
left join EB_MATERIAL_GROUP emg on eooi.EOOI_ITEM_TYPE_CODE = emg.EBMG_CODE
where eooi.CREATE_TIME>'2023-04-27' and emg.EBMG_CODE is null;

# 更新名称
update eo_c_order_item eooi set  
EOOI_ITEM_TYPE_NAME =  (select EBMG_NAME_CN from eb_material_group where EBMG_CODE = eooi.EOOI_ITEM_TYPE_CODE) 
where eooi.CREATE_TIME>'2023-04-27'

1.7 中心库存查询

select * from eo_virtual_inv_item where eovi_sku_code = 'jr000027853077' and color = ''

1.8 运输单全部任务已经签收,但是运输单仍是在途状态

select * from et_dispatch_order where ETDO_NO = 'T2305020000006';

需要修改运输单状态30->60

2.常用查询脚本

2.1 查看主数据,导出主数据

select 
jdo.code 居然商品编码,
jdo.string64 客户商品编码,
jdo.name 商品名称,
jdo.string66 客户组,
jdo.string65 品牌,
jdo.string22 是否定制品,
jdo.string17 大类编码,
jdo.string12 大类名称,
jdo.string18 中类编码,
jdo.string8 中类名称,
jdo.string19 小类编码,
jdo.string67 小类名称,
jdo.double1 长,
ebmg.EBMG_SUBSTR1 品类长推荐,
jdo.double2 宽,
ebmg.EBMG_SUBSTR2 品类宽推荐,
jdo.double3 高,
ebmg.EBMG_SUBSTR3 品类高推荐,
jdo.double10 体积,
ebmg.EBMG_SUBSTR4 品类体积推荐,
jdo.double4 重量,
jdo.double5 包装长,
jdo.double6 包装宽,
jdo.double7 包装高,
jdo.double8 包装体积,
jdo.double9 包装重量,
(select qty from jrwl_wms.wm_inv_lot_loc where SKU_CODE = `code` and qty>0 limit 1) 库存
from jr_data_object jdo
left join jr_eb_material_group ebmg on ebmg.EBMG_CODE = jdo.string19
where OBJECT_TYPE = 'SP' and DEL_FLAG = 0 and DATA_DISABLE = 0
# 新增三级分类条件
-- and ( ABS(ebmg.EBMG_SUBSTR1 + 0 -jdo.double1) > (ebmg.EBMG_SUBSTR1 + 0)*0.2 # 长宽高
-- or ABS(ebmg.EBMG_SUBSTR2 + 0 -jdo.double2) > (ebmg.EBMG_SUBSTR2 + 0)*0.2 # 长宽高
-- or ABS(ebmg.EBMG_SUBSTR3 + 0 -jdo.double3) > (ebmg.EBMG_SUBSTR3 + 0)*0.2 # 长宽高
-- or ABS(ebmg.EBMG_SUBSTR4 + 0 -jdo.double4) > (ebmg.EBMG_SUBSTR4 + 0)*0.2 # 体积)
-- or jdo.double1 is null or jdo.double1 =1
-- or jdo.double2 is null or jdo.double2 =1
-- or jdo.double3 is null or jdo.double3 =1
-- or jdo.double4 is null or jdo.double4 =1
-- )
-- limit  10

AND JDO.integer1 = 1
-- and code = 'jr000019719560';

2.2 导出三级分类

SELECT
	one.EBMG_CODE '一级分类编码',
	one.EBMG_NAME_CN '一级分类名称',
	two.EBMG_CODE '二级分类编码',
	two.EBMG_NAME_CN '二级分类名称',
	three.EBMG_CODE '三级分类编码',
	three.EBMG_NAME_CN '三级分类名称',
	IFNULL(three.EBMG_SUBSTR1,0) '品类长推荐',
	IFNULL(three.EBMG_SUBSTR2,0) '品类宽推荐',
	IFNULL(three.EBMG_SUBSTR3,0) '品类高推荐',
	IFNULL(three.EBMG_SUBSTR4,0) '品类体积推荐' 
FROM
	( SELECT * FROM jr_eb_material_group WHERE EBMG_LEVEL = 1 AND REC_STATUS < 1 AND EBMG_STATE = '0' ) one
	LEFT JOIN ( SELECT * FROM jr_eb_material_group WHERE EBMG_LEVEL = 2 AND REC_STATUS < 1 AND EBMG_STATE = '0' ) two ON one.EBMG_CODE = two.EBMG_PARENT_PM_CODE
	LEFT JOIN ( SELECT * FROM jr_eb_material_group WHERE EBMG_LEVEL = 3 AND REC_STATUS < 1 AND EBMG_STATE = '0' ) three ON two.EBMG_CODE = three.EBMG_PARENT_PM_CODE

2.3 查询回传失败脚本

详情可以参考报表:接口回传
在这里插入图片描述

select * from oms_interface_log where
SENDER = 'WMS'
and REMARK like '订单出库完成%'
and message not like '%成功%'
and message not like '%没有可转单据的行%'
and ORDER_NO in(
select
DISTINCT eoor.EOOR_ORDER_NO
from eo_c_order_item eooi
left join eo_c_order eoor on eoor.EOOR_ORDER_NO = eooi.EOOI_ORDER_NO
where eooi.eooi_code = 'jr000035695860' 
and eooi.REC_STATUS = 0 
and eoor.REC_STATUS = 0
and eoor.EOOR_STATUS_CODE not in ('00','500')
and eoor.EOOR_CUSTOMER_CODE = 'jr000523'
and eoor.EOOR_ORDER_TYPE_CODE in(
select EBCD_CODE from eb_code_master where EBCD_DICTIONARY_TYPE = 'OMS_NEW_OUT_ORDER_TYPE'
)
)

2.4 查询订单商品行号重复脚本

SELECT COUNT(EOOI_LINK_PM_CODE),EOOI_LINK_PM_CODE,EOOI_ORDER_NO  FROM eo_c_order_item eooi
			left join eo_c_order eoor on eoor.EOOR_ORDER_NO = eooi.EOOI_ORDER_NO
			where eoor.CREATE_TIME>'2023-01-01' and eoor.REC_STATUS = 0 and eooi.REC_STATUS = 0 and eoor.EOOR_STATUS_CODE <> '500'
			GROUP BY EOOI_LINK_PM_CODE,EOOI_ORDER_NO
			HAVING COUNT(EOOI_LINK_PM_CODE)>1

2.5 查询重复商品分类

## 查询数据
select count(*),ebmg_code from eb_material_group group by ebmg_code having count(*)>1

## 修复数据
select * from eb_material_group where ebmg_code = '0740021010';
select * from jrwl_mdm.jr_material_group limit 10;
select * from jrwl_mdm.JR_EB_MATERIAL_GROUP where EBMG_CODE = '0740021018';

2.6 查询客户当日库存快照

select * from WM_DAILY_STOCK where STOCK_DATE = '2023-04-30'
and lot_num in(
select lot_num from wm_inv_lot_att where OWNER_CODE = '客户编码'
);

3 程序修复类

3.1修复主数据

3.1.1修复主数据的商品分类

主数据分类修复,需要修复主数据的信息有

商品大类编码:string17
商品大类名称:string12
商品中类编码:string18
商品中类名称:string8
商品小类编码:string19
商品小类名称:string67
integer1默认为1标记人工修复过

命中的条件是居然商品编码jr编码,此编码全局唯一
更新表为 :jr_data_object

更新sql为:

update jr_data_object jdo set string17= '大类编码',jdo.string12 ='大类名称',jdo.string18 = '中类编码',jdo.string8 ='中类名称',jdo.string19 ='小类编码',jdo.string67 ='小类名称',integer1 = 1 where code = '商品编码'

以下是修复数据的主要代码
Mdm修复商品主类

@Slf4j
public class Mdm {
    // 读取excel
    public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException {
        List<MdmSku> mdmSkus = readDatas();
        Connection connection = DataSource.getConnection("jdbc:mysql://地址:3306/数据库", "账号", "密码");
        ExecutorService executorService = Executors.newFixedThreadPool(20);

        String sql = "update jr_data_object jdo set string17= '大类编码',jdo.string12 ='大类名称',jdo.string18 = '中类编码',jdo.string8 ='中类名称',jdo.string19 ='小类编码',jdo.string67 ='小类名称',integer1 = 1 where code = '商品编码'";
        mdmSkus.forEach(sku->{
            String replace = sql.replace("商品编码", sku.getCode())
                    .replace("大类编码", sku.getTypeName1())
                    .replace("大类名称", sku.getTypeCode1())
                    .replace("中类编码", sku.getTypeName2())
                    .replace("中类名称", sku.getTypeCode2())
                    .replace("小类编码", sku.getTypeName3())
                    .replace("小类名称", sku.getTypeCode3());

            // log.info("执行SQL为:{}",replace);
            executorService.submit(new MdmSkuUpdateTread(connection,replace,sku.getCode()));
        });
        executorService.shutdown();
    }

    private static List<MdmSku> readDatas(){
        List<MdmSku> list = new ArrayList<>();
        Workbook workbook = null;
        try {
            workbook = new XSSFWorkbook(new FileInputStream("C:\\Work\\2023\\04\\26\\分类为其他的数据-4-25.xlsx"));
            Sheet updateSet = workbook.getSheet("更新数据");
            // 读取最总行数
            int lastRowNum = updateSet.getLastRowNum();
            for (int i=1;i<lastRowNum;i++){
                Row row = updateSet.getRow(i);
                MdmSku sku = new MdmSku();
                Cell cell0 = row.getCell(0);
                Cell cell1 = row.getCell(1);
                Cell cell2 = row.getCell(2);
                Cell cell3 = row.getCell(3);
                Cell cell4 = row.getCell(4);
                Cell cell5 = row.getCell(5);
                Cell cell6 = row.getCell(6);
                sku.setCode(cell0.getStringCellValue());
                sku.setTypeCode1(cell1.getStringCellValue());
                sku.setTypeName1(cell2.getStringCellValue());
                sku.setTypeCode2(cell3.getStringCellValue());
                sku.setTypeName2(cell4.getStringCellValue());
                sku.setTypeCode3(cell5.getStringCellValue());
                sku.setTypeName3(cell6.getStringCellValue());
                list.add(sku);
            }
            return list;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

读取excel的格式一定要按照一下顺序排列,从第0行开始读取
在这里插入图片描述
为了加快执行效率,以上代码使用多线程编写,线程类MdmSkuUpdateTread
主要的功能实在更新主数据的同时,下发的各个业务系统中去

@Slf4j
public class MdmSkuUpdateTread implements Runnable{
    private Connection connection;
    private String sql;
    private String code;
    
    public MdmSkuUpdateTread(Connection connection, String sql,String code) {
        this.connection = connection;
        this.sql = sql;
        this.code = code;
    }
    @Override
    public void run() {
        try {
            Statement statement = connection.createStatement();
            int update = statement.executeUpdate(sql);

            if(update < 1){
                log.error("sql执行失败:{}",sql);
            }else{
                // 请求数据;
                String querySql = "select id from jr_data_object where code = 'JRCODE' limit 1";
                ResultSet jrcode = statement.executeQuery(querySql.replace("JRCODE", code));
                while (jrcode.next()){
                    long id = jrcode.getLong("ID");

                    // 请求mdm下发;
                    // log.info("得到信息为:{}",id);
                    String url = "https://www.jrlog.cn/module-mdmweb/mdmweb/JrDataObject/sendData.shtml";

                    String content = "dataTypeId=DATAID&sendType=1&sendObj=&dataType=SP";

                    Map<String,String> headers = new HashMap<>();
                    headers.put("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
                    headers.put("Cookie","JSESSIONID=416871FE4424DF396B17A070496CE1A4; _sna=U1FRUVVRUFRVXVZdVlJTUlBHUVZXUVFHVVRUUVxWXFZHVVRUR0A7Cg0IO0BH");
                    headers.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50");
                    String payload = content.replace("DATAID",id+"");
                    log.info("请求参数为:{}",payload);
                    String post = null;
                    try {
                        post = HttpURLConnectionUtil.post(url, payload, headers);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    log.info("请求结果为:{}",post);
                }
            }
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

需要注意的是这里的Cookie:需要根据实际替换

商品信息类 MdmSku

@Data
public class MdmSku {

    private String code;

    private String typeCode1;

    private String typeName1;

    private String typeCode2;

    private String typeName2;

    private String typeCode3;

    private String typeName3;

    private double length;

    private double width;

    private double hight;

    private double weight;

    private double volume;
}

3.2 修改主数据的长宽高体积重量并下发

和3.1的类似

@Slf4j
public class MdmVolumeWeight {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        List<MdmSku> mdmSkus = readDatas();
        Connection connection = DataSource.getConnection("jdbc:mysql://地址:3306/数据库", "账号", "密码");
        ExecutorService executorService = Executors.newFixedThreadPool(20);
        // String sql = "update jr_data_object jdo set string17= '大类编码',jdo.string12 ='大类名称',jdo.string18 = '中类编码',jdo.string8 ='中类名称',jdo.string19 ='小类编码',jdo.string67 ='小类名称',integer1 = 1 where code = '商品编码'";

        String sql = "update jr_data_object jdo set  " +
                "jdo.double1 =长 , " +
                "jdo.double2 =宽, " +
                "jdo.double3 =高, " +
                "jdo.double10 =体积," +
                "jdo.double4 =重量," +
                "jdo.double5 =长," +
                "jdo.double6 =宽," +
                "jdo.double7 =高," +
                "jdo.double8 =体积," +
                "jdo.double9 =重量," +
                "jdo.string33='1'" +
                "where jdo.code='商品编码'";

        mdmSkus.forEach(sku->{
            String replace = sql.replace("商品编码", sku.getCode())
                    .replace("长", sku.getLength()+"")
                    .replace("宽", sku.getWidth()+"")
                    .replace("高", sku.getHight()+"")
                    .replace("体积", sku.getVolume()+"")
                    .replace("重量", sku.getWeight()+"");

            //log.info("执行SQL为:{}",replace);
            //log.info("");
            executorService.submit(new MdmSkuUpdateTread(connection,replace,sku.getCode()));
        });
        executorService.shutdown();

        // connection.close();
    }
    private static List<MdmSku> readDatas() {

        List<MdmSku> list = new ArrayList<>();

        Workbook workbook = null;
        try {
            workbook = new XSSFWorkbook(new FileInputStream("C:\\Work\\2023\\04\\26\\鑫德需改尺寸.xlsx"));
            Sheet updateSet = workbook.getSheet("更新数据");

            // 读取最总行数
            int lastRowNum = updateSet.getLastRowNum();

            for (int i=1;i<lastRowNum;i++){
                Row row = updateSet.getRow(i);
                MdmSku sku = new MdmSku();

                Cell cell0 = row.getCell(0);
                Cell cell1 = row.getCell(1);
                Cell cell2 = row.getCell(2);
                Cell cell3 = row.getCell(3);
                Cell cell4 = row.getCell(4);
                Cell cell5 = row.getCell(5);

                sku.setCode(cell0.getStringCellValue());
                sku.setLength(cell1.getNumericCellValue());
                sku.setWidth(cell2.getNumericCellValue());
                sku.setHight(cell3.getNumericCellValue());
                sku.setWeight(cell4.getNumericCellValue());
                sku.setVolume(cell5.getNumericCellValue());
                list.add(sku);
            }
            return list;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

excel格式要求
sheet名称:数据更新
在这里插入图片描述
更新线程类 MdmSkuUpdateTread 与3.1公用

3.3 订单签收状态重传

订单签收状态重传之前需要确认重传是否会影响到对方系统的状态,例如退货单状态是否会从已入库状态变更为已签收状态,如果没有这样的影响则可以回传;

选中需要重传单据SQL:

select ETTA_EXTERNAL_ORDER_NO from et_task where CREATE_TIME>'2023-04-06' and ETTA_CUSTOM_EBCU_NO = '客户编码' and  ETTA_STATUS = '90' and REC_STATUS = 0

主程序代码FeedBack

public class FeedBack {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        // 从数据库里面选择单据
        String sql = "select ETTA_EXTERNAL_ORDER_NO from et_task where CREATE_TIME>'2023-04-06' and ETTA_CUSTOM_EBCU_NO = 'jr000494' and  ETTA_STATUS = '90' and REC_STATUS = 0";

        Connection connection = DataSource.getConnection("jdbc:mysql://地址:3306/数据库", "账号", "密码");

        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        ResultSet resultSet = preparedStatement.executeQuery();

        ExecutorService executorService = Executors.newFixedThreadPool(1);

        while(resultSet.next()){
            String etta_external_order_no = resultSet.getString("ETTA_EXTERNAL_ORDER_NO");
            executorService.submit(new StatusFeedbackThread(etta_external_order_no,"55","订单运输任务已全部签收!"));
        }
        executorService.shutdown();
    }
}

更新线程:StatusFeedbackThread

public class StatusFeedbackThread implements Runnable{

    private String orderNo;

    private String status;

    private String label;

    public StatusFeedbackThread(String orderNo, String status, String label) {
        this.orderNo = orderNo;
        this.status = status;
        this.label = label;
    }


    @Override
    public void run() {
        String url = "https://www.jrlog.cn/module-oms2cweb/oms2cweb/eorder/eorderManager/rePushOrderStatus.shtml";

        String content = "eoorOrderNo="+orderNo+"&statusCode="+status+"&statusName="+label;
        Map<String,String> headers = new HashMap<>();
        headers.put("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
        headers.put("Cookie","JSESSIONID=B87A417F5CF2C7C852621DA357C3EAF7; _sna=U1FRUVVRUFRVXVZdVlJTUlBHUVZXUVFHVVRUUVxWXFZHVVRUR0A7Cg0IO0BH");
        headers.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50");
        // String payload = content.replace("DATAID",id+"");
        log.info("请求参数为:{}",content);
        String post = null;
        try {
            post = HttpURLConnectionUtil.post(url, content, headers);
        } catch (IOException e) {
            e.printStackTrace();
        }
        log.info("请求结果为:{}",post);
    }
}

还是一样Cookie需要修改一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/17475.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

不会前端,怎么快速打造属于自己的个人博客?

个人博客 简介提前准备 一、初始化vuepress项目二、页面配置首页配置顶部配置顶部导航栏路由配置侧边导航栏配置 三、打包部署四、数据统计插槽自定义插槽配置整体结构页面效果 项目地址 简介 主要教大家如何快速搞一个属于自己的博客网站&#xff0c;特别是一些不怎么会前端的…

信息安全保障

文章目录 信息安全保障基础基本概念信息安全定义广义和狭义的信息安全问题信息安全问题的根源和特征情报威胁和态势感知信息安全保障基础信息安全属性信息安全视角 信息安全发展阶段通信安全计算机安全信息系统安全信息安全保障网络安全空间 信息安全保障新领域工业控制系统(IS…

【虹科案例】使用 TCP 分析测量握手时间

如何使用 Allegro Network 万用表的 TCP 分析确定握手时间 握手需要多少时间&#xff1f; 在图 1 中&#xff0c;您可以在虹科Allegro 网络万用表的 TCP 统计数据中看到过去 10 分钟的客户端握手次数。在这里&#xff0c;您可以清楚地看到在指定时间段内有延长的响应时间。但…

ChatGPT探索系列之五:讨论人工智能伦理问题及ChatGPT的责任

文章目录 前言一、安全二、隐私和道德三、我们应该做什么总结 前言 ChatGPT发展到目前&#xff0c;其实网上已经有大量资料了&#xff0c;博主做个收口&#xff0c;会出一个ChatGPT探索系列的文章&#xff0c;帮助大家深入了解ChatGPT的。整个系列文章会按照一下目标来完成&am…

给定一个文本文件,每行是一条股票信息,写程序提取出所有的股票代码

问题&#xff1a;给定一个文本文件&#xff0c;每行是一条股票信息&#xff0c;写程序提取出所有的股票代码。其中&#xff0c;股票代码规则是&#xff1a;6 位数字&#xff0c; 而且以.SH 或者.SZ 结尾。 文件内容示例&#xff1a; 2020-08-08;平安银行(000001.SZ);15.55;2940…

如何用ChatGPT做品牌联名方案策划?

该场景对应的关键词库&#xff08;15个&#xff09;&#xff1a; 品牌、个人IP、社交话题、联名策划方案、调研分析、市场影响力、资源互补性、产品体验、传播话题、视觉形象设计、合作职权分配、销售转化、曝光目标、宣发渠道、品牌形象 提问模板&#xff08;1个&#xff09;…

kubernetes项目部署

目录 ​一、容器交付流程 二、k8s平台部署项目流程 三、在K8s平台部署项目 一、容器交付流程 容器交付流程通常分为四个阶&#xff1a;开发阶段、持续集成阶段、应用部署阶段和运维阶段。 开发阶段&#xff1a;开发应用程序&#xff0c;编写Dockerfile; 持续集成阶段&#…

很佩服的一个Google大佬,离职了。。

这两天&#xff0c;科技圈又有一个突发的爆款新闻相信不少同学都已经看到了。 那就是75岁的计算机科学家Geoffrey Hinton从谷歌离职了&#xff0c;从而引起了科技界的广泛关注和讨论。 而Hinton自己也证实了这一消息。 提到Geoffrey Hinton这个名字&#xff0c;对于一些了解过…

Spring Cloud学习笔记【分布式配置中心-Config】

文章目录 SpringCloud Config概述概述传统方式弊端主要功能与GitHub整合配置 Config服务端配置与测试服务端配置(即Gitee上的配置文件)Config Demo配置Spring Cloud Config访问规则 Config客户端配置与测试bootstrap.yml说明Config客户端 Demo配置 SpringCloud Config概述 概述…

无需公网IP 使用SSH远程连接Linux CentOS服务器【内网穿透】

文章目录 视频教程1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不需要设置…

深入理解Java虚拟机——垃圾收集器

1.前言 在前面我们已经说过了垃圾收集算法&#xff0c;那么现在我们要讲的垃圾收集器&#xff0c;实际上就是对垃圾收集算法的实践。 首先我们先看一张图&#xff0c;这张图可以帮助我们了解各款经典垃圾收集器之间的关系&#xff1a; 图中的垃圾收集器所在的区域代表了它是属…

【三十天精通Vue 3】第二十六天 Vue3 与 TypeScript 最佳实践

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、为什么使用TypeScript?二、Vue 3和TypeScript的基础2.1 安装TypeScript2.2 配置TypeScript2.3 Vue 3中使用TypeScript

Java多线程基础概述

简述多线程&#xff1a; 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程&#xff0c;提升性能。 正式着手代码前&#xff0c;需要先理清4个概念&#xff1a;并发&#xff0c;并行&#xff0c;进程&#…

TinyJAMBU的制动原理——一种轻量化的认证密码

关于TinyJAMBU的定义和介绍在另一篇博文已经介绍过了&#xff0c;这里只对其动作原理进行描述和说明。 对应的博文链接如下&#xff1a;TinyJAMBU&#xff1a;一种轻量化密码介绍 首先&#xff0c;该密码是一个流密码体系的块密码框架。其加密模式整体上来看是块密码&#xff0…

让语言学习更简单的 WordFlow

作为一个英语并不是那么特别好的计算机专业学生&#xff0c;长期积累英语的学习对个人发展还是有意义的。简单来说&#xff0c;我在语言上最大的两个问题&#xff0c;一个自己「不理解」&#xff0c;另一个是自己「不会表达」。 上述两个问题主要体现在口语层面&#xff0c;而…

实验二 存储器管理

实验二 存储器管理 实验目的&#xff1a; 理解各类置换算法的原理和虚拟存储器管理的方法。 实验内容&#xff1a; 编程实现LRU算法或CLOCK/改进算法等置换算法&#xff08;二选一&#xff09;&#xff0c;模拟实现虚拟存储器的地址变换过程。 实验步骤&#xff1a; 1…

【Golang项目实战】用Go写一个学生信息管理系统,真的太酷啦| 保姆级详解,附源码——建议收藏

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: Go语言核心编程近期目标&#xff1a;写好专栏的每一篇文章 学习了Go的基…

图神经网络:在自定义数据集上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 文章目录 自定义数据集动手实现图神经网络自定义数据集训验测集拆分&#xff0c;创建Data的数据结构&#xff0c;观察Data的基本信息&#xff0c;可视化图网…

震惊,为了学会泛型类竟做这种事?!

上一节&#xff0c;我们基本学会了Java泛型类的用法。 传送门&#xff1a;彻底弄懂Java的泛型 - 泛型类 这一节&#xff0c;我们转变一下风格&#xff0c;具体是什么风格呢&#xff0c;你马上就懂了。 宝子们&#xff0c;欢迎大家来到我们的泛型直播间&#xff0c;这一讲呢&a…

Ansible的脚本-playbook 剧本

目录 1.剧本&#xff08;playbook&#xff09; 1.playbook介绍 2. playbooks 的组成 3.案例&#xff1a;编写httpd的playbook 4.定义、引用变量 5.指定远程主机sudo切换用户 6.when条件判断 7.迭代 2.playbook的模块 1.Templates 模块 2.tags 模块 3.Roles 模块 1.…
最新文章