using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper.Excel;
using Kingdee.BOS.Util;
using Kingdee.BOS.ServiceHelper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using Newtonsoft.Json.Linq;
using Demo.Model.Model;
using System.Linq;
using ZD.Share.Common;
using ZD.Cloud.WebApi;
using Demo.Utility;
using ZD.Cloud.Logger;
using System.Text;
namespace Demo.BillView.PRD
{
[Description("生产日计划导入")]
[HotUpdate]
public class Pro_ScDayImport : AbstractDynamicFormPlugIn
{
private string fileFullPath = string.Empty;
///
/// 页面初始化 渲染界面 将T0-T60更改为日期显示
///
///
public override void OnInitialize(InitializeEventArgs e)
{
base.OnInitialize(e);
DateTime DateNow = DateTime.Now;
for (int m = 0; m <= 60; m++)
{
this.View.GetControl("FT" + "" + m + "").ControlAppearance.TextColor = "#FFFF00";
this.View.GetControl("FT" + "" + m + "").Text = DateNow.AddDays(m).ToShortDateString();
}
this.View.SendDynamicFormAction(View);
}
public override void BarItemClick(BarItemClickEventArgs e)
{
if (e.BarItemKey.ToUpper().Equals("TBIMPORT"))
{
ImportData();
}
if (e.BarItemKey.ToUpper().Equals("TBWJSC"))
{
ImportDataSC(fileFullPath);
}
}
public override void CustomEvents(CustomEventsArgs e)
{
//触发事件是上传文件有变化
if (e.EventName.ToUpper() == "FILECHANGED")
{
JSONObject jSONObject = KDObjectConverter.DeserializeObject(e.EventArgs);
if (jSONObject != null)
{
JSONArray jSONArray = new JSONArray(jSONObject["NewValue"].ToString());
if (jSONArray.Count > 0)
{
//获取上传的文件名
string text = (jSONArray[0] as Dictionary)["ServerFileName"].ToString();
if (Convert.ToDecimal((jSONArray[0] as Dictionary)["FileBytesLength"]) > 30 * 1024)
{
this.View.ShowErrMessage("文件过大,重新选择。限制上传30M以上文件");
return;
}
if (!text.Contains(".xlsx") || !text.Contains(".xls"))
{
this.View.ShowErrMessage("文件类型错误,请上传Excel文件");
return;
}
//文件上传到服务端的临时目录
string directory = "FileUpLoadServices\\UploadFiles";
//文件的完整路径
fileFullPath = PathUtils.GetPhysicalPath(directory, text);
}
}
}
base.CustomEvents(e);
}
///
/// 文件上传界面数据显示
///
///
private void ImportDataSC(string fileFullPath)
{
using (ExcelOperation helper = new ExcelOperation(this.View))
{
if (!string.IsNullOrEmpty(fileFullPath))
{
NpoiHelper np = new NpoiHelper();
DataSet ds = np.ReadExcel(fileFullPath, 1);
DataTable dt = ds.Tables[0];
//去除空行
RemoveEmpty(dt);
//中文抬头和excel抬头对应
Dictionary dicExcelCol = new Dictionary();
string fileTitle = "组织编码,销售订单号,销售订单明细行号,生产车间编码,生产资源编码,优先级,员工编码,物料编码,物料名称,规格型号,计量单位,批次号,销售订单数量,生产订单数量,总齐套数量";
string checkTitleErrInfo = CheckUploadFileTitle(dt, fileTitle.Split(','), out dicExcelCol);
if (checkTitleErrInfo != "")
{
this.View.ShowMessage("导入模板错误:\n" + checkTitleErrInfo);
return;
}
dt.Rows.RemoveAt(0);//去除标题行
string FOrderType = this.Model.GetValue("FOrderType").ToString();
string FTempName = "T_PRD_MO";
string FTempNameEntry = "T_PRD_MOENTRY";
if (FOrderType == "委外订单")
{
FTempName = "T_SUB_REQORDER";
FTempNameEntry = "T_SUB_REQORDERENTRY";
}
DateTime date = Convert.ToDateTime(this.Model.GetValue("F_Paez_Date"));
if (dt.Rows.Count > 0)
{
//验证导入模板
string ErrorResult = "";
string error = "";
for (int i = 0; i < dt.Rows.Count; i++)
{
error = "";
if (dt.Rows[i][dicExcelCol["组织编码"]].ToString() == "")
error += "组织编码不能为空;";
if (dt.Rows[i][dicExcelCol["销售订单号"]].ToString() == "")
error += "销售订单号不能为空;\n";
if (dt.Rows[i][dicExcelCol["销售订单明细行号"]].ToString() == "")
error += "销售订单明细行号不能为空;";
if (dt.Rows[i][dicExcelCol["生产车间编码"]].ToString() == "")
error += "生产车间编码不能为空;";
if (dt.Rows[i][dicExcelCol["生产资源编码"]].ToString() == "")
error += "生产资源编码不能为空;";
if (dt.Rows[i][dicExcelCol["物料编码"]].ToString() == "")
error += "物料编码不能为空;";
//if (dt.Rows[i][dicExcelCol["交货日期"]].ToString() == "")
// error += "交货日期不能为空;";
//if (dt.Rows[i][dicExcelCol["订单等级"]].ToString() == "")
// error += "订单等级不能为空;";
//验证 生产资源 +物料 判断 是否有维护产能表
// string cnSql = string.Format(@"/*dialect*/
//SELECT Count(*) row
//FROM T_PRD_MATERIALCOMPARE T1
//JOIN T_PRD_MATERIALCOMPAREENTRY T2 ON T1.FID=T2.FID
//JOIN T_BD_MATERIAL T3 ON T2.FMATERIALID = T3.FMATERIALID
//JOIN T_ORG_ORGANIZATIONS T4 ON T1.FORGID = T4.FORGID
//JOIN T_JIT_WORKCENTER T5 ON T2.FSCZY = T5.FID
//WHERE T4.FNUMBER = '{0}' AND T3.FNUMBER='{1}' AND T5.FNUMBER ='{2}'",
//dt.Rows[i][dicExcelCol["组织编码"]].ToString(), dt.Rows[i][dicExcelCol["物料编码"]].ToString(), dt.Rows[i][dicExcelCol["生产资源编码"]].ToString());
// int cnFid = DBServiceHelper.ExecuteScalar(Context, cnSql, 0);
// if (cnFid == 0)
// error += "没有维护产能表;";
string cnSql = string.Format(@"/*dialect*/
SELECT Count(*) row FROM T_PRD_MO T1
LEFT JOIN T_PRD_MOENTRY T2 ON T1.FID = T2.FID
JOIN T_ORG_ORGANIZATIONS TORG ON T1.FPRDORGID = TORG.FORGID
JOIN T_BD_MATERIAL T3 ON T2.FMATERIALID = T3.FMATERIALID
join ( select A.FBILLTYPEID,B.FNAME from T_BAS_BILLTYPE A
JOIN T_BAS_BILLTYPE_L B ON A.FBILLTYPEID =B.FBILLTYPEID
where FBILLFORMID in ('PRD_MO','SUB_SUBREQORDER') AND b.FLOCALEID = 2052)t4 on t1.FBILLTYPE =t4.FBILLTYPEID
WHERE TORG.FNUMBER = '{0}' and T2.FSALEORDERNO = '{1}' AND T3.FNUMBER = '{2}' AND T2.FSALEORDERENTRYSEQ='{3}' ", dt.Rows[i][dicExcelCol["组织编码"]].ToString(), dt.Rows[i][dicExcelCol["销售订单号"]].ToString(), dt.Rows[i][dicExcelCol["物料编码"]].ToString(), dt.Rows[i][dicExcelCol["销售订单明细行号"]].ToString());
int cnFid = DBServiceHelper.ExecuteScalar(Context, cnSql, 0);
if (cnFid == 0)
error += "没有生产订单信息,销售订单号:" + dt.Rows[i][dicExcelCol["销售订单号"]].ToString() + ",销售订单明细行号:" + dt.Rows[i][dicExcelCol["销售订单明细行号"]].ToString() + ",物料编码;" + dt.Rows[i][dicExcelCol["物料编码"]].ToString();
if (error.Length > 0)
ErrorResult += $"Excel模板存在错误,行数{i + 1}:{error}\r\n";
}
if (ErrorResult.Length > 0)
{
this.View.ShowErrMessage(ErrorResult);
return;
}
this.Model.DeleteEntryData("FEntity");
for (int i = 0; i < dt.Rows.Count; i++)
{
string sql = "";
if (FOrderType == "生产订单")
//根据生产订单号和物料查询是否存在明细(2.28+生产订单明细行号验证)
sql = string.Format(@"/*dialect*/
SELECT t4.FNAME as FMoFBillType,T1.FBILLNO,T2.* FROM {0} T1
LEFT JOIN {1} T2 ON T1.FID = T2.FID
JOIN T_BD_MATERIAL T3 ON T2.FMATERIALID = T3.FMATERIALID
join ( select A.FBILLTYPEID,B.FNAME from T_BAS_BILLTYPE A
JOIN T_BAS_BILLTYPE_L B ON A.FBILLTYPEID =B.FBILLTYPEID
where FBILLFORMID in ('PRD_MO','SUB_SUBREQORDER') AND b.FLOCALEID = 2052)t4 on t1.FBILLTYPE =t4.FBILLTYPEID
WHERE T2.FSALEORDERNO = '{2}' AND T3.FNUMBER = '{3}' AND T2.FSALEORDERENTRYSEQ='{4}' ", FTempName, FTempNameEntry, dt.Rows[i][dicExcelCol["销售订单号"]].ToString(), dt.Rows[i][dicExcelCol["物料编码"]].ToString(), dt.Rows[i][dicExcelCol["销售订单明细行号"]].ToString());
else if (FOrderType == "委外订单")
sql = string.Format(@"/*dialect*/
SELECT t4.FNAME as FMoFBillType,T1.FBILLNO,T2.* FROM {0} T1
LEFT JOIN {1} T2 ON T1.FID = T2.FID
LEFT JOIN T_SUB_REQORDERENTRY_A T4 ON T2.FENTRYID = T4.FENTRYID
JOIN T_BD_MATERIAL T3 ON T2.FMATERIALID = T3.FMATERIALID
join ( select A.FBILLTYPEID,B.FNAME from T_BAS_BILLTYPE A
JOIN T_BAS_BILLTYPE_L B ON A.FBILLTYPEID =B.FBILLTYPEID
where FBILLFORMID in ('PRD_MO','SUB_SUBREQORDER') AND b.FLOCALEID = 2052)t4 on t1.FBILLTYPE =t4.FBILLTYPEID
WHERE T4.FSALEORDERNO = '{2}' AND T3.FNUMBER = '{3}' AND T4.FSALEORDERENTRYSEQ='{4}' ", FTempName, FTempNameEntry, dt.Rows[i][dicExcelCol["销售订单号"]].ToString(), dt.Rows[i][dicExcelCol["物料编码"]].ToString(), dt.Rows[i][dicExcelCol["销售订单明细行号"]].ToString());
DataTable _dt = new DataTable();
_dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
string FLOT = "";//FLOT 批次
string FQTY = "";//FQTY 生产订单数量
string FBILLNO = "";//FBILLNO 原单号
string FSEQ = "";//生产订单明细行号
string FMoFBillType = "";
if (_dt.Rows.Count > 0)
{
FLOT = _dt.Rows[0]["FLOT"].ToString();
FQTY = _dt.Rows[0]["FQTY"].ToString();
FBILLNO = _dt.Rows[0]["FBILLNO"].ToString();
FMoFBillType = _dt.Rows[0]["FMoFBillType"].ToString();
FSEQ = _dt.Rows[0]["FSEQ"].ToString();
}
//物料编码 + 生产订单号 + 生产资源 + 生产订单行号 去判断是否导入过 带出日计划工单ID及编号 和 关闭数量(6.18更)
//9.2 关闭的日计划需要排除
string fDayPlanID = "";
string fDayPlanBillNo = "";
string fCloseCount = "";
string fQtyLS = "";
sql = string.Format(@"/*dialect*/
SELECT A.FID,FBILLNO,FSCORDERNO,FHMATERID,FHSOURCEID,A.FCLOSECOUNT,ISNULL((SELECT SUM(ISNULL(FHQTY,0)) FROM SC_WORKBILLSORTBILLSUB T2 WHERE T2.FID = A.FID AND DATEDIFF(D,FHMASTERDATE,GETDATE())>0),0)FQTYLS
FROM SC_WORKBILLSORTBILLMAIN A
JOIN T_BD_MATERIAL B ON A.FHMATERID = B.FMATERIALID
LEFT JOIN T_ENG_WORKCENTER C ON A.FHSOURCEID=C.FID
WHERE A.FDOCUMENTSTATUS NOT IN ('E') AND
FSCORDERNO ='{0}' AND B.FNUMBER ='{1}' AND A.FSRCBILLENTRYSEQ ='{3}' AND (ISNULL(C.FNUMBER,'') ='{2}' OR (SELECT COUNT(*) FROM T_ENG_WORKCENTER WHERE ISNULL(C.FNUMBER,'') ='{2}')=0)", FBILLNO, dt.Rows[i][dicExcelCol["物料编码"]].ToString(), dt.Rows[i][dicExcelCol["生产资源编码"]].ToString(), FSEQ);
////LogHelper.Error(sql);
DataTable dayPlanDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
if (dayPlanDt.Rows.Count > 0)
{
fDayPlanID = dayPlanDt.Rows[0]["FID"].ToString();
fDayPlanBillNo = dayPlanDt.Rows[0]["FBILLNO"].ToString();
fCloseCount = dayPlanDt.Rows[0]["FCloseCount"].ToString();
fQtyLS = dayPlanDt.Rows[0]["FQTYLS"].ToString();
}
this.Model.CreateNewEntryRow("FEntity");
this.Model.SetValue("FSEQ", i + 1, i);
this.Model.SetValue("FMoFBillType", FMoFBillType, i);
this.Model.SetValue("FSalOrderNo", dt.Rows[i][dicExcelCol["销售订单号"]].ToString(), i);
this.Model.SetValue("FSCOrderNo", FBILLNO, i);
if (dt.Rows[i][dicExcelCol["组织编码"]].ToString() == "")
{
this.Model.SetValue("FORGID", Context.CurrentOrganizationInfo.ID, i);
}
else
{
this.Model.SetItemValueByNumber("FORGID", dt.Rows[i][dicExcelCol["组织编码"]].ToString(), i);
}
this.Model.SetItemValueByNumber("FProductWorkShopId", dt.Rows[i][dicExcelCol["生产车间编码"]].ToString(), i);
this.Model.SetItemValueByNumber("FResourcesId", dt.Rows[i][dicExcelCol["生产资源编码"]].ToString(), i);
this.Model.SetValue("FPriority",dt.Rows[i][dicExcelCol["优先级"]].ToString(), i);//优先级
this.Model.SetItemValueByNumber("FEmpID", dt.Rows[i][dicExcelCol["员工编码"]].ToString(), i);
// this.Model.SetValue("FMatrailId", dt.Rows[i][5].ToString(), i);
this.Model.SetItemValueByNumber("FMatrailId", dt.Rows[i][dicExcelCol["物料编码"]].ToString(), i);
this.Model.SetValue("FBatch", dt.Rows[i][dicExcelCol["批次号"]].ToString(), i);
this.Model.SetValue("FSalOrderCount", dt.Rows[i][dicExcelCol["销售订单数量"]].ToString(), i);
this.Model.SetValue("FCompleteSetCount", dt.Rows[i][dicExcelCol["总齐套数量"]].ToString(), i);//总齐套数量
//this.Model.SetValue("FDeliveryDate", dt.Rows[i][dicExcelCol["交货日期"]].ToString(), i);
//this.Model.SetValue("FOrderLevel", OrderType(dt.Rows[i][dicExcelCol["订单等级"]].ToString()), i);
this.Model.SetValue("FOrderQuantity", FQTY, i);
this.Model.SetValue("FDayPlanID", fDayPlanID, i);//日计划工单ID
this.Model.SetValue("FDayPlanBillNo", fDayPlanBillNo, i);//日工单编号
this.Model.SetValue("FSRCBILLENTRYSEQ", FSEQ, i);//生产订单明细行号
this.Model.SetValue("FCloseCount", fCloseCount, i);//关闭数量
this.Model.SetValue("FQTYLS", fQtyLS, i);//历史遗留
for (int j = 0; j <= 50; j++)
{
this.Model.SetValue("FT" + "" + j + "", dt.Rows[i][16 + j].ToString(), i);
}
//调用数量值更新
this.View.InvokeFieldUpdateService("FT0", i);
}
}
this.View.UpdateView();
for (int j = 0; j <= 60; j++)
{
this.View.GetControl("FT" + "" + j + "").Text = date.AddDays(j).ToShortDateString();
}
}
}
}
///
/// 订单状态等级
///
///
///
public string OrderType(string Type)
{
switch (Type)
{
case "特急":
return "1";
break;
case "紧急":
return "2";
break;
case "普通":
return "3";
break;
default:
return " ";
break;
}
}
///
/// 时间戳Timestamp转换成日期
///
///
///
private DateTime GetDateTime(int timeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = ((long)timeStamp * 10000000);
TimeSpan toNow = new TimeSpan(lTime);
DateTime targetDt = dtStart.Add(toNow);
return targetDt;
}
///
/// 导入功能
///
private void ImportData()
{
try
{
string FOrderType = this.Model.GetValue("FOrderType").ToString();
string FTempName = "T_PRD_MO";
string FTempNameEntry = "T_PRD_MOENTRY";
string FTempBomName = "T_PRD_PPBOM";
string FTempBomNameEntry = "T_PRD_PPBOMENTRY";
if (FOrderType == "委外订单")
{
FTempName = "T_SUB_REQORDER";
FTempNameEntry = "T_SUB_REQORDERENTRY";
FTempBomName = "T_SUB_PPBOM";
FTempBomNameEntry = "T_SUB_PPBOMENTRY";
}
CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
string sql;
DateTime date = Convert.ToDateTime(this.Model.GetValue("F_Paez_Date"));
//获取单据体信息
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
//单据体信息转换为列表集合
DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
//LogHelper.Info("导入功能列表行数:" + entityDataObjoct.Count);
string _result = "";
//验证是否有生产订单明细行
foreach (DynamicObject current in entityDataObjoct)
{
//根据生产订单号和物料查询是否存在生产订单明细明细 +生产订单明细行号 + 组织(2021-12-10修改)
sql = string.Format(@"
/*dialect*/
SELECT T1.FBILLNO,T2.* FROM {4} T1
LEFT JOIN {5} T2 ON T1.FID = T2.FID
WHERE T1.FBILLNO = '{0}' AND T2.FMATERIALID = '{1}' AND T2.FSEQ = '{2}' AND T1.{6} = '{3}'"
, Convert.ToString(current["FSCOrderNo"]), Convert.ToString(current["FMatrailId_Id"]), Convert.ToString(current["FSRCBILLENTRYSEQ"]), Convert.ToString(current["FORGID_Id"]), FTempName, FTempNameEntry, FOrderType == "委外订单" ? "FSUBORGID" : "FPRDORGID");
//LogHelper.Info(sql);
DataTable dt = new DataTable();
dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
if (dt.Rows.Count == 0)
_result += "序号:" + Convert.ToString(current["SEQ"]) + ",组织:" + (current["FORGID"] as DynamicObject)["Number"] + ",生产订单号:" + Convert.ToString(current["FSCOrderNo"]) + ",生产订单明细行号:" + Convert.ToString(current["FSRCBILLENTRYSEQ"]) + "对应的物料" + (current["FMatrailId_Id"] as DynamicObject)["Number"] + "不存在\n";
}
if (_result != "")
{
this.View.ShowErrMessage(_result);
return;
}
//校验生产用料清单是否审核
if (FOrderType == "生产订单")
{
foreach (DynamicObject current in entityDataObjoct)
{
//根据生产订单号和物料查询是否存在明细 +生产订单明细行号
sql = string.Format(@"
/*dialect*/
SELECT FBILLNO FROM {0} T1
WHERE T1.FMOBILLNO = '{1}' AND T1.FMATERIALID = '{2}' AND T1.FMOENTRYSEQ = '{3}' and FDOCUMENTSTATUS <>'C'
", FTempBomName, Convert.ToString(current["FSCOrderNo"]), Convert.ToString(current["FMatrailId_Id"]), Convert.ToString(current["FSRCBILLENTRYSEQ"]));
DataTable dt = new DataTable();
dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
if (dt.Rows.Count > 0)
_result += "序号:" + Convert.ToString(current["SEQ"]) + ",生产订单号:" + Convert.ToString(current["FSCOrderNo"]) + ",生产订单明细行号:" + Convert.ToString(current["FSRCBILLENTRYSEQ"]) + "物料" + (current["FMatrailId"] as DynamicObject)["Number"] + "对应的生产用料清单:" + dt.Rows[0][0] + "未审核\n";
}
}
else
{
foreach (DynamicObject current in entityDataObjoct)
{
//根据生产订单号和物料查询是否存在明细 +生产订单明细行号
sql = string.Format(@"
/*dialect*/
SELECT FBILLNO FROM {0} T1
WHERE T1.FSUBBILLNO = '{1}' AND T1.FMATERIALID = '{2}' AND T1.FSUBREQENTRYSEQ = '{3}' and FDOCUMENTSTATUS <>'C'
", FTempBomName, Convert.ToString(current["FSCOrderNo"]), Convert.ToString(current["FMatrailId_Id"]), Convert.ToString(current["FSRCBILLENTRYSEQ"]));
DataTable dt = new DataTable();
dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
if (dt.Rows.Count > 0)
_result += "序号:" + Convert.ToString(current["SEQ"]) + ",生产订单号:" + Convert.ToString(current["FSCOrderNo"]) + ",生产订单明细行号:" + Convert.ToString(current["FSRCBILLENTRYSEQ"]) + "物料" + (current["FMatrailId"] as DynamicObject)["Number"] + "对应的生产用料清单:" + dt.Rows[0][0] + "未审核\n";
}
}
if (_result != "")
{
this.View.ShowErrMessage(_result);
return;
}
foreach (DynamicObject current in entityDataObjoct)
{
//未排数量= 总数 - 日计划 超出日计划为负 - 历史数量 + 关闭数量 < 0 表示超出了总计划数量
if (Convert.ToInt32(current["FNoScheduled"]) - Convert.ToInt32(current["FQTYLS"]) + Convert.ToInt32(current["FCloseCount"]) < 0)
_result += "序号:" + Convert.ToString(current["SEQ"]) + ",日计划总数量超出生产订单数量\n";
}
if (_result != "")
{
this.View.ShowErrMessage(_result);
return;
}
List sqlList = new List();
foreach (DynamicObject current in entityDataObjoct)
{
if (Convert.ToString(current["FDayPlanID"]) == "0")
continue;
for (int i = 0; i <= 60; i++)
{
JObject jsonFPOOrderEntry = new JObject();
//重复导入的更新掉计划数量以及更新齐套状态为空
sql = string.Format($"update SC_WORKBILLSORTBILLSub set FHQTY ='{Convert.ToString(current["FT" + "" + i + ""])}',FCOMPLETE='' where FID ={Convert.ToString(current["FDayPlanID"])} and FHMASTERDATE ={date.AddDays(i).ToShortDateString()} and FHLOCKEDSUB = 0");
sqlList.Add(sql);
}
}
int res = DBServiceHelper.ExecuteBatch(Context, sqlList);
foreach (DynamicObject current in entityDataObjoct)
{
if (string.IsNullOrEmpty(Convert.ToString(current["FSCOrderNo"])))
continue;
//查询生产订单数据
sql = string.Format(@"
/*dialect*/
SELECT t4.FNAME as FMoFBillType,T1.FBILLNO,T2.*,t3.FNUMBER as FUnitNumber,tBom.FNUMBER as FBomNumber FROM {3} T1
LEFT JOIN {4} T2 ON T1.FID = T2.FID
LEFT JOIN T_ENG_BOM tBom on t2.FBOMID = tBom.FID
join T_BD_UNIT t3 on t2.FUNITID=t3.FUNITID
join ( select A.FBILLTYPEID,B.FNAME from T_BAS_BILLTYPE A
JOIN T_BAS_BILLTYPE_L B ON A.FBILLTYPEID =B.FBILLTYPEID
where FBILLFORMID in ('PRD_MO','SUB_SUBREQORDER') AND b.FLOCALEID = 2052)t4 on t1.FBILLTYPE =t4.FBILLTYPEID
WHERE T1.FBILLNO = '{0}' AND T2.FMATERIALID = '{1}' AND T2.FSEQ = '{2}'", Convert.ToString(current["FSCOrderNo"]), Convert.ToString(current["FMatrailId_Id"]), Convert.ToString(current["FSRCBILLENTRYSEQ"]), FTempName, FTempNameEntry);
DataTable dt = new DataTable();
dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
if (dt.Rows.Count == 0)
continue;
string FID = "";//FID 源单主内码
string FENTRYID = "";//FENTRYID 源单子内码
string FLOT = "";//FLOT 批次
string FQTY = "";//FQTY 生产订单数量
string FBILLNO = "";//FBILLNO 原单号
string FHUnitID = "";//单位
string FPlanBeginDate = "";//开始日期
string FPlanEndDate = "";//结束日期
string FMoFBillType = "";//
string FBomNumber = "";//Bom 版本
if (dt.Rows.Count > 0)
{
FID = dt.Rows[0]["FID"].ToString();
FENTRYID = dt.Rows[0]["FENTRYID"].ToString();
FLOT = dt.Rows[0]["FLOT"].ToString();
FQTY = dt.Rows[0]["FQTY"].ToString();
FBILLNO = dt.Rows[0]["FBILLNO"].ToString();
FHUnitID = dt.Rows[0]["FUnitNumber"].ToString();
FPlanBeginDate = dt.Rows[0]["FPlanStartDate"].ToString();
FPlanEndDate = dt.Rows[0]["FPlanFinishDate"].ToString();
FMoFBillType = dt.Rows[0]["FMoFBillType"].ToString();
FBomNumber = dt.Rows[0]["FBomNumber"].ToString();
}
JObject jsonRoot = new JObject();
jsonRoot.Add("Creator", "");
jsonRoot.Add("NeedUpDateFields", new JArray());
jsonRoot.Add("NeedReturnFields", new JArray());
jsonRoot.Add("IsDeleteEntry", "false");
jsonRoot.Add("SubSystemId", "");
jsonRoot.Add("IsVerifyBaseDataField", "");
JObject jsonModel = new JObject();
jsonModel.Add("FPreparatDate", FPlanBeginDate);//编制日期(改为计划开始日期)
jsonModel.Add("FMoFBillType", FMoFBillType);//
jsonModel.Add("FOrderType", FOrderType);//
jsonModel.Add("FSRCBILLENTRYSEQ", Convert.ToString(current["FSRCBILLENTRYSEQ"]));//生产订单明细行号
jsonModel.Add("FSCOrderNo", Convert.ToString(current["FSCOrderNo"])); //生产订单号FSCOrderNo
jsonModel.Add("FHSeOrderBillNo", Convert.ToString(current["FSalOrderNo"]));//销售订单号
//jsonModel.Add("FHOrderLev", current["FOrderLevel"].ToString());//订单等级
jsonModel.Add("FHOrderQty", Convert.ToString(current["FSalOrderCount"]));//销售订单数量
//jsonModel.Add("FHOrderCommitDate", Convert.ToString(current["FDeliveryDate"]));//交货期HOrderCommitDate
jsonModel.Add("FHUnitID", new JObject() { ["Fnumber"] = FHUnitID });//单位
jsonModel.Add("FPriority", Convert.ToString(current["FPriority"]));////优先级
jsonModel.Add("FBOMID", new JObject() { ["Fnumber"] = FBomNumber });//BOM版本
jsonModel.Add("FHPlanBeginDate", FPlanBeginDate);//计划开始日期
jsonModel.Add("FHPlanEndDate", FPlanEndDate);//计划完工日期
//jsonModel.Add("FBatch", current["FBatch"].ToString());//批次
jsonModel.Add("FBatch", FLOT);//批次
jsonModel.Add("FHOrderNeedQty", FQTY);// 订单需求数量
jsonModel.Add("FCDQuantity", FQTY);// 拆单数量
jsonModel.Add("FPrdBillNo", FBILLNO); ;//源单编号
jsonModel.Add("FPRDMOMAINID", FID); ;//源单主内码
jsonModel.Add("FPRDMOENTYID", FENTRYID); ;//源单子内码
jsonModel.Add("FMoFID", FID); ;//源单主内码
jsonModel.Add("FMoFentryId", FENTRYID); ;//源单子内码
jsonModel.Add("FOrderQuantity", Convert.ToString(current["FOrderQuantity"])); ;//生产订单数量
jsonModel.Add("FDayPlanQuantity", Convert.ToString(current["FDayPlanQuantity"])); ;//日计划数量
jsonModel.Add("FNoScheduled", Convert.ToString(current["FNoScheduled"])); ;//未排数量
JObject jsonFHMaterID = new JObject();
jsonFHMaterID.Add("FNumber", (current["FMatrailId"] as DynamicObject)["Number"].ToString());
jsonModel.Add("FHMaterID", jsonFHMaterID);//FHMaterID 物料
if (Convert.ToString(current["FORGID_Id"]) != "0")
{
JObject jsonFHPRDORGID = new JObject();
jsonFHPRDORGID.Add("FNumber", (current["FORGID"] as DynamicObject)["Number"].ToString());
jsonModel.Add("FHPRDORGID", jsonFHPRDORGID);//FHMaterID 生产组织
}
if (Convert.ToString(current["FResourcesId_Id"]) != "0")
{
JObject jsonFProductWorkShopId = new JObject();
jsonFProductWorkShopId.Add("FNumber", (current["FResourcesId"] as DynamicObject)["Number"].ToString());
jsonModel.Add("FHSourceID", jsonFProductWorkShopId);//FHSourceID 生产车间
}
if (Convert.ToString(current["FProductWorkShopId_Id"]) != "0")
{
JObject jsonFResourcesId = new JObject();
jsonFResourcesId.Add("FNumber", (current["FProductWorkShopId"] as DynamicObject)["Number"].ToString());
jsonModel.Add("FHWorkShopID", jsonFResourcesId);//FHWorkShopID 生产资源
}
if (Convert.ToString(current["FEmpID_Id"]) != "0")
{
JObject jsonFEmpID = new JObject();
jsonFEmpID.Add("FSTAFFNUMBER", (current["FEmpID"] as DynamicObject)["FStaffNumber"].ToString());
jsonModel.Add("FEmpID", jsonFEmpID);//FHWorkShopID 人员
}
JArray Entry = new JArray();
if (Convert.ToString(current["FDayPlanID"]) != "0")
{
sql = $" /*dialect*/ select FEntryID, FHMASTERDATE from SC_WORKBILLSORTBILLSub where FID={Convert.ToString(current["FDayPlanID"])} ";
List dayPlanModel = new List();
dayPlanModel = DBServiceHelper.ExecuteDataSet(Context, sql).ToModelList();
for (int i = 0; i <= 60; i++)
{
if (Convert.ToString(current["FT" + "" + i + ""]) == "" || Convert.ToString(current["FT" + "" + i + ""]) == "0")
continue;
JObject jsonFPOOrderEntry = new JObject();
jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(i).ToShortDateString()); ;//主日期
jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT" + "" + i + ""])); ;//日计划数量
jsonFPOOrderEntry.Add("FColumn", "FT" + "" + i + ""); ;//对应的列头
List _dayPlanModel = dayPlanModel.Where(x => x.FHMASTERDATE == date.AddDays(i)).ToList();
if (_dayPlanModel.Count > 0)
{
jsonFPOOrderEntry.Add("FEntryID", _dayPlanModel.FirstOrDefault().FEntryID); ;//序号
}
Entry.Add(jsonFPOOrderEntry);
}
jsonModel.Add("FEntity", Entry);
jsonModel.Add("FID", Convert.ToString(current["FDayPlanID"]));
jsonRoot.Add("Model", jsonModel);
var result = cloudClient.Save("Paez_Sc_WorkBillAutoSortBill", jsonRoot.ToString());
JObject saveObj = JObject.Parse(result);
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
if (saveIsSuc == "TRUE")
{
string FDayPlanBillNo = saveObj["Result"]["Number"].ToString();
string FDayPlanID = saveObj["Result"]["Id"].ToString();
this.View.ShowMessage("导入成功");
}
else
{
//LogHelper.Error("生产日计划导入 新增异常:" + saveObj.ToString());
this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
}
}
else
{
for (int i = 0; i <= 60; i++)
{
if (Convert.ToString(current["FT" + "" + i + ""]) == "" || Convert.ToString(current["FT" + "" + i + ""]) == "0")
continue;
JObject jsonFPOOrderEntry = new JObject();
jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(i).ToShortDateString()); ;//主日期
jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT" + "" + i + ""])); ;//日计划数量
jsonFPOOrderEntry.Add("FColumn", "FT" + "" + i + ""); ;//对应的列头
Entry.Add(jsonFPOOrderEntry);
}
jsonModel.Add("FEntity", Entry);
jsonRoot.Add("Model", jsonModel);
var result = cloudClient.Save("Paez_Sc_WorkBillAutoSortBill", jsonRoot.ToString());
JObject saveObj = JObject.Parse(result);
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
if (saveIsSuc == "TRUE")
{
string FDayPlanBillNo = saveObj["Result"]["Number"].ToString();
string FDayPlanID = saveObj["Result"]["Id"].ToString();
this.Model.SetValue("FDayPlanBillNo", FDayPlanBillNo, Convert.ToInt32(current["SEQ"]) - 1);//
this.Model.SetValue("FDayPlanID", FDayPlanID, Convert.ToInt32(current["SEQ"]) - 1);//
this.View.ShowMessage("导入成功");
}
else
{
//LogHelper.Error("生产日计划导入 新增异常:" + saveObj.ToString());
this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
}
}
this.View.UpdateView();
}
}
catch (Exception ex)
{
//LogHelper.Error(ex.ToString());
this.View.ShowErrMessage(ex.ToString());
}
}
///
/// 数字转换时间格式
///
/// 数字,如:42095.7069444444/0.650694444444444
/// 日期/时间格式
private string ToDateTimeValue(string strNumber)
{
if (!string.IsNullOrWhiteSpace(strNumber))
{
Decimal tempValue;
//先检查 是不是数字;
if (Decimal.TryParse(strNumber, out tempValue))
{
//天数,取整
int day = Convert.ToInt32(Math.Truncate(tempValue));
//这里也不知道为什么. 如果是小于32,则减1,否则减2
//日期从1900-01-01开始累加
// day = day < 32 ? day - 1 : day - 2;
DateTime dt = new DateTime(1900, 1, 1).AddDays(day < 32 ? (day - 1) : (day - 2));
//小时:减掉天数,这个数字转换小时:(* 24)
Decimal hourTemp = (tempValue - day) * 24;//获取小时数
//取整.小时数
int hour = Convert.ToInt32(Math.Truncate(hourTemp));
//分钟:减掉小时,( * 60)
//这里舍入,否则取值会有1分钟误差.
Decimal minuteTemp = Math.Round((hourTemp - hour) * 60, 2);//获取分钟数
int minute = Convert.ToInt32(Math.Truncate(minuteTemp));
//秒:减掉分钟,( * 60)
//这里舍入,否则取值会有1秒误差.
Decimal secondTemp = Math.Round((minuteTemp - minute) * 60, 2);//获取秒数
int second = Convert.ToInt32(Math.Truncate(secondTemp));
//时间格式:00:00:00
string resultTimes = string.Format("{0}:{1}:{2}",
(hour < 10 ? ("0" + hour) : hour.ToString()),
(minute < 10 ? ("0" + minute) : minute.ToString()),
(second < 10 ? ("0" + second) : second.ToString()));
if (day > 0)
return string.Format("{0} {1}", dt.ToString("yyyy-MM-dd"), resultTimes);
else
return resultTimes;
}
}
return string.Empty;
}
public void WriteImportLog()
{
try
{
CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
string sql;
DateTime date = Convert.ToDateTime(this.Model.GetValue("F_Paez_Date"));
//获取单据体信息
Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
//单据体信息转换为列表集合
DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
foreach (DynamicObject current in entityDataObjoct)
{
if (string.IsNullOrEmpty(Convert.ToString(current["FSCOrderNo"])))
continue;
//根据生产订单号和物料查询是否存在明细 +生产订单明细行号
sql = string.Format(@"
/*dialect*/
SELECT T1.FBILLNO,T2.*,t3.FNUMBER as FUnitNumber FROM T_PRD_MO T1
LEFT JOIN T_PRD_MOENTRY T2 ON T1.FID = T2.FID
join T_BD_UNIT t3 on t2.FUNITID=t3.FUNITID
WHERE T1.FBILLNO = '{0}' AND T2.FMATERIALID = '{1}' AND T2.FSEQ = '{2}'", Convert.ToString(current["FSCOrderNo"]), Convert.ToString(current["FMatrailId_Id"]), Convert.ToString(current["FSRCBILLENTRYSEQ"]));
DataTable dt = new DataTable();
dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
if (dt.Rows.Count == 0)
continue;
string FID = "";//FID 源单主内码
string FENTRYID = "";//FENTRYID 源单子内码
string FLOT = "";//FLOT 批次
string FQTY = "";//FQTY 生产订单数量
string FBILLNO = "";//FBILLNO 原单号
string FHUnitID = "";//单位
string FPlanBeginDate = "";//开始日期
string FPlanEndDate = "";//结束日期
if (dt.Rows.Count > 0)
{
FID = dt.Rows[0]["FID"].ToString();
FENTRYID = dt.Rows[0]["FENTRYID"].ToString();
FLOT = dt.Rows[0]["FLOT"].ToString();
FQTY = dt.Rows[0]["FQTY"].ToString();
FBILLNO = dt.Rows[0]["FBILLNO"].ToString();
FHUnitID = dt.Rows[0]["FUnitNumber"].ToString();
FPlanBeginDate = dt.Rows[0]["FPlanStartDate"].ToString();
FPlanEndDate = dt.Rows[0]["FPlanFinishDate"].ToString();
}
JObject jsonRoot = new JObject();
jsonRoot.Add("Creator", "");
jsonRoot.Add("NeedUpDateFields", new JArray());
jsonRoot.Add("NeedReturnFields", new JArray());
jsonRoot.Add("IsDeleteEntry", "false");
jsonRoot.Add("SubSystemId", "");
jsonRoot.Add("IsVerifyBaseDataField", "");
JObject jsonModel = new JObject();
jsonModel.Add("FPreparatDate", date.ToString());//编制日期
jsonModel.Add("FSRCBILLENTRYSEQ", Convert.ToString(current["FSRCBILLENTRYSEQ"]));//生产订单明细行号
jsonModel.Add("FSCOrderNo", Convert.ToString(current["FSCOrderNo"])); //生产订单号FSCOrderNo
jsonModel.Add("FHSeOrderBillNo", Convert.ToString(current["FSalOrderNo"]));//销售订单号
jsonModel.Add("FHOrderLev", current["FOrderLevel"].ToString());//订单等级
jsonModel.Add("FHOrderQty", Convert.ToString(current["FSalOrderCount"]));//销售订单数量
jsonModel.Add("FHOrderCommitDate", Convert.ToString(current["FDeliveryDate"]));//交货期HOrderCommitDate
jsonModel.Add("FHUnitID", new JObject() { ["Fnumber"] = FHUnitID });//单位
jsonModel.Add("FHPlanBeginDate", FPlanBeginDate);//计划开始日期
jsonModel.Add("FHPlanEndDate", FPlanEndDate);//计划完工日期
//jsonModel.Add("FBatch", current["FBatch"].ToString());//批次
jsonModel.Add("FBatch", FLOT);//批次
jsonModel.Add("FHOrderNeedQty", FQTY);// 订单需求数量
jsonModel.Add("FPrdBillNo", FBILLNO); ;//源单编号
jsonModel.Add("FPRDMOMAINID", FID); ;//源单主内码
jsonModel.Add("FPRDMOENTYID", FENTRYID); ;//源单子内码
jsonModel.Add("FMoFID", FID); ;//源单主内码
jsonModel.Add("FMoFentryId", FENTRYID); ;//源单子内码
jsonModel.Add("FOrderQuantity", Convert.ToString(current["FOrderQuantity"])); ;//生产订单数量
jsonModel.Add("FDayPlanQuantity", Convert.ToString(current["FDayPlanQuantity"])); ;//日计划数量
jsonModel.Add("FNoScheduled", Convert.ToString(current["FNoScheduled"])); ;//未排数量
JObject jsonFHMaterID = new JObject();
jsonFHMaterID.Add("FNumber", (current["FMatrailId"] as DynamicObject)["Number"].ToString());
jsonModel.Add("FHMaterID", jsonFHMaterID);//FHMaterID 物料
if (Convert.ToString(current["FORGID_Id"]) != "0")
{
JObject jsonFHPRDORGID = new JObject();
jsonFHPRDORGID.Add("FNumber", (current["FORGID"] as DynamicObject)["Number"].ToString());
jsonModel.Add("FHPRDORGID", jsonFHPRDORGID);//FHMaterID 生产组织
}
if (Convert.ToString(current["FResourcesId_Id"]) != "0")
{
JObject jsonFProductWorkShopId = new JObject();
jsonFProductWorkShopId.Add("FNumber", (current["FResourcesId"] as DynamicObject)["Number"].ToString());
jsonModel.Add("FHSourceID", jsonFProductWorkShopId);//FHSourceID 生产车间
}
if (Convert.ToString(current["FProductWorkShopId_Id"]) != "0")
{
JObject jsonFResourcesId = new JObject();
jsonFResourcesId.Add("FNumber", (current["FProductWorkShopId"] as DynamicObject)["Number"].ToString());
jsonModel.Add("FHWorkShopID", jsonFResourcesId);//FHWorkShopID 生产资源
}
JArray Entry = new JArray();
for (int i = 0; i <= 60; i++)
{
if (Convert.ToString(current["FT" + "" + i + ""]) == "" || Convert.ToString(current["FT" + "" + i + ""]) == "0")
continue;
JObject jsonFPOOrderEntry = new JObject();
jsonFPOOrderEntry.Add("FHMasterDate", date.AddDays(i).ToShortDateString()); ;//主日期
jsonFPOOrderEntry.Add("FHQty ", Convert.ToString(current["FT" + "" + i + ""])); ;//日计划数量
jsonFPOOrderEntry.Add("FColumn", "FT" + "" + i + ""); ;//对应的列头
Entry.Add(jsonFPOOrderEntry);
}
jsonModel.Add("FEntity", Entry);
jsonRoot.Add("Model", jsonModel);
var result = cloudClient.Save("paez_Sc_WorkBillAutoSortBill_Log", jsonRoot.ToString());
JObject saveObj = JObject.Parse(result);
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
if (saveIsSuc != "TRUE")
{
//LogHelper.Error("生产日计划导入记录日志,新增异常json:" + jsonRoot.ToString());
}
}
}
catch (Exception ex)
{
//LogHelper.Error("生产日计划导入记录日志跳出:" + ex.Message.ToString());
}
}
///
/// dt去空行
///
///
public void RemoveEmpty(DataTable dt)
{
List removelist = new List();
for (int i = 0; i < dt.Rows.Count; i++)
{
bool IsNull = true;
for (int j = 0; j < dt.Columns.Count; j++)
{
if (!string.IsNullOrEmpty(dt.Rows[i][j].ToString().Trim()))
{
IsNull = false;
}
}
if (IsNull)
{
removelist.Add(dt.Rows[i]);
}
}
for (int i = 0; i < removelist.Count; i++)
{
dt.Rows.Remove(removelist[i]);
}
}
///
/// 检查上传文件模板表头
///
///
///
///
public string CheckUploadFileTitle(DataTable dt, string[] fileTitle, out Dictionary dicCol, int titleRow = 0, string[] arrFileTitle = null)
{
dicCol = new Dictionary();
try
{
StringBuilder checkTitleInfo = new StringBuilder();
if (fileTitle != null && fileTitle.Length > 0)
{
foreach (var item in fileTitle)
{
if (item == "") { continue; }
bool isHasCol = false;
for (int i = 0; i < dt.Columns.Count; i++)
{
//string title = Regex.Replace(dt.Rows[titleRow][i].ToString(), @"[/n/r]", "");
string title = dt.Rows[titleRow][i].ToString().Replace("\n", ""); //去除换行
if (title.Contains(item))
{
isHasCol = true;
if (!dicCol.ContainsKey(item))
dicCol.Add(item, "F" + (i + 1).ToString());
//过滤非法字符单引号
DataRow[] drs = dt.Select("F" + (i + 1).ToString() + " like'%''%'");
if (drs != null && drs.Length > 0)
return "列[" + item + "]中存在不允许字符(半角单引号):',请改成全角单引号或其他";
}
}
if (!isHasCol)
{
checkTitleInfo.AppendLine("模板中不存在[" + item + "]");
}
}
}
return checkTitleInfo.ToString();
}
catch
{
return "模板文件错误,请检查.";
}
}
}
}