You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/DSWeb/Areas/Dispatch/Controllers/StockController.cs

472 lines
18 KiB
C#

using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using DSWeb.Areas.CommMng.DAL;
using DSWeb.Areas.Dispatch.DB;
using DSWeb.Areas.Dispatch.Helper;
using DSWeb.Areas.Dispatch.Models;
using DSWeb.Dispatch.DAL;
using Newtonsoft.Json;
using NPOI;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.Util;
using DSWeb.SoftMng.Filter;
namespace DSWeb.Areas.Dispatch.Controllers
{
public class StockController : Controller
{
private StockDataContext stockDataContext = new StockDataContext();
public ActionResult StockTakeList(string openid)
{
var infoClient = stockDataContext.DispInfoClients.FirstOrDefault(c => c.OpenId == openid);
if (infoClient == null || infoClient.IsAudit == false)
{
return Redirect(Url.Action("Regist", "Stock", new { openid = openid }));
}
ViewData["openid"] = openid;
return View();
}
[SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器
public ActionResult StockTakeListData(string openid, string condition, int page = 1, int pageSize = 20)
{
var infoClient = stockDataContext.DispInfoClients.FirstOrDefault(c => c.OpenId == openid);
if (infoClient == null)
{
return Json(new { success = false, message = "非法请求" }, JsonRequestBehavior.AllowGet);
}
if (!infoClient.IsAudit)
{
return Json(new { success = false, message = "未审核用户" }, JsonRequestBehavior.AllowGet);
}
var para = stockDataContext.ParamSets.First(p => p.PARAMNAME == "STOCK_TAKE_CUSTOMS_INFO_CLIENT");
var customsInfoClient = para.PARAMVALUE; //海关用户的infoclient
bool isCustoms = infoClient.InfoClient == customsInfoClient;
var query = from st in stockDataContext.VStockTakes.AsNoTracking()
join c in stockDataContext.InfoClients.AsNoTracking() on st.CUSTOMERNAME equals c.SHORTNAME
orderby c.EDICODE
select new
{
st.GOODSNAME,
st.hj_GOODSPACKSTOCK,
st.WeiWanShui,
KeFaHuo = st.GOODSNUM - st.hj_GOODSPACKPFSL,
st.hj_GOODSPACK,
st.BLNO,
st.CONTRACTNO,
st.STORAGENAME,
st.CUSTOMERNAME
};
#region 查询条件
if (!string.IsNullOrEmpty(condition))
{
var objCond = JsonConvert.DeserializeAnonymousType(condition, new { blno = "", contractno = "", goodsname = "", stockstatus = "" });
if (!string.IsNullOrEmpty(objCond.blno))
{
query = query.Where(st => st.BLNO.IndexOf(objCond.blno) > -1);
}
if (!string.IsNullOrEmpty(objCond.contractno))
{
query = query.Where(st => st.CONTRACTNO.IndexOf(objCond.contractno) > -1);
}
if (!string.IsNullOrEmpty(objCond.goodsname))
{
query = query.Where(st => st.GOODSNAME.IndexOf(objCond.goodsname) > -1);
}
if (objCond.stockstatus == "1")
{
query = query.Where(st => st.hj_GOODSPACKSTOCK != 0);
}
else if (objCond.stockstatus == "2")
{
query = query.Where(st => st.hj_GOODSPACKSTOCK == 0);
}
}
#endregion
//判断用户类型
if (isCustoms)
{
var canViewList = stockDataContext.SysEnumValues.Where(em => em.EnumTypeID == 92101).Select(em => em.EnumValueName).ToList();
query = query.Where(st => canViewList.Contains(st.STORAGENAME));
}
else
{
query = query.Where(st => st.CUSTOMERNAME == infoClient.InfoClient);
}
var count = query.Count();
var list = query.Skip((page - 1) * pageSize).Take(pageSize).ToList();
return Json(new { success = true, total = count, page, pageSize, list }, JsonRequestBehavior.AllowGet);
}
[SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器
public ActionResult StockTakeExport(string openid, string condition)
{
var infoClient = stockDataContext.DispInfoClients.FirstOrDefault(c => c.OpenId == openid);
if (infoClient == null)
{
return Content("非法请求");
}
if (!infoClient.IsAudit)
{
return Content("未审核用户");
}
var para = stockDataContext.ParamSets.First(p => p.PARAMNAME == "STOCK_TAKE_CUSTOMS_INFO_CLIENT");
var customsInfoClient = para.PARAMVALUE; //海关用户的infoclient
bool isCustoms = infoClient.InfoClient == customsInfoClient;
var query = from st in stockDataContext.VStockTakes.AsNoTracking()
join c in stockDataContext.InfoClients.AsNoTracking() on st.CUSTOMERNAME equals c.SHORTNAME
orderby c.EDICODE
select new
{
st.NID,
st.GOODSNAME,
st.hj_GOODSPACKSTOCK,
st.WeiWanShui,
KeFaHuo = st.GOODSNUM - st.hj_GOODSPACKPFSL,
st.hj_GOODSPACK,
st.BLNO,
st.CONTRACTNO,
st.STORAGENAME,
st.CUSTOMERNAME
};
#region 查询条件
if (!string.IsNullOrEmpty(condition))
{
var objCond = JsonConvert.DeserializeAnonymousType(condition, new { blno = "", contractno = "", goodsname = "", stockstatus = "" });
if (!string.IsNullOrEmpty(objCond.blno))
{
query = query.Where(st => st.BLNO.IndexOf(objCond.blno) > -1);
}
if (!string.IsNullOrEmpty(objCond.contractno))
{
query = query.Where(st => st.CONTRACTNO.IndexOf(objCond.contractno) > -1);
}
if (!string.IsNullOrEmpty(objCond.goodsname))
{
query = query.Where(st => st.GOODSNAME.IndexOf(objCond.goodsname) > -1);
}
if (objCond.stockstatus == "1")
{
query = query.Where(st => st.hj_GOODSPACKSTOCK != 0);
}
else if (objCond.stockstatus == "2")
{
query = query.Where(st => st.hj_GOODSPACKSTOCK == 0);
}
}
#endregion
//判断用户类型
if (isCustoms)
{
var canViewList = stockDataContext.SysEnumValues.Where(em => em.EnumTypeID == 92101).Select(em => em.EnumValueName).ToList();
query = query.Where(st => canViewList.Contains(st.STORAGENAME));
}
else
{
query = query.Where(st => st.CUSTOMERNAME == infoClient.InfoClient);
}
var list = query.ToList();
var groupList1 = list.Where(x => x.STORAGENAME == "百佳仓库" || x.STORAGENAME == "外包城仓库").ToList();
var groupList2 = list.Where(x => x.STORAGENAME == "指南针仓库" || x.STORAGENAME == "高盛力诺仓库" || x.STORAGENAME == "分类监管--百佳库").ToList();
var groupList3 = list.Where(x => groupList1.Count(c => c.NID == x.NID) == 0 && groupList2.Count(c => c.NID == x.NID) == 0).ToList();
var listArr = new[] {
new{
title ="未完税仓库",
list =groupList1,
color=HSSFColor.LightBlue.Index
},
new{
title ="完税仓库",
list =groupList2,
color=HSSFColor.LightGreen.Index
},
new{
title ="其他仓库",
list =groupList3,
color=HSSFColor.LightOrange.Index
}
};
#region 导出excel
IWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("库存数据");
IFont fontHead = workbook.CreateFont();
fontHead.FontHeightInPoints = 12;
fontHead.Boldweight = (short)FontBoldWeight.Bold;
#region headStyle
ICellStyle headStyle = workbook.CreateCellStyle();
headStyle.SetFont(fontHead);
//- 居中
headStyle.VerticalAlignment = VerticalAlignment.Center;
headStyle.Alignment = HorizontalAlignment.Center;
#endregion
IFont fontData = workbook.CreateFont();
fontData.FontHeightInPoints = 10;
fontData.Boldweight = (short)FontBoldWeight.Normal;
#region dataStyle
ICellStyle dataStyleLeft = workbook.CreateCellStyle();
dataStyleLeft.SetFont(fontData);
dataStyleLeft.Alignment = HorizontalAlignment.Left;
ICellStyle dataStyleCenter = workbook.CreateCellStyle();
dataStyleCenter.SetFont(fontData);
dataStyleCenter.Alignment = HorizontalAlignment.Center;
ICellStyle dataStyleRight = workbook.CreateCellStyle();
dataStyleRight.SetFont(fontData);
dataStyleRight.Alignment = HorizontalAlignment.Right;
#endregion
IFont fontCate = workbook.CreateFont();
fontCate.FontHeightInPoints = 14;
fontCate.Boldweight = (short)FontBoldWeight.Normal;
#region cateStyle
ICellStyle cateStyle = workbook.CreateCellStyle();
cateStyle.SetFont(fontCate);
cateStyle.Alignment = HorizontalAlignment.Center;
cateStyle.VerticalAlignment = VerticalAlignment.Center;
cateStyle.Rotation = 255;
cateStyle.FillPattern = FillPattern.SolidForeground;
//cateStyle.FillForegroundColor = HSSFColor.PINK.index;
#endregion
dynamic[] headers = new dynamic[] {
new { value = "", width = 5, dataAlign="left" },
new { value = "品名", width = 100, dataAlign="left" },
new { value = "提单号", width = 20, dataAlign="center" },
new { value = "入库件数", width = 15, dataAlign="right" },
new { value = "库存件数", width = 15, dataAlign="right" },
new { value = "未完税件数", width = 15, dataAlign="right" },
new { value = "可发货件数", width = 15, dataAlign="right" },
new { value = "合同号", width = 20, dataAlign="center" }
};
IRow headerRow = sheet.CreateRow(0);
headerRow.Height = 20 * 20;
for (int j = 0; j < headers.Length; j++)
{
ICell cell = headerRow.CreateCell(j);
cell.CellStyle = headStyle;
cell.SetCellValue(headers[j].value);
sheet.SetColumnWidth(j, headers[j].width * 256);
}
sheet.CreateFreezePane(0, 1);
short rowIndex = 1;
foreach (var obj in listArr)
{
var lst = obj.list;
short startRow = rowIndex;
var fillColor = obj.color;
if (lst.Count == 0)
{
continue;
}
foreach (var item in lst)
{
IRow dataRow = sheet.CreateRow(rowIndex);
for (int j = 0; j < headers.Length; j++)
{
ICell cell = dataRow.CreateCell(j);
if (j == 0)
{
ICellStyle cateStyleTmp = workbook.CreateCellStyle();
cateStyleTmp.CloneStyleFrom(cateStyle);
cateStyleTmp.FillForegroundColor = fillColor;
cell.CellStyle = cateStyleTmp;
}
else
{
if (headers[j].dataAlign == "center")
{
cell.CellStyle = dataStyleCenter;
}
else if (headers[j].dataAlign == "right")
{
cell.CellStyle = dataStyleRight;
}
else
{
cell.CellStyle = dataStyleLeft;
}
}
}
//导出内容
dataRow.GetCell(0).SetCellValue(obj.title);
dataRow.GetCell(1).SetCellValue(item.GOODSNAME);
dataRow.GetCell(2).SetCellValue(item.BLNO);
dataRow.GetCell(3).SetCellValue(item.hj_GOODSPACK.ToString());
dataRow.GetCell(4).SetCellValue(item.hj_GOODSPACKSTOCK.ToString());
dataRow.GetCell(5).SetCellValue(item.WeiWanShui.ToString());
dataRow.GetCell(6).SetCellValue(item.KeFaHuo.ToString());
dataRow.GetCell(7).SetCellValue(item.CONTRACTNO);
rowIndex++;
}
if (rowIndex > startRow)
{
//HSSFCellRangeAddress region = new HSSFCellRangeAddress(startRow, rowIndex - 1, 0, 0);
CellRangeAddress region = new CellRangeAddress(startRow, rowIndex - 1, 0, 0);
sheet.AddMergedRegion(region);
}
}
MemoryStream ms = new MemoryStream();
workbook.Write(ms);
ms.Flush();
return File(ms.GetBuffer(), "application/excel", "stock.xls");
#endregion
}
[HttpGet]
public ActionResult Regist(string openid, bool agree = false)
{
DataContext dataContext = new DataContext();
if (!string.IsNullOrWhiteSpace(openid))
{
var infoClient = dataContext.DispInfoClients.FirstOrDefault(d => d.OpenId == openid);
if (infoClient != null)
{
var infoClientModel = infoClient.AsDispInfoClientRegistViewModel();
ViewData["infoClient"] = infoClientModel;
ViewData["isAudit"] = infoClient.IsAudit;
}
else if (!agree)
{
//保存请求的openid
BasicDataRefDAL.SaveLog(openid,"","仓储公众号","用户注册");
return RedirectToAction("Declare", new { openid = openid });
}
else
{
ViewData["infoClient"] = new DispInfoClientRegistViewModel();
ViewData["isAudit"] = false; ;
}
ViewData["openid"] = openid;
ViewData["controllerList"] = dataContext.InfoClients.Where(c => c.ISCONTROLLER == true).AsInfoClientTruckViewModelList();
return View();
}
else
{
return Content("非法请求!");
}
}
[HttpGet]
public ActionResult Declare(string openid)
{
ViewData["openid"] = openid;
return View();
}
#region 红柿子-青银 接收费用信息接口
public class HSZQY_FEEInfo {
public string ac { get; set; }
public string uid { get; set; }
public string skey { get; set; }
public string optype { get; set; }
public List<HSZQY_mdata> mdata { get; set; }
public List<HSZQY_feedata> feedata { get; set; }
}
public class HSZQY_mdata {
public string MBLNO { get; set; }
public string CUSTOMERNAME { get; set; }
public string OPLBNAME { get; set; }
public string GID { get; set; }
}
public class HSZQY_feedata
{
public string FEEID { get; set; }
public string GID { get; set; }
public string ENTERDATE { get; set; }
public string FEENAME { get; set; }
public string CUSTOMERNAME { get; set; }
public int FEETYPE { get; set; }
public decimal UNITPRICE { get; set; }
public decimal QUANTITY { get; set; }
public decimal NOTAXAMOUNT { get; set; }
public decimal TAXRATE { get; set; }
public decimal TAX { get; set; }
public decimal AMOUNT { get; set; }
}
[HttpPost]
public ActionResult StockFee()
{
try
{
RespCommon resp = new RespCommon();
StreamReader sr = new StreamReader(Request.InputStream, Encoding.UTF8);
var strJson = new StringBuilder();
string line = null;
while (((line = sr.ReadLine())) != null)
{
strJson.Append(line);
}
var VgmStatus = JsonConvert.DeserializeObject<HSZQY_FEEInfo>(strJson.ToString());
BasicDataRefDAL.SaveLog(sr, "USERID", "USERNAME", "红柿子接口");
var json4 = JsonConvert.SerializeObject(
new { Success = true, Message = "添加成功!" });
return new ContentResult() { Content = json4 };
}
catch (Exception ex) {
var json4 = JsonConvert.SerializeObject(
new { Success = false, Message = ex.Message });
return new ContentResult() { Content = json4 };
}
}
#endregion
}
}