1.mc-data-move-biz模块分析
package com.hst.mc.data.move.biz.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* @author: rentw
* @date: 2021/11/8
*/
@Mapper
//各属性返回 true 表示不走插件(在配置了插件的情况下,不填则默认表示 false),例如想多租户屏蔽某个特定mapper的方法 则使用如下
@InterceptorIgnore(tenantLine = "true")
public interface CommonMapper {
//动态切换数据源,使用last数据库
@DS("#last")
List<String> getTableList(@Param(value = "tableName") String tableName,
String dsName);
@DS("#last")
List<String> getColumnList(@Param(value = "tableName") String tableName,
String dsName);
@DS("#last")
List<Map<String, Object>> getDataList(@Param(value = "tableName") String tableName,
String dsName);
@DS("#last")
void deleteTableData(@Param(value = "tableName") String tableName,
@Param(value = "field") String field,
@Param(value = "fieldData") List<Object> fieldData,
String dsName);
@DS("#last")
void saveTableDate(@Param(value = "tableName") String tableName,
@Param(value = "tableData") List<Object> tableData,
String dsName);
}
2.mc-wz-model模块分析
package com.hst.mc.wz.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* @Author: rentw
* @Date: 2021/8/12
*/
@Data
@TableName("org")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "维者组织表")
public class Org extends Model<Org> {
private static final long serialVersionUID = 6564479394897534420L;
@ApiModelProperty(value = "组织ID")
private String id;
@ApiModelProperty(value = "组织编码")
private String code;
@ApiModelProperty(value = "组织名称")
private String name;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") //在常量上面格式化时间
@ApiModelProperty(value = "修改时间")
@TableField(value = "updatetime__")
private LocalDateTime updatetime;
}
3.mc-label-biz模块分析
使用监听器来实现当发布订阅,监听到了变化后通知其他事件的执行。
package com.hst.mc.label.biz.event.listener;
import com.hst.mc.label.biz.event.LabelDeleteEvent;
import com.hst.mc.label.biz.event.LabelItemDeleteEvent;
import com.hst.mc.label.biz.event.LabelItemUpdateEvent;
import com.hst.mc.label.biz.event.RegisterCaculateEvent;
import com.hst.mc.label.biz.event.source.LabelItemDeleteSource;
import com.hst.mc.label.biz.event.source.LabelItemUpdateSource;
import com.hst.mc.label.biz.event.source.RegisterCaculateSource;
import com.hst.mc.label.biz.service.LabelRegisterService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
* @auther FredG.
* @date on 2021/7/8
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class RegisterListener {
private final LabelRegisterService labelRegisterService;
@Async
@Order
@EventListener(RegisterCaculateEvent.class)
public void calculate(RegisterCaculateEvent event) {
RegisterCaculateSource registerCaculateSource = (RegisterCaculateSource) event.getSource();
labelRegisterService.calculate(registerCaculateSource);
}
@Async
@Order
@EventListener(LabelDeleteEvent.class)
public void labelDelete(LabelDeleteEvent event) {
String labelCode = (String) event.getSource();
labelRegisterService.labelDelete(labelCode);
}
@Async
@Order
@EventListener(LabelItemDeleteEvent.class)
public void labelDelete(LabelItemDeleteEvent event) {
LabelItemDeleteSource labelItemDeleteSource = (LabelItemDeleteSource) event.getSource();
labelRegisterService.labelItemDelete(labelItemDeleteSource);
}
@Async
@Order
@EventListener(LabelItemUpdateEvent.class)
public void labelDelete(LabelItemUpdateEvent event) {
LabelItemUpdateSource labelItemUpdateSource = (LabelItemUpdateSource) event.getSource();
labelRegisterService.labelItemUpdate(labelItemUpdateSource);
}
}
当启动类启动后,监听器被执行,执行后在controller里面注入监听器,调用它,@EventListener后面指定的事件被加载为原事件,将原事件当参数传递,进行相应的逻辑处理,与@Async配合使用,实现异步执行。
@EnableDynamicDataSource 作用是开启动态数据源