From 70862b9228ccb2156971a22085ac31b6c8b6d2cd Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期二, 07 七月 2020 19:35:42 +0800
Subject: [PATCH] 优化代码

---
 service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java |  181 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 179 insertions(+), 2 deletions(-)

diff --git a/service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java b/service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java
index e2fe540..6ef665d 100644
--- a/service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java
+++ b/service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java
@@ -9,6 +9,7 @@
 import com.java110.order.dao.ICenterServiceDAO;
 import com.java110.order.smo.IOIdServiceSMO;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
 import org.slf4j.Logger;
@@ -33,7 +34,7 @@
     private static Logger logger = LoggerFactory.getLogger(OIdServiceSMOImpl.class);
 
 
-    public static final String FALLBACK_URL = "http://SERVICE_NAME/fallBack";
+    public static final String FALLBACK_URL = "http://SERVICE_NAME/businessApi/fallBack";
 
     public static final String SERVICE_NAME = "SERVICE_NAME";
 
@@ -59,6 +60,10 @@
 
         if (StringUtil.isEmpty(orderDto.getRequestTime())) {
             throw new IllegalArgumentException("鏈寘鍚姹傛椂闂�");
+        }
+
+        if (StringUtil.isEmpty(orderDto.getUserId())) {
+            throw new IllegalArgumentException("鏈寘鍚敤鎴稩D");
         }
 
         //淇濆瓨璁㈠崟淇℃伅
@@ -93,18 +98,158 @@
         List<OrderItemDto> errorOrderItemDtos = new ArrayList<>();
         for (OrderItemDto orderItemDto : orderItemDtos) {
             try {
-                httpEntity = new HttpEntity<String>(JSONObject.toJSONString(orderItemDto), header);
+                JSONArray params = generateParam(orderItemDto);
+                httpEntity = new HttpEntity<String>(params.toJSONString(), header);
                 restTemplate.exchange(FALLBACK_URL.replace(SERVICE_NAME, orderItemDto.getServiceName()), HttpMethod.POST, httpEntity, String.class);
             } catch (Exception e) {
                 logger.error("鍥為��浜嬪姟澶辫触", e);
                 errorOrderItemDtos.add(orderItemDto);
             }
         }
+
+        //鏍囪涓鸿鍗曢」澶辫触
+        Map info = new HashMap();
+        info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        info.put("statusCd", "E");
+        info.put("oId", orderDto.getoId());
+        centerServiceDAOImpl.updateOrderItem(info);
+
+        //鍒犻櫎 浜嬪姟鏃ュ織
+        centerServiceDAOImpl.deleteUnItemLog(info);
+
+        //鏍囪涓鸿鍗曞け璐�
+        info = new HashMap();
+        info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        info.put("statusCd", "E");
+        info.put("oId", orderDto.getoId());
+        centerServiceDAOImpl.updateOrder(info);
+
         if (errorOrderItemDtos.size() > 0) {
             return new ResponseEntity<String>(JSONArray.toJSONString(errorOrderItemDtos), HttpStatus.BAD_REQUEST);
         } else {
             return new ResponseEntity<String>("", HttpStatus.OK);
         }
+    }
+
+    /**
+     * 鐢熸垚鍥炴粴sql
+     *
+     * @param orderItemDto
+     * @return
+     */
+    private JSONArray generateParam(OrderItemDto orderItemDto) {
+        JSONArray params = null;
+        switch (orderItemDto.getAction()) {
+            case "ADD":
+                params = generateDeleteSql(orderItemDto);
+                break;
+            case "MOD":
+                params = generateUpdateSql(orderItemDto);
+                break;
+            case "DEL":
+                params = generateInsertSql(orderItemDto);
+                break;
+        }
+
+        return params;
+    }
+
+    /**
+     * 鐢熸垚insert璇彞
+     *
+     * @param orderItemDto
+     * @return
+     */
+    private JSONArray generateInsertSql(OrderItemDto orderItemDto) {
+        JSONArray params = new JSONArray();
+        JSONObject param = null;
+        String sql = "";
+        String logText = orderItemDto.getLogText();
+
+        JSONObject logTextObj = JSONObject.parseObject(logText);
+        JSONArray preValues = logTextObj.getJSONArray("preValue");
+        for (int preValueIndex = 0; preValueIndex < preValues.size(); preValueIndex++) {
+            sql = "insert into " + orderItemDto.getActionObj() + " ";
+            param = new JSONObject();
+            JSONObject keyValue = preValues.getJSONObject(preValueIndex);
+            String keySql = "( ";
+            String valueSql = " values (";
+            for (String key : keyValue.keySet()) {
+                keySql += (key + ",");
+                valueSql += (keyValue.getString(key) + ",");
+            }
+            if (keySql.endsWith(",")) {
+                keySql = keySql.substring(0, keySql.length() - 1);
+            }
+            if (valueSql.endsWith(",")) {
+                valueSql = valueSql.substring(0, valueSql.length() - 1);
+            }
+            sql = sql + keySql + ") " + valueSql + ") ";
+            param.put("fallBackSql", sql);
+            params.add(param);
+        }
+
+        return params;
+    }
+
+    private JSONArray generateUpdateSql(OrderItemDto orderItemDto) {
+        JSONArray params = new JSONArray();
+        JSONObject param = null;
+        String sql = "";
+        String logText = orderItemDto.getLogText();
+
+        JSONObject logTextObj = JSONObject.parseObject(logText);
+        JSONArray preValues = logTextObj.getJSONArray("preValue");
+        JSONArray afterValues = logTextObj.getJSONArray("afterValue");
+
+        for (int preValueIndex = 0; preValueIndex < preValues.size(); preValueIndex++) {
+            sql = "update " + orderItemDto.getActionObj() + " set ";
+            param = new JSONObject();
+            JSONObject keyValue = preValues.getJSONObject(preValueIndex);
+            JSONObject afterKeyValue = afterValues.getJSONObject(preValueIndex);
+            String whereSql = " where 1=1 ";
+            for (String key : keyValue.keySet()) {
+                sql += (key + "=" + keyValue.getString(key) + ",");
+                whereSql += (" and " + key + " = " + afterKeyValue.getString(key));
+            }
+            if (sql.endsWith(",")) {
+                sql = sql.substring(0, sql.length() - 1);
+            }
+
+            sql += whereSql;
+
+            param.put("fallBackSql", sql);
+            params.add(param);
+        }
+
+        return params;
+    }
+
+    /**
+     * 鐢熸垚鍒犻櫎璇彞
+     *
+     * @param orderItemDto
+     */
+    private JSONArray generateDeleteSql(OrderItemDto orderItemDto) {
+        JSONArray params = new JSONArray();
+        JSONObject param = null;
+        String sql = "";
+        String logText = orderItemDto.getLogText();
+
+        JSONObject logTextObj = JSONObject.parseObject(logText);
+        JSONArray preValues = logTextObj.getJSONArray("preValue");
+        for (int preValueIndex = 0; preValueIndex < preValues.size(); preValueIndex++) {
+            sql = "delete from " + orderItemDto.getActionObj() + " where 1=1 ";
+            param = new JSONObject();
+            JSONObject keyValue = preValues.getJSONObject(preValueIndex);
+            for (String key : keyValue.keySet()) {
+                sql += (" and " + key + "=" + keyValue.getString(key));
+            }
+            param.put("fallBackSql", sql);
+            params.add(param);
+        }
+
+        return params;
     }
 
     @Override
@@ -135,4 +280,36 @@
 
         return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
     }
+
+    /**
+     * 瀹屾垚浜嬪姟
+     *
+     * @param orderDto
+     * @return
+     */
+    @Override
+    public ResponseEntity<String> finishOrder(OrderDto orderDto) {
+        if (StringUtil.isEmpty(orderDto.getoId())) {
+            return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈浜嬪姟ID", HttpStatus.NOT_FOUND);
+        }
+
+        //瀹屾垚璁㈠崟椤�
+        Map info = new HashMap();
+        info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        info.put("statusCd", "C");
+        info.put("oId", orderDto.getoId());
+        centerServiceDAOImpl.updateOrderItem(info);
+
+        //鍒犻櫎 浜嬪姟鏃ュ織
+        centerServiceDAOImpl.deleteUnItemLog(info);
+
+        //瀹屾垚璁㈠崟
+        info = new HashMap();
+        info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        info.put("statusCd", "C");
+        info.put("oId", orderDto.getoId());
+        centerServiceDAOImpl.updateOrder(info);
+
+        return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
+    }
 }

--
Gitblit v1.8.0