Bläddra i källkod

优化data bus

java110 4 år sedan
förälder
incheckning
c77e5fd5f2

+ 50 - 30
java110-utils/src/main/java/com/java110/utils/util/StringUtil.java

@@ -24,6 +24,8 @@ import java.util.regex.Pattern;
  */
 
 public class StringUtil {
+
+
     /**
      * Description: 格式化字符串(用户组建表使用) <br>
      *
@@ -551,38 +553,31 @@ public class StringUtil {
             return false;
         }
     }
-    public static String delHtmlTag(String str){
+
+    public static String delHtmlTag(String str) {
         String newstr = "";
-        newstr = str.replaceAll("<[.[^>]]*>","");
+        newstr = str.replaceAll("<[.[^>]]*>", "");
         newstr = newstr.replaceAll(" ", "");
         newstr = newstr.replaceAll("&nbsp;", "");
         return newstr;
     }
 
 
-
-    public static String encodeEmoji(String orgStr)
-    {
-        if (StringUtil.isEmpty(orgStr))
-        {
+    public static String encodeEmoji(String orgStr) {
+        if (StringUtil.isEmpty(orgStr)) {
             return orgStr;
         }
         String temp = orgStr;
         Pattern pattern = Pattern.compile("[^\u0000-\uffff]", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(orgStr);
-        while (matcher.find())
-        {
+        while (matcher.find()) {
             StringBuilder sb = new StringBuilder("[em:");
             String mStr = matcher.group();
-            for (int i = 0; i < mStr.length(); i++)
-            {
+            for (int i = 0; i < mStr.length(); i++) {
                 int emoji = mStr.charAt(i);
-                if (i < mStr.length() - 1)
-                {
+                if (i < mStr.length() - 1) {
                     sb.append(emoji).append('-');
-                }
-                else
-                {
+                } else {
                     sb.append(emoji).append(']');
                 }
             }
@@ -591,31 +586,24 @@ public class StringUtil {
         return temp;
     }
 
-    public static String decodeEmoji(String orgStr)
-    {
-        if (StringUtil.isEmpty(orgStr))
-        {
+    public static String decodeEmoji(String orgStr) {
+        if (StringUtil.isEmpty(orgStr)) {
             return orgStr;
         }
         String temp = orgStr;
         Pattern pattern = Pattern.compile("\\[em:[\\d\\-]+\\]", Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(orgStr);
-        while (matcher.find())
-        {
+        while (matcher.find()) {
             StringBuilder sb = new StringBuilder("\\[em:");
             StringBuilder emojiSb = new StringBuilder();
             String mStr = matcher.group();
             String[] emojis = mStr.substring(4, mStr.length() - 1).split("-");
-            for (int i = 0; i < emojis.length; i++)
-            {
+            for (int i = 0; i < emojis.length; i++) {
                 int emoji = Integer.parseInt(emojis[i]);
-                emojiSb.append((char)emoji);
-                if (i < emojis.length - 1)
-                {
+                emojiSb.append((char) emoji);
+                if (i < emojis.length - 1) {
                     sb.append(emoji).append("\\-");
-                }
-                else
-                {
+                } else {
                     sb.append(emoji).append("\\]");
                 }
             }
@@ -624,4 +612,36 @@ public class StringUtil {
         return temp;
     }
 
+    /**
+     * 下划线转驼峰
+     */
+    public static void lineToHump(JSONObject json) {
+        Pattern linePattern = Pattern.compile("_(\\w)");
+        for(String str : json.keySet()) {
+            str = str.toLowerCase();
+            Matcher matcher = linePattern.matcher(str);
+            StringBuffer sb = new StringBuffer();
+            while (matcher.find()) {
+                matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
+            }
+            matcher.appendTail(sb);
+            json.put(sb.toString(),json.getString(str));
+        }
+    }
+
+    /**
+     * 下划线转驼峰
+     */
+    public static String lineToHump(String str) {
+        Pattern linePattern = Pattern.compile("_(\\w)");
+        str = str.toLowerCase();
+        Matcher matcher = linePattern.matcher(str);
+        StringBuffer sb = new StringBuffer();
+        while (matcher.find()) {
+            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
+        }
+        matcher.appendTail(sb);
+        return sb.toString();
+    }
+
 }

+ 4 - 4
service-order/src/main/java/com/java110/order/dao/impl/CenterServiceDAOImpl.java

@@ -199,10 +199,10 @@ public class CenterServiceDAOImpl extends BaseServiceDao implements ICenterServi
     public void updateBusiness(Map order) throws DAOException {
         logger.debug("----【CenterServiceDAOImpl.updateBusiness】保存数据入参 : " + JSONObject.toJSONString(order));
 
-        int saveFlag = sqlSessionTemplate.update("centerServiceDAOImpl.updateBusiness", order);
-        if (saveFlag < 1) {
-            throw new DAOException(ResponseConstant.RESULT_CODE_INNER_ERROR, "更新订单项信息失败:" + JSONObject.toJSONString(order));
-        }
+         sqlSessionTemplate.update("centerServiceDAOImpl.updateBusiness", order);
+//        if (saveFlag < 1) {
+//            throw new DAOException(ResponseConstant.RESULT_CODE_INNER_ERROR, "更新订单项信息失败:" + JSONObject.toJSONString(order));
+//        }
     }
 
     /**

+ 11 - 0
service-order/src/main/java/com/java110/order/smo/IAsynNotifySubService.java

@@ -1,12 +1,23 @@
 package com.java110.order.smo;
 
 import com.java110.dto.businessTableHis.BusinessTableHisDto;
+import com.java110.dto.order.OrderDto;
 import com.java110.dto.order.OrderItemDto;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 异步通知子服务生成business 表
  */
 public interface IAsynNotifySubService {
 
     void notifySubService(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto);
+
+    /**
+     * 通知databus
+     * @param orderItemMaps
+     * @param orderDto
+     */
+    void notifyDatabus(List<Map> orderItemMaps, OrderDto orderDto);
 }

+ 121 - 1
service-order/src/main/java/com/java110/order/smo/impl/AsynNotifySubServiceImpl.java

@@ -3,9 +3,19 @@ package com.java110.order.smo.impl;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.client.RestTemplate;
+import com.java110.dto.businessDatabus.BusinessDatabusDto;
 import com.java110.dto.businessTableHis.BusinessTableHisDto;
+import com.java110.dto.order.OrderDto;
 import com.java110.dto.order.OrderItemDto;
+import com.java110.entity.order.Business;
+import com.java110.intf.job.IDataBusInnerServiceSMO;
+import com.java110.order.dao.ICenterServiceDAO;
 import com.java110.order.smo.IAsynNotifySubService;
+import com.java110.utils.cache.DatabusCache;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.DomainContant;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,13 +25,27 @@ import org.springframework.http.HttpMethod;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Service
 public class AsynNotifySubServiceImpl implements IAsynNotifySubService {
     private static Logger logger = LoggerFactory.getLogger(AsynNotifySubServiceImpl.class);
-
+    //databus 业务类型
+    private static final String DATABUS_SWITCH = "DATABUS_SWITCH";
+    private static final String DATABUS_SWITCH_ON = "ON"; // 开关打开
     @Autowired
     private RestTemplate restTemplate;
 
+
+    @Autowired
+    private ICenterServiceDAO centerServiceDAOImpl;
+
+    @Autowired
+    private IDataBusInnerServiceSMO dataBusInnerServiceSMOImpl;
+
     public static final String FALLBACK_URL = "http://SERVICE_NAME/businessApi/fallBack";
 
     public static final String SERVICE_NAME = "SERVICE_NAME";
@@ -42,6 +66,102 @@ public class AsynNotifySubServiceImpl implements IAsynNotifySubService {
         }
     }
 
+    @Override
+    public void notifyDatabus(List<Map> orderItemMaps, OrderDto orderDto) {
+
+
+        if (orderItemMaps == null || orderItemMaps.size() < 1) {
+            return ;
+        }
+        //触发databug
+        //查询 事务项
+        Map orderItem = new HashMap();
+        orderItem.put("oId", orderDto.getoId());
+        List<Map> businesses = centerServiceDAOImpl.getBusinessByOId(orderItem);
+        if (businesses == null || businesses.size() < 1) {
+            return;
+        }
+
+        String databusSwitch = MappingCache.getValue(DomainContant.COMMON_DOMAIN, DATABUS_SWITCH);
+
+        if (!DATABUS_SWITCH_ON.equals(databusSwitch)) {
+            return ;
+        }
+        List<BusinessDatabusDto> databusDtos = DatabusCache.getDatabuss();
+
+        if (!hasTypeCd(databusDtos, businesses)) {
+            return ;
+        }
+
+        try {
+            //同步databus
+            dataBusInnerServiceSMOImpl.exchange(freshBusesses(businesses, orderItemMaps));
+        } catch (Exception e) {
+            logger.error("传输databus 失败", e);
+        }
+    }
+
+    /**
+     * @param businesses
+     * @param orderItemMaps
+     * @return
+     */
+    private List<Business> freshBusesses(List<Map> businesses, List<Map> orderItemMaps) {
+        List<Business> businessObjs = new ArrayList<>();
+        Business businessObj = null;
+        /**
+         * select t.b_id bId,t.o_id oId,t.create_time createTime,t.action,t.action_obj actionObj,
+         *         t.finish_time finishTime,t.remark,ul.service_name serviceName,ul.log_text logText
+         *         from c_order_item t
+         *         LEFT JOIN unitem_log ul on t.b_id = ul.b_id and t.o_id = ul.o_id and ul.status_cd = '0'
+         *         where 1=1
+         *
+         *         {"afterValue":[{"share_id":"'502021080429730002'","start_time":"'2021-08-01 00:00:35'","ad_type":"'10000'",
+         *         "advert_type":"'3'","ads_id":"'782021080454590009'","ad_name":"'广告'","end_time":"'2022-02-03 02:10:35'",
+         *         "state":"'2000'","seq":"'1'","url":"'img/20210804/01a629f9-a267-43b8-8d74-9c83b00ed2a7.png'"}],"preValue":[]}
+         */
+        JSONObject data = null;
+        for (Map business : businesses) {
+            for (Map orderItem : orderItemMaps) {
+                if (!business.get("b_id").equals(orderItem.get("bId"))) {
+                    continue;
+                }
+                businessObj = new Business();
+                businessObj.setoId(business.get("o_id").toString());
+                businessObj.setbId(business.get("b_id").toString());
+                businessObj.setBusinessTypeCd(business.get("business_type_cd").toString());
+                JSONObject logText = JSONObject.parseObject(orderItem.get("logText").toString());
+                if ("ADD".equals(orderItem.get("action")) || "MOD".equals(orderItem.get("action"))) {
+                    data = logText.getJSONArray("afterValue").getJSONObject(0);
+                    StringUtil.lineToHump(data);
+                    businessObj.setData(data);
+                }
+                if ("DEL".equals(orderItem.get("action"))) {
+                    data = logText.getJSONArray("preValue").getJSONObject(0);
+                    StringUtil.lineToHump(data);
+                    businessObj.setData(data);
+                }
+                businessObjs.add(businessObj);
+            }
+        }
+
+        return businessObjs;
+    }
+
+
+    private boolean hasTypeCd(List<BusinessDatabusDto> databusDtos, List<Map> businesses) {
+
+        for (BusinessDatabusDto databusDto : databusDtos) {
+            for (Map business : businesses) {
+                if (databusDto.getBusinessTypeCd().equals(business.get("business_type_cd"))) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
     /**
      * 生成回滚sql
      *

+ 32 - 4
service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java

@@ -4,13 +4,19 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.businessDatabus.BusinessDatabusDto;
 import com.java110.dto.businessTableHis.BusinessTableHisDto;
 import com.java110.dto.order.OrderDto;
 import com.java110.dto.order.OrderItemDto;
+import com.java110.entity.order.Business;
+import com.java110.intf.job.IDataBusInnerServiceSMO;
 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.cache.DatabusCache;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.DomainContant;
 import com.java110.utils.constant.StatusConstant;
 import com.java110.utils.util.BeanConvertUtil;
 import com.java110.utils.util.DateUtil;
@@ -43,6 +49,7 @@ public class OIdServiceSMOImpl implements IOIdServiceSMO {
     public static final String SERVICE_NAME = "SERVICE_NAME";
 
 
+
     @Autowired
     private ICenterServiceDAO centerServiceDAOImpl;
 
@@ -53,6 +60,8 @@ public class OIdServiceSMOImpl implements IOIdServiceSMO {
     private IAsynNotifySubService asynNotifySubServiceImpl;
 
 
+
+
     @Override
     public ResponseEntity<String> createOId(OrderDto orderDto) {
 
@@ -340,7 +349,7 @@ public class OIdServiceSMOImpl implements IOIdServiceSMO {
     }
 
     private void doNoticeServiceGeneratorBusiness(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
-        asynNotifySubServiceImpl.notifySubService(orderItemDto,businessTableHisDto);
+        asynNotifySubServiceImpl.notifySubService(orderItemDto, businessTableHisDto);
     }
 
     /**
@@ -362,9 +371,6 @@ public class OIdServiceSMOImpl implements IOIdServiceSMO {
         info.put("oId", orderDto.getoId());
         centerServiceDAOImpl.updateOrderItem(info);
 
-        //删除 事务日志
-        //centerServiceDAOImpl.deleteUnItemLog(info);
-
         //完成订单
         info = new HashMap();
         info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
@@ -372,6 +378,28 @@ public class OIdServiceSMOImpl implements IOIdServiceSMO {
         info.put("oId", orderDto.getoId());
         centerServiceDAOImpl.updateOrder(info);
 
+        //将c_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);
     }
+
+
+
 }