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

功能设计说明


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

编码规则列表.png

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

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


规则明细.png

字段说明:

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

接口说明


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

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


组织机构编码使用.png

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

    /// <summary>
    /// 编码规则接口
    /// </summary>
    public interface ICodeRuleService
    {
        /// <summary>
        /// 获取信息
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <returns></returns>
        RuleCodeInfo GetCodeRuleInfo(string ruleCode);
        /// <summary>
        /// 尝试生成编号(不形成记录,即不影响下次生成,编码不递增)
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <returns></returns>
        RuleCode TryCreateCodeByRule(string ruleCode);
        /// <summary>
        /// 尝试生成编号(不形成记录,即不影响下次生成,编码不递增)
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="billField"></param>
        /// <returns></returns>
        RuleCode TryCreateCodeByRule(string ruleCode, 
Dictionary<string, string> billField);
        /// <summary>
        /// 批量生成编号
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        RuleCodes TryCreateCodeByRule(string ruleCode, int count);
        /// <summary>
        /// 批量生成编号
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="count"></param>
        /// <param name="billFields"></param>
        /// <returns></returns>
        RuleCodes TryCreateCodeByRule(string ruleCode, int count, 
List<Dictionary<string, string>> billFields);
        /// <summary>
        /// 正式生成编号(形成记录)
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <returns></returns>
        RuleCode CreateCodeByRule(string ruleCode);
        /// <summary>
        /// 正式生成编号(形成记录)
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="billField"></param>
        /// <returns></returns>
        RuleCode CreateCodeByRule(string ruleCode, 
Dictionary<string, string> billField);
        /// <summary>
        /// 正式生成编号(形成记录)
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="count">编码个数</param>
        /// <returns></returns>
        RuleCodes CreateCodeByRule(string ruleCode, int count);
        /// <summary>
        /// 正式生成编号(形成记录)
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="count">编码个数</param>
        /// <param name="billFields"></param>
        /// <returns></returns>
        RuleCodes CreateCodeByRule(string ruleCode, int count, 
List<Dictionary<string, string>> 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<string, string>() {{"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为平台编码规则服务对象。

其他问题和备注


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容