using HH.WMS.BLL; using HH.WMS.BLL.AllQuery; using HH.WMS.BLL.Basic; using HH.WMS.BLL.External; using HH.WMS.BLL.InStock; using HH.WMS.BLL.OutStock; using HH.WMS.Common; using HH.WMS.DAL; using HH.WMS.DAL.Algorithm; using HH.WMS.DAL.Basic; using HH.WMS.DAL.InStock; using HH.WMS.Entitys; using HH.WMS.Entitys.Basic; using HH.WMS.Entitys.Common; using HH.WMS.Entitys.Entitys; using HH.WMS.Entitys.External; using HH.WMS.Utils; using HH.WMS.WebApi.Areas.Common.Controllers; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using System.Web.Http; namespace HH.WMS.WebApi.Areas.AllQuery.Controllers { /// /// 库存统计Controller /// public class InventoryController : BaseController { #region 出入库业务查询 /// /// 出入库业务查询 /// /// /// /// [Hanhe(DBS)] CREATED BY 2018-12-03 [HttpPost] public OperateResult GetOrderBussList(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; //IsoDateTimeConverter timeFormat = new IsoDateTimeConverter(); //timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; result = BLLCreator.Create().GetOrderBussList(searchModel.PageIndex, searchModel.PageSize, searchModel.SearchCondition); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion #region 库存统计查询 /// /// 库存统计查询 /// /// /// /// [Hanhe(DBS)] CREATED BY 2018-12-03 [HttpPost] public OperateResult GetInventoryList(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { return BLLCreator.Create().GetInventoryList(searchModel, true); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } /// /// 库存查询不分页 /// /// /// /// [Hanhe(DBS)] CREATED BY 2019-1-20 [HttpPost] public OperateResult GetInventoryListExport(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { return BLLCreator.Create().GetInventoryList(searchModel, false); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion #region 汇总指定日期内的出入库业务量 /// /// 汇总指定日期内的出入库业务量 /// /// /// /// /// [Hanhe(dbs)] created 2018/12/2 public OperateResult GetBussLine(int day) { return ValidateToken(x => { DataTable dt = null; try { dt = BLLCreator.Create().GetBussLine(day); return OperateResult.Succeed("", dt); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion #region 获取货位的历史上下架记录 /// /// 获取货位的历史上下架记录 /// /// /// /// [Hanhe(DBS)] CREATED BY 2018-12-03 [HttpPost] public OperateResult GetLocationHistory(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetLocationHistory(searchModel); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion #region 获取货位的历史上下架记录 巨星 /// /// 获取货位的历史上下架记录 /// /// /// /// [Hanhe(DBS)] CREATED BY 2018-12-03 [HttpPost] public OperateResult GetLocationHistoryJx(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetLocationHistoryJx(searchModel); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion #region 查询货位库存 /// /// 查询货位库存 /// /// /// /// [Hanhe(DBS)] CREATED BY 2018-12-03 [HttpPost] public OperateResult GetLocationInventoryList(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetLocationInventoryList(searchModel, false); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } [HttpPost] public OperateResult GetLocationInventoryListJx(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetLocationInventoryListJx(searchModel, false); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } [HttpPost] public OperateResult GetLocationInventoryExport(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetLocationInventoryList(searchModel, true); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion //[HttpPost] //public OperateResult HistoryLine(SearchModel searchModel) //{ // return ValidateToken(searchModel.TokenId, x => // { // try // { // OperateResult result; // result = BLLCreator.Create().HistoryLine(searchModel); // return result; // } // catch (Exception ex) // { // return OperateResult.Error(ex.Message.ToString()); // } // }); //} #region 查询盘点报表 /// /// 查询盘点报表 /// /// /// /// [Hanhe(DBS)] CREATED BY 2019-1-10 [HttpPost] public OperateResult GetCheckDtl(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetCheckDtl(searchModel); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion #region 汇总查询盘点报表 /// /// 汇总查询盘点报表 /// /// /// /// [Hanhe(DBS)] CREATED BY 2019-1-10 [HttpPost] public OperateResult GetCheckDtlTotal(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetCheckDtlTotal(searchModel); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion #region 物料盘点汇总 /// /// 物料盘点汇总 /// /// /// /// [Hanhe(DBS)] CREATED BY 2019-1-10 [HttpPost] public OperateResult GetItemCheckDtl(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetItemCheckDtl(searchModel); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion #region 物料盘点数量金额汇总 /// /// 物料盘点数量金额汇总 /// /// /// /// [Hanhe(DBS)] CREATED BY 2019-1-10 [HttpPost] public OperateResult GetItemCheckDtlTotal(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetCheckDtlTotal(searchModel); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion #region 更新记录 /// /// 更新记录 /// /// [HttpGet] public OperateResult GetVersionLog() { return ValidateToken(t => { var updateLogList = BLLCreator.Create().GetVersionLog().Where(x => x.CN_T_UPDATE.HasValue); var ul = updateLogList.Select(x => { return new { version = x.CN_S_VERSION, title = "更新时间:" + x.CN_T_UPDATE.Value.ToString("yyyy-MM-dd"), content = x.CN_S_CONTENT, order = x.CN_N_ORDER }; }); var result = ul.GroupBy(x => new { x.version, x.title }).Select(y => new { title = y.Key.version + " " + y.Key.title, update = y.AsEnumerable().OrderBy(o => o.order).Select(s => new { content = s.order + "、" + s.content }) }); return OperateResult.Succeed(null, result); }); } #endregion [HttpGet] public OperateResult OutItemBoardData() { return ValidateToken(t => { //待出库和已复验的所有出库单 var outMst = BLLCreator.CreateDapper().GetList(new { CN_S_STATE = new List() { Constants.State_WaitOut, Constants.State_Rechecked } }); //出库单子表 var outDtl = BLLCreator.CreateDapper().GetList(new { CN_S_OP_NO = outMst.Select(x => x.CN_S_OP_NO).ToList() }); //波次主表 var waveMst = BLLCreator.CreateDapper().GetList(new { CN_S_WAVE_NO = outMst.Select(x => x.CN_S_WAVE_CODE).ToList() }); var result = outMst.Select(x => { var currentDtl = outDtl.FindAll(y => y.CN_S_OP_NO == x.CN_S_OP_NO); string pickState = "待拣"; if (x.CN_S_STATE == Constants.State_Rechecked) { pickState = "已拣"; } else { var waveEntity = waveMst.Find(w => w.CN_S_WAVE_NO == x.CN_S_WAVE_CODE); if (waveEntity != null && waveEntity.CN_S_STATE != Constants.Sorting_Stay && waveEntity.CN_S_STATE != Constants.Sorting_Being) pickState = "已拣"; } return new { OpNo = x.CN_S_OP_NO, FromNo = x.CN_S_FROM_NO, Customer = x.CN_S_CUSTOMER_NAME, PickState = pickState, Items = currentDtl.Select(m => new { ItemCode = m.CN_S_ITEM_CODE, ItemName = m.CN_S_ITEM_NAME, ItemModel = m.CN_S_MODEL, ProductNo = m.CN_S_PRODUCTION_BATCH, Qty = m.CN_F_QUANTITY, Unit = m.CN_S_MEASURE_UNIT }) }; }); return OperateResult.Succeed(null, result); }); } #region 恢复到正常 [HttpGet] public IHttpActionResult LocationToNormal(string locationCode, string state) { Log.Info("恢复到正常", "接收参数为:" + locationCode + state); var result = new OperateResult(); if (string.IsNullOrEmpty(state)) state = ""; if (state.Equals("扫码异常")) { result = BLLCreator.Create().UpdateState(locationCode.Trim(), "正常", ""); } else { //更新货位状态到正常,空 result = BLLCreator.Create().UpdateState(locationCode.Trim(), "正常", ""); } return Json(result); } #endregion #region 解绑货位 [HttpGet] public IHttpActionResult LocationToUnBind(string locationCode, string state) { try { Log.Detail("解绑货位", "接收参数为locationCode:" + locationCode + " state为:" + state); locationCode = locationCode.Trim(); var objLocation = BLLCreator.Create().GetDetailByLocationCode(locationCode).FirstOrDefault(); var result = BLLCreator.Create>().Delete(new { CN_S_LOCATION_CODE = locationCode }); Log.Detail("解绑货位", "删除托盘货位关联结果:" + JsonConvert.SerializeObject(result)); if (!result.Success) { return Json(result); } AutoBomLocationEntity locationModel = DALCreator.Create().GetModel(locationCode); BLLCreator.Create().AddStateChange(locationCode, "空取异常", "正常", "恢复正常", "WMS", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null); //删除托盘产品关联 result = DALCreator.Create().DeleteTrayItem(" CN_S_TRAY_CODE='" + objLocation.CN_S_TRAY_CODE + "' ", null); Log.Detail("解绑货位", "删除托盘产品关联结果:" + JsonConvert.SerializeObject(result)); return Json(result); } catch (Exception ex) { Log.Info("LocationToUnBind error", ex.Message); return Json(OperateResult.Error(ex.Message)); } } #endregion #region 绑定托盘货位物料 [HttpGet] public IHttpActionResult LocationToBind(string locationCode, string trayCode, string materialCode) { locationCode = locationCode.Trim(); var result = new SqlExecuteResult { Success = true }; AutoBomItemEntity materialEntity = BLLCreator.Create().GetItem(materialCode); TN_WM_B_TRAY_INFOEntity trayEntity = BLLCreator.Create>().GetSingleEntity(new { CN_S_TRAY_CODE = trayCode }); //DALCreator.Create().GetModel(trayCode); TN_WM_B_TRAY_ITEM_RELEntity entity = new TN_WM_B_TRAY_ITEM_RELEntity(); entity.CN_S_TRAY_CODE = trayCode; entity.CN_S_TRAY_GRID = "1"; entity.CN_S_ITEM_CODE = materialEntity.CN_S_ITEM_CODE; entity.CN_S_ITEM_NAME = materialEntity.CN_S_ITEM_NAME; entity.CN_S_ITEM_STATE = "合格"; entity.CN_S_TRAY_TYPE = "托盘"; entity.CN_GUID = Guid.NewGuid().ToString(); entity.CN_F_QUANTITY = 1; entity.CN_T_CREATE = DateTime.Now; entity.CN_T_MODIFY = DateTime.Now; result = DAOManager.ExecuteTransaction(trans => { //删除原托盘中绑定的物料 var transResult = DALCreator.Create().DeleteTrayItem(" CN_S_TRAY_CODE='" + trayCode + "' ", trans); //result = BLLCreator.Create().DeleteItemRel(" and CN_S_TRAY_CODE = '" + trayCode + "'", trans); if (transResult.Success) { //添加托盘料架关联 transResult = BLLCreator.Create>().Add(entity); //result = BLLCreator.Create().(new List { entity }, null); } if (!transResult.Success) { DAOManager.RollbackTransaction(trans); return new SqlExecuteResult { Success = transResult.Success }; } //添加托盘货位关联 transResult = BLLCreator.Create().AddTrayLocationRelation(trayCode, locationCode, new Redis.ReisModel.RedisUserEntity(), ""); if (!transResult.Success) { DAOManager.RollbackTransaction(trans); } return new SqlExecuteResult { Success = transResult.Success }; }); return Json(result); } #endregion #region 宇寿需求变更20190926 新增业务汇总查询 /// /// 获取货位的历史上下架记录 /// /// /// /// [Hanhe(DBS)] CREATED BY 2018-12-03 [HttpPost] public OperateResult GetInventorySummary(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().GetInventorySummary(searchModel); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } [HttpPost] public OperateResult ExportInventorySummary(SearchModel searchModel) { return ValidateToken(searchModel.TokenId, x => { try { OperateResult result; result = BLLCreator.Create().ExportInventorySummary(searchModel); return result; } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } }); } #endregion } }