1.基本功能 1.基本功能
1.1.单号生成规则(普通) 1.1.单号生成规则(普通)
有的字段希望在保存的时候自己生成一串有规律的数值。例如例子中的规律为【LIXQ-当前用户名称-当前时间(年月日且年取后两位)-序号】
1.2.单号生成规则(EDS) 1.2.单号生成规则(EDS)
- 在save方法上面生成相关的逻辑代码,生成单号的代码需要用户自己扩展。目前不支持批量保存按钮。
1.3.自定义单号 1.3.自定义单号
在平台配置了单号规则后,有的时候是需要在自己的逻辑中获取到单号,对它进行一些处理。
2.配置方法 2.配置方法
2.1.单号生成规则(普通) 2.1.单号生成规则(普通)
目前支持固定值以及部分的变量。部分的变量有:@{userCode}@用户代码,@{officeCode}@组织代码,@{roleCode}@角色代码,@{companyCode}@组织所属结算公司代码,@{cityCode}@组织对应城市代码,@{DATE:yyMMdd}@时间,@{SEQ:4}计数
配置
1.对象建模–基础数据–单号生成规则:新增一笔数据,在此处配置单号生成规则配置数据。
其中一些字段的的解释,具体如下。
单号规则代码:自定义,但是在同个数据库必须唯一
单号规则名称:自定义
单号生成规则:这个字段的赋值规则
单号规则状态:new(固定)
有效:必须勾选
业务对象:此单号作用的业务对象
属性名称:此单号作用在业务对象的具体字段
事物类型:单一事物
调用时机:保存时
2.勾选新增的数据,点击【同步到目标数据】(也可以点击【导出配置数据,直接导出文件在对应的数据库中刷sql脚本】)。
3.业务对象要重新生成代码。
代码
在保存方法的service服务中会生成单号规则生成的代码,如图。如果是在表格内编辑配置的单号,则生成的代码是在service服务中的批量保存方法中。
/**
* GLPaaS生成
* 保存常用案例NewHot103
*
* @param testCaseNewHot103
* @return
*/
@Override public int save(TestCaseNewHot103 testCaseNewHot103) {
Map < String,
String > codes = Maps.newHashMap();
if (StringUtils.isNullBlank(testCaseNewHot103.getAsnNo()) && StringUtils.isNullBlank(testCaseNewHot103.getCustNo())) {
Map < String,
List > map = ruleService.generateBasNumForBigData("TestCaseNewHot103", new Integer(1));
List < String > listData = null;
if (map.get(SIM_NUM_RULE_PRO_NAME_0) != null) {
listData = map.get(SIM_NUM_RULE_PRO_NAME_0);
String firstValasnNo = listData.get(0);
codes.put(SIM_NUM_RULE_PRO_NAME_0, firstValasnNo);
}
if (map.get(SIM_NUM_RULE_PRO_NAME_1) != null) {
listData = map.get(SIM_NUM_RULE_PRO_NAME_1);
String firstValcustNo = listData.get(0);
codes.put(SIM_NUM_RULE_PRO_NAME_1, firstValcustNo);
}
}
if (codes.containsKey(NUM_RULE_PRO_NAME_0)) {
testCaseNewHot103.setAsnNo(codes.get(NUM_RULE_PRO_NAME_0));
}
if (codes.containsKey(NUM_RULE_PRO_NAME_1)) {
testCaseNewHot103.setCustNo(codes.get(NUM_RULE_PRO_NAME_1));
}
int result = -1;
if (testCaseNewHot103.getRowStatus() == BaseObject.ROWSTATUS_ADDED) {
result = super.save(testCaseNewHot103);
}
return result;
}
在新增的js文件中的方法initDefaultValue方法中生成了对应的默认值。此类型的为单号规则。
/**
* GLPaaS生成
* initDefaultValue
*/
$scope.initDefaultValue = function () {
var defaultParams = [];
defaultParams.push({
ut: '01',
ivt: '0',
dv: '',
field: 'TestCaseNewHot103_receivePersonName',
boName: 'TestCaseNewHot103'
});
$scope.$$defaultValue = {};
if (defaultParams.length > 0) {
$http.post($config.ctx + '/defaultValue/getDefaultValue', defaultParams).success(function (data) {
if (data.success != undefined && data.success == true) {
if (data.defaultValueInfos != undefined && data.defaultValueInfos != null) {
angular.forEach(defaultParams, function (defaultParam, index) {
var fieldProperty = defaultParam.field.charAt(0).toLocaleLowerCase() + defaultParam.field.substring(1);
if (defaultParam.ut == '11') {
$scope.$$defaultValue[fieldProperty] = data.defaultValueInfos[defaultParam.field].split(":")[0];
} else if (defaultParam.ut == '04' || defaultParam.ut == '05' || defaultParam.ut == '31' || defaultParam.ut == '37') {
$scope.$$defaultValue[fieldProperty] = new Date(data.defaultValueInfos[defaultParam.field]);
} else {
$scope.$$defaultValue[fieldProperty] = data.defaultValueInfos[defaultParam.field];
}
});
if ($scope.defaultValueCallBack) {
$scope.defaultValueCallBack();
}
if ($scope._pageState) {
$scope._pageState.resetDataState();
}
}
}
});
}
};
2.2.单号生成规则(EDS) 2.2.单号生成规则(EDS)
1.对象建模–基础数据–单号生成规则:新增一笔数据,在此处配置单号生成规则配置数据。
其中:
单号规则代码:自定义,但是在同个数据库必须唯一
单号规则状态:new(固定)
有效:必须勾选
业务对象:此单号作用的业务对象
属性名称:此单号作用在业务对象的具体字段
调用时机:保存时
规则类型:现在支持【默认规则】和【通过EDS生成】两种模式,【默认规则】和以前单号生成规则配置一致(具体可参考【2.1.单号生成规则(普通)】),【通过EDS生成】需要在EDS上面自己配置相关的服务,通过EDS生成对应的单号。
参数类型:【默认参数】生成的参数为JSONObject,一般用于单号规则没有变量值的场景。【当前对象】生成的参数为当前业务对象,一般用于单号规则存在变量值的场景,可以获取到当前对象上的某个字段作为变量值生成单号。
调用方法名:获取单号的方法名
包名:获取单号的类的包名
类名:获取单号的类名
2.设置完后点击保存,并提交单号生成规则。
注:
1)如果是要通过EDS生成单号,则规则类型、参数类型、调用方法名、包名、类名这5个字段都必须维护相关的值,目前仅支持【调用时机】为保存时的场景。
2)规则类型只有选择【默认规则】时,【单号规则代码】【单号规则名称】【单号生成规则】才会做非空校验,选择【通过EDS生成】时,【单号规则代码】【单号规则名称】可不填,【单号生成规则】不用填,生成单号的代码需要用户自己扩展。
3.在save
方法上面生成相关的逻辑代码,生成单号的代码需要用户自己扩展,如下图所示,TestRule
这个类需要用户自己扩展,getRule1
、getRule2
这两个方法为生成message这个字段的单号,在配置界面上需要把TestRule这个类的包名、类名、以及具体调用的方法名都维护进去。
1)默认参数:
@Override
public int save(TestExam3101Weijie testExam3101Weijie, String businessType) {
String itemCode = testRule.getRule1(new com.alibaba.fastjson.JSONObject());
testExam3101Weijie.setItemCode(itemCode);
Map < String,String > codes = Maps.newHashMap();
if (StringUtils.isNullBlank(testExam3101Weijie.getItemCode()) {
codes = ruleService.generateBasNumMap("TestExam3101Weijie");
}
}
2)当前对象:
@Override
public int save(TestExam3101Weijie testExam3101Weijie, String businessType) {
String itemCode = testRule.getRule2(testExam3101Weijie);
testExam3101Weijie.setItemCode(itemCode);
Map < String,String > codes = Maps.newHashMap();
if (StringUtils.isNullBlank(testExam3101Weijie.getItemCode()) {
codes = ruleService.generateBasNumMap("TestExam3101Weijie");
}
}
3.常用扩展 3.常用扩展
3.1.自定义单号 3.1.自定义单号
1.在平台配置了单号规则后,但是我们有的时候是需要在自己的逻辑中获取到单号,此时我们可以区获取这些单号,对它进行一些处理。例如下面的例子的是在平台上对业务对象WmsInbReceiptGl
的属性receiptOrderNo
配置了单号。但是需要在其他业务逻辑的时候也要取出单号进行赋值操作。
2.要重载RuleService
@Autowired
protected RuleService ruleService;
3.自定义方法里面获取单号:根据业务对象获取属性代码编码,其中业务对象为WmsInbReceiptGl
,receiptOrderNo
为属性定义。另外new Integer(3)
指要取出3个单号进行业务逻辑操作。
HashMap codes = Maps.newHashMap();
List listData = null;
//
Map reMap = this.ruleService.generateBasNumForBigData("WmsInbReceiptGl", new Integer(3));
if(reMap.get("receiptOrderNo") != null) {
listData = (List)reMap.get("receiptOrderNo");
}
4.获取代码后根据业务逻辑处理,调用方法addWmsInbReceiptGl
,传入单号等参数进行set值。
WmsInbReceiptGl receiptGl = this.addWmsInbReceiptGl(fromCust, toCust, (String)listData.get(0));
5.addWmsInbReceiptGl
方法中是为实例wmsInbReceiptGl
进行set值。
public WmsInbReceiptGl addWmsInbReceiptGl(BasCustGl fromCust, BasCustGl toCust, String receiptOrderNo) {
WmsInbReceiptGl wmsInbReceiptGl = new WmsInbReceiptGl();
String uuid = UUID.randomUUID().toString();
wmsInbReceiptGl.setWmsInbReceiptId(uuid);
wmsInbReceiptGl.setReceiptOrderNo(receiptOrderNo);
wmsInbReceiptGl.setCustId(toCust.getBasCustId());
wmsInbReceiptGl.setCustCode(toCust.getCustCode());
wmsInbReceiptGl.setCustName(toCust.getCustName());
wmsInbReceiptGl.setShipFromName(fromCust.getCustName());
wmsInbReceiptGl.setReceiptStatus("NEW");
wmsInbReceiptGl.setReceiptType("NORMAL_INB");
wmsInbReceiptGl.setDiscountRate(new BigDecimal(1));
wmsInbReceiptGl.setWarehouseOfficeId("741256b959f042b8b3228c7592dd79f6");
wmsInbReceiptGl.setWarehouseOfficeName("南通仓");
wmsInbReceiptGl.setRowStatus(4);
return wmsInbReceiptGl;
}