using Newtonsoft.Json.Linq;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.IO;
|
using System.Net;
|
using System.Net.Http;
|
using System.Web;
|
using System.Web.Http;
|
using WebAPI.Code;
|
using WebAPI.Models;
|
namespace WebAPI.Controllers
|
{
|
public class POOrderBillExcelController : ApiController
|
{
|
private JsonResult objJsonResult = new JsonResult();
|
SQLHelper.ClsCNSRM oCn = new SQLHelper.ClsCNSRM();
|
|
#region 采购订单 查询
|
[Route("POOrderBillExcel/POOrderBillExcelList")]
|
[HttpGet]
|
public object POOrderBillExcelList(string sqlWhere)
|
{
|
DataSet ds = new DataSet();
|
DataSet ds1 = new DataSet();
|
DataTable dt = new DataTable();
|
try
|
{
|
ds = oCn.RunProcReturn("select * from POOrderBill_Excel ", "POOrderBill_Excel");
|
|
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
|
{
|
ds1 = oCn.RunProcReturn($"exec h_p_POOrderBill_Excel {ds.Tables[0].Rows[i]["HQty"].ToString()},'{ds.Tables[0].Rows[i]["MaterialNum"].ToString()}','1'", "POOrderBill_Excel");
|
|
if (i == 0)
|
{
|
dt = ds1.Tables[0];
|
}
|
else
|
{
|
foreach (DataRow item in ds1.Tables[0].Rows)
|
{
|
DataRow dataRow = dt.NewRow();
|
dataRow.ItemArray = item.ItemArray;
|
dt.Rows.Add(dataRow);
|
}
|
}
|
|
}
|
objJsonResult.code = "1";
|
objJsonResult.count = 1;
|
objJsonResult.Message = "";
|
objJsonResult.data = dt;
|
return objJsonResult;
|
}
|
catch (Exception e)
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = "获取失败" + e.ToString();
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
|
}
|
#endregion
|
|
#region 采购订单 文件上传
|
[Route("POOrderBillExcel/POOrderBillExcelImport")]
|
[HttpPost]
|
public object POOrderBillExcelImport()
|
{
|
try
|
{
|
//获取文件名称
|
var file = HttpContext.Current.Request.Files[0];
|
//获取文件物理路径
|
string ExcelPath = HttpContext.Current.Server.MapPath("~/" + file.FileName);
|
//保存文件
|
file.SaveAs(ExcelPath);
|
|
NpoiHelper np = new NpoiHelper();
|
DataSet ExcelDs = np.ReadExcel(ExcelPath, 1, 1, "0");
|
|
//删除文件
|
File.Delete(ExcelPath);
|
|
//创建临时表
|
DataTable tb2 = new DataTable("dt2");
|
|
//添加列名
|
for (int i = 0; i < ExcelDs.Tables[0].Columns.Count; i++)
|
{
|
tb2.Columns.Add(ExcelDs.Tables[0].Rows[0][i].ToString());
|
}
|
|
//添加数据
|
for (int i = 1; i < ExcelDs.Tables[0].Rows.Count; i++)
|
{
|
DataRow row = tb2.NewRow();
|
for (int j = 0; j < ExcelDs.Tables[0].Columns.Count; j++)
|
{
|
row[j] = ExcelDs.Tables[0].Rows[i][j].ToString();
|
}
|
tb2.Rows.Add(row);
|
}
|
|
|
var error = "";
|
|
//查询工艺路线没有的列
|
if (!tb2.Columns.Contains("组织"))
|
error += "没有找到【组织】的标题,";
|
|
if (!tb2.Columns.Contains("供应商"))
|
error += "没有找到【供应商】的标题,";
|
|
if (!tb2.Columns.Contains("收料仓库"))
|
error += "没有找到【收料仓库】的标题,";
|
|
if (!tb2.Columns.Contains("物料编码"))
|
error += "没有找到【物料编码】的标题,";
|
|
if (!tb2.Columns.Contains("数量"))
|
error += "没有找到【数量】的标题,";
|
|
if (!tb2.Columns.Contains("包装标识"))
|
error += "没有找到【包装标识】的标题,";
|
|
if (error.Length > 0)
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = $"Excel模板存在错误,{error}\r\n";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
|
//判断数据是否为空
|
for (int i = 0; i < tb2.Rows.Count; i++)
|
{
|
for (int j = 0; j < tb2.Columns.Count; j++)
|
{
|
if (tb2.Rows[i][j].ToString() == ""&& tb2.Columns[j].ToString()!= "包装标识")
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = $"Excel模板存在错误,第{(i + 1)}行第{(j + 1)}列值不能为空!\r\n";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
}
|
}
|
|
//检查物料 是否存在
|
objJsonResult = (JsonResult)Checkdata(tb2);
|
if (objJsonResult.code == "0")
|
{
|
return objJsonResult;
|
}
|
else
|
{
|
oCn.RunProc("delete from POOrderBill_Excel");
|
for (int i = 0; i < tb2.Rows.Count; i++)
|
{
|
oCn.RunProc("insert into POOrderBill_Excel(HItemID,HORGName, SupplierName, Warehouse_Shou," +
|
" MaterialNum, HQty, HPackFlag)values" +
|
$"({(i + 1)},'{tb2.Rows[i]["组织"].ToString()}', '{tb2.Rows[i]["供应商"].ToString()}', '{tb2.Rows[i]["收料仓库"].ToString()}', " +
|
$"'{tb2.Rows[i]["物料编码"].ToString()}', {tb2.Rows[i]["数量"].ToString()}, '{tb2.Rows[i]["包装标识"].ToString()}')");
|
}
|
|
objJsonResult.code = "1";
|
objJsonResult.count = 1;
|
objJsonResult.Message = error;
|
objJsonResult.data = tb2;
|
return objJsonResult;
|
}
|
}
|
catch (Exception e)
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = "Exception!" + e.ToString();
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
}
|
|
//检查物料 是否存在
|
private object Checkdata(DataTable dt)
|
{
|
DataSet ds = new DataSet();
|
for (int i = 0; i < dt.Rows.Count; i++)
|
{
|
//组织
|
ds = oCn.RunProcReturn("select * from Xt_ORGANIZATIONS where Hname='" + dt.Rows[i]["组织"].ToString() + "' ", "Xt_ORGANIZATIONS");
|
if (ds.Tables[0].Rows.Count == 0)
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = $"第{(i + 1)}行,组织为{dt.Rows[i]["组织"].ToString()}不存在!";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
|
//供应商
|
ds = oCn.RunProcReturn("select * from Gy_Supplier where Hname='" + dt.Rows[i]["供应商"].ToString() + "' ", "Gy_Supplier");
|
if (ds.Tables[0].Rows.Count == 0)
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = $"第{(i + 1)}行,供应商为{dt.Rows[i]["供应商"].ToString()}不存在!";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
|
//收料仓库
|
ds = oCn.RunProcReturn("select * from Gy_Warehouse where Hname='" + dt.Rows[i]["收料仓库"].ToString() + "' ", "Gy_Warehouse");
|
if (ds.Tables[0].Rows.Count == 0)
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = $"第{(i + 1)}行,收料仓库为{dt.Rows[i]["收料仓库"].ToString()}不存在!";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
|
//物料编码
|
if (!DBUtility.ClsPub.AllowNumber(dt.Rows[i]["物料编码"].ToString()))
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = "物料代码中不能出现连续‘.’并且首位末位不能为‘.’!";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
ds = oCn.RunProcReturn("select * from Gy_Material where HNumber='" + dt.Rows[i]["物料编码"].ToString() + "' ", "Gy_Material");
|
if (ds.Tables[0].Rows.Count == 0)
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = $"第{(i + 1)}行,物料编码为{dt.Rows[i]["物料编码"].ToString()}不存在!";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
|
//数量
|
if (dt.Rows[i]["数量"].ToString() == "0")
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = $"第{(i + 1)}行,数量不为0!";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
|
//判断导入物料的数量是否大于单据物料的总和数量
|
ds = oCn.RunProcReturn("select * from h_v_POOrderBill_Excel " +
|
$"where 采购组织='{dt.Rows[i]["组织"].ToString()}' and 供应商='{dt.Rows[i]["供应商"].ToString()}' " +
|
$"and 包装标识='{dt.Rows[i]["包装标识"].ToString()}'" +
|
$"and 物料编码='{dt.Rows[i]["物料编码"].ToString()}' and 关闭状态='未关闭' ", "h_v_POOrderBill_Excel");
|
if (ds.Tables[0].Rows.Count != 0)
|
{
|
double NumCount = 0;//总数量
|
foreach (DataRow item in ds.Tables[0].Rows)
|
{
|
NumCount += double.Parse(item["剩余收料数量"].ToString());
|
}
|
|
if (NumCount < double.Parse(dt.Rows[i]["数量"].ToString()))
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = $"第{(i + 1)}行导入数量大于采购订单合计数量,请找采购员申请做采购订单!";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
}
|
else
|
{
|
objJsonResult.code = "0";
|
objJsonResult.count = 0;
|
objJsonResult.Message = $"第{(i + 1)}行,匹配不到数据信息!";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
}
|
|
objJsonResult.code = "1";
|
objJsonResult.count = 1;
|
objJsonResult.Message = "没有问题";
|
objJsonResult.data = null;
|
return objJsonResult;
|
}
|
#endregion
|
|
|
}
|
}
|