From 46eed722cd0431aa433bea2470b23015b8d83b3e Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期一, 21 二月 2022 10:03:25 +0800
Subject: [PATCH] 优化三亚物业 临时收费问题

---
 service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java |  312 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 300 insertions(+), 12 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
old mode 100644
new mode 100755
index cb76e9f..58c0e32
--- 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
@@ -3,21 +3,25 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.client.RestTemplate;
+import com.java110.core.context.SecureInvocation;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.app.AppDto;
+import com.java110.dto.businessTableHis.BusinessTableHisDto;
 import com.java110.dto.order.OrderDto;
 import com.java110.dto.order.OrderItemDto;
 import com.java110.order.dao.ICenterServiceDAO;
+import com.java110.order.smo.IAsynNotifySubService;
 import com.java110.order.smo.IOIdServiceSMO;
+import com.java110.utils.cache.BusinessTableHisCache;
+import com.java110.utils.constant.StatusConstant;
 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;
-import org.slf4j.LoggerFactory;
+import com.java110.core.log.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -36,7 +40,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";
 
@@ -47,25 +51,33 @@
     @Autowired
     private RestTemplate restTemplate;
 
+    @Autowired
+    private IAsynNotifySubService asynNotifySubServiceImpl;
+
 
     @Override
     public ResponseEntity<String> createOId(OrderDto orderDto) {
 
         orderDto.setoId(GenerateCodeFactory.getOId());
         if (StringUtil.isEmpty(orderDto.getAppId())) {
-            throw new IllegalArgumentException("鏈寘鍚玜ppId");
+            orderDto.setAppId(AppDto.WEB_APP_ID);
         }
 
         if (StringUtil.isEmpty(orderDto.getExtTransactionId())) {
-            throw new IllegalArgumentException("鏈寘鍚氦浜掓棩蹇�");
+            orderDto.setExtTransactionId(GenerateCodeFactory.getTransactionId());
         }
 
         if (StringUtil.isEmpty(orderDto.getRequestTime())) {
-            throw new IllegalArgumentException("鏈寘鍚姹傛椂闂�");
+            orderDto.setRequestTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_DEFAULT));
+        }
+
+        if (StringUtil.isEmpty(orderDto.getUserId())) {
+            orderDto.setUserId("-1");
         }
 
         //淇濆瓨璁㈠崟淇℃伅
-        centerServiceDAOImpl.saveOrder(BeanConvertUtil.beanCovertMap(orderDto));
+            centerServiceDAOImpl.saveOrder(BeanConvertUtil.beanCovertMap(orderDto));
+
         return new ResponseEntity<String>(JSONObject.toJSONString(orderDto), HttpStatus.OK);
     }
 
@@ -96,17 +108,293 @@
         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);
+
+                //鏍囪涓鸿鍗曢」澶辫触
+                Map info = new HashMap();
+                info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+                info.put("statusCd", "E");
+                info.put("bId", orderItemDto.getbId());
+                info.put("oId", orderDto.getoId());
+                centerServiceDAOImpl.updateOrderItem(info);
+
+                //鍒犻櫎 浜嬪姟鏃ュ織
+                //centerServiceDAOImpl.deleteUnItemLog(info);
             } 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.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);
+            if (keyValue.isEmpty()) {
+                continue;
+            }
+            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);
+            if (keyValue.isEmpty() || afterKeyValue.isEmpty()) {
+                continue;
+            }
+            String whereSql = " where 1=1 ";
+            for (String key : keyValue.keySet()) {
+                sql += (key + "=" + keyValue.getString(key) + ",");
+                if ("''".equals(afterKeyValue.getString(key))) { //鏉′欢涓笉鎷煎啓 涓虹┖鐨勭粨鏋�
+                    continue;
+                }
+                whereSql += (" and " + key + " = " + afterKeyValue.getString(key));
+            }
+            if (sql.endsWith(",")) {
+                sql = sql.substring(0, sql.length() - 1);
+            }
+
+            if (sql.endsWith(whereSql)) { // 璇存槑娌℃湁鏉′欢 涓嶅仛鍥為�� 鍥為��鏁翠釜琛ㄦ槸鏈夐棶棰樼殑
+                continue;
+            }
+
+            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 afterValues = logTextObj.getJSONArray("afterValue");
+        String whereSql = " where 1=1 ";
+        for (int preValueIndex = 0; preValueIndex < afterValues.size(); preValueIndex++) {
+            sql = "delete from " + orderItemDto.getActionObj() + whereSql;
+            param = new JSONObject();
+            JSONObject keyValue = afterValues.getJSONObject(preValueIndex);
+            if (keyValue.isEmpty()) {
+                continue;
+            }
+            for (String key : keyValue.keySet()) {
+                if (!StringUtil.isEmpty(keyValue.getString(key))) {
+                    sql += (" and " + key + "=" + keyValue.getString(key));
+                }
+            }
+            if (sql.endsWith(whereSql)) { // 璇存槑娌℃湁鏉′欢 涓嶅仛鍥為�� 鍥為��鏁翠釜琛ㄦ槸鏈夐棶棰樼殑
+                continue;
+            }
+            sql += " limit 1";//闃叉绋嬪簭寮傚父鍒犻櫎 灏村艾 鏍规嵁涓氬姟鍦烘櫙 娌℃湁闇�瑕佸垹闄ゅ浣� 1鏉$殑鍦烘櫙
+            param.put("fallBackSql", sql);
+            params.add(param);
+        }
+
+        return params;
+    }
+
+    @Override
+    public ResponseEntity<String> createOrderItem(OrderItemDto orderItemDto) {
+
+        if (StringUtil.isEmpty(orderItemDto.getoId())) {
+            return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈浜嬪姟ID", HttpStatus.NOT_FOUND);
+        }
+
+        if (StringUtil.isEmpty(orderItemDto.getAction())) {
+            return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈鍔ㄤ綔", HttpStatus.NOT_FOUND);
+        }
+
+        if (StringUtil.isEmpty(orderItemDto.getActionObj())) {
+            return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈鍔ㄤ綔瀵硅薄", HttpStatus.NOT_FOUND);
+        }
+
+        if (StringUtil.isEmpty(orderItemDto.getServiceName())) {
+            return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈鏈嶅姟", HttpStatus.NOT_FOUND);
+        }
+        if (StringUtil.isEmpty(orderItemDto.getLogText())) {
+            return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈鍥炴粴鏃ュ織", HttpStatus.NOT_FOUND);
+        }
+        if (StringUtil.isEmpty(orderItemDto.getbId()) || orderItemDto.getbId().startsWith("-")) {
+            orderItemDto.setbId(GenerateCodeFactory.getBId());
+        }
+        //鍒ゆ柇OID鏄惁瀛樺湪
+        OrderDto orderDto = BeanConvertUtil.covertBean(centerServiceDAOImpl.getOrder(BeanConvertUtil.beanCovertMap(orderItemDto)), OrderDto.class);
+
+        if (orderDto == null || "E".equals(orderDto.getStatusCd())) {
+            return new ResponseEntity<String>("褰撳墠娌℃湁浜嬪姟鎴栬�呬簨鍔″凡缁忓洖婊�", HttpStatus.NOT_FOUND);
+        }
+        centerServiceDAOImpl.saveOrderItem(BeanConvertUtil.beanCovertMap(orderItemDto));
+
+        //鍒ゆ柇鏄惁閰嶇疆浜� 杞ㄨ抗
+        BusinessTableHisDto businessTableHisDto = BusinessTableHisCache.getBusinessTableHisDto(orderItemDto.getAction(), orderItemDto.getActionObj());
+        if (businessTableHisDto == null) {
+            return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
+        }
+
+        //琛ュ厖 c_business  #{bId},#{oId},#{businessTypeCd},#{remark},#{statusCd}
+        Map business = new HashMap();
+        business.put("oId", orderItemDto.getoId());
+        business.put("businessTypeCd", businessTableHisDto.getBusinessTypeCd());
+        business.put("remark", "");
+        business.put("statusCd", StatusConstant.STATUS_CD_SAVE);
+        business.put("bId", orderItemDto.getbId());
+        centerServiceDAOImpl.saveBusiness(business);
+
+        //閫氱煡瀛愭湇鍔$敓鎴� business 鏁版嵁,濡傛灉閰嶇疆NO 涓嶉�氱煡鐢熸垚 business 鏁版嵁
+        if (BusinessTableHisDto.ACTION_OBJ_HIS_NO.equals(businessTableHisDto.getActionObjHis())) {
+            return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
+        }
+
+        doNoticeServiceGeneratorBusiness(orderItemDto, businessTableHisDto);
+        return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
+    }
+
+    private void doNoticeServiceGeneratorBusiness(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
+        asynNotifySubServiceImpl.notifySubService(orderItemDto, businessTableHisDto);
+    }
+
+    /**
+     * 瀹屾垚浜嬪姟
+     *
+     * @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);
+
+        //瀹屾垚璁㈠崟
+        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);
+
+        //灏哻_business 淇敼涓哄畬鎴�
+        //瀹屾垚璁㈠崟椤�
+        info = new HashMap();
+        info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+        info.put("statusCd", "C");
+        info.put("oId", orderDto.getoId());
+        centerServiceDAOImpl.updateBusiness(info);
+
+        //瑙﹀彂databug
+        //鏌ヨ 浜嬪姟椤�
+        Map orderItem = new HashMap();
+        orderItem.put("oId", orderDto.getoId());
+        List<Map> orderItemMaps = centerServiceDAOImpl.getOrderItems(orderItem);
+
+        //鍒犻櫎 浜嬪姟鏃ュ織
+        //centerServiceDAOImpl.deleteUnItemLog(info);
+
+        asynNotifySubServiceImpl.notifyDatabus(orderItemMaps, orderDto);
+
+        return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
+    }
+
+
 }

--
Gitblit v1.8.0