using HH.Redis.ReisModel; using HH.WMS.BLL.Interface; using HH.WMS.Common; using HH.WMS.DAL; using HH.WMS.DAL.Basic; using HH.WMS.DAL.InStock; using HH.WMS.Entitys; using HH.WMS.Entitys.Algorithm; using HH.WMS.Entitys.Basic; using HH.WMS.Entitys.Common; using HH.WMS.Entitys.Entitys; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HH.WMS.BLL.InStock { public class TN_WM_INSPECTBLL : DapperBaseBLL { #region 新增检验单 /// /// 新增检验单 /// /// 检验单实体 /// public OperateResult AddInspect(TN_WM_INSPECT_MSTEntity Entity, RedisUserEntity t) { //子表数据集合 List DTLEntity = Entity.DTLEntity; OperateResult operateResult = UseTransaction(trans => { //新增主表 CreateDAL>().Add(Entity, trans); //新增子表 CreateDAL>().AddRange(DTLEntity, trans); }); return operateResult; } #endregion #region 修改检验单 /// /// 修改检验单 /// /// 检验单实体 /// public OperateResult UpdateInspect(TN_WM_INSPECT_MSTEntity entity) { //子表数据集合 List DTLEntity = entity.DTLEntity; OperateResult operateResult = UseTransaction(trans => { //修改主表 CreateDAL>().Update(entity, new { CN_S_INSPECT_NO = entity.CN_S_INSPECT_NO }, trans); //删除子表 CreateDAL>().Delete(new { CN_S_INSPECT_NO = entity.CN_S_INSPECT_NO }, trans); //新增子表 CreateDAL>().AddRange(DTLEntity, trans); //修改主表状态为已检验 CreateDAL>().Update(new { CN_S_STATE = Constants.State_BeenCheck }, new { CN_S_INSPECT_NO = entity.CN_S_INSPECT_NO }, trans); }); return operateResult; } #endregion #region 查询检验单列表 /// /// 查询检验单列表 /// /// 实体 /// public OperateResult GetInspectList(SearchModel searchModel) { return CreateDAL().GetInspectList(searchModel); } #endregion #region 根据单号获取主子表信息 /// /// 根据单号获取主子表信息 /// /// /// public TN_WM_INSPECT_MSTEntity GetInspectMstAndDtl(string inspectNo) { TN_WM_INSPECT_MSTEntity inMstEntity = CreateDAL>().GetSingleEntity(new { CN_S_INSPECT_NO = inspectNo }); List inDtlEntity = CreateDAL>().GetList(new { CN_S_INSPECT_NO = inspectNo }); inMstEntity.DTLEntity = inDtlEntity; return inMstEntity; } #endregion #region 检验单送检 /// /// 检验单送检 /// /// 检验单号 /// 送检员 /// 送检部门 /// public OperateResult InspectBeenTest(string inspectNo, string operatorName, string inspectDept) { return CreateDAL().InspectBeenTest(inspectNo, operatorName, inspectDept); } #endregion #region 提交检验单 /// /// 提交检验单 /// /// /// public OperateResult SubmitInspect(List entity) { List ArrivalNoList = new List(); List InspectNoList = new List(); string inspectNoStr = ""; foreach (var itemExamine in entity) { InspectNoList.Add(itemExamine.CN_S_FROM_NO); inspectNoStr = inspectNoStr + "'" + itemExamine.CN_S_FROM_NO + "',"; //获取检验单实体 TN_WM_INSPECT_MSTEntity inMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_INSPECT_NO = itemExamine.CN_S_FROM_NO }); if (inMst == null) { return OperateResult.Error("未获取到检验单实体!"); } ArrivalNoList.Add(inMst.CN_S_FROM_NO); } if (!string.IsNullOrEmpty(inspectNoStr)) { inspectNoStr = inspectNoStr.Substring(1, inspectNoStr.Length - 3);//获取数据类似: 123,'123,'321 } //增加库存业务主表 List mstEntityList = new List(); //到货是否启用OMS对接 string isUseOms = ""; foreach (var arrivalNo in ArrivalNoList) { TN_WM_INCREASE_INVENTORY_MSTEntity mstentity = new TN_WM_INCREASE_INVENTORY_MSTEntity(); // 生成入库单号--调用AutoBom接口,传递 单据规则名称 所属机构 string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_In + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}"; string opNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); if (string.IsNullOrEmpty(opNo)) { return OperateResult.Error("生成入库单据编码失败!"); } TN_WM_ARRIVAL_MSTEntity arrivalMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_ARRIVAL_NO = arrivalNo }); if (string.IsNullOrEmpty(arrivalMst.CN_S_ARRIVAL_NO)) continue; //到货是否启用OMS对接 isUseOms = GetStrategy(arrivalMst.CN_S_STOCK_CODE, StrategyKey.IsUseOms); string mstguid = System.Guid.NewGuid().ToString().ToUpper(); #region 增加库存业务主表实体 mstentity.CN_GUID = mstguid; mstentity.CN_S_CREATOR = entity[0].CN_S_CREATOR; mstentity.CN_S_CREATOR_BY = entity[0].CN_S_CREATOR_BY; mstentity.CN_T_CREATE = DateTime.Now; mstentity.CN_S_MODIFY = entity[0].CN_S_CREATOR; mstentity.CN_S_MODIFY_BY = entity[0].CN_S_CREATOR_BY; mstentity.CN_T_MODIFY = DateTime.Now; mstentity.CN_S_OWNER = arrivalMst.CN_S_OWNER; mstentity.CN_S_FROM_NO = arrivalMst.CN_S_ARRIVAL_NO; //到货单号 mstentity.CN_S_NOTE = arrivalMst.CN_S_NOTE; mstentity.CN_S_OP_FROM = "到货单"; mstentity.CN_S_OP_NO = opNo; mstentity.CN_S_OP_TYPE = arrivalMst.CN_S_OP_TYPE; mstentity.CN_S_STATE = Constants.State_New; mstentity.CN_S_LOT_NO = arrivalMst.CN_S_LOT_CODE; mstentity.CN_S_STOCK_CODE = arrivalMst.CN_S_STOCK_CODE; mstentity.CN_T_OPERATE = DateTime.Now; mstentity.CN_S_VENDOR_NO = arrivalMst.CN_S_VENDOR_NO; mstentity.CN_S_VENDOR_NAME = arrivalMst.CN_S_VENDOR_NAME; mstentity.CN_S_OPERATOR = entity[0].CN_S_CREATOR;//制单人 #endregion //获取到货单子表 List arrivalDtlList = BLLCreator.Create>().GetList(new { CN_S_ARRIVAL_NO = arrivalNo }); //获取检验单子表 List inspectDtlList = BLLCreator.Create>().GetList(new { CN_S_FROM_NO = arrivalNo }); //库存业务子表 List dtlentityList = new List(); foreach (var itemDtl in arrivalDtlList) { #region 增加库存业务子表实体 TN_AB_B_ITEM_PRICEEntity item = CreateDAL().GetItemPriceModel(itemDtl.CN_S_ITEM_CODE); TN_WM_INCREASE_INVENTORY_DTLEntity dtlentity = new TN_WM_INCREASE_INVENTORY_DTLEntity(); List dtlModel = inspectDtlList.Where(t => t.CN_N_ROW_NO == itemDtl.CN_N_ROW_NO).ToList(); if (dtlModel.Count == 0) { return OperateResult.Error("未找到检验单子表数据!"); } dtlentity.CN_F_QUANTITY = decimal.Parse(dtlModel[0].CN_F_QUALIFIED.ToString()); dtlentity.CN_S_ARRIVAL_QTY = itemDtl.CN_F_QUANTITY.ToString(); dtlentity.CN_S_ITEM_CODE = itemDtl.CN_S_ITEM_CODE; dtlentity.CN_S_ITEM_NAME = itemDtl.CN_S_ITEM_NAME; dtlentity.CN_S_ITEM_STATE = itemDtl.CN_S_ITEM_STATE; dtlentity.CN_S_OP_NO = opNo; dtlentity.CN_N_ROW_NO = itemDtl.CN_N_ROW_NO; dtlentity.CN_S_SERIAL_NO = itemDtl.CN_S_SERIAL_NO; dtlentity.CN_S_NOTE = itemDtl.CN_S_NOTE; dtlentity.CN_F_PLAN_PRICE = Convert.ToDecimal(item == null ? "0" : item.CN_F_PRICE); dtlentity.CN_F_PLAN_MONEY = Convert.ToDecimal(item == null ? "0" : item.CN_F_PRICE) * decimal.Parse(dtlModel[0].CN_F_QUALIFIED.ToString()); dtlentity.CN_F_ACTUAL_PRICE = decimal.Parse(string.IsNullOrEmpty(itemDtl.CN_F_PURCHASE_PRICE.ToString()) ? "0" : itemDtl.CN_F_PURCHASE_PRICE.ToString()); ; dtlentity.CN_F_ACTUAL_MONEY = dtlentity.CN_F_ACTUAL_PRICE * decimal.Parse(dtlModel[0].CN_F_QUALIFIED.ToString()); dtlentity.CN_S_FIGURE_NO = itemDtl.CN_S_FIGURE_NO; dtlentity.CN_S_MODEL = itemDtl.CN_S_MODEL; dtlentity.CN_S_MEASURE_UNIT = itemDtl.CN_S_MEASURE_UNIT; dtlentity.CN_C_IS_BALANCE = "N"; dtlentity.CN_C_IS_SCRAP = "N"; dtlentity.CN_F_UPSHELF_QTY = 0; dtlentity.CN_F_ALLOT_QTY = 0; dtlentity.CN_F_PRINTING_QTY = 0; dtlentity.CN_F_ADD_ONTRAY_QTY = 0; dtlentity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper(); dtlentity.CN_S_MSTGUID = mstguid; dtlentity.CN_S_CREATOR = entity[0].CN_S_CREATOR; dtlentity.CN_S_CREATOR_BY = entity[0].CN_S_CREATOR_BY; dtlentity.CN_T_CREATE = DateTime.Now; dtlentity.CN_S_MODIFY = entity[0].CN_S_CREATOR; dtlentity.CN_S_MODIFY_BY = entity[0].CN_S_CREATOR_BY; dtlentity.CN_T_MODIFY = DateTime.Now; dtlentityList.Add(dtlentity); #endregion } mstentity.DTLEntity = dtlentityList; mstEntityList.Add(mstentity); } OperateResult operateResult = UseTransaction(trans => { //是否启用OMS对接----WMS检验单提交调用OMS接口更新采购订单待检验数量 if (isUseOms.Equals("Y")) { OperateResult Qir = new InfOMSRequest().InspectUpdateCheckResult(InspectNoList); if (!Qir.Success) { throw new Exception(Qir.Msg); } } //新增入库单主子表 for (int i = 0; i < mstEntityList.Count; i++) { CreateDAL>().Add(mstEntityList[i], trans); CreateDAL>().AddRange(mstEntityList[i].DTLEntity, trans); } foreach (var itemExamine in entity) { //更新检验单状态 CreateDAL>().Update(new { CN_S_STATE = Constants.State_Submit }, new { CN_S_INSPECT_NO = itemExamine.CN_S_FROM_NO }, trans); } foreach (var arrivalNo in ArrivalNoList) { //更新到货单状态 CreateDAL>().Update(new { CN_S_STATE = Constants.State_BeenCheck }, new { CN_S_ARRIVAL_NO = arrivalNo }, trans); } //更新到货单数量 CreateDAL().UpdateArrivalQty(inspectNoStr, trans); }); return operateResult; } #endregion } }