java110
2021-09-12 ed7d0de6a0e169b846a8dfafbdb9076d8c648445
优化代码 完成business 过程
9个文件已修改
3个文件已添加
395 ■■■■■ 已修改文件
java110-db/src/main/resources/mapper/dev/DevServiceDAOImplMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/cache/BusinessTableHisCache.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/constant/CommonConstant.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-dev/src/main/java/com/java110/dev/DevServiceApplicationStart.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-dev/src/main/java/com/java110/dev/dao/IDevServiceDAO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-dev/src/main/java/com/java110/dev/dao/impl/DevServiceDAOImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-dev/src/main/java/com/java110/dev/smo/impl/DevServiceCacheSMOImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-order/src/main/java/com/java110/order/OrderServiceApplicationStart.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-order/src/main/java/com/java110/order/dao/impl/CenterServiceDAOImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-order/src/main/java/com/java110/order/smo/IAsynNotifySubService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-order/src/main/java/com/java110/order/smo/impl/AsynNotifySubServiceImpl.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/dev/DevServiceDAOImplMapper.xml
@@ -53,4 +53,16 @@
        ]]>
    </select>
    <select id="getBusinessTableHisAll" resultType="com.java110.dto.businessTableHis.BusinessTableHisDto">
        <![CDATA[
            SELECT
                t.action_obj,t.action_obj actionObj,t.business_type_cd,t.business_type_cd
                businessTypeCd,t.his_id,t.his_id hisId,t.action,t.remark,t.status_cd,t.status_cd
                statusCd,t.action_obj_his,t.action_obj_his actionObjHis
            from
                c_business_table_his t
            where t.status_cd = '0'
        ]]>
    </select>
</mapper>
java110-utils/src/main/java/com/java110/utils/cache/BusinessTableHisCache.java
New file
@@ -0,0 +1,89 @@
package com.java110.utils.cache;
import com.java110.dto.businessTableHis.BusinessTableHisDto;
import com.java110.utils.util.SerializeUtil;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.List;
/**
 * 映射缓存工具类
 * Created by wuxw on 2018/4/14.
 */
public class BusinessTableHisCache extends BaseCache {
    //后缀 用来刷缓存时删除 所有以这个为后缀的数据
    public final static String DEFAULT_BUSINESS_TABLE_HIS = "JAVA110_BUSINESS_TABLE_HIS";
    /**
     * 获取  databus
     *
     * @return
     */
    public static List<BusinessTableHisDto> getBusinessTableHiss() {
        Jedis redis = null;
        try {
            redis = getJedis();
            return SerializeUtil.unserializeList(redis.get((DEFAULT_BUSINESS_TABLE_HIS).getBytes()), BusinessTableHisDto.class);
        } finally {
            if (redis != null) {
                redis.close();
            }
        }
    }
    /**
     * 获取  databus
     *
     * @return
     */
    public static List<BusinessTableHisDto> getBusinessTableHisDtos(String action, String actionObj) {
        List<BusinessTableHisDto> businessTableHisDtoDtoDtos = getBusinessTableHiss();
        List<BusinessTableHisDto> tmpBusinessTableHisDtos = new ArrayList<>();
        for (BusinessTableHisDto businessTableHisDtoDto : businessTableHisDtoDtoDtos) {
            if (action.equals(businessTableHisDtoDto.getAction()) && actionObj.equals(businessTableHisDtoDto.getActionObj())) {
                tmpBusinessTableHisDtos.add(businessTableHisDtoDto);
            }
        }
        return tmpBusinessTableHisDtos;
    }
    /**
     * 获取  databus
     *
     * @return
     */
    public static BusinessTableHisDto getBusinessTableHisDto(String action, String actionObj) {
        List<BusinessTableHisDto> businessTableHisDtoDtoDtos = getBusinessTableHiss();
        for (BusinessTableHisDto businessTableHisDtoDto : businessTableHisDtoDtoDtos) {
            if (action.equals(businessTableHisDtoDto.getAction()) && actionObj.equals(businessTableHisDtoDto.getActionObj())) {
                return businessTableHisDtoDto;
            }
        }
        return null;
    }
    /**
     * 保存list 数据
     *
     * @param businessTableHisDtoDtoDtos
     */
    public static void setValue(List<BusinessTableHisDto> businessTableHisDtoDtoDtos) {
        Jedis redis = null;
        try {
            redis = getJedis();
            redis.set((DEFAULT_BUSINESS_TABLE_HIS).getBytes(), SerializeUtil.serializeList(businessTableHisDtoDtoDtos));
        } finally {
            if (redis != null) {
                redis.close();
            }
        }
    }
}
java110-utils/src/main/java/com/java110/utils/constant/CommonConstant.java
@@ -128,6 +128,11 @@
     */
    public final static String CACHE_DATABUS = "DATABUS";
    /**
     * 映射 databus
     */
    public final static String CACHE_BUSINESS_TABLE_HIS = "BUSINESS_TABLE_HIS";
    /**
service-dev/src/main/java/com/java110/dev/DevServiceApplicationStart.java
@@ -95,8 +95,8 @@
        //因为好多朋友启动时 不加 参数-Dcache 所以启动时检测 redis 中是否存在 java110_hc_version
        String mapping = MappingCache.getValue("java110_hc_version");
        if (StringUtil.isEmpty(mapping)) {
            IDevServiceCacheSMO centerServiceCacheSMO = (IDevServiceCacheSMO) ApplicationContextFactory.getBean("devServiceCacheSMOImpl");
            centerServiceCacheSMO.startFlush();
            IDevServiceCacheSMO devServiceCacheSMOImpl = (IDevServiceCacheSMO) ApplicationContextFactory.getBean("devServiceCacheSMOImpl");
            devServiceCacheSMOImpl.startFlush();
            return;
        }
@@ -106,8 +106,8 @@
        for (int i = 0; i < args.length; i++) {
            if (args[i].equalsIgnoreCase("-Dcache")) {
                logger.debug("开始刷新日志,入参为:{}", args[i]);
                IDevServiceCacheSMO centerServiceCacheSMO = (IDevServiceCacheSMO) ApplicationContextFactory.getBean("centerServiceCacheSMOImpl");
                centerServiceCacheSMO.startFlush();
                IDevServiceCacheSMO devServiceCacheSMOImpl = (IDevServiceCacheSMO) ApplicationContextFactory.getBean("devServiceCacheSMOImpl");
                devServiceCacheSMOImpl.startFlush();
            }
        }
    }
service-dev/src/main/java/com/java110/dev/dao/IDevServiceDAO.java
@@ -2,6 +2,7 @@
import com.java110.dto.basePrivilege.BasePrivilegeDto;
import com.java110.dto.businessDatabus.BusinessDatabusDto;
import com.java110.dto.businessTableHis.BusinessTableHisDto;
import com.java110.entity.mapping.Mapping;
import com.java110.utils.exception.DAOException;
@@ -39,6 +40,12 @@
     * @return
     */
    public List<BusinessDatabusDto> getDatabusAll();
    /**
     * 查询映射表
     *
     * @return
     */
    public List<BusinessTableHisDto> getBusinessTableHisAll();
service-dev/src/main/java/com/java110/dev/dao/impl/DevServiceDAOImpl.java
@@ -4,6 +4,7 @@
import com.java110.dev.dao.IDevServiceDAO;
import com.java110.dto.basePrivilege.BasePrivilegeDto;
import com.java110.dto.businessDatabus.BusinessDatabusDto;
import com.java110.dto.businessTableHis.BusinessTableHisDto;
import com.java110.entity.mapping.Mapping;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,4 +51,9 @@
        return sqlSessionTemplate.selectList("devServiceDAOImpl.getDatabusAll");
    }
    @Override
    public List<BusinessTableHisDto> getBusinessTableHisAll() {
        return sqlSessionTemplate.selectList("devServiceDAOImpl.getBusinessTableHisAll");
    }
}
service-dev/src/main/java/com/java110/dev/smo/impl/DevServiceCacheSMOImpl.java
@@ -3,14 +3,15 @@
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.DataTransactionFactory;
import com.java110.db.dao.IQueryServiceDAO;
import com.java110.dev.dao.IDevServiceDAO;
import com.java110.dev.smo.IDevServiceCacheSMO;
import com.java110.dto.basePrivilege.BasePrivilegeDto;
import com.java110.dto.businessDatabus.BusinessDatabusDto;
import com.java110.dto.businessTableHis.BusinessTableHisDto;
import com.java110.entity.center.AppRoute;
import com.java110.entity.mapping.Mapping;
import com.java110.entity.order.ServiceBusiness;
import com.java110.entity.service.ServiceSql;
import com.java110.dev.dao.IDevServiceDAO;
import com.java110.service.context.DataQuery;
import com.java110.utils.cache.*;
import com.java110.utils.constant.CommonConstant;
@@ -62,7 +63,10 @@
        flushPrivilege(dataQuery);
        //刷新databus
        doFlushDatabus(dataQuery);
        flushDatabus(dataQuery);
//刷新BusinessTableHis
        flushBusinessTableHis(dataQuery);
        dataQuery.setResponseInfo(DataTransactionFactory.createBusinessResponseJson(ResponseConstant.RESULT_CODE_SUCCESS, "刷新成功"));
    }
@@ -88,6 +92,8 @@
        flushPrivilege(headers);
        flushDatabus(headers);
        flushBusinessTableHis(headers);
    }
    /**
@@ -111,6 +117,9 @@
        //刷新databus
        doFlushDatabus();
        //刷新BusinessTableHis
        doFlushBusinessTableHis();
    }
@@ -236,7 +245,7 @@
    /**
     * 刷新 Mapping 数据
     */
    private void doFlushDatabus(DataQuery dataQuery) {
    private void flushDatabus(DataQuery dataQuery) {
        JSONObject params = dataQuery.getRequestParams();
@@ -246,6 +255,21 @@
        doFlushDatabus();
    }
    /**
     * 刷新 doFlushBusinessTableHis 数据
     */
    private void flushBusinessTableHis(DataQuery dataQuery) {
        JSONObject params = dataQuery.getRequestParams();
        if (!CommonConstant.CACHE_BUSINESS_TABLE_HIS.equals(params.getString(CommonConstant.CACHE_PARAM_NAME))) {
            return;
        }
        doFlushBusinessTableHis();
    }
    /**
     * 刷新 Mapping 数据
@@ -275,6 +299,21 @@
        }
        doFlushDatabus();
    }
    /**
     * 刷新 databus 数据
     */
    private void flushBusinessTableHis(Map<String, String> headers) {
        Assert.hasKey(headers, CommonConstant.CACHE_PARAM, "未包含cache参数" + headers.toString());
        if (!CommonConstant.CACHE_BUSINESS_TABLE_HIS.equals(headers.get(CommonConstant.CACHE_PARAM))
                && !CommonConstant.CACHE_ALL.equals(headers.get(CommonConstant.CACHE_PARAM))) {
            return;
        }
        doFlushBusinessTableHis();
    }
    /**
@@ -335,6 +374,15 @@
        DatabusCache.setValue(businessDatabusDtos);
    }
    private void doFlushBusinessTableHis() {
        logger.debug("开始刷新 BusinessTableHis数据到redis数据库中");
        List<BusinessTableHisDto> businessTableHisDtos = devServiceDAOImpl.getBusinessTableHisAll();
        //删除原始数据
        BusinessTableHisCache.removeData(BusinessTableHisCache.DEFAULT_BUSINESS_TABLE_HIS);
        BusinessTableHisCache.setValue(businessTableHisDtos);
    }
    /**
     * 刷新AppRoute数据
     */
service-order/src/main/java/com/java110/order/OrderServiceApplicationStart.java
@@ -19,7 +19,6 @@
import com.java110.core.annotation.Java110ListenerDiscovery;
import com.java110.core.client.RestTemplate;
import com.java110.core.event.center.DataFlowEventPublishing;
import com.java110.order.smo.ICenterServiceCacheSMO;
import com.java110.service.init.ServiceInfoListener;
import com.java110.service.init.ServiceStartInit;
import com.java110.utils.cache.MappingCache;
@@ -42,6 +41,7 @@
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.scheduling.annotation.EnableAsync;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -72,6 +72,7 @@
        "com.java110.intf.community",
        "com.java110.intf.fee"
})
@EnableAsync
public class OrderServiceApplicationStart {
    private static Logger logger = LoggerFactory.getLogger(OrderServiceApplicationStart.class);
@@ -118,8 +119,6 @@
            logger.error("系统启动失败", e);
        }
    }
    /**
service-order/src/main/java/com/java110/order/dao/impl/CenterServiceDAOImpl.java
@@ -53,7 +53,7 @@
            throw new DAOException(ResponseConstant.RESULT_CODE_INNER_ERROR, "保存订单项信息失败:" + JSONObject.toJSONString(orderItem));
        }
        //这个地方我们补充c_business
        if (!orderItem.containsKey("logText") || StringUtil.isEmpty(orderItem.get("logText") + "")) {
service-order/src/main/java/com/java110/order/smo/IAsynNotifySubService.java
New file
@@ -0,0 +1,12 @@
package com.java110.order.smo;
import com.java110.dto.businessTableHis.BusinessTableHisDto;
import com.java110.dto.order.OrderItemDto;
/**
 * 异步通知子服务生成business 表
 */
public interface IAsynNotifySubService {
    void notifySubService(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto);
}
service-order/src/main/java/com/java110/order/smo/impl/AsynNotifySubServiceImpl.java
New file
@@ -0,0 +1,164 @@
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.businessTableHis.BusinessTableHisDto;
import com.java110.dto.order.OrderItemDto;
import com.java110.order.smo.IAsynNotifySubService;
import org.slf4j.Logger;
import org.slf4j.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.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsynNotifySubServiceImpl implements IAsynNotifySubService {
    private static Logger logger = LoggerFactory.getLogger(AsynNotifySubServiceImpl.class);
    @Autowired
    private RestTemplate restTemplate;
    public static final String FALLBACK_URL = "http://SERVICE_NAME/businessApi/fallBack";
    public static final String SERVICE_NAME = "SERVICE_NAME";
    @Override
    @Async
    public void notifySubService(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
        HttpEntity<String> httpEntity = null;
        HttpHeaders header = new HttpHeaders();
        try {
            JSONArray params = generateBusinessParam(orderItemDto, businessTableHisDto);
            httpEntity = new HttpEntity<String>(params.toJSONString(), header);
            //通过fallBack 的方式生成Business
            restTemplate.exchange(FALLBACK_URL.replace(SERVICE_NAME, orderItemDto.getServiceName()), HttpMethod.POST, httpEntity, String.class);
        } catch (Exception e) {
            logger.error("生成business失败", e);
        }
    }
    /**
     * 生成回滚sql
     *
     * @param orderItemDto
     * @return
     */
    private JSONArray generateBusinessParam(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
        JSONArray params = null;
        switch (orderItemDto.getAction()) {
            case "ADD":
                params = generateBusinessInsertInsertSql(orderItemDto, businessTableHisDto);
                break;
            case "MOD":
                params = generateBusinessDelInsertSql(orderItemDto, businessTableHisDto);
                JSONArray paramAdds = generateBusinessInsertInsertSql(orderItemDto, businessTableHisDto);
                params.add(paramAdds);
                break;
            case "DEL":
                params = generateBusinessDelInsertSql(orderItemDto, businessTableHisDto);
                break;
        }
        return params;
    }
    /**
     * 生成添加的insert语句
     *
     * @param orderItemDto
     * @return
     */
    private JSONArray generateBusinessInsertInsertSql(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
        JSONArray params = new JSONArray();
        JSONObject param = null;
        String sql = "";
        String logText = orderItemDto.getLogText();
        JSONObject logTextObj = JSONObject.parseObject(logText);
        JSONArray afterValues = logTextObj.getJSONArray("afterValue");
        for (int afterValueIndex = 0; afterValueIndex < afterValues.size(); afterValueIndex++) {
            sql = "insert into " + businessTableHisDto.getActionObjHis() + " ";
            param = new JSONObject();
            JSONObject keyValue = afterValues.getJSONObject(afterValueIndex);
            if (keyValue.isEmpty()) {
                continue;
            }
            String keySql = "( ";
            String valueSql = " values (";
            for (String key : keyValue.keySet()) {
                if ("status_cd".equals(key) || "create_time".equals(key)) {
                    continue;
                }
                keySql += (key + ",");
                valueSql += (keyValue.getString(key) + ",");
            }
            keySql += "operate,b_id";
            valueSql += "'ADD','" + orderItemDto.getbId() + "'";
            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;
    }
    /**
     * 生成删除的insert语句
     *
     * @param orderItemDto
     * @return
     */
    private JSONArray generateBusinessDelInsertSql(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
        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 " + businessTableHisDto.getActionObjHis() + " ";
            param = new JSONObject();
            JSONObject keyValue = preValues.getJSONObject(preValueIndex);
            if (keyValue.isEmpty()) {
                continue;
            }
            String keySql = "( ";
            String valueSql = " values (";
            for (String key : keyValue.keySet()) {
                if ("status_cd".equals(key) || "create_time".equals(key)) {
                    continue;
                }
                keySql += (key + ",");
                valueSql += (keyValue.getString(key) + ",");
            }
            keySql += "operate,b_id";
            valueSql += "'DEL','" + orderItemDto.getbId() + "'";
            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;
    }
}
service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java
@@ -4,10 +4,14 @@
import com.alibaba.fastjson.JSONObject;
import com.java110.core.client.RestTemplate;
import com.java110.core.factory.GenerateCodeFactory;
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;
@@ -44,6 +48,9 @@
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private IAsynNotifySubService asynNotifySubServiceImpl;
    @Override
@@ -155,6 +162,7 @@
        return params;
    }
    /**
     * 生成insert语句
@@ -309,9 +317,32 @@
        }
        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 数据
        doNoticeServiceGeneratorBusiness(orderItemDto, businessTableHisDto);
        return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
    }
    private void doNoticeServiceGeneratorBusiness(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
        asynNotifySubServiceImpl.notifySubService(orderItemDto,businessTableHisDto);
    }
    /**
     * 完成事务
     *