UploadService.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. package com.qlm.service;
  2. import java.time.LocalDateTime;
  3. import java.time.format.DateTimeFormatter;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Map.Entry;
  10. import java.util.Set;
  11. import com.alibaba.fastjson.JSONArray;
  12. import com.alibaba.fastjson.JSONObject;
  13. import com.jfinal.aop.Before;
  14. import com.jfinal.kit.PropKit;
  15. import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
  16. import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
  17. import com.jfinal.plugin.activerecord.Db;
  18. import com.jfinal.plugin.activerecord.Record;
  19. import com.jfinal.plugin.activerecord.dialect.OracleDialect;
  20. import com.jfinal.plugin.activerecord.tx.Tx;
  21. import com.jfinal.plugin.druid.DruidPlugin;
  22. import com.qlm.log.Log;
  23. import com.qlm.tools.MD5Utils;
  24. import com.qlm.tools.WxUtil;
  25. public class UploadService {
  26. public static void main(String[] args) {
  27. con();
  28. update();
  29. }
  30. public static void con(){
  31. DruidPlugin oraclePlugin = new DruidPlugin("jdbc:oracle:thin:@192.168.0.183:61521/orcl", "pxl","xuwei417");
  32. oraclePlugin.setDriverClass("oracle.jdbc.OracleDriver");
  33. oraclePlugin.setValidationQuery("select 1 from dual");
  34. oraclePlugin.start();
  35. ActiveRecordPlugin oracleArp = new ActiveRecordPlugin("oracle", oraclePlugin);
  36. oracleArp.setDialect(new OracleDialect());
  37. oracleArp.setContainerFactory(new CaseInsensitiveContainerFactory());
  38. oracleArp.start();
  39. }
  40. @Before(Tx.class)
  41. public void upload(String data){
  42. // Log.info("receive data:"+data);
  43. JSONObject parseObject = JSONObject.parseObject(data);
  44. String deviceId = parseObject.getString("d");
  45. List<Record> list = new ArrayList();
  46. List<Record> xiangList = new ArrayList<Record>();
  47. JSONArray jsonArray = parseObject.getJSONArray("l");
  48. Map<String,JSONObject> masterMap = new HashMap<String, JSONObject>();
  49. for (int i = 0; i < jsonArray.size(); i++) {
  50. JSONObject jsonObject = jsonArray.getJSONObject(i);
  51. String master = jsonObject.getString("m");
  52. master = master.toUpperCase();
  53. String childCode = jsonObject.getString("i");
  54. if("nodata".equals(master)){
  55. int update = Db.update("update jinzai_upload_record set master_code = null where child_code = ?",childCode);
  56. if(update>0){
  57. Record r = new Record();
  58. r.set("child_code", childCode).set("create_time", new Date())
  59. .set("device_no", deviceId);
  60. try{
  61. Db.save("jinzai_unbind_record","child_code", r);
  62. }catch(Exception e){
  63. e.printStackTrace();
  64. }
  65. }
  66. }else{
  67. JSONObject jsonObject2 = masterMap.get(master);
  68. if(jsonObject2 == null){
  69. masterMap.put(master, jsonObject) ;
  70. }
  71. Record info = new Record();
  72. info.set("child_code", childCode).set("master_code", master)
  73. .set("create_time", new Date());
  74. list.add(info);
  75. }
  76. }
  77. Set<Entry<String,JSONObject>> entrySet = masterMap.entrySet();
  78. List<Record> 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");
  79. Map<String, Record> skuMap =new HashMap<String, Record>();
  80. for (Record record : find) {
  81. String sku = record.getStr("sku");
  82. skuMap.put(sku, record);
  83. }
  84. for (Entry<String, JSONObject> entry : entrySet) {
  85. String master = entry.getKey();
  86. JSONObject jsonObject = entry.getValue();
  87. String addTime = jsonObject.getString("g");
  88. String duoma = jsonObject.getString("t");
  89. duoma = duoma.toUpperCase();
  90. String taskNo = jsonObject.getString("s");
  91. String sku = jsonObject.getString("k");
  92. String productDate = jsonObject.getString("d");
  93. String banzu = jsonObject.getString("b");
  94. Record masterInfo = new Record();
  95. Record record = skuMap.get(sku);
  96. String pinXiang = "";
  97. String kouwei = "";
  98. if(record != null){
  99. pinXiang = record.getStr("product_name");
  100. kouwei = record.getStr("kouwei");
  101. }
  102. masterInfo.set("id", master).set("create_time", new Date()).set("produce_date", productDate)
  103. .set("duo_code", duoma.toUpperCase()).set("device_no", deviceId).set("guo_time", addTime)
  104. .set("pinxiang", pinXiang).set("kouwei", kouwei).set("sku", sku).set("task_no", taskNo).set("banzu", banzu);
  105. xiangList.add(masterInfo);
  106. }
  107. WxUtil.batchSaveIgnore("jinzai_upload_child", list, "");
  108. WxUtil.batchSaveIgnore("jinzai_upload_master", xiangList, "");
  109. }
  110. @Before(Tx.class)
  111. public void unBindCode(String code,String line, String time, String sign) {
  112. boolean check = checksign(code,time,sign);
  113. if(check){
  114. int update = Db.update("update jinzai_upload_child set master_code = null where child_code = ?",code);
  115. if(update>0){
  116. Record r = new Record();
  117. r.set("child_code", code).set("create_time", new Date())
  118. .set("device_no", line);
  119. try{
  120. Db.save("jinzai_unbind_record","child_code", r);
  121. }catch(Exception e){
  122. e.printStackTrace();
  123. }
  124. }
  125. }
  126. }
  127. static boolean isRunning = false;
  128. //同步订单到我们自己的库
  129. public static void update(){
  130. if(isRunning){
  131. return;
  132. }
  133. isRunning = true;
  134. try{
  135. // 获取当前时间
  136. LocalDateTime now = LocalDateTime.now();
  137. // 获取昨天的当前时间(减去 1 天)
  138. LocalDateTime yesterdaySameTime = now.minusDays(1);
  139. // 格式化输出(可选)
  140. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  141. String formattedTime = yesterdaySameTime.format(formatter);
  142. String udfSqlString = "SELECT * FROM WMS_PROD.V_TMSO_RETURN_H WHERE DELIVERYTIME >= TO_DATE('"+formattedTime+"', 'YYYY-MM-DD HH24:MI:SS')";
  143. List<Record> find = Db.use("oracle").find(udfSqlString);
  144. Log.info("执行同步数据查询:数据量,"+find.size());
  145. List<Record> list = new ArrayList<Record>();
  146. for (Record record : find) {
  147. String orderNo = record.getStr("ORDERNO");//发货单号
  148. String OUTWAREHOUSE = record.getStr("OUTWAREHOUSE");//工厂名称
  149. String WAREHOUSEID = record.getStr("WAREHOUSEID");//工厂ID
  150. Date Deliverytime = record.getDate("DELIVERYTIME");//出库时间
  151. String caseCode = record.getStr("CASECODE");//箱码
  152. String palletCode = record.getStr("PALLETCODE");//垛码
  153. String PRODUCTNAME = record.getStr("PRODUCTNAME");//产品名称
  154. String CUSTOMERNAME = record.getStr("CUSTOMERNAME");//客户姓名
  155. String SKUNAME = record.getStr("SKUNAME");//SKU名称
  156. String LICENSEPLATE = record.getStr("LICENSEPLATE");//车牌号
  157. String OUTWAREHOUSENO = record.getStr("OUTWAREHOUSENO");//工厂编号
  158. String SKUNO = record.getStr("SKUNO");//sku编号
  159. String OPERATEUSER = record.getStr("OPERATEUSER");//操作人
  160. String PRODUCTNO = record.getStr("PRODUCTNO");//产品编号
  161. String CUSTOMERNO = record.getStr("CUSTOMERNO");//客户编号
  162. Record info = new Record();
  163. info.set("OrderNo", orderNo).set("OutWarehouse", OUTWAREHOUSE).set("WarehouseID", WAREHOUSEID)
  164. .set("DeliveryTime", Deliverytime).set("CaseCode", caseCode).set("PalletCode", palletCode)
  165. .set("ProductName", PRODUCTNAME).set("CustomerName", CUSTOMERNAME).set("SKUName", SKUNAME)
  166. .set("LicensePlate", LICENSEPLATE).set("OutWarehouseNo", OUTWAREHOUSENO).set("SKUNo", SKUNO)
  167. .set("OperateUser", OPERATEUSER).set("ProductNo", PRODUCTNO).set("CustomerNo", CUSTOMERNO);
  168. list.add(info);
  169. }
  170. WxUtil.batchSaveIgnore("deliveryorders", list, "");
  171. Log.info("执行同步数据:完成,"+find.size());
  172. }catch(Exception e){
  173. e.printStackTrace();
  174. }finally{
  175. isRunning = false;
  176. }
  177. }
  178. static boolean isEmRunning = false;
  179. //同步订单到我们自己的库
  180. public static void updateEm(){
  181. if(isEmRunning){
  182. return;
  183. }
  184. isEmRunning = true;
  185. int pageSize = 1000;
  186. try{
  187. for (int pageNumber = 1; pageNumber <100000000; pageNumber++) {
  188. int pageStart = (pageNumber - 1) * pageSize + 1;
  189. int pageEnd = pageSize*pageNumber;
  190. String udfSqlString = "SELECT * FROM (SELECT a.*, ROWNUM rnum FROM (SELECT * FROM WMS_PROD.V_YMSO_RETURN_H) a WHERE ROWNUM <= ?) WHERE rnum > ?";
  191. List<Record> find = Db.use("oracle").find(udfSqlString,pageEnd,pageStart);
  192. if(find.isEmpty()){
  193. break;
  194. }
  195. List<Record> list = new ArrayList<Record>();
  196. for (Record record : find) {
  197. String orderNo = record.getStr("ORDERNO");//发货单号
  198. String OUTWAREHOUSE = record.getStr("OUTWAREHOUSE");//工厂名称
  199. String WAREHOUSEID = record.getStr("WAREHOUSEID");//工厂ID
  200. Date Deliverytime = record.getDate("DELIVERYTIME");//出库时间
  201. String caseCode = record.getStr("CASECODE");//箱码
  202. String palletCode = record.getStr("PALLETCODE");//垛码
  203. String PRODUCTNAME = record.getStr("PRODUCTNAME");//产品名称
  204. String CUSTOMERNAME = record.getStr("CUSTOMERNAME");//客户姓名
  205. String SKUNAME = record.getStr("SKUNAME");//SKU名称
  206. String LICENSEPLATE = record.getStr("LICENSEPLATE");//车牌号
  207. String OUTWAREHOUSENO = record.getStr("OUTWAREHOUSENO");//工厂编号
  208. String SKUNO = record.getStr("SKUNO");//sku编号
  209. String OPERATEUSER = record.getStr("OPERATEUSER");//操作人
  210. String PRODUCTNO = record.getStr("PRODUCTNO");//产品编号
  211. String CUSTOMERNO = record.getStr("CUSTOMERNO");//客户编号
  212. Record info = new Record();
  213. info.set("OrderNo", orderNo).set("OutWarehouse", OUTWAREHOUSE).set("WarehouseID", WAREHOUSEID)
  214. .set("DeliveryTime", Deliverytime).set("CaseCode", caseCode).set("PalletCode", palletCode)
  215. .set("ProductName", PRODUCTNAME).set("CustomerName", CUSTOMERNAME).set("SKUName", SKUNAME)
  216. .set("LicensePlate", LICENSEPLATE).set("OutWarehouseNo", OUTWAREHOUSENO).set("SKUNo", SKUNO)
  217. .set("OperateUser", OPERATEUSER).set("ProductNo", PRODUCTNO).set("CustomerNo", CUSTOMERNO);
  218. list.add(info);
  219. }
  220. WxUtil.batchSaveIgnore("deliveryorders", list, "");
  221. }
  222. Log.info("执行同步数据em:完成");
  223. }catch(Exception e){
  224. e.printStackTrace();
  225. }finally{
  226. isEmRunning = false;
  227. }
  228. }
  229. private static String key = "wYG(nx%Xlc7vb%Ss1=2L#JZ*gSk^WXuV";
  230. private boolean checksign(String code, String time, String sign) {
  231. String str = time+key;
  232. String md5 = MD5Utils.MD5(str).toLowerCase();
  233. return md5.equals(sign);
  234. }
  235. }