using SqlSugar; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using TouchSocket.Core; using WCS.BLL.DbModels; using WCS.BLL.Services.IService; using WCS.DAL; using WCS.DAL.Db; using WCS.Model; using WCS.Model.ApiModel; using WCS.Model.ApiModel.MatBaseInfo; using WCS.Model.ApiModel.User; namespace WCS.BLL.Services.Service { /// /// 需要生成序列号保证不重复的方法 /// public class GenerateService : IGenerateService { public static object matFlag = new object(); public static object stockTakingFlag = new object(); public async Task>> generateMatInfo(GenerateMatInfoRequest request) { //校验是否被禁用 var matBaseInfo = await DbHelp.db.Queryable() .Where(t => t.Id == request.MatBaseInfo.Id) .FirstAsync(); if (matBaseInfo == null) { return new ResponseCommon>() { Code = 201, Message = $"生成失败:该物料基础信息不存在", Data = null }; } else if (matBaseInfo.IsEnable == false) { return new ResponseCommon>() { Code = 201, Message = $"生成失败:该物料已被禁用", Data = null }; } //生成条码 lock (matFlag) { try { DbHelp.db.BeginTran(); var startNumber = matBaseInfo.SerialNumber++; var matInfoList = new List(); for (var i = 0; i < request.TotalCount; i++) { var matInfo = new MatInfo() { MatSn = GetMatSn(matBaseInfo, startNumber + i), MatCode = matBaseInfo.MatCode, MatName = matBaseInfo.MatName, MatBatch = matBaseInfo.MatBatch, MatSpec = matBaseInfo.MatSpec, MatUnit = matBaseInfo.MatUnit, MatSupplier = matBaseInfo.MatSupplier, MatCustomer = matBaseInfo.MatCustomer, MatQty = request.MatQty, ModifyUser = request.UserName }; matInfoList.Add(matInfo); } DbHelp.db.Insertable(matInfoList).ExecuteCommand(); matBaseInfo.SerialNumber = startNumber + request.TotalCount; DbHelp.db.Updateable(matBaseInfo).ExecuteCommand(); DbHelp.db.CommitTran(); return new ResponseCommon>() { Code = 200, Message = "success", Data = matInfoList }; } catch (Exception ex) { DbHelp.db.RollbackTran(); return new ResponseCommon>() { Code = 201, Message = $"生成失败:{ex.Message}", Data = null }; } } } private string GetMatSn(MatBaseInfo matBaseInfo, int serialNumber) { var gongshi = "=A1&\"-\"&A2&A3"; //var matSn = matBaseInfo.MatCode + matBaseInfo.MatBatch + serialNumber.ToString().PadLeft(6, '0'); Dictionary keyValuePairs = new Dictionary(); keyValuePairs.Add("A1", matBaseInfo.MatCode); keyValuePairs.Add("A2", matBaseInfo.MatName); keyValuePairs.Add("A3", serialNumber.ToString().PadLeft(6, '0')); var matSn = PnHelp.Jx(gongshi, keyValuePairs); return matSn; } public async Task generateStockTakingNumber() { lock (stockTakingFlag) { Thread.Sleep(1); return "PD" + DateTime.Now.ToString("yyMMddHHmmssfff"); } } public async Task generateOutOrderNumber() { lock (stockTakingFlag) { Thread.Sleep(1); return "CK" + DateTime.Now.ToString("yyMMddHHmmssfff"); } } } }