/// <summary> /// 码申请处理申请工作 /// </summary> /// <param name="codeApply">码申请信息</param> /// <param name="ct"></param> public static void ApplyGenerateWork(CodeApply codeApply, CancellationToken ct) { CodeService.logger.Log(LogLevel.Info, $"处理码申请Id:{codeApply.ApplyId},申请工作"); #region 初始化码申请码规则处理表ApplyRuleProcess数据 //获取码规则ID int[] ruleIds = Array.ConvertAll <string, int>(codeApply.CodeRulesIDs.Split(new char[] { '|' }), int.Parse); //获取处理程序 List <ApplyRuleProcess> allApplyRuleProcess = ApplyRuleProcessFactory.Instance.GetCodeRuleByApplyId(codeApply.ApplyId); for (int i = 0; i < ruleIds.Length; i++) { if (allApplyRuleProcess.Count <= i) { //生成APPLY - RULE - PROCESSOR ApplyRuleProcess ruleProcess = new ApplyRuleProcess() { ApplyId = codeApply.ApplyId, CodeRuleId = ruleIds[i], Status = ApplyRuleStatus.None, AttributeInfo = string.Empty, EndCode = string.Empty, FirstCode = string.Empty }; ApplyRuleProcessFactory.Instance.Add(ruleProcess); } } #endregion ApplyProcesser applyProcess = new ApplyProcesser(codeApply); applyProcess.LoadData(); applyProcess.ApplyGenerate(); codeApply.ProcessType = ProcessType.Applied; CodeService.logger.Log(LogLevel.Info, $"完成码申请Id:{codeApply.ApplyId},申请工作"); }
///// <summary> ///// 生成码信息 ///// </summary> //public void Generate() //{ // List<List<string>> rulersResult = new List<List<string>>(); // List<string> allCode = new List<string>(); // for(int i=0;i<this.segRulers.Count;i++) // { // rulersResult.Add(this.segRulers[i].Generate(this.codeApply.ApplyAmount * this.outerPackageRatios[i])); // } // if (this.segRulers.Count > 1) // { // for (int i = 0; i < this.codeApply.ApplyAmount; i++) // { // for (int j = 0; j < this.segRulers.Count; j++) // { // for (int k = 0; k < this.outerPackageRatios[j]; k++) // { // allCode.Add(rulersResult[j][i * this.outerPackageRatios[j] + k]); // } // } // } // } // else // { // allCode = rulersResult[0]; // } // ////#region测试代码 // //Dictionary<string, object> extentDictionary = new Dictionary<string, object>(); // //extentDictionary.Add("ExtentName","TEST"); // //extentDictionary.Add("ExtentType", "TestType"); // //List<Acctrue.CMC.Model.Report.ActivityCodes> activityCodes = allCode.Select(s => new Acctrue.CMC.Model.Report.ActivityCodes() { Code=s, Extent=extentDictionary }).ToList(); // //string activeStr = Newtonsoft.Json.JsonConvert.SerializeObject(activityCodes); // //CodeActiveUploadFactory.Instance.InsertNewActive(new Model.Systems.AppSettingInfo() { AppID="1", AppSettingID=1, AppStatus=0, CorpCode="1", CorpName="TEST", CreatedDate=DateTime.Now, SubCorpCode="01" }, new Model.Request.UploadActiveRequest() { ApplyId=33, ActiveName="激活", Memo="", ProductCode="01", WorkLine="01", ProductName="TEST", File= Tools.SerializeZipCode(activeStr) }); // ////#endregion // InnerCodeFileRecord record = new InnerCodeFileRecord(); // record.ApplyId = codeApply.ApplyId; // record.Content = Tools.SerializeZipCode(allCode); // CodeDownloadFactory.Instance.AddInnerCodeFiledRecord(record); // //更新码申请记录状态完成 // codeApply.ApplyStatus = ApplyStatus.Completed; // codeApply.ProcessType = ProcessType.Completed; // CodeApplyFactory.Instance.Update(codeApply); //} /// <summary> /// 将生成后的码信息逐个存储于mongodb /// </summary> ///<param name="ct">工作取消令牌</param> public void SaveBySingleCode(CancellationToken ct) { InnerCodeFileRecord record = CodeDownloadFactory.Instance.GetInnerCodeFileRecord(codeApply.ApplyId); //处理码格式 List <string> codes = new List <string>(); List <string> originCodes = Tools.DeserializeZipCode(Convert.ToBase64String(record.Content)); foreach (string oriCode in originCodes) { codes.Add(oriCode.Split(new char[] { '/' }).LastOrDefault()); } List <ApplyCodes> applyCodes = new List <ApplyCodes>(); ApplyRuleProcess applyRuleProcess = ApplyRuleProcessFactory.Instance.GetCodeRuleByApplyIdRuleId(this.codeApply.ApplyId, 0); if (applyRuleProcess == null) { applyRuleProcess = new ApplyRuleProcess() { ApplyId = this.codeApply.ApplyId, CodeRuleId = 0, FirstCode = codes[1], EndCode = codes[codes.Count - 1], Status = ApplyRuleStatus.None, AttributeInfo = "0" }; ApplyRuleProcessFactory.Instance.Add(applyRuleProcess); } int lastLineIndex = 0; int.TryParse(applyRuleProcess.AttributeInfo, out lastLineIndex); if (lastLineIndex < codes.Count - 1) { for (int i = lastLineIndex; i < codes.Count - 1; i++) { applyCodes.Clear(); for (int j = 0; j < BatchSize && i < codes.Count - 1; j++, i++) { applyCodes.Add(new ApplyCodes() { AppId = codeApply.ApplyAppId, ApplyId = codeApply.ApplyId, ApplyType = codeApply.ApplyType, Code = codes[i + 1], CorpCode = codeApply.CorpCode, CorpName = codeApply.CorpName, CreateDate = codeApply.AuditDate == null ? DateTime.Now : (DateTime)codeApply.AuditDate, ProduceWorkline = codeApply.ProduceWorkLine, ProductCode = codeApply.ProductCode, ProductName = codeApply.ProductName, SubCorpCode = codeApply.ApplySubCorpCode, UseCorpCode = codeApply.UseCorpCode, UseCorpName = codeApply.UseCorpName, UseSubCorpCode = codeApply.UseSubCorpCode }); } ; ApplyCodesFactory.Instance.BatchAdd(applyCodes); applyRuleProcess.AttributeInfo = i.ToString(); ApplyRuleProcessFactory.Instance.Update(applyRuleProcess); i--; } } //更新状态 applyRuleProcess.Status = ApplyRuleStatus.Completed; ApplyRuleProcessFactory.Instance.Update(applyRuleProcess); for (int i = 0; i < this.segRulers.Count; i++) { if (applyRuleProcessDict[this.segRulers[i]].Status == ApplyRuleStatus.Stored) { applyRuleProcessDict[this.segRulers[i]].Status = ApplyRuleStatus.Completed; ApplyRuleProcessFactory.Instance.Update(applyRuleProcessDict[this.segRulers[i]]); } } }