130 lines
4.6 KiB
C#
130 lines
4.6 KiB
C#
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.AuthDbModel;
|
|
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
|
|
{
|
|
|
|
/// <summary>
|
|
/// 需要生成序列号保证不重复的方法
|
|
/// </summary>
|
|
public class GenerateService : IGenerateService
|
|
{
|
|
public static object matFlag = new object();
|
|
|
|
public static object stockTakingFlag = new object();
|
|
public async Task<ResponseCommon<List<MatInfo>>> generateMatInfo(GenerateMatInfoRequest request)
|
|
{
|
|
//校验是否被禁用
|
|
var matBaseInfo = await DbHelp.db.Queryable<MatBaseInfo>()
|
|
.Where(t => t.Id == request.MatBaseInfo.Id)
|
|
.FirstAsync();
|
|
if (matBaseInfo == null)
|
|
{
|
|
return new ResponseCommon<List<MatInfo>>()
|
|
{
|
|
Code = 201,
|
|
Message = $"生成失败:该物料基础信息不存在",
|
|
Data = null
|
|
};
|
|
}
|
|
else if (matBaseInfo.IsEnable == false)
|
|
{
|
|
return new ResponseCommon<List<MatInfo>>()
|
|
{
|
|
Code = 201,
|
|
Message = $"生成失败:该物料已被禁用",
|
|
Data = null
|
|
};
|
|
}
|
|
|
|
//生成条码
|
|
lock (matFlag)
|
|
{
|
|
try
|
|
{
|
|
DbHelp.db.BeginTran();
|
|
var startNumber = matBaseInfo.SerialNumber++;
|
|
var matInfoList = new List<MatInfo>();
|
|
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<List<MatInfo>>()
|
|
{
|
|
Code = 200,
|
|
Message = "success",
|
|
Data = matInfoList
|
|
};
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
DbHelp.db.RollbackTran();
|
|
return new ResponseCommon<List<MatInfo>>()
|
|
{
|
|
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<string, string> keyValuePairs = new Dictionary<string, string>();
|
|
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<string> generateStockTakingNumber()
|
|
{
|
|
lock (stockTakingFlag)
|
|
{
|
|
Thread.Sleep(1);
|
|
return "PD" + DateTime.Now.ToString("yyMMddHHmmssfff");
|
|
}
|
|
}
|
|
}
|
|
}
|