[内部]基于MES4.0综合平台【编码规则】使用帮助

功能设计说明


通过综合平台功能菜单->系统管理->基础数据->编码规则,即可打开编码规则维护界面:

[内部]基于MES4.0综合平台【编码规则】使用帮助_第1张图片
编码规则列表.png

左侧是编码规则的分类,无非就是模块或者集合信息,通过规则分类进行增、删、改可以进行相关操作。这里作为平台的编码规则,我们提前构建了一个分类:基础数据,设置平台编码时先选择该分类,就可以呈现如上图的编码规则列表。另外,初始化功能,主要在系统实施初期,可以通过该功能进行基础数据编码规则的导入,其他无啥意义。

回到列表,可以通过新增、编辑和查看进行规则相关操作,我们以组织机构为例,打开【组织机构】编码规则维护页面:


[内部]基于MES4.0综合平台【编码规则】使用帮助_第2张图片
规则明细.png

字段说明:

编号:决定规则唯一性编码,后期接口内通过该值进行规则区分和调用。
名称:描述性说明。
分类:列表左侧分类数据。
是否启用:该规则停启状态,如果停用,那么将无法获取到编码。
段分隔符:编码过程是按段进行的,比如日期一段,常量一段,而段之间可以存在分隔符。
编码方式:强制自动和可编辑,前者为业务点强制采用该规则,后者是产生编码但可以修改。
序号重置规则:流水号段,按照一定日期间隔进行重置,一般是年、月、日。
当前重置依赖:当前编码依赖的序号重置规则。
流水号步长:流水号递增步伐。
当前流水号:生成编码后,会记录最后生成编码的流水号。
最大长度:编码运行产生的最大长度,如果超过将截断,此处为了保证编码满足业务字段的限制。
各段编码:
1、常量:一般为固定长度文本
2、流水号:递增式整数编码,一般左边0补齐
3、日期:格式化日期字符,比如yyyyMMdd等。
4、GUID:全球唯一字符,无实际意义。
5、业务字段:通过列表的【业务字段】配置的业务字段键值对参数,该参数在编码生成过程中接口需要传递。

接口说明


使用过程,如果开启了编码规则,且进行了相关代码修改,在业务新增页面应自动带入生成编码,且如果是强制自动的,该编码不可修改,在保存过程,也会重新获取实际编码,进行保存。

使用过程,如果开启了编码规则,且进行了相关代码修改,在业务新增页面应自动带入生成编码,且如果是强制自动的,该编码不可修改,在保存过程,也会重新获取实际编码,进行保存。


[内部]基于MES4.0综合平台【编码规则】使用帮助_第3张图片
组织机构编码使用.png

为支持平台调用,MES综合平台提供了响应的服务接口,主要在CodeRuleService服务中,接口方法包括:

    /// 
    /// 编码规则接口
    /// 
    public interface ICodeRuleService
    {
        /// 
        /// 获取信息
        /// 
        /// 
        /// 
        RuleCodeInfo GetCodeRuleInfo(string ruleCode);
        /// 
        /// 尝试生成编号(不形成记录,即不影响下次生成,编码不递增)
        /// 
        /// 
        /// 
        RuleCode TryCreateCodeByRule(string ruleCode);
        /// 
        /// 尝试生成编号(不形成记录,即不影响下次生成,编码不递增)
        /// 
        /// 
        /// 
        /// 
        RuleCode TryCreateCodeByRule(string ruleCode, 
Dictionary billField);
        /// 
        /// 批量生成编号
        /// 
        /// 
        /// 
        /// 
        RuleCodes TryCreateCodeByRule(string ruleCode, int count);
        /// 
        /// 批量生成编号
        /// 
        /// 
        /// 
        /// 
        /// 
        RuleCodes TryCreateCodeByRule(string ruleCode, int count, 
List> billFields);
        /// 
        /// 正式生成编号(形成记录)
        /// 
        /// 
        /// 
        RuleCode CreateCodeByRule(string ruleCode);
        /// 
        /// 正式生成编号(形成记录)
        /// 
        /// 
        /// 
        /// 
        RuleCode CreateCodeByRule(string ruleCode, 
Dictionary billField);
        /// 
        /// 正式生成编号(形成记录)
        /// 
        /// 
        /// 编码个数
        /// 
        RuleCodes CreateCodeByRule(string ruleCode, int count);
        /// 
        /// 正式生成编号(形成记录)
        /// 
        /// 
        /// 编码个数
        /// 
        /// 
        RuleCodes CreateCodeByRule(string ruleCode, int count, 
List> billFields);
    }

以上分两类接口,测试获取编码和正式获取编码,区别是测试获取主要用于新增界面显示使用,但是在新增过程往往会有并发或者取消新增的过程,所以获取的只是显示编码,正式获取往往是保存那下进行,直接获取直接保存到业务点,使用时请注意区分场景。

接口使用最佳实践


以Asp.Mvc为例,前提是准备了平台集成的相关DLL,并且服务可以调用(不在累述)。

1、新增界面,编码控件初始化时,根据编码规则获取编码(尝试获取,不形成记录,在保存过程中重新获取最后编码进行保存),当然也可以不做处理,强制编码字段不可输入且置灰,等保存时进行填充。

显示编码,JS绑定过程代码如下:

GetCodeByRule: function(orgType) {
     var me = this;

 /*************************编码规范获取Begin************************************/
//通过Ajax请求获取编码规则生成的编码
//如果存在业务字段,那么业务字段以 Name和Value的对象数组进行传递
//此处获取的编码是根据编码规则 当前单据的最新编码,获取后不会进行跳号,只有进行后台保存后才会进行记录
//所以后台保存前,请进行相关重新取号
$.Mes.Ajax.Load({
url: '@Url.Content("~/Common/GetCodeForCreateWithField")',
data: { ruleCode: "OrgCode", billsDictionary: [{ Name: "OrgType", Value: orgType }] },
success: function(ret) {
    if (ret && ret.success) {
           var item = ret.result;
             //判断编码规则是否有效:存在并且开启。
             //如果无效,直接跳过,不影响业务。
            if (item.effective === true) {
            //获取成功后,进行相关字段绑定和是否可修改控制
            if (item.success === true) {
            $("#Code").textbox("setValue", item.code);
                $("#Code").textbox(item.canEdit === true ? "enable" : "disable");
                 me.LastNewCode = item.code;
           } else {
                alert("根据编码规则获取编码失败:" + item.message + ",请联系管理员!");
                //获取失败,阻止继续新增
               if (me.ListNs && me.ListNs.CloseDialog) {
                    me.ListNs.CloseDialog();
                }
               }
         }

     }
}
});
/*************************编码规范获取End************************************/

}

上图中Common/GetCodeForCreateWithField 服务是各个业务系统根据编码规则接口,自己编写的编码生成请求服务。

me.LastNewCode 用于记录该页面最后生成编码,保存时需要一并提交到服务器。

2、在业务保存过程,根据编码规则重新获取编码,并进行保存。

  public JsonResult SaveOrganization(OrganizationInput organizationInput, PageOperate editType, string lastCode)
        {
            OrganizationAllOutPut organization = null;

            if (editType == PageOperate.Create)
            {
                //*************************处理编码编码规则*********************************************
                var ruleCode = _commonAppService.GetCodeRuleInfo("OrgCode");
                if (ruleCode.Exist && ruleCode.Start)
                {
                    if (ruleCode.CanEidt && !lastCode.Equals(organizationInput.Code))
                    {
                        //可以编辑,并且已经编辑的情况,无需在重新获取,按照新编辑的编码进行保存
                    }
                    else
                    {
                        //此处为正式获取,如果有流水号讲进行跳号
                        var code = _commonAppService.CreateCodeByRule("OrgCode",
                            new Dictionary() {{"OrgType", organizationInput.OrgType.ToString()}});

                        //有效存在并且启动,那么根据获取情况进行设置编码或者异常弹出
                        if (code.Effective)
                        {
                            if (code.Success)
                            {
                                organizationInput.Code = code.Code;
                            }
                            else
                            {
                                throw new UserFriendlyException("编码获取失败:" + code.Message);
                            }
                        }

                    }
                }

                organizationInput.CreateMan = LogonManager.Info.LoginId;
                organization = _organizationApplicationService.InsertOrganization(organizationInput);
            }
            else if (editType == PageOperate.Update)
            {
                organizationInput.UpdateMan = LogonManager.Info.LoginId;
                organization = _organizationApplicationService.UpdateOrganization(organizationInput);
            }

            return Json(organization);
        }

其中_commonAppServer为平台编码规则服务对象。

其他问题和备注


有的时候,编码规则进行了多次调整,在使用编码时,会出现提示编码重复的现象,那么需要管理员手工调整规则编辑页面的:【当前流水号】字段,进行流水号后移,保证编码不重复。

你可能感兴趣的:([内部]基于MES4.0综合平台【编码规则】使用帮助)