package com.launch.tencent.utils.UnonU.mybatisPlus.data3;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.launch.common.core.exception.BaseException;
import com.launch.tencent.utils.UnonU.mybatisPlus.data3.enums.CRUD;
import lombok.Builder;
import lombok.Data;
import java.util.List;
import java.util.Objects;
/**
* 执行体
*
* @param <T>
* @param <S>
* @author No Use
*/
@Data
@Builder
public class CRUDAll<T, S extends IService<T>> {
/**
* 服务
*/
private S s;
/**
* 单
*/
private CRUDEntry<T> cruDEntry;
/**
* 多
*/
private List<CRUDEntry<T>> lists;
/**
* 公共的不用提取
*/
public void executeMany() {
if(Objects.isNull(lists) || CollectionUtil.isEmpty(lists)){
return;
}
try {
lists.forEach(cruDEntry->{
if (CRUD.R.equals(cruDEntry.getType())) {
remove();
} else if (CRUD.C.equals(cruDEntry.getType()) || CRUD.U.equals(cruDEntry.getType())) {
saveOrUpdate();
} else if (CRUD.R.equals(cruDEntry.getType())) {
selsect();
}
});
}catch (Exception e){
throw new BaseException("Mysql:"+e);
}
}
/**
* 单体执行 公共的不提取
*/
public void execute() {
if(Objects.isNull(cruDEntry)){
return;
}
try {
if (CRUD.R.equals(cruDEntry.getType())) {
remove();
} else if (CRUD.C.equals(cruDEntry.getType()) || CRUD.U.equals(cruDEntry.getType())) {
saveOrUpdate();
} else if (CRUD.R.equals(cruDEntry.getType())) {
selsect();
}
} catch (Exception e) {
throw new BaseException("Sql:" + e);
}
}
/**
* 保存修改
*/
public void saveOrUpdate(){
LambdaQueryWrapper<T> qw = cruDEntry.getQueryWrapper();
List<T> ts = cruDEntry.getList();
if (Objects.isNull(qw)) {
cruDEntry.setExecuteStatus(s.saveOrUpdateBatch(ts));
} else {
cruDEntry.setExecuteStatus(s.saveOrUpdate(ts.get(0), qw));
}
}
/**
* 移除
*/
public void remove(){
List<T> list = s.list(cruDEntry.getQueryWrapper());
cruDEntry.setList(list);
cruDEntry.setExecuteStatus(true);
}
/**
* 查询
*/
public void selsect(){
List<T> list = s.list(cruDEntry.getQueryWrapper());
cruDEntry.setList(list);
if (CollectionUtil.isNotEmpty(list)) {
cruDEntry.setExecuteStatus(s.remove(cruDEntry.getQueryWrapper()));
} else {
cruDEntry.setExecuteStatus(true);
}
}
}
package com.launch.tencent.utils.UnonU.mybatisPlus;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.launch.tencent.utils.UnonU.mybatisPlus.data3.CRUDAll;
import com.launch.tencent.utils.UnonU.mybatisPlus.data3.MybatisPlusTools;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author No Use
* @请不要使用
*/
@Component
public class MybatisPlusInterface3 {
/**
* 执行-单执行体
*
* @param crudAlls 执行体
* @param <T>
* @param <S>
*/
public <T, S extends IService<T>> void execute(List<CRUDAll<T, S>> crudAlls) {
crudAlls.forEach(fe -> {
fe.execute();
});
}
/**
* 执行-多执行体
*
* @param crudAlls 执行体
* @param <T>
* @param <S>
*/
public <T, S extends IService<T>> void executeMany(List<CRUDAll<T, S>> crudAlls) {
crudAlls.forEach(fe -> {
fe.executeMany();
});
}
/**
* 单-多混合
*
* @param crudAlls
* @param <T>
* @param <S>
*/
public <T, S extends IService<T>> void executeMix(List<CRUDAll<T, S>> crudAlls) {
crudAlls.forEach(fe -> {
fe.executeMany();
fe.execute();
});
}
/**
* page(page,qw)分页条件查询
*
* @param mybatisPlusTools 工具类
* @param servie serviceInterface
* @param t 实体类
* @param pageNum 页码
* @param pageSize 页数
* @param <T>
* @param <S>
* @return
*/
public <T, S extends IService<T>> Page<T> select(MybatisPlusTools<T> mybatisPlusTools,
S servie,
T t,
Integer pageNum,
Integer pageSize,
String timebetweenKey,
String timeDayValue) {
QueryWrapper<T> tQueryWrapper = mybatisPlusTools.selectWhereJion(BeanUtil.beanToMap(t), timebetweenKey, timeDayValue);
Page<T> page = servie.page(new Page<>(pageNum, pageSize), tQueryWrapper);
return page;
}
/**
* 多对一 根据外键删除 多
*
* @param s
* @param key
* @param value
* @param <T>
* @param <S>
* @return
*/
public <T, S extends IService<T>> Boolean removesEq(List<S> s, String key, Object value) {
AtomicBoolean atomicBoolean = new AtomicBoolean(true);
s.forEach(fe -> {
if (atomicBoolean.get()) {
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
if (value instanceof List) {
queryWrapper.in(key, value);
} else {
queryWrapper.eq(key, value);
}
boolean remove = fe.count(queryWrapper) > 0 ? fe.remove(queryWrapper) : true;
if (!remove) {
atomicBoolean.set(remove);
}
}
});
return atomicBoolean.get();
}
}
package com.launch.tencent.utils.UnonU.mybatisPlus.data3;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
/**
* @请不要使用
* @author No Use
* @param <T>
*/
public class MybatisPlusTools<T> {
public MybatisPlusTools() {}
/**
* 基本查询
* @param stringObjectMap 查询对象
* @param timebetweenKey 区间时间查询 开始,结束
* @param timeDayValue 天查询
* @return
*/
public QueryWrapper<T> selectWhereJion(Map<String, Object> stringObjectMap,String timebetweenKey,String timeDayValue) {
QueryWrapper<T> queryWrapper = new QueryWrapper<T>();
if (!CollectionUtils.isEmpty(stringObjectMap)) {
stringObjectMap.forEach((x, y) -> {
if (Objects.nonNull(timebetweenKey) && timebetweenKey.equals(x)) {
if (Objects.nonNull(y)) {
String s = y.toString();
String[] split = s.split(",");
if (split.length == 2) {
queryWrapper.apply("UNIX_TIMESTAMP(create_time) > UNIX_TIMESTAMP('" + split[0] + "')");
queryWrapper.apply("UNIX_TIMESTAMP(create_time) < UNIX_TIMESTAMP('" + split[1] + "')");
}
}
} else if (Objects.nonNull(timeDayValue) &&timeDayValue.equals(x)) {
if (y instanceof Date) {
DateTime yesDay = DateUtil.offsetDay((Date) y, -1);
DateTime monDay = DateUtil.offsetDay((Date) y, 1);
String strStart = DateFormatUtils.format(yesDay, "yyyy-MM-dd");
String strEnd = DateFormatUtils.format(monDay, "yyyy-MM-dd");
queryWrapper.apply("UNIX_TIMESTAMP(create_time) > UNIX_TIMESTAMP('" + strStart + "')");
queryWrapper.apply("UNIX_TIMESTAMP(create_time) < UNIX_TIMESTAMP('" + strEnd + "')");
}
} else if (null != y && !"".equals(y) && !"pageNum".equals(x) && !"pageSize".equals(x)) {
//驼峰转 下划线
String key = toUnderlineCase(x);
queryWrapper.like(key, y);
}
});
}
return queryWrapper;
}
/**
* 驼峰转 下划线
* userName ----> user_name
* user_name ----> user_name
*
* @param camelCaseStr 驼峰字符串
* @return 带下滑线的String
*/
public static String toUnderlineCase(String camelCaseStr) {
if (camelCaseStr == null) {
return null;
}
// 将驼峰字符串转换成数组
char[] charArray = camelCaseStr.toCharArray();
StringBuffer buffer = new StringBuffer();
//处理字符串
for (int i = 0, l = charArray.length; i < l; i++) {
if (charArray[i] >= 65 && charArray[i] <= 90) {
buffer.append("_").append(charArray[i] += 32);
} else {
buffer.append(charArray[i]);
}
}
return buffer.toString();
}
}
package com.launch.tencent.utils.UnonU.mybatisPlus.data3;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.launch.tencent.utils.UnonU.mybatisPlus.data3.enums.CRUD;
import lombok.Builder;
import lombok.Data;
import java.util.List;
@Data
@Builder
public class CRUDEntry<T> {
/**
* C.R.U.D
*/
private CRUD type;
/**
* 执行状态
*/
private Boolean executeStatus;
/**
* 不同type 存储结构不一样
*/
private List<T> list;
/**
* 条件
*/
private LambdaQueryWrapper<T> queryWrapper;
}
package com.launch.tencent.utils.UnonU.mybatisPlus.data3.enums;
/**
* @请不要使用
* @author NoUse
*/
public enum CRUD {
C,R,U,D
}