194 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using APT.BaseData.Domain.Entities;
 | 
						|
using APT.BaseData.Domain.Enums;
 | 
						|
using APT.BaseData.Domain.IServices;
 | 
						|
using APT.BaseData.Domain.Msg;
 | 
						|
using APT.Infrastructure.Core;
 | 
						|
using APT.Utility;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using APT.Infrastructure.Api;
 | 
						|
namespace APT.BaseData.Services.DomainServices
 | 
						|
{
 | 
						|
    public partial class PFCodeRuleService : CommonService, IPFCodeRuleService
 | 
						|
    {
 | 
						|
        public PFCodeRuleService(IRepository repository)
 | 
						|
            : base(repository)
 | 
						|
        {
 | 
						|
        }
 | 
						|
        private static object xflag = new object();
 | 
						|
        public string Gen(SystemCodeFilter fiter)
 | 
						|
        {
 | 
						|
 | 
						|
            var returnList = "123";
 | 
						|
            if (fiter.Count < 1)
 | 
						|
                return returnList;
 | 
						|
            returnList = DoGetRuleCode(fiter.CodeType, fiter.OrgId ?? Guid.Empty,
 | 
						|
                fiter.Count, true);
 | 
						|
            return returnList;
 | 
						|
        }
 | 
						|
        public string NewGenSerial(SystemCodeFilter fiter)
 | 
						|
        {
 | 
						|
            var date = DateTime.Now.ToString("yyyyMMdd");
 | 
						|
            lock (xflag)
 | 
						|
            {
 | 
						|
                var baseConfig = this.GetEntityByRedis<T_FM_ORGANIZATION>(fiter.GetOrgId(), fiter.GetOrgId());
 | 
						|
                if (baseConfig == null)
 | 
						|
                    this.ThrowError("010002");
 | 
						|
                var codeRule = this.GetEntityByRedis<T_PF_CODE_RULE>(fiter.CodeType.ToString(), fiter.GetOrgId());
 | 
						|
                if (codeRule == null)
 | 
						|
                    this.ThrowError("020026", fiter.CodeType.ToString());
 | 
						|
                var serialList = new List<string>();
 | 
						|
                var orgCode = codeRule.IS_ORG_CODE ? baseConfig.CODE : "";
 | 
						|
                var tenantCode = codeRule.IS_TENANT_CODE ? baseConfig.TENANT_CODE : "";
 | 
						|
                if (!(codeRule.IS_IGNORE_DATE ?? false))
 | 
						|
                {
 | 
						|
                    if (codeRule.CURRENT_DATA != date)
 | 
						|
                    {
 | 
						|
                        codeRule.NUM = 0;
 | 
						|
                        codeRule.CURRENT_DATA = date;
 | 
						|
                    }
 | 
						|
                    for (int n = 1; n <= fiter.Count; n++)
 | 
						|
                    {
 | 
						|
                        serialList.Add($"{codeRule.CODE_PREFIX}{tenantCode}{orgCode}{date}{(codeRule.NUM + n).PadLeft(codeRule.SERIAL_NUM_LEN, '0')}");
 | 
						|
                    }
 | 
						|
                    codeRule.NUM += fiter.Count;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    for (int n = 1; n <= fiter.Count; n++)
 | 
						|
                    {
 | 
						|
                        serialList.Add($"{codeRule.CODE_PREFIX}{tenantCode}{orgCode}{(codeRule.NUM + n).PadLeft(codeRule.SERIAL_NUM_LEN, '0')}");
 | 
						|
                    }
 | 
						|
                    codeRule.NUM += fiter.Count;
 | 
						|
                }
 | 
						|
                this.UpdateEntity<T_PF_CODE_RULE>(codeRule);
 | 
						|
                return string.Join(',', serialList);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public string NewGenSerialByDb(SystemCodeFilter fiter, string dbConn)
 | 
						|
        {
 | 
						|
            BaseFilter baseFilter = new BaseFilter();
 | 
						|
            baseFilter.IsMultipleDb = true;
 | 
						|
            baseFilter.OrgId = fiter.OrgId;
 | 
						|
            //baseFilter.IgnoreOrgRule = true;
 | 
						|
            var date = DateTime.Now.ToString("yyyyMMdd");
 | 
						|
            lock (xflag)
 | 
						|
            {
 | 
						|
                var baseConfig = this.GetEntity<T_FM_ORGANIZATION>(x => x.ORG_ID == fiter.OrgId, baseFilter);
 | 
						|
                if (baseConfig == null)
 | 
						|
                    this.ThrowError("010002");
 | 
						|
                var codeRule = this.GetEntity<T_PF_CODE_RULE>(x => x.CODE_TYPE == fiter.CodeType, baseFilter);
 | 
						|
                if (codeRule == null)
 | 
						|
                    this.ThrowError("020026", fiter.CodeType.ToString());
 | 
						|
                var serialList = new List<string>();
 | 
						|
                var orgCode = codeRule.IS_ORG_CODE ? baseConfig.CODE : "";
 | 
						|
                var tenantCode = codeRule.IS_TENANT_CODE ? baseConfig.TENANT_CODE : "";
 | 
						|
                if (!(codeRule.IS_IGNORE_DATE ?? false))
 | 
						|
                {
 | 
						|
                    if (codeRule.CURRENT_DATA != date)
 | 
						|
                    {
 | 
						|
                        codeRule.NUM = 0;
 | 
						|
                        codeRule.CURRENT_DATA = date;
 | 
						|
                    }
 | 
						|
                    for (int n = 1; n <= fiter.Count; n++)
 | 
						|
                    {
 | 
						|
                        serialList.Add($"{codeRule.CODE_PREFIX}{tenantCode}{orgCode}{date}{(codeRule.NUM + n).PadLeft(codeRule.SERIAL_NUM_LEN, '0')}");
 | 
						|
                    }
 | 
						|
                    codeRule.NUM += fiter.Count;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    for (int n = 1; n <= fiter.Count; n++)
 | 
						|
                    {
 | 
						|
                        serialList.Add($"{codeRule.CODE_PREFIX}{tenantCode}{orgCode}{(codeRule.NUM + n).PadLeft(codeRule.SERIAL_NUM_LEN, '0')}");
 | 
						|
                    }
 | 
						|
                    codeRule.NUM += fiter.Count;
 | 
						|
                }
 | 
						|
                this.UpdateEntityByConn<T_PF_CODE_RULE>(codeRule, dbConn);
 | 
						|
                return string.Join(',', serialList);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public string NewGenSerialByTenant(SystemCodeFilter fiter, string TenantCode)
 | 
						|
        {
 | 
						|
            BaseFilter baseFilter = new BaseFilter();
 | 
						|
            baseFilter.IsSpecifyDb = true;
 | 
						|
            baseFilter.SpecifyTenant = TenantCode;
 | 
						|
            baseFilter.OrgId = fiter.OrgId;
 | 
						|
            //baseFilter.IgnoreOrgRule = true;
 | 
						|
            var date = DateTime.Now.ToString("yyyyMMdd");
 | 
						|
            lock (xflag)
 | 
						|
            {
 | 
						|
                var baseConfig = this.GetEntity<T_FM_ORGANIZATION>(x => x.ORG_ID == fiter.OrgId, baseFilter);
 | 
						|
                if (baseConfig == null)
 | 
						|
                    this.ThrowError("010002");
 | 
						|
                var codeRule = this.GetEntity<T_PF_CODE_RULE>(x => x.CODE_TYPE == fiter.CodeType, baseFilter);
 | 
						|
                if (codeRule == null)
 | 
						|
                    this.ThrowError("020026", fiter.CodeType.ToString());
 | 
						|
                var serialList = new List<string>();
 | 
						|
                var orgCode = codeRule.IS_ORG_CODE ? baseConfig.CODE : "";
 | 
						|
                var tenantCode = codeRule.IS_TENANT_CODE ? baseConfig.TENANT_CODE : "";
 | 
						|
                if (!(codeRule.IS_IGNORE_DATE ?? false))
 | 
						|
                {
 | 
						|
                    if (codeRule.CURRENT_DATA != date)
 | 
						|
                    {
 | 
						|
                        codeRule.NUM = 0;
 | 
						|
                        codeRule.CURRENT_DATA = date;
 | 
						|
                    }
 | 
						|
                    for (int n = 1; n <= fiter.Count; n++)
 | 
						|
                    {
 | 
						|
                        serialList.Add($"{codeRule.CODE_PREFIX}{tenantCode}{orgCode}{date}{(codeRule.NUM + n).PadLeft(codeRule.SERIAL_NUM_LEN, '0')}");
 | 
						|
                    }
 | 
						|
                    codeRule.NUM += fiter.Count;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    for (int n = 1; n <= fiter.Count; n++)
 | 
						|
                    {
 | 
						|
                        serialList.Add($"{codeRule.CODE_PREFIX}{tenantCode}{orgCode}{(codeRule.NUM + n).PadLeft(codeRule.SERIAL_NUM_LEN, '0')}");
 | 
						|
                    }
 | 
						|
                    codeRule.NUM += fiter.Count;
 | 
						|
                }
 | 
						|
                this.UpdateEntityByTenant<T_PF_CODE_RULE>(codeRule, tenantCode);
 | 
						|
                return string.Join(',', serialList);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public string GenNoUpdate(SystemCodeFilter fiter)
 | 
						|
        {
 | 
						|
            var returnList = "";
 | 
						|
            if (fiter.Count < 1)
 | 
						|
                return returnList;
 | 
						|
            returnList = DoGetRuleCode(fiter.CodeType, fiter.OrgId ?? Guid.Empty,
 | 
						|
                fiter.Count, false);
 | 
						|
            return returnList;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 获取 编号 (默认 1个  消息类型)
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="orgId"></param>
 | 
						|
        /// <param name="codeType"></param>
 | 
						|
        /// <param name="count"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public string GetCodeTypeRuleCode(Guid? orgId, int codeType = 5, int count = 1)
 | 
						|
        {
 | 
						|
            if (orgId == null)
 | 
						|
            {
 | 
						|
                orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
 | 
						|
            }
 | 
						|
            return DoGetRuleCode(codeType, orgId.Value, count, true);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        private string DoGetRuleCode(int codeType, Guid orgId, int count, bool isUpdate)
 | 
						|
        {
 | 
						|
            CodeRuleParam param = new CodeRuleParam();
 | 
						|
            param.CodeType = codeType;
 | 
						|
            param.Count = count;
 | 
						|
            param.OrgId = orgId;
 | 
						|
            return this.GetRuleCodes(param);
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 |