using HH.Redis.ReisModel;
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.Basic;
using HH.WMS.Entitys.Common;
using Newtonsoft.Json;
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_HKINBLL : DapperBaseBLL
{
#region 新增工单
///
/// 新增工单
///
/// 工单实体
///
/// [HANHE(XDL)] CREATED BY 2019-02-20
public OperateResult AddInOrder(TN_WM_WORK_ORDEREntity Entity, RedisUserEntity t)
{
OperateResult operateResult = UseTransaction(trans =>
{
//新增主表
CreateDAL>().Add(Entity, trans);
});
return operateResult;
}
#endregion
#region 修改工单
///
/// 修改工单
///
/// 工单实体
///
/// [HANHE(XDL)] CREATED BY 2019-02-20
public OperateResult UpdateInOrder(TN_WM_WORK_ORDEREntity entity)
{
OperateResult operateResult = UseTransaction(trans =>
{
// WorkOrderQtyReportBack("GD20081200097", "19", "9", trans);
//修改主表
CreateDAL>().Update(entity, new { CN_S_WO_NO = entity.CN_S_WO_NO }, trans);
});
return operateResult;
}
#endregion
#region 删除工单
///
/// 删除工单
///
/// 工单号
///
/// [HANHE(XDL)] CREATED BY 2019-02-20
public OperateResult DeleteInOrder(string opNo)
{
OperateResult operateResult = UseTransaction(trans =>
{
//删除主表
CreateDAL>().Delete(new { CN_S_WO_NO = opNo }, trans);
});
return operateResult;
}
#endregion
#region 提交工单
///
/// 提交工单
///
/// 审批实体
///
/// [HANHE(XDL)] CREATED BY 2019-02-20
public OperateResult SubmitInOrder(string opNo)
{
var workOrderEntity = BLLCreator.Create>().GetSingleEntity(new
{
CN_S_WO_NO = opNo
});
if (workOrderEntity != null)
{
var hasEntity = BLLCreator.Create>().GetSingleEntity(new
{
CN_S_LINE = workOrderEntity.CN_S_LINE,
CN_S_STATUS = Constants.State_HK_Excuting
});
if (hasEntity != null)
{
return OperateResult.Error("执行失败!产线<" + hasEntity.CN_S_LINE + ">已存在执行中的工单:" + hasEntity.CN_S_WO_NO + "!");
}
}
else
{
return OperateResult.Error("工单:" + opNo + "不存在!");
}
OperateResult operateResult = UseTransaction(trans =>
{
//提交主表
CreateDAL().ExamineMst(opNo, Constants.State_HK_Excuting, this.userInfo, trans);
});
return operateResult;
}
#endregion
#region 强制完成工单
///
/// 强制完成工单
///
/// 审批实体
///
/// [HANHE(XDL)] CREATED BY 2019-02-20
public OperateResult CompleteInOrder(string opNo)
{
OperateResult operateResult = UseTransaction(trans =>
{
//提交主表
CreateDAL().ExamineMst(opNo, Constants.State_HK_QZComplete, this.userInfo, trans);
});
return operateResult;
}
#endregion
#region 查询工单列表
///
/// 查询工单列表
///
/// 实体
///
/// [HANHE(XDL)] CREATED BY 2018-12-18
public OperateResult GetInOrderList(SearchModel searchModel)
{
return CreateDAL().GetInOrderList(searchModel);
}
#endregion
#region 接口:提供工单号和排产数量,增加工单中累计数
///
/// 回报数量
///
/// 工单号
/// 回报数量
/// 托盘码盘数
///
public OperateResult WorkOrderQtyReportBack(string woNo, string reportQty, string trayQty, IDbTransaction trans)
{
Log.Info("开始进入回报接口:WorkOrderQtyReportBack,传参", woNo + "||" + reportQty + "||" + trayQty);
if (string.IsNullOrEmpty(woNo) || string.IsNullOrEmpty(reportQty) || string.IsNullOrEmpty(trayQty))
{
return OperateResult.Error("参数缺失!");
}
if (trayQty == "0")
{
return OperateResult.Error("托盘码盘数不能为0!");
}
var workOrderEntity = BLLCreator.Create>().GetSingleEntity(new
{
CN_S_WO_NO = woNo
});
if (workOrderEntity != null)
{
//标记是否已经完成
bool isAllOver = false;
if (workOrderEntity.CN_S_STATUS != Constants.State_HK_Excuting)
{
return OperateResult.Error("工单:" + woNo + "状态非<执行中>,禁止回报数量!");
}
if (workOrderEntity.CN_S_STATUS == Constants.State_HK_QZComplete)
{
return OperateResult.Error("工单:" + woNo + "已被强制完成,禁止回报数量!");
}
decimal addupQty = workOrderEntity.CN_F_REAL_QTY + Convert.ToDecimal(reportQty);
if (addupQty > workOrderEntity.CN_F_PLAN_QTY)
{
return OperateResult.Error("工单:" + woNo + "实际生产数量<" + workOrderEntity.CN_F_REAL_QTY + ">与本次回报数量<" + reportQty + ">之和将超过计划数量<" + workOrderEntity.CN_F_PLAN_QTY + ">,禁止回报数量!");
}
decimal thisTrayQty = Math.Ceiling(Convert.ToDecimal(reportQty) / Convert.ToDecimal(trayQty));
decimal addupTrayQty = workOrderEntity.CN_F_REAL_TRAY_QTY + thisTrayQty;
if (addupTrayQty > workOrderEntity.CN_F_PLAN_TRAY_QTY)
{
return OperateResult.Error("工单:" + woNo + "实际生产托数<" + workOrderEntity.CN_F_REAL_TRAY_QTY + ">与本次回报托数<" + thisTrayQty + ">之和将超过计划托数<" + workOrderEntity.CN_F_PLAN_TRAY_QTY + ">,禁止回报数量!");
}
if (addupQty == workOrderEntity.CN_F_PLAN_QTY && addupTrayQty == workOrderEntity.CN_F_PLAN_TRAY_QTY)
{
isAllOver = true;
}
Log.Info("位置一:workOrderEntity--》", JsonConvert.SerializeObject(workOrderEntity));
Log.Info("位置二:addupQty--》", addupQty.ToString());
Log.Info("位置三:thisTrayQty--》", thisTrayQty.ToString());
Log.Info("位置四:addupTrayQty--》", addupTrayQty.ToString());
Log.Info("位置五:isAllOver--》", isAllOver.ToString());
OperateResult up = new OperateResult();
if (isAllOver)
{
up = CreateDAL>().Update(new { CN_F_REAL_QTY = addupQty, CN_F_REAL_TRAY_QTY = addupTrayQty, CN_S_STATUS = Constants.State_HK_Complete, CN_T_MODIFY = DateTime.Now }, new { CN_S_WO_NO = woNo }, trans);
}
else
{
up = CreateDAL>().Update(new { CN_F_REAL_QTY = addupQty, CN_F_REAL_TRAY_QTY = addupTrayQty }, new { CN_S_WO_NO = woNo }, trans);
}
Log.Info("位置六:up--》", JsonConvert.SerializeObject(up));
Log.Info("结束本次回报!", "");
return up;
}
else
{
return OperateResult.Error("工单:" + woNo + "不存在!");
}
return OperateResult.Succeed();
}
#endregion
}
}