单号规则

1.基本功能 1.基本功能

1.1.单号生成规则(普通) 1.1.单号生成规则(普通)

有的字段希望在保存的时候自己生成一串有规律的数值。例如例子中的规律为【LIXQ-当前用户名称-当前时间(年月日且年取后两位)-序号】
单号生成保存时-效果1

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.对象建模–基础数据–单号生成规则:新增一笔数据,在此处配置单号生成规则配置数据。
单号普通1

单号普通2

其中一些字段的的解释,具体如下。
单号规则代码:自定义,但是在同个数据库必须唯一
单号规则名称:自定义
单号生成规则:这个字段的赋值规则
单号规则状态:new(固定)
有效:必须勾选
业务对象:此单号作用的业务对象
属性名称:此单号作用在业务对象的具体字段
事物类型:单一事物
调用时机:保存时

2.勾选新增的数据,点击【同步到目标数据】(也可以点击【导出配置数据,直接导出文件在对应的数据库中刷sql脚本】)。
单号普通3

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;
}

单号生成保存时-代码1

在新增的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();
                            }
                        }
                    }
                });
            }
        };

单号生成新增时-代码1

2.2.单号生成规则(EDS) 2.2.单号生成规则(EDS)

1.对象建模–基础数据–单号生成规则:新增一笔数据,在此处配置单号生成规则配置数据。
单号EDS1

2

其中:
单号规则代码:自定义,但是在同个数据库必须唯一
单号规则状态:new(固定)
有效:必须勾选
业务对象:此单号作用的业务对象
属性名称:此单号作用在业务对象的具体字段
调用时机:保存时
规则类型:现在支持【默认规则】和【通过EDS生成】两种模式,【默认规则】和以前单号生成规则配置一致(具体可参考【2.1.单号生成规则(普通)】),【通过EDS生成】需要在EDS上面自己配置相关的服务,通过EDS生成对应的单号。
参数类型:【默认参数】生成的参数为JSONObject,一般用于单号规则没有变量值的场景。【当前对象】生成的参数为当前业务对象,一般用于单号规则存在变量值的场景,可以获取到当前对象上的某个字段作为变量值生成单号。
调用方法名:获取单号的方法名
包名:获取单号的类的包名
类名:获取单号的类名

2.设置完后点击保存,并提交单号生成规则。

注:
1)如果是要通过EDS生成单号,则规则类型、参数类型、调用方法名、包名、类名这5个字段都必须维护相关的值,目前仅支持【调用时机】为保存时的场景。
2)规则类型只有选择【默认规则】时,【单号规则代码】【单号规则名称】【单号生成规则】才会做非空校验,选择【通过EDS生成】时,【单号规则代码】【单号规则名称】可不填,【单号生成规则】不用填,生成单号的代码需要用户自己扩展。

3.在save方法上面生成相关的逻辑代码,生成单号的代码需要用户自己扩展,如下图所示,TestRule这个类需要用户自己扩展,getRule1getRule2这两个方法为生成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");
    }
}

结果1
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");
    }
}

结果2

3.常用扩展 3.常用扩展

3.1.自定义单号 3.1.自定义单号

1.在平台配置了单号规则后,但是我们有的时候是需要在自己的逻辑中获取到单号,此时我们可以区获取这些单号,对它进行一些处理。例如下面的例子的是在平台上对业务对象WmsInbReceiptGl的属性receiptOrderNo配置了单号。但是需要在其他业务逻辑的时候也要取出单号进行赋值操作。

2.要重载RuleService

@Autowired
protected RuleService ruleService;

3.自定义方法里面获取单号:根据业务对象获取属性代码编码,其中业务对象为WmsInbReceiptGlreceiptOrderNo为属性定义。另外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;
}

4.版本更新 4.版本更新

7.4.1,2021.03.12

优化

  • 【导出配置数据】如果勾选的是引用数据,提示【请回原视图导出配置数据!】。
  • 【同步到目标数据库】如果勾选的是引用数据,提示【请回原视图导出配置数据!】。
  • 单号应该支持批量生成,例如表格内编辑模式情况。【需求见禅道号 26758】
  • 业务对象字段联想控件优化。
  • 5.6.E,2019.07.23

    新特性

  • 云平台支持用EDS单号生成规则的配置