224 lines
8.7 KiB
C#
224 lines
8.7 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Net.Sockets;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using JNPF.Common.Core.Manager;
|
||
using JNPF.Common.Dtos.VisualDev;
|
||
using JNPF.Common.Security;
|
||
using JNPF.DependencyInjection;
|
||
using JNPF.FriendlyException;
|
||
using JNPF.Logging;
|
||
using JNPF.Systems.Interfaces.System;
|
||
using JNPF.VisualDev;
|
||
using Mapster;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using Newtonsoft.Json;
|
||
using NPOI.OpenXmlFormats;
|
||
using NPOI.OpenXmlFormats.Dml.Diagram;
|
||
using Org.BouncyCastle.Utilities.Net;
|
||
using SqlSugar;
|
||
using Tnb.BasicData.Entities;
|
||
using Tnb.Common.Utils;
|
||
using Tnb.QcMgr.Entities;
|
||
using Tnb.QcMgr.Entities.Enums;
|
||
using Tnb.QcMgr.Interfaces;
|
||
using Tnb.WarehouseMgr.Entities;
|
||
using Tnb.WarehouseMgr.Entities.Consts;
|
||
using Tnb.WarehouseMgr.Entities.Dto;
|
||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||
using Tnb.WarehouseMgr.Interfaces;
|
||
|
||
namespace Tnb.WarehouseMgr
|
||
{
|
||
/// <summary>
|
||
/// 采购收货
|
||
/// </summary>
|
||
[OverideVisualDev(ModuleConsts.MODULE_WMSPURCHASE_ID)]
|
||
public class WmsPurchaseService : WmsPurchaseAndSaleCommonService<WmsPurchaseD>, IWmsPurchaseService
|
||
{
|
||
private readonly IBillRullService _billRullService;
|
||
private readonly ISqlSugarClient _db;
|
||
private readonly IUserManager _userManager;
|
||
public WmsPurchaseService(ISqlSugarRepository<WmsPurchaseH> repo, IUserManager userManager, IQcCheckPlanService qcCheckPlanService)
|
||
: base(repo, userManager, qcCheckPlanService)
|
||
{
|
||
_db = repo.AsSugarClient();
|
||
_userManager = userManager;
|
||
}
|
||
|
||
private async Task<dynamic> xxx(VisualDevModelDataCrInput input)
|
||
{
|
||
PurchaseAndReceiveUpInput input2 = new();
|
||
var input3 = input.data.ToObject<PurchaseAndReceiveUpInput>();
|
||
input3.details = input.data["tablefield177"].ToObject<List<WmsPurchaseD>>();
|
||
var sss = JsonConvert.SerializeObject(input3);
|
||
return await Task.FromResult(sss);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 采购收货
|
||
/// </summary>
|
||
/// <param name="input"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<dynamic> Purchase(PurchaseAndReceiveUpInput input)
|
||
{
|
||
var blFlag = true;
|
||
try
|
||
{
|
||
|
||
|
||
await _db.Ado.BeginTranAsync();
|
||
WmsInstockH? instock = null;
|
||
var purchaseDs = await PurchaseAndSaleUpdate(input);
|
||
List<WmsInstockD> instockDs = new();
|
||
if (purchaseDs?.Count > 0)
|
||
{
|
||
instock = input.Adapt<WmsInstockH>();
|
||
instock.id = SnowflakeIdHelper.NextId();
|
||
instock.bill_code = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_INSTOCK_ENCODE);
|
||
instock.create_id = _userManager.UserId;
|
||
instock.create_time = DateTime.Now;
|
||
instock.org_id = _userManager.User.OrganizeId;
|
||
if (instock.source_code != null) {
|
||
instock.sync_status = WmsWareHouseConst.SYNC_STATUS__NOTSYNC;
|
||
}
|
||
else {
|
||
instock.sync_status = WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC;
|
||
}
|
||
instock.audit_status = 0;
|
||
instock.print_status = "0";
|
||
instock.is_check = 0;
|
||
await _db.Insertable(instock).ExecuteCommandAsync();
|
||
|
||
instockDs = purchaseDs.Adapt<List<WmsInstockD>>();
|
||
instockDs.ForEach(instockD =>
|
||
{
|
||
instockD.bill_id =instock.id;
|
||
instockD.create_id = _userManager.UserId;
|
||
instockD.create_time = DateTime.Now;
|
||
instockD.org_id = _userManager.User.OrganizeId;
|
||
});
|
||
await _db.Insertable(instockDs).ExecuteCommandAsync();
|
||
}
|
||
//通知Mes接口
|
||
//_ = SyncMesData(instock.id, instockDs.Select(x => x.material_id).ToList(), EnumTriggerEvent.入厂检按物料编号);
|
||
await _db.Ado.CommitTranAsync();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
blFlag = false;
|
||
await _db.Ado.RollbackTranAsync();
|
||
Log.Error("采购收货失败", ex);
|
||
throw;
|
||
}
|
||
return await Task.FromResult(blFlag);
|
||
}
|
||
/// <summary>
|
||
/// 根据主表Id获取采购收货明细
|
||
/// </summary>
|
||
/// <param name="id">主表Id</param>
|
||
/// <returns></returns>
|
||
[HttpGet("id")]
|
||
public async Task<dynamic> GetPurchaseDetailByBillId(string id)
|
||
{
|
||
return await GetDetailsByPkId(id);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 审核反审核
|
||
/// </summary>
|
||
/// <param name="input">
|
||
///
|
||
/// </param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<bool> Audit(PurchaseAndSaleAuditUpInput input)
|
||
{
|
||
return await Audit<WmsPurchaseH>(input);
|
||
}
|
||
/// <summary>
|
||
/// mes 检验完后通知wms(采购) 回调接口
|
||
/// </summary>
|
||
/// <param name="input">
|
||
/// </param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<dynamic> MesCheckdPurchaseCallback(MesCheckdCallbackUpinput input)
|
||
{
|
||
return await UpdateChackStatus<WmsInstockH>(input);
|
||
}
|
||
|
||
[HttpPost]
|
||
public async Task BarCodePrint(BarCodeInput input)
|
||
{
|
||
if (input == null)
|
||
{
|
||
throw new AppFriendlyException(nameof(input), 500);
|
||
}
|
||
List<string> barcodes = new();
|
||
try
|
||
{
|
||
await _db.Ado.BeginTranAsync();
|
||
if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any())
|
||
{
|
||
throw new AppFriendlyException("条码已生成", 500);
|
||
};
|
||
WmsPurchaseD WmsPurchaseD = await _db.Queryable<WmsPurchaseD>().Where(it => input.BillId == it.id).FirstAsync();
|
||
List<WmsTempCode> wmsTempCodes = new();
|
||
decimal? minPacking = (await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == WmsPurchaseD.material_id))?.minpacking;
|
||
int codeNum = 0;
|
||
|
||
if (minPacking.HasValue && minPacking.Value > 0)
|
||
{
|
||
int mod = (int)(WmsPurchaseD.purchase_arriveqty % minPacking.Value);
|
||
codeNum = (int)(mod > 0 ? (WmsPurchaseD.purchase_arriveqty / minPacking.Value) + 1 : WmsPurchaseD.purchase_arriveqty / minPacking.Value);
|
||
|
||
for (int j = 0; j < codeNum; j++)
|
||
{
|
||
int index = j + 1;
|
||
string code = $"{WmsPurchaseD.material_code}-{WmsPurchaseD.code_batch}-{index.ToString().PadLeft(4, '0')}";
|
||
WmsTempCode barCode = new()
|
||
{
|
||
material_id = WmsPurchaseD.material_id,
|
||
material_code = WmsPurchaseD.material_code,
|
||
barcode = code,
|
||
code_batch = WmsPurchaseD.code_batch,
|
||
material_specification = WmsPurchaseD.material_specification,
|
||
container_no = WmsPurchaseD.container_no,
|
||
codeqty = minPacking,
|
||
unit_id = WmsPurchaseD.unit_id,
|
||
is_lock = 0,
|
||
is_end = 0,
|
||
require_id = WmsPurchaseD.id,
|
||
require_code = WmsPurchaseD.id,
|
||
create_id = _userManager.UserId,
|
||
create_time = DateTime.Now
|
||
};
|
||
if (index == codeNum)
|
||
barCode.codeqty = mod == 0 ? minPacking : mod;
|
||
wmsTempCodes.Add(barCode);
|
||
}
|
||
await _db.Insertable(wmsTempCodes).ExecuteCommandAsync();
|
||
}
|
||
await _db.Ado.CommitTranAsync();
|
||
barcodes.AddRange(wmsTempCodes.Select(p => p.barcode).ToList());
|
||
if (barcodes?.Count > 0)
|
||
{
|
||
var ip= _db.Queryable<BasFactoryConfig>().Where(p=>p.key== "printerip").FirstAsync().Result.value;
|
||
base.BarCodePrint(barcodes, 1, ip);
|
||
}
|
||
}
|
||
|
||
|
||
catch (Exception)
|
||
{
|
||
await _db.Ado.RollbackTranAsync();
|
||
throw;
|
||
}
|
||
}
|
||
}
|
||
}
|