mirror of
https://github.com/getrebuild/rebuild.git
synced 2024-09-20 07:25:54 +08:00
Fix v3.4.1 (#655)
* feat: jansi for windows * be: manifest.json * fix: Remove escapeHtml * fix: TransformConfig not exists * fix: user delete check * fix: fixedDecimalScale * v3.4.1 --------- Co-authored-by: devezhao <zhaofang123@gmail.com>
This commit is contained in:
parent
a1fcefad28
commit
3560e8d02d
7
pom.xml
7
pom.xml
|
@ -10,7 +10,7 @@
|
|||
</parent>
|
||||
<groupId>com.rebuild</groupId>
|
||||
<artifactId>rebuild</artifactId>
|
||||
<version>3.4.0</version>
|
||||
<version>3.4.1</version>
|
||||
<name>rebuild</name>
|
||||
<description>Building your business-systems freely!</description>
|
||||
<!-- UNCOMMENT USE TOMCAT -->
|
||||
|
@ -485,6 +485,11 @@
|
|||
<version>15.4</version>
|
||||
</dependency>
|
||||
-->
|
||||
<dependency>
|
||||
<groupId>org.fusesource.jansi</groupId>
|
||||
<artifactId>jansi</artifactId>
|
||||
<version>2.4.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- fix: CVEs -->
|
||||
<dependency>
|
||||
|
|
|
@ -73,11 +73,11 @@ public class Application implements ApplicationListener<ApplicationStartedEvent>
|
|||
/**
|
||||
* Rebuild Version
|
||||
*/
|
||||
public static final String VER = "3.4.0";
|
||||
public static final String VER = "3.4.1";
|
||||
/**
|
||||
* Rebuild Build [MAJOR]{1}[MINOR]{2}[PATCH]{2}[BUILD]{2}
|
||||
*/
|
||||
public static final int BUILD = 3040005;
|
||||
public static final int BUILD = 3040106;
|
||||
|
||||
static {
|
||||
// Driver for DB
|
||||
|
|
|
@ -11,6 +11,8 @@ import com.rebuild.core.support.CommandArgs;
|
|||
import com.rebuild.core.support.RebuildConfiguration;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.lang.SystemUtils;
|
||||
import org.fusesource.jansi.AnsiConsole;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration;
|
||||
|
@ -117,6 +119,7 @@ public class BootApplication extends SpringBootServletInitializer {
|
|||
|
||||
@Override
|
||||
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
|
||||
if (SystemUtils.IS_OS_WINDOWS) AnsiConsole.systemInstall();
|
||||
if (devMode()) System.setProperty("spring.profiles.active", "dev");
|
||||
|
||||
try {
|
||||
|
|
|
@ -85,9 +85,10 @@ public class TransformManager implements ConfigManager {
|
|||
/**
|
||||
* @param configId
|
||||
* @param sourceEntity [可选]
|
||||
* @return Returns clone
|
||||
* @return
|
||||
* @throws ConfigurationException
|
||||
*/
|
||||
public ConfigBean getTransformConfig(ID configId, String sourceEntity) {
|
||||
public ConfigBean getTransformConfig(ID configId, String sourceEntity) throws ConfigurationException {
|
||||
if (sourceEntity == null) sourceEntity = getBelongEntity(configId);
|
||||
|
||||
for (ConfigBean c : getRawTransforms(sourceEntity)) {
|
||||
|
|
|
@ -17,7 +17,6 @@ import cn.devezhao.persist4j.engine.NullValue;
|
|||
import cn.devezhao.persist4j.record.JsonRecordCreator;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.rebuild.core.metadata.easymeta.DisplayType;
|
||||
import com.rebuild.core.metadata.easymeta.EasyDecimal;
|
||||
import com.rebuild.core.metadata.easymeta.EasyField;
|
||||
import com.rebuild.core.metadata.easymeta.EasyMetaFactory;
|
||||
import com.rebuild.core.metadata.easymeta.EasyText;
|
||||
|
@ -240,11 +239,6 @@ public class EntityRecordCreator extends JsonRecordCreator {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 小数精度处理
|
||||
if (field.getDisplayType() == DisplayType.DECIMAL) {
|
||||
record.setDecimal(fieldName, EasyDecimal.fixedDecimalScale(value, field.getRawMeta()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -90,7 +90,16 @@ public class EasyDecimal extends EasyField {
|
|||
* @return
|
||||
*/
|
||||
public static BigDecimal fixedDecimalScale(Object decimalValue, Field decimalField) {
|
||||
int scale = ((EasyDecimal) EasyMetaFactory.valueOf(decimalField)).getScale();
|
||||
return fixedDecimalScale(decimalValue, EasyMetaFactory.valueOf(decimalField));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param decimalValue
|
||||
* @param decimalField
|
||||
* @return
|
||||
*/
|
||||
public static BigDecimal fixedDecimalScale(Object decimalValue, EasyField decimalField) {
|
||||
int scale = ((EasyDecimal) decimalField).getScale();
|
||||
|
||||
if (decimalValue instanceof BigDecimal) {
|
||||
return ((BigDecimal) decimalValue).setScale(scale, RoundingMode.HALF_UP);
|
||||
|
|
|
@ -13,7 +13,6 @@ import cn.devezhao.bizz.security.AccessDeniedException;
|
|||
import cn.devezhao.commons.CalendarUtils;
|
||||
import cn.devezhao.commons.CodecUtils;
|
||||
import cn.devezhao.commons.EncryptUtils;
|
||||
import cn.devezhao.commons.ObjectUtils;
|
||||
import cn.devezhao.persist4j.PersistManagerFactory;
|
||||
import cn.devezhao.persist4j.Record;
|
||||
import cn.devezhao.persist4j.engine.ID;
|
||||
|
@ -125,11 +124,7 @@ public class UserService extends BaseService {
|
|||
throw new OperationDeniedException(Language.L("内置用户禁止删除"));
|
||||
}
|
||||
|
||||
Object[] hasLogin = Application.createQueryNoFilter(
|
||||
"select count(logId) from LoginLog where user = ?")
|
||||
.setParameter(1, recordId)
|
||||
.unique();
|
||||
if (ObjectUtils.toInt(hasLogin[0]) > 0) {
|
||||
if (checkHasUsed(recordId)) {
|
||||
throw new OperationDeniedException(Language.L("已使用过的用户禁止删除"));
|
||||
}
|
||||
|
||||
|
@ -479,4 +474,28 @@ public class UserService extends BaseService {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查用户是否使用过
|
||||
*
|
||||
* @param user
|
||||
* @return
|
||||
*/
|
||||
public static boolean checkHasUsed(ID user) {
|
||||
// FIXME 仅检查是否登陆过。严谨些还应该检查是否有其他业务数据
|
||||
|
||||
// 登录
|
||||
Object[] hasLogin = Application.createQueryNoFilter(
|
||||
"select user from LoginLog where user = ?")
|
||||
.setParameter(1, user)
|
||||
.unique();
|
||||
if (hasLogin != null) return true;
|
||||
|
||||
// 绑定
|
||||
Object[] hasBind = Application.createQueryNoFilter(
|
||||
"select bindUser from ExternalUser where bindUser = ?")
|
||||
.setParameter(1, user)
|
||||
.unique();
|
||||
return hasBind != null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,17 +15,29 @@ import cn.devezhao.persist4j.Record;
|
|||
import cn.devezhao.persist4j.engine.ID;
|
||||
import cn.devezhao.persist4j.engine.NullValue;
|
||||
import com.rebuild.core.metadata.EntityHelper;
|
||||
import com.rebuild.core.metadata.MetadataHelper;
|
||||
import com.rebuild.core.metadata.MetadataSorter;
|
||||
import com.rebuild.core.metadata.easymeta.DisplayType;
|
||||
import com.rebuild.core.metadata.easymeta.EasyDecimal;
|
||||
import com.rebuild.core.metadata.easymeta.EasyField;
|
||||
import com.rebuild.core.metadata.easymeta.EasyMetaFactory;
|
||||
import com.rebuild.core.metadata.easymeta.EasyTag;
|
||||
import com.rebuild.core.privileges.UserService;
|
||||
import com.rebuild.core.service.general.QuickCodeReindexTask;
|
||||
import com.rebuild.utils.Callable2;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 基础服务类
|
||||
|
@ -33,6 +45,7 @@ import java.util.*;
|
|||
* @author devezhao
|
||||
* @since 01/04/2019
|
||||
*/
|
||||
@Slf4j
|
||||
public class BaseService extends InternalPersistService {
|
||||
|
||||
public BaseService(PersistManagerFactory aPMFactory) {
|
||||
|
@ -46,6 +59,7 @@ public class BaseService extends InternalPersistService {
|
|||
|
||||
@Override
|
||||
public Record create(Record record) {
|
||||
fixedDecimalScale(record);
|
||||
setQuickCodeValue(record);
|
||||
Callable2<Integer, Record> call1 = processN2NReference(record, Boolean.TRUE);
|
||||
Callable2<Integer, Record> call2 = processTag(record, Boolean.TRUE);
|
||||
|
@ -58,6 +72,7 @@ public class BaseService extends InternalPersistService {
|
|||
|
||||
@Override
|
||||
public Record update(Record record) {
|
||||
fixedDecimalScale(record);
|
||||
setQuickCodeValue(record);
|
||||
Callable2<Integer, Record> call1 = processN2NReference(record, Boolean.FALSE);
|
||||
Callable2<Integer, Record> call2 = processTag(record, Boolean.FALSE);
|
||||
|
@ -86,6 +101,30 @@ public class BaseService extends InternalPersistService {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制精度
|
||||
*
|
||||
* @param record
|
||||
*/
|
||||
private void fixedDecimalScale(Record record) {
|
||||
final Entity entity = record.getEntity();
|
||||
if (!MetadataHelper.isBusinessEntity(entity)) return;
|
||||
|
||||
for (String field : record.getAvailableFields()) {
|
||||
if (!record.hasValue(field, false)) continue;
|
||||
|
||||
EasyField decimalField = EasyMetaFactory.valueOf(entity.getField(field));
|
||||
if (decimalField.getDisplayType() != DisplayType.DECIMAL) continue;
|
||||
|
||||
Object oldValue = record.getObjectValue(field);
|
||||
BigDecimal fixed = EasyDecimal.fixedDecimalScale(oldValue, decimalField);
|
||||
if (oldValue.equals(fixed)) continue;
|
||||
|
||||
log.debug("Force decimal scale : {}={} < {}", decimalField.getRawMeta(), field, oldValue);
|
||||
record.setDecimal(field, fixed);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 多引用存在独立的表
|
||||
*
|
||||
|
|
|
@ -198,9 +198,9 @@ public class TableBuilder {
|
|||
if (rowspan == 0) {
|
||||
return StringUtils.EMPTY;
|
||||
} else if (rowspan > 1) {
|
||||
return String.format("<%s rowspan=\"%d\">%s</%s>", tag, rowspan, CommonsUtils.escapeHtml(content), tag);
|
||||
return String.format("<%s rowspan=\"%d\">%s</%s>", tag, rowspan, content, tag);
|
||||
} else {
|
||||
return String.format("<%s>%s</%s>", tag, CommonsUtils.escapeHtml(content), tag);
|
||||
return String.format("<%s>%s</%s>", tag, content, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ See LICENSE and COMMERCIAL in the project root for license information.
|
|||
|
||||
package com.rebuild.web.admin.bizz;
|
||||
|
||||
import cn.devezhao.commons.ObjectUtils;
|
||||
import cn.devezhao.commons.web.ServletUtils;
|
||||
import cn.devezhao.persist4j.Record;
|
||||
import cn.devezhao.persist4j.engine.ID;
|
||||
|
@ -27,12 +26,20 @@ import com.rebuild.utils.JSONUtils;
|
|||
import com.rebuild.web.EntityController;
|
||||
import com.rebuild.web.IdParam;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.util.*;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author devezhao
|
||||
|
@ -170,12 +177,7 @@ public class UserController extends EntityController {
|
|||
hasMember += UserHelper.getRoleMembers(bizzId).size();
|
||||
|
||||
} else if (bizzId.getEntityCode() == EntityHelper.User) {
|
||||
// NOTE 仅检查是否登陆过。严谨些还应该检查是否有其他业务数据
|
||||
Object[] hasLogin = Application.createQueryNoFilter(
|
||||
"select count(logId) from LoginLog where user = ?")
|
||||
.setParameter(1, bizzId)
|
||||
.unique();
|
||||
hasMember = ObjectUtils.toInt(hasLogin[0]);
|
||||
hasMember = UserService.checkHasUsed(bizzId) ? 1 : 0;
|
||||
}
|
||||
|
||||
return JSONUtils.toJSONObject(
|
||||
|
|
|
@ -13,6 +13,7 @@ import com.alibaba.fastjson.JSON;
|
|||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.rebuild.core.Application;
|
||||
import com.rebuild.core.configuration.ConfigBean;
|
||||
import com.rebuild.core.configuration.ConfigurationException;
|
||||
import com.rebuild.core.configuration.general.TransformManager;
|
||||
import com.rebuild.core.metadata.MetadataHelper;
|
||||
import com.rebuild.core.metadata.MetadataSorter;
|
||||
|
@ -152,7 +153,13 @@ public class TriggerAdminController extends BaseController {
|
|||
|
||||
String useTransform = configJson.getString("useTransform");
|
||||
if (ID.isId(useTransform)) {
|
||||
ConfigBean cb = TransformManager.instance.getTransformConfig(ID.valueOf(useTransform), sourceEntity);
|
||||
ConfigBean cb;
|
||||
try {
|
||||
cb = TransformManager.instance.getTransformConfig(ID.valueOf(useTransform), sourceEntity);
|
||||
} catch (ConfigurationException ex) {
|
||||
return String.format("[%s]", useTransform.toUpperCase());
|
||||
}
|
||||
|
||||
targetEntity = cb.getString("target");
|
||||
if (MetadataHelper.containsEntity(targetEntity)) {
|
||||
return EasyMetaFactory.getLabel(targetEntity);
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
{
|
||||
"$schema": "https://json.schemastore.org/web-manifest-combined.json",
|
||||
"name": "REBUILD Web",
|
||||
"name": "REBUILD",
|
||||
"short_name": "REBUILD",
|
||||
"description": "Made by getrebuild.com",
|
||||
"start_url": "../",
|
||||
"background_color": "#ffffff",
|
||||
"theme_color": "#4285f4",
|
||||
|
|
Loading…
Reference in a new issue