package com.qlm.service; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.jfinal.aop.Before; import com.jfinal.kit.PropKit; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.dialect.OracleDialect; import com.jfinal.plugin.activerecord.tx.Tx; import com.jfinal.plugin.druid.DruidPlugin; import com.qlm.log.Log; import com.qlm.tools.MD5Utils; import com.qlm.tools.WxUtil; public class UploadService { public static void main(String[] args) { con(); update(); } public static void con(){ DruidPlugin oraclePlugin = new DruidPlugin("jdbc:oracle:thin:@192.168.0.183:61521/orcl", "pxl","xuwei417"); oraclePlugin.setDriverClass("oracle.jdbc.OracleDriver"); oraclePlugin.setValidationQuery("select 1 from dual"); oraclePlugin.start(); ActiveRecordPlugin oracleArp = new ActiveRecordPlugin("oracle", oraclePlugin); oracleArp.setDialect(new OracleDialect()); oracleArp.setContainerFactory(new CaseInsensitiveContainerFactory()); oracleArp.start(); } @Before(Tx.class) public void upload(String data){ // Log.info("receive data:"+data); JSONObject parseObject = JSONObject.parseObject(data); String deviceId = parseObject.getString("d"); List list = new ArrayList(); List xiangList = new ArrayList(); JSONArray jsonArray = parseObject.getJSONArray("l"); Map masterMap = new HashMap(); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String master = jsonObject.getString("m"); master = master.toUpperCase(); String childCode = jsonObject.getString("i"); if("nodata".equals(master)){ int update = Db.update("update jinzai_upload_record set master_code = null where child_code = ?",childCode); if(update>0){ Record r = new Record(); r.set("child_code", childCode).set("create_time", new Date()) .set("device_no", deviceId); try{ Db.save("jinzai_unbind_record","child_code", r); }catch(Exception e){ e.printStackTrace(); } } }else{ JSONObject jsonObject2 = masterMap.get(master); if(jsonObject2 == null){ masterMap.put(master, jsonObject) ; } Record info = new Record(); info.set("child_code", childCode).set("master_code", master) .set("create_time", new Date()); list.add(info); } } Set> entrySet = masterMap.entrySet(); List find = Db.find("SELECT i.sku,i.kouwei,p.product_name,i.id,i.product_id from t_jz_item i left join t_jz_product p on (i.product_id = p.id) where sku is not null"); Map skuMap =new HashMap(); for (Record record : find) { String sku = record.getStr("sku"); skuMap.put(sku, record); } for (Entry entry : entrySet) { String master = entry.getKey(); JSONObject jsonObject = entry.getValue(); String addTime = jsonObject.getString("g"); String duoma = jsonObject.getString("t"); duoma = duoma.toUpperCase(); String taskNo = jsonObject.getString("s"); String sku = jsonObject.getString("k"); String productDate = jsonObject.getString("d"); String banzu = jsonObject.getString("b"); Record masterInfo = new Record(); Record record = skuMap.get(sku); String pinXiang = ""; String kouwei = ""; if(record != null){ pinXiang = record.getStr("product_name"); kouwei = record.getStr("kouwei"); } masterInfo.set("id", master).set("create_time", new Date()).set("produce_date", productDate) .set("duo_code", duoma.toUpperCase()).set("device_no", deviceId).set("guo_time", addTime) .set("pinxiang", pinXiang).set("kouwei", kouwei).set("sku", sku).set("task_no", taskNo).set("banzu", banzu); xiangList.add(masterInfo); } WxUtil.batchSaveIgnore("jinzai_upload_child", list, ""); WxUtil.batchSaveIgnore("jinzai_upload_master", xiangList, ""); } @Before(Tx.class) public void unBindCode(String code,String line, String time, String sign) { boolean check = checksign(code,time,sign); if(check){ int update = Db.update("update jinzai_upload_child set master_code = null where child_code = ?",code); if(update>0){ Record r = new Record(); r.set("child_code", code).set("create_time", new Date()) .set("device_no", line); try{ Db.save("jinzai_unbind_record","child_code", r); }catch(Exception e){ e.printStackTrace(); } } } } static boolean isRunning = false; //同步订单到我们自己的库 public static void update(){ if(isRunning){ return; } isRunning = true; try{ // 获取当前时间 LocalDateTime now = LocalDateTime.now(); // 获取昨天的当前时间(减去 1 天) LocalDateTime yesterdaySameTime = now.minusDays(1); // 格式化输出(可选) DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedTime = yesterdaySameTime.format(formatter); String udfSqlString = "SELECT * FROM WMS_PROD.V_TMSO_RETURN_H WHERE DELIVERYTIME >= TO_DATE('"+formattedTime+"', 'YYYY-MM-DD HH24:MI:SS')"; List find = Db.use("oracle").find(udfSqlString); Log.info("执行同步数据查询:数据量,"+find.size()); List list = new ArrayList(); for (Record record : find) { String orderNo = record.getStr("ORDERNO");//发货单号 String OUTWAREHOUSE = record.getStr("OUTWAREHOUSE");//工厂名称 String WAREHOUSEID = record.getStr("WAREHOUSEID");//工厂ID Date Deliverytime = record.getDate("DELIVERYTIME");//出库时间 String caseCode = record.getStr("CASECODE");//箱码 String palletCode = record.getStr("PALLETCODE");//垛码 String PRODUCTNAME = record.getStr("PRODUCTNAME");//产品名称 String CUSTOMERNAME = record.getStr("CUSTOMERNAME");//客户姓名 String SKUNAME = record.getStr("SKUNAME");//SKU名称 String LICENSEPLATE = record.getStr("LICENSEPLATE");//车牌号 String OUTWAREHOUSENO = record.getStr("OUTWAREHOUSENO");//工厂编号 String SKUNO = record.getStr("SKUNO");//sku编号 String OPERATEUSER = record.getStr("OPERATEUSER");//操作人 String PRODUCTNO = record.getStr("PRODUCTNO");//产品编号 String CUSTOMERNO = record.getStr("CUSTOMERNO");//客户编号 Record info = new Record(); info.set("OrderNo", orderNo).set("OutWarehouse", OUTWAREHOUSE).set("WarehouseID", WAREHOUSEID) .set("DeliveryTime", Deliverytime).set("CaseCode", caseCode).set("PalletCode", palletCode) .set("ProductName", PRODUCTNAME).set("CustomerName", CUSTOMERNAME).set("SKUName", SKUNAME) .set("LicensePlate", LICENSEPLATE).set("OutWarehouseNo", OUTWAREHOUSENO).set("SKUNo", SKUNO) .set("OperateUser", OPERATEUSER).set("ProductNo", PRODUCTNO).set("CustomerNo", CUSTOMERNO); list.add(info); } WxUtil.batchSaveIgnore("deliveryorders", list, ""); Log.info("执行同步数据:完成,"+find.size()); }catch(Exception e){ e.printStackTrace(); }finally{ isRunning = false; } } static boolean isEmRunning = false; //同步订单到我们自己的库 public static void updateEm(){ if(isEmRunning){ return; } isEmRunning = true; int pageSize = 1000; try{ for (int pageNumber = 1; pageNumber <100000000; pageNumber++) { int pageStart = (pageNumber - 1) * pageSize + 1; int pageEnd = pageSize*pageNumber; String udfSqlString = "SELECT * FROM (SELECT a.*, ROWNUM rnum FROM (SELECT * FROM WMS_PROD.V_YMSO_RETURN_H) a WHERE ROWNUM <= ?) WHERE rnum > ?"; List find = Db.use("oracle").find(udfSqlString,pageEnd,pageStart); if(find.isEmpty()){ break; } List list = new ArrayList(); for (Record record : find) { String orderNo = record.getStr("ORDERNO");//发货单号 String OUTWAREHOUSE = record.getStr("OUTWAREHOUSE");//工厂名称 String WAREHOUSEID = record.getStr("WAREHOUSEID");//工厂ID Date Deliverytime = record.getDate("DELIVERYTIME");//出库时间 String caseCode = record.getStr("CASECODE");//箱码 String palletCode = record.getStr("PALLETCODE");//垛码 String PRODUCTNAME = record.getStr("PRODUCTNAME");//产品名称 String CUSTOMERNAME = record.getStr("CUSTOMERNAME");//客户姓名 String SKUNAME = record.getStr("SKUNAME");//SKU名称 String LICENSEPLATE = record.getStr("LICENSEPLATE");//车牌号 String OUTWAREHOUSENO = record.getStr("OUTWAREHOUSENO");//工厂编号 String SKUNO = record.getStr("SKUNO");//sku编号 String OPERATEUSER = record.getStr("OPERATEUSER");//操作人 String PRODUCTNO = record.getStr("PRODUCTNO");//产品编号 String CUSTOMERNO = record.getStr("CUSTOMERNO");//客户编号 Record info = new Record(); info.set("OrderNo", orderNo).set("OutWarehouse", OUTWAREHOUSE).set("WarehouseID", WAREHOUSEID) .set("DeliveryTime", Deliverytime).set("CaseCode", caseCode).set("PalletCode", palletCode) .set("ProductName", PRODUCTNAME).set("CustomerName", CUSTOMERNAME).set("SKUName", SKUNAME) .set("LicensePlate", LICENSEPLATE).set("OutWarehouseNo", OUTWAREHOUSENO).set("SKUNo", SKUNO) .set("OperateUser", OPERATEUSER).set("ProductNo", PRODUCTNO).set("CustomerNo", CUSTOMERNO); list.add(info); } WxUtil.batchSaveIgnore("deliveryorders", list, ""); } Log.info("执行同步数据em:完成"); }catch(Exception e){ e.printStackTrace(); }finally{ isEmRunning = false; } } private static String key = "wYG(nx%Xlc7vb%Ss1=2L#JZ*gSk^WXuV"; private boolean checksign(String code, String time, String sign) { String str = time+key; String md5 = MD5Utils.MD5(str).toLowerCase(); return md5.equals(sign); } }