郑根木 пре 2 година
родитељ
комит
4626bd1393
26 измењених фајлова са 744 додато и 37 уклоњено
  1. +8
    -2
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/DbEngine.java
  2. +17
    -10
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/EntityDao.java
  3. +2
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/cache/ModelTableCache.java
  4. +8
    -3
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/dao/AbstractEntityDao.java
  5. +6
    -1
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/impl/BaseBean.java
  6. +4
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/jdbc/JdbcEngine.java
  7. +4
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/vo/ModelField.java
  8. +4
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/vo/ModelIndex.java
  9. +5
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/vo/ModelTable.java
  10. +2
    -1
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/controller/scan/ApplicationScanner.java
  11. +23
    -1
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/controller/scan/BeanManager.java
  12. +26
    -19
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/controller/scan/ClassParser.java
  13. +24
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractCompProvider.java
  14. +50
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractCompService.java
  15. +52
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractDelHandler.java
  16. +39
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractLoadHandler.java
  17. +65
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractSaveHandler.java
  18. +63
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/DefaultDelHandler.java
  19. +26
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/DefaultLoadHandler.java
  20. +21
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/DefaultProvider.java
  21. +90
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/DefaultSaveHandler.java
  22. +8
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/IDataProvider.java
  23. +13
    -0
      smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/IHandler.java
  24. +88
    -0
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/project/ModelProject.java
  25. +37
    -0
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/project/ModelProjectService.java
  26. +59
    -0
      smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java

+ 8
- 2
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/DbEngine.java Прегледај датотеку

@@ -1,8 +1,10 @@
package cc.smtweb.framework.core.db;

import cc.smtweb.framework.core.db.impl.BaseBean;
import cc.smtweb.framework.core.db.impl.DefaultEntity;
import cc.smtweb.framework.core.db.jdbc.IdGenerator;
import cc.smtweb.framework.core.db.jdbc.JdbcEngine;
import cc.smtweb.framework.core.mvc.controller.scan.BeanManager;
import cc.smtweb.framework.core.util.SpringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -52,8 +54,12 @@ public class DbEngine extends JdbcEngine {
return handler;
}

public EntityDao<DefaultEntity> findDao(String tableName) {
EntityDao<DefaultEntity> handler = tableDaoMap.get(type);
public EntityDao findDao(String tableName) {
Class<?> clazz = BeanManager.getInstance().getTableClass(tableName);
if (clazz != null) {
return findDao(clazz);
}
EntityDao<DefaultEntity> handler = tableDaoMap.get(tableName);

if (handler == null) {
synchronized (tableDaoMap) {


+ 17
- 10
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/EntityDao.java Прегледај датотеку

@@ -1,5 +1,6 @@
package cc.smtweb.framework.core.db;

import cc.smtweb.framework.core.SwException;
import cc.smtweb.framework.core.db.dao.AbstractEntityDao;
import cc.smtweb.framework.core.db.dao.EntityColumn;
import cc.smtweb.framework.core.db.jdbc.JdbcEngine;
@@ -220,16 +221,6 @@ public class EntityDao<T> extends AbstractEntityDao<T> {
}

/**
* 读取实体对象ID值
*
* @param entity
* @return
*/
public Long readEntityId(T entity) {
return (Long) readId(entity);
}

/**
* 查询单行数据,返回bean
*/
public T queryEntity(Long id) {
@@ -278,4 +269,20 @@ public class EntityDao<T> extends AbstractEntityDao<T> {

return jdbcEngine.query(sb.toString(), type, params);
}


public void checkUnique(T bean, String... fields) {
if (fields.length == 0) return;
String ss = "", sTitle = "";
List<Object> args = new ArrayList<>(fields.length + 1);
args.add(readId(bean));
for (String f: fields) {
if (StringUtils.isEmpty(f)) continue;
ss += " and " + f + "=?";
args.add(readValue(bean, f));
sTitle += "+" + modelTable.getFieldTitle(f);
}
if (jdbcEngine.isExists("select 1 from " + tableName + " where " + modelTable.getIdField() + "=? " + ss, args.toArray()))
throw new SwException(sTitle.substring(1) + " 不能重复!");
}
}

+ 2
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/cache/ModelTableCache.java Прегледај датотеку

@@ -21,6 +21,7 @@ import java.util.Set;
public class ModelTableCache extends AbstractCache<ModelTable> {
private final static String mk = "k";
private final static String md = "d";
private final static String mf = "l";

public static ModelTableCache getInstance() {
return CacheManager.getIntance().getCache(ModelTableCache.class);
@@ -29,6 +30,7 @@ public class ModelTableCache extends AbstractCache<ModelTable> {
public ModelTableCache() {
regMap(mk, k-> k.getName().toUpperCase());
regList(md, k-> String.valueOf(k.getDatabaseId()));
regList(mf, k-> k.get);
}

@Override


+ 8
- 3
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/dao/AbstractEntityDao.java Прегледај датотеку

@@ -84,7 +84,7 @@ public abstract class AbstractEntityDao<T> {
*/
public AbstractEntityDao(String tableName) {
this.tableName = tableName;
this.type = (Class<T>)DefaultEntity.class;
this.type = (Class<T>) DefaultEntity.class;
modelTable = cacheManager.getCache(ModelTableCache.class).getByName(tableName);

for (ModelField field : modelTable.getFields()) {
@@ -94,7 +94,8 @@ public abstract class AbstractEntityDao<T> {

/**
* 根据字段名,得到类中的字段属性名
* @param tbAbbr 表缩写,一般是字段的前缀
*
* @param tbAbbr 表缩写,一般是字段的前缀
* @param fieldName 字段名
* @return
*/
@@ -305,7 +306,7 @@ public abstract class AbstractEntityDao<T> {
sql.append("DELETE FROM ").append(tableName).append(" WHERE ").append(idColumn.getField().getName()).append("=?");
}

private Object readValue(T obj, String fieldName) {
protected Object readValue(T obj, String fieldName) {
EntityColumn beanColumn = getBeanColumn(fieldName);

return beanColumn.readValue(obj);
@@ -379,5 +380,9 @@ public abstract class AbstractEntityDao<T> {

return (Long) idColumn.readValue(entity);
}

public T createBean() throws Exception {
return this.type.newInstance();
}
}


+ 6
- 1
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/impl/BaseBean.java Прегледај датотеку

@@ -1,5 +1,6 @@
package cc.smtweb.framework.core.db.impl;

import cc.smtweb.framework.core.SwMap;
import cc.smtweb.framework.core.util.JsonUtil;
import cc.smtweb.framework.core.util.NumberUtil;
import com.fasterxml.jackson.databind.JsonNode;
@@ -89,10 +90,14 @@ public class BaseBean implements Serializable {
return this.data.get(fieldName);
}

public void readFromJson(String json){
public void readFromJson(String json) {
Map map = JsonUtil.parseMap(json);
if (map != null) {
data.putAll(map);
}
}

public void readFromMap(SwMap map) {
data.putAll(map);
}
}

+ 4
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/jdbc/JdbcEngine.java Прегледај датотеку

@@ -388,6 +388,10 @@ public class JdbcEngine {
return jdbcTemplate.query(sql + " LIMIT " + start + "," + limit, createRowMapper(type));
}

public boolean isExists(String sql, Object... params) {
return jdbcTemplate.queryForObject(sql + " LIMIT 0, 1", int.class, params) > 0;
}

private <T> RowMapper<T> createRowMapper(Class<T> type) {
RowMapper<T> rowMapper;
if (java.util.Map.class.isAssignableFrom(type)) {


+ 4
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/vo/ModelField.java Прегледај датотеку

@@ -35,4 +35,8 @@ public class ModelField {
private String link;
//控件类型:TEXT/TextArea/NUMBER/COMBO
private String editor;

public boolean isNotNull() {
return notNull == 1;
}
}

+ 4
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/vo/ModelIndex.java Прегледај датотеку

@@ -17,4 +17,8 @@ public class ModelIndex {
private String type;
private String name;
private String fields;

public boolean isUnique() {
return TYPE_UNIQUE.equals(type);
}
}

+ 5
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/db/vo/ModelTable.java Прегледај датотеку

@@ -62,6 +62,11 @@ public class ModelTable implements Serializable {
return null;
}

public String getFieldTitle(String fieldName) {
ModelField field = findField(fieldName);
return field != null ? field.getTitle() : fieldName;
}

public String fullName() {
return dbName + '.' + name;
}


+ 2
- 1
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/controller/scan/ApplicationScanner.java Прегледај датотеку

@@ -23,7 +23,8 @@ import java.util.List;
public class ApplicationScanner {
public static void scan(ConfigurableApplicationContext applicationContext) throws Exception {
MethodAccessManager methodAccessManager = applicationContext.getBean(MethodAccessManager.class);
BeanManager beanManager = new BeanManager(applicationContext);
BeanManager beanManager = BeanManager.getInstance();
beanManager.install(applicationContext);

String[] names = applicationContext.getBeanNamesForType(ControllerConfig.class);
if (names != null) {


+ 23
- 1
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/controller/scan/BeanManager.java Прегледај датотеку

@@ -32,7 +32,21 @@ public class BeanManager implements IActionManager {
private List<OrderMethodAccess> destroyMethods = new ArrayList<>();
private List<IMethodAccess> beanMethods = new ArrayList<>();

BeanManager(ApplicationContext applicationContext) {
private Map<String, Class<?>> mapTableClass = new HashMap<>();

private static BeanManager instance = null;
static {
instance = new BeanManager();
}

public static BeanManager getInstance() {
return instance;
}

private BeanManager() {
}

public void install(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
beanContext = new BeanContext(beanMap, applicationContext);
}
@@ -127,6 +141,14 @@ public class BeanManager implements IActionManager {
return this.putIfAbsent(url, methodAccess) == null;
}

public void addTableClass(String tableName, Class<?> clzz) {
mapTableClass.put(tableName, clzz);
}

public Class<?> getTableClass(String tableName) {
return mapTableClass.get(tableName);
}

private static class OrderMethodAccess {
private final int order;
private final MethodAccess methodAccess;


+ 26
- 19
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/controller/scan/ClassParser.java Прегледај датотеку

@@ -69,28 +69,35 @@ public class ClassParser {
} else {
log.error(clazz.getName() + " must be singleton, can not use field: " + singletonField.getName());
}
} else {
SwService swService = clazz.getAnnotation(SwService.class);
return;
}

if (swService != null) {
urlMaker.setServiceUrl(swService.value());
log.debug("[smt]init service: " + clazz.getName());
SwService swService = clazz.getAnnotation(SwService.class);
if (swService != null) {
urlMaker.setServiceUrl(swService.value());
log.debug("[smt]init service: " + clazz.getName());
//Service类,非单例,以免多线程并发相互干扰
ControllerAccess controllerAccess = buildControllerAccess(clazz, false);
if (controllerAccess.isSingleton()) {
controllerAccess.newSingletonInstance();
beanManager.addSingletonController(controllerAccess);
}

ControllerAccess controllerAccess = buildControllerAccess(clazz, false);
if (controllerAccess.isSingleton()) {
controllerAccess.newSingletonInstance();
beanManager.addSingletonController(controllerAccess);
}
// 处理url路径
methodParser.parse(clazz, controllerAccess, true);
return;
}

// 处理url路径
methodParser.parse(clazz, controllerAccess, true);
} else {
SwCache swCache = clazz.getAnnotation(SwCache.class);
if (swCache != null) {
CacheManager cacheManager = CacheManager.getIntance();
cacheManager.install((AbstractCache)clazz.newInstance());
}
}
SwCache swCache = clazz.getAnnotation(SwCache.class);
if (swCache != null) {
CacheManager cacheManager = CacheManager.getIntance();
cacheManager.install((AbstractCache) clazz.newInstance());
return;
}

SwTable swTable = clazz.getAnnotation(SwTable.class);
if (swTable != null) {
beanManager.addTableClass(swTable.value(), clazz);
}
}



+ 24
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractCompProvider.java Прегледај датотеку

@@ -0,0 +1,24 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.db.EntityDao;

import java.util.HashMap;
import java.util.Map;

/**
* Created by Akmm at 2022/3/3 11:13
* 数据提供者,线程级缓存
*/
public class AbstractCompProvider {
//临时缓存
private Map<String, Object> cacheData = new HashMap<>();

protected <T> T doGetData(String key, IDataProvider<T> loader) {
cacheData.computeIfAbsent(key, s -> loader.load());
if (!cacheData.containsKey(key)) {
cacheData.put(key, loader.load());
}
return (T) cacheData.get(key);
}
}

+ 50
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractCompService.java Прегледај датотеку

@@ -0,0 +1,50 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.R;
import cc.smtweb.framework.core.SwMap;
import cc.smtweb.framework.core.annotation.SwBody;
import cc.smtweb.framework.core.annotation.SwService;
import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.db.EntityDao;
import cc.smtweb.framework.core.session.UserSession;

import java.util.HashMap;
import java.util.Map;

/**
* Created by Akmm at 2022/3/2 10:39
* 通用业务mvc总调度
*/
public abstract class AbstractCompService {
public final static String TYPE_LIST = "list";
public final static String TYPE_LOAD = "load";
public final static String TYPE_SAVE = "save";
public final static String TYPE_DEL = "del";

protected abstract IHandler createHanlder(String type);

private R pageHandler(SwMap params, UserSession us, String type) {
try {
IHandler handler = createHanlder(TYPE_SAVE);
return handler.doWork(params, us);
} catch (Exception e) {
return R.error("操作失败!", e);
}
}

public R save(@SwBody SwMap params, UserSession us) {
return pageHandler(params, us, TYPE_SAVE);
}

public R load(@SwBody SwMap params, UserSession us) {
return pageHandler(params, us, TYPE_LOAD);
}

public R del(@SwBody SwMap params, UserSession us) {
return pageHandler(params, us, TYPE_DEL);
}

public R list(@SwBody SwMap params, UserSession us) {
return pageHandler(params, us, TYPE_LIST);
}
}

+ 52
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractDelHandler.java Прегледај датотеку

@@ -0,0 +1,52 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.R;
import cc.smtweb.framework.core.SwMap;
import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.session.UserSession;
import lombok.extern.slf4j.Slf4j;

/**
* Created by Akmm at 2022/3/2 19:44
* 保存
*/
@Slf4j
public abstract class AbstractDelHandler<T> implements IHandler{
protected SwMap params;
protected UserSession us;

@Override
public R doWork(SwMap params, UserSession us) throws Exception {
this.params = params;
this.us = us;

long id = readId();

checkValid();
DbEngine.getInstance().doTrans(() -> {
try {
del();
saveSuccess();
return true;
} catch (Exception e) {
saveFailed();
log.error("保存失败!", e);
return false;
}
});
return R.success();
}

/**
* 读取页面传回来的id
* @return
*/
protected long readId() {
return params.readLong("id", 0L);
}

protected abstract void checkValid() throws Exception;
protected abstract void del() throws Exception;
protected void saveSuccess() {}
protected void saveFailed() {}
}

+ 39
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractLoadHandler.java Прегледај датотеку

@@ -0,0 +1,39 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.R;
import cc.smtweb.framework.core.SwMap;
import cc.smtweb.framework.core.session.UserSession;

/**
* Created by Akmm at 2022/3/2 19:44
*/
public abstract class AbstractLoadHandler<T> implements IHandler {
protected SwMap params;
protected UserSession us;

@Override
public R doWork(SwMap params, UserSession us) throws Exception {
this.params = params;
this.us = us;
long id = readId();
T bean;
if (id <= 0L) {
bean = createComp();
} else {
bean = loadComp(id);
}
return R.success(bean);
}

/**
* 读取页面传回来的id
* @return
*/
protected long readId() {
return params.readLong("id", 0L);
}

protected abstract T createComp() throws Exception;

protected abstract T loadComp(long id);
}

+ 65
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/AbstractSaveHandler.java Прегледај датотеку

@@ -0,0 +1,65 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.R;
import cc.smtweb.framework.core.SwMap;
import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.session.UserSession;
import lombok.extern.slf4j.Slf4j;

/**
* Created by Akmm at 2022/3/2 19:44
* 保存
*/
@Slf4j
public abstract class AbstractSaveHandler<T> implements IHandler{
protected SwMap params;
protected UserSession us;
protected T bean;
protected boolean isNew;

@Override
public R doWork(SwMap params, UserSession us) throws Exception {
this.params = params;
this.us = us;

long id = readId();

isNew = id <= 0L;
if (isNew) {
bean = createComp();
} else {
bean = loadComp(id);
}
readFromPage();
checkValid();
DbEngine.getInstance().doTrans(() -> {
try {
save();
saveSuccess();
return true;
} catch (Exception e) {
saveFailed();
log.error("保存失败!", e);
return false;
}
});
return R.success(bean);
}

/**
* 读取页面传回来的id
* @return
*/
protected long readId() {
return params.readLong("id", 0L);
}

protected abstract void readFromPage();
protected abstract void checkValid() throws Exception;
protected abstract void save() throws Exception;
protected void saveSuccess() {}
protected void saveFailed() {}

protected abstract T createComp() throws Exception;
protected abstract T loadComp(long id) throws Exception;
}

+ 63
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/DefaultDelHandler.java Прегледај датотеку

@@ -0,0 +1,63 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.SwException;
import cc.smtweb.framework.core.cache.AbstractCache;
import cc.smtweb.framework.core.cache.CacheManager;
import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.db.EntityDao;
import cc.smtweb.framework.core.db.cache.ModelTableCache;
import cc.smtweb.framework.core.db.impl.DefaultEntity;
import cc.smtweb.framework.core.db.vo.ModelField;
import cc.smtweb.framework.core.db.vo.ModelIndex;
import cc.smtweb.framework.core.db.vo.ModelTable;
import org.apache.commons.lang3.StringUtils;

/**
* Created by Akmm at 2022/3/2 19:52
* 默认实体实现
*/
public class DefaultDelHandler<T extends DefaultEntity> extends AbstractDelHandler<T> {
protected String tableName;

public DefaultDelHandler(String tableName) {
this.tableName = tableName;
}

@Override
protected void checkValid() throws Exception {
ModelTable table = ModelTableCache.getInstance().getByName(tableName);

EntityDao dao = DbEngine.getInstance().findDao(tableName);
for (ModelIndex mi: table.getIndexes()) {
if (mi.isUnique()) {
dao.checkUnique(bean, mi.getFields().split(","));
}
}
}

@Override
protected void del() {
EntityDao dao = DbEngine.getInstance().findDao(tableName);
dao.deleteEntity(id);
}

@Override
protected void saveSuccess() {
super.saveSuccess();
ModelTable table = ModelTableCache.getInstance().getByName(tableName);
if (table.isNeedCache()) {
AbstractCache<T> cache = CacheManager.getIntance().getCache(tableName);
cache.put(bean);
}
}

@Override
protected void saveFailed() {
super.saveFailed();
ModelTable table = ModelTableCache.getInstance().getByName(tableName);
if (table.isNeedCache()) {
AbstractCache<T> cache = CacheManager.getIntance().getCache(tableName);
cache.reset(bean);
}
}
}

+ 26
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/DefaultLoadHandler.java Прегледај датотеку

@@ -0,0 +1,26 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.db.impl.DefaultEntity;

/**
* Created by Akmm at 2022/3/2 19:52
* 默认实体实现
*/
public class DefaultLoadHandler<T extends DefaultEntity> extends AbstractLoadHandler<T> {
protected String tableName;

public DefaultLoadHandler(String tableName) {
this.tableName = tableName;
}

@Override
protected T createComp() throws Exception {
return (T)DbEngine.getInstance().findDao(tableName).createBean();
}

@Override
protected T loadComp(long id) {
return new DefaultProvider<T>(tableName).getBean(id);
}
}

+ 21
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/DefaultProvider.java Прегледај датотеку

@@ -0,0 +1,21 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.db.EntityDao;
import cc.smtweb.framework.core.db.impl.DefaultEntity;

/**
* Created by Akmm at 2022/3/3 20:04
*/
public class DefaultProvider<T extends DefaultEntity> extends AbstractCompProvider {
public String tableName;

public DefaultProvider(String tableName) {
this.tableName = tableName;
}

public T getBean(long id) {
EntityDao<T> dao = (EntityDao<T>)DbEngine.getInstance().findDao(tableName);
return doGetData(tableName + "." + id, () -> dao.queryEntity(id));
}
}

+ 90
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/DefaultSaveHandler.java Прегледај датотеку

@@ -0,0 +1,90 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.SwException;
import cc.smtweb.framework.core.cache.AbstractCache;
import cc.smtweb.framework.core.cache.CacheManager;
import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.db.EntityDao;
import cc.smtweb.framework.core.db.cache.ModelTableCache;
import cc.smtweb.framework.core.db.impl.DefaultEntity;
import cc.smtweb.framework.core.db.vo.ModelField;
import cc.smtweb.framework.core.db.vo.ModelIndex;
import cc.smtweb.framework.core.db.vo.ModelTable;
import org.apache.commons.lang3.StringUtils;

/**
* Created by Akmm at 2022/3/2 19:52
* 默认实体实现
*/
public class DefaultSaveHandler<T extends DefaultEntity> extends AbstractSaveHandler<T> {
protected String tableName;

public DefaultSaveHandler(String tableName) {
this.tableName = tableName;
}

@Override
protected T createComp() throws Exception {
final EntityDao dao = DbEngine.getInstance().findDao(tableName);
T bean = (T) dao.createBean();
bean.setEntityId(dao.nextId());
return bean;
}

@Override
protected T loadComp(long id) {
return new DefaultProvider<T>(tableName).getBean(id);
}

@Override
protected void readFromPage() {
bean.readFromMap(params);
}

@Override
protected void checkValid() throws Exception {
ModelTable table = ModelTableCache.getInstance().getByName(tableName);
for (ModelField field: table.getFields()) {
if (field.isNotNull() && StringUtils.isEmpty(bean.getStr(field.getName()))) {
throw new SwException(field.getTitle() + "不能为空!");
}
}

EntityDao dao = DbEngine.getInstance().findDao(tableName);
for (ModelIndex mi: table.getIndexes()) {
if (mi.isUnique()) {
dao.checkUnique(bean, mi.getFields().split(","));
}
}
}

@Override
protected void save() {
EntityDao dao = DbEngine.getInstance().findDao(tableName);
if (isNew) {
dao.insertEntity(bean);
} else {
dao.updateEntity(bean);
}
}

@Override
protected void saveSuccess() {
super.saveSuccess();
ModelTable table = ModelTableCache.getInstance().getByName(tableName);
if (table.isNeedCache()) {
AbstractCache<T> cache = CacheManager.getIntance().getCache(tableName);
cache.put(bean);
}
}

@Override
protected void saveFailed() {
super.saveFailed();
ModelTable table = ModelTableCache.getInstance().getByName(tableName);
if (table.isNeedCache()) {
AbstractCache<T> cache = CacheManager.getIntance().getCache(tableName);
cache.reset(bean);
}
}
}

+ 8
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/IDataProvider.java Прегледај датотеку

@@ -0,0 +1,8 @@
package cc.smtweb.framework.core.mvc.service;

/**
* Created by Akmm at 2022/3/3 12:10
*/
public interface IDataProvider<T> {
T load();
}

+ 13
- 0
smtweb-framework/sw-framework-core/src/main/java/cc/smtweb/framework/core/mvc/service/IHandler.java Прегледај датотеку

@@ -0,0 +1,13 @@
package cc.smtweb.framework.core.mvc.service;

import cc.smtweb.framework.core.R;
import cc.smtweb.framework.core.SwMap;
import cc.smtweb.framework.core.session.UserSession;

/**
* Created by Akmm at 2022/3/2 19:01
* 所有handler的接口
*/
public interface IHandler {
R doWork(SwMap params, UserSession us) throws Exception;
}

+ 88
- 0
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/project/ModelProject.java Прегледај датотеку

@@ -0,0 +1,88 @@
package cc.smtweb.system.bpm.web.design.project;

import cc.smtweb.framework.core.annotation.SwTable;
import cc.smtweb.framework.core.db.impl.DefaultEntity;

/**
* Created by Akmm at 2022/3/1 15:35
*/
@SwTable("ASP_MODEL_PROJECT")
public class ModelProject extends DefaultEntity {
public static final String ENTITY_NAME = "ASP_MODEL_PROJECT";

public ModelProject() {
super(ENTITY_NAME);
}

public long getPrjId() {
return getLong("prj_id");
}

public void setPrjId(long prjId) {
put("prj_id", prjId);
}

public String getPrjName() {
return getStr("prj_name");
}

public void setPrjName(String prjName) {
put("prj_name", prjName);
}

public String getPrjDepends() {
return getStr("prj_depends");
}

public void setPrjDepends(String prjDepends) {
put("prj_depends", prjDepends);
}

public String getPrjDesc() {
return getStr("prj_desc");
}

public void setPrjDesc(String prjDesc) {
put("prj_desc", prjDesc);
}

public int getPrjStatus() {
return getInt("prj_status");
}

public void setPrjStatus(int prjStatus) {
put("prj_status", prjStatus);
}

public long getPrjCreateUid() {
return getLong("prj_create_uid");
}

public void setPrjCreateUid(long prjCreateUid) {
put("prj_create_uid", prjCreateUid);
}

public long getPrjUpdateUid() {
return getLong("prj_update_uid");
}

public void setPrjUpdateUid(long prjUpdateUid) {
put("prj_update_uid", prjUpdateUid);
}

public long getPrjCreateAt() {
return getLong("prj_create_at");
}

public void setPrjCreateAt(long prjCreateAt) {
put("prj_create_at", prjCreateAt);
}

public long getPrjUpdateAt() {
return getLong("prj_update_at");
}

public void setPrjUpdateAt(long prjUpdateAt) {
put("prj_update_at", prjUpdateAt);
}
}

+ 37
- 0
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/project/ModelProjectService.java Прегледај датотеку

@@ -0,0 +1,37 @@
package cc.smtweb.system.bpm.web.design.project;

import cc.smtweb.framework.core.R;
import cc.smtweb.framework.core.SwMap;
import cc.smtweb.framework.core.annotation.SwBody;
import cc.smtweb.framework.core.annotation.SwParam;
import cc.smtweb.framework.core.annotation.SwService;
import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.db.EntityDao;
import cc.smtweb.framework.core.mvc.service.AbstractCompService;
import cc.smtweb.framework.core.mvc.service.DefaultLoadHandler;
import cc.smtweb.framework.core.mvc.service.DefaultSaveHandler;
import cc.smtweb.framework.core.mvc.service.IHandler;
import cc.smtweb.framework.core.session.UserSession;
import cc.smtweb.system.bpm.engine.entity.AspModelPO;

/**
* Created by Akmm at 2022/3/1 17:00
* 项目服务类
*/
@SwService
public class ModelProjectService extends AbstractCompService {
@Override
protected IHandler createHanlder(String type) {
switch (type) {
case TYPE_LOAD:
return new DefaultLoadHandler<ModelProject>(ModelProject.ENTITY_NAME);
case TYPE_SAVE:
return new DefaultSaveHandler<>(ModelProject.ENTITY_NAME);
case TYPE_DEL:
return new DefaultSaveHandler<>(ModelProject.ENTITY_NAME);
}
return null;
}


}

+ 59
- 0
smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java Прегледај датотеку

@@ -0,0 +1,59 @@
package cc.smtweb.system.bpm.test;

import cc.smtweb.framework.core.db.cache.ModelTableCache;
import cc.smtweb.system.bpm.util.CodeGenUtil;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;

/**
* Created by Akmm at 2022/3/1 9:41
* 生成bean
*/
public class BuildJavaBean {
@Test
public void buildBean() {
String str = "`prj_id` bigint(20) NOT NULL DEFAULT '-1',\n" +
" `prj_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '项目名称',\n" +
" `prj_depends` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '依赖其他的项目',\n" +
" `prj_desc` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '项目描述',\n" +
" `prj_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态:0 启用,1 禁用',\n" +
" `prj_create_uid` bigint(20) DEFAULT NULL,\n" +
" `prj_update_uid` bigint(20) DEFAULT NULL,\n" +
" `prj_create_at` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',\n" +
" `prj_update_at` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新时间',";
String[] ss = str.split("\n");
for (String s: ss) {
String[] s0 = s.trim().split(" ");
if (StringUtils.isEmpty(s0[0])) continue;
String tn = s0[0].substring(1, s0[0].indexOf("`", 2));
String tnu = CodeGenUtil.underlineToUpperHump(tn);
String tnn = CodeGenUtil.underlineToHump(tn);

String tt = s0[1];
String ttj;
if (tt.contains("(")) tt = tt.substring(0, tt.indexOf("("));
switch (tt) {
case "bigint":
tt = "long";
ttj = "Long";
break;
case "tinyint":
case "int":
tt = "int";
ttj = "Int";
break;
default:
tt = "String";
ttj = "Str";
break;
}
System.out.println("private " + tt + " get" + tnu + "(){\n" +
"return get" + ttj + "(\"" + tn + "\");\n" +
"}\n" +
"" +
"private void set" + tnu + "(" + tt + " " + tnn + "){\n" +
"put(\"" + tn + "\", " + tnn + ");\n" +
"}\n");
}
}
}

Loading…
Откажи
Сачувај