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
{
///
/// 采购收货
///
[OverideVisualDev(ModuleConsts.MODULE_WMSPURCHASE_ID)]
public class WmsPurchaseService : WmsPurchaseAndSaleCommonService, IWmsPurchaseService
{
private readonly IBillRullService _billRullService;
private readonly ISqlSugarClient _db;
private readonly IUserManager _userManager;
public WmsPurchaseService(ISqlSugarRepository repo, IUserManager userManager, IQcCheckPlanService qcCheckPlanService, IBillRullService billRullService)
: base(repo, userManager, qcCheckPlanService)
{
_db = repo.AsSugarClient();
_userManager = userManager;
_billRullService = billRullService;
}
private async Task xxx(VisualDevModelDataCrInput input)
{
PurchaseAndReceiveUpInput input2 = new();
var input3 = input.data.ToObject();
input3.details = input.data["tablefield177"].ToObject>();
var sss = JsonConvert.SerializeObject(input3);
return await Task.FromResult(sss);
}
///
/// 采购收货
///
///
///
[HttpPost]
public async Task Purchase(PurchaseAndReceiveUpInput input)
{
var blFlag = true;
try
{
await _db.Ado.BeginTranAsync();
WmsInstockH? instock = null;
var purchaseDs = await PurchaseAndSaleUpdate(input);
List instockDs = new();
if (purchaseDs?.Count > 0)
{
instock = input.Adapt();
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>();
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);
}
///
/// 根据主表Id获取采购收货明细
///
/// 主表Id
///
[HttpGet("id")]
public async Task GetPurchaseDetailByBillId(string id)
{
return await GetDetailsByPkId(id);
}
///
/// 审核反审核
///
///
///
///
///
[HttpPost]
public async Task Audit(PurchaseAndSaleAuditUpInput input)
{
return await Audit(input);
}
///
/// mes 检验完后通知wms(采购) 回调接口
///
///
///
///
[HttpPost]
public async Task MesCheckdPurchaseCallback(MesCheckdCallbackUpinput input)
{
return await UpdateChackStatus(input);
}
[HttpPost]
public async Task BarCodePrint(BarCodeInput input)
{
if (input == null)
{
throw new AppFriendlyException(nameof(input), 500);
}
List barcodes = new();
try
{
await _db.Ado.BeginTranAsync();
if (_db.Queryable().Where(it => input.BillId == it.require_id).Any())
{
throw new AppFriendlyException("条码已生成", 500);
};
WmsPurchaseD WmsPurchaseD = await _db.Queryable().Where(it => input.BillId == it.id).FirstAsync();
List wmsTempCodes = new();
decimal? minPacking = (await _db.Queryable().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')}";
// 变更加流水号
string watercode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PURCHASE_MAT_ENCODE);
string code = $"CGSH{watercode}";
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().Where(p=>p.key== "printerip").FirstAsync().Result.value;
base.BarCodePrint(barcodes, 1, ip);
}
}
catch (Exception)
{
await _db.Ado.RollbackTranAsync();
throw;
}
}
}
}