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.

237 lines
8.0 KiB
C#

using System;
using System.Linq;
using System.Web.Mvc;
using DSWeb.MvcShipping.DAL.MsChDui;
using DSWeb.MvcShipping.Models.MsChDui;
using DSWeb.MvcShipping.Models.MsChDuiView;
using DSWeb.MvcShipping.Comm.Cookie;
using DSWeb.Areas.CommMng.DAL;
using System.Collections.Generic;
using HcUtility.Comm;
using HcUtility.Core;
using DSWeb.MvcShipping.DAL.MsSysBillNoSet;
using System.IO;
using DSWeb.Common.DB;
using DSWeb.Areas.MvcShipping.Models.MsOpRule;
using DSWeb.Models;
using Newtonsoft.Json;
using DSWeb.Common.Model;
namespace DSWeb.MvcShipping.Controllers
{
public class MsOpRuleController : Controller
{
private RuleContext ruleContext = new RuleContext();
[HttpGet]
public ActionResult RuleList()
{
if (Session["SHOWNAME"] == null)
{
return Content("登录超时");
}
ViewData["Fields"] = ruleContext.EnumValues.Where(e => e.EnumTypeID == 91001).Select(e => e.EnumValueName).ToList();
return View();
}
//分页规则列表
[HttpPost]
public JsonResult RuleListData(int offset, int limit)
{
OpRuleListViewModelList rtnList = new OpRuleListViewModelList();
var count = ruleContext.Rules.Count();
var list = ruleContext.Rules.OrderBy(x => x.SortOrder).Skip(offset).Take(limit).ToList();
rtnList.Total = count;
rtnList.List = list.AsListViewModelList();
return Json(rtnList);
}
//可用规则列表
[HttpPost]
public JsonResult RuleListEnable()
{
List<OpRuleCheckListViewModel> listRtn = new List<OpRuleCheckListViewModel>();
var list = ruleContext.Rules.Where(r => r.Enable).OrderBy(ri => ri.SortOrder).ToList();
foreach (var rule in list)
{
var ruleVM = rule.AsCheckListViewModel();
listRtn.Add(ruleVM);
ruleVM.Items = ruleContext.RuleItems.Where(ri => ri.RuleId == rule.GID).OrderBy(ri => ri.SortOrder).ToList().AsCheckListViewModelList();
}
return Json(listRtn);
}
//保存规则
[HttpPost]
//public JsonResult SaveRule(OpRuleEditViewModel viewModel)
public JsonResult SaveRule()
{
var sr = new StreamReader(Request.InputStream);
var stream = sr.ReadToEnd();
OpRuleEditViewModel viewModel = Newtonsoft.Json.JsonConvert.DeserializeObject<OpRuleEditViewModel>(stream);
OpRule rule = null;
if (!string.IsNullOrWhiteSpace(viewModel.GID))
{
rule = ruleContext.Rules.FirstOrDefault(r => r.GID == viewModel.GID);
}
if (rule == null)
{
var findRule = ruleContext.Rules.FirstOrDefault(r => r.Code == viewModel.Code);
if (findRule != null)
{
return Json(new { Success = false, Message = "编号已存在" });
}
rule = new OpRule();
viewModel.AsModel(rule);
rule.GID = Guid.NewGuid().ToString();
rule.CreateTime = DateTime.Now;
rule.CreateUser = Session["SHOWNAME"].ToString();
rule.Enable = true;
rule.EnableDisableTime = DateTime.Now;
int ruleOrder = 1;
if (ruleContext.Rules.Count() > 0)
{
ruleOrder = ruleContext.Rules.Max(r => r.SortOrder) + 1;
}
rule.SortOrder = ruleOrder;
ruleContext.Rules.Add(rule);
var items = viewModel.Items.AsModelList();
int order = 1;
items.ForEach(i =>
{
i.GID = Guid.NewGuid().ToString();
i.RuleId = rule.GID;
i.SortOrder = order++;
});
ruleContext.RuleItems.AddRange(items);
}
else
{
var findRule = ruleContext.Rules.FirstOrDefault(r => r.Code == viewModel.Code && r.GID != viewModel.GID);
if (findRule != null)
{
return Json(new { Success = false, Message = "编号已存在" });
}
bool enableChanged = rule.Enable != viewModel.Enable;
viewModel.AsModel(rule);
rule.ModifyTime = DateTime.Now;
rule.ModifyUser = Session["SHOWNAME"].ToString();
if (enableChanged)
{
rule.EnableDisableTime = DateTime.Now;
}
var items = ruleContext.RuleItems.Where(r => r.RuleId == rule.GID).ToList();
ruleContext.RuleItems.RemoveRange(items);
items = viewModel.Items.AsModelList();
int order = 1;
items.ForEach(i =>
{
i.GID = Guid.NewGuid().ToString();
i.RuleId = rule.GID;
i.SortOrder = order++;
});
ruleContext.RuleItems.AddRange(items);
}
ruleContext.SaveChanges();
return Json(new { Success = true, Message = "保存成功" });
}
//获取单条规则
[HttpPost]
public JsonResult GetRule(string gid)
{
var rule = ruleContext.Rules.FirstOrDefault(r => r.GID == gid);
if (rule != null)
{
var viewModel = rule.AsEditViewModel();
viewModel.Items = ruleContext.RuleItems.Where(ri => ri.RuleId == rule.GID).AsEditViewModelList();
return Json(viewModel);
}
return null;
}
//删除规则
[HttpPost]
public JsonResult DeleteRules(string strIds)
{
string[] arrId = strIds.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var rules = ruleContext.Rules.Where(r => arrId.Contains(r.GID)).ToList();
var items = ruleContext.RuleItems.Where(r => arrId.Contains(r.RuleId)).ToList();
ruleContext.Rules.RemoveRange(rules);
ruleContext.RuleItems.RemoveRange(items);
ruleContext.SaveChanges();
return Json(new { Success = true, Message = "操作成功" });
}
//生效/失效规则
[HttpPost]
public JsonResult EnableDisableRules(string strIds, bool enable = true)
{
string[] arrId = strIds.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var rules = ruleContext.Rules.Where(r => arrId.Contains(r.GID)).ToList();
rules.ForEach(r =>
{
if (r.Enable != enable)
{
r.Enable = enable;
r.EnableDisableTime = DateTime.Now;
}
});
ruleContext.SaveChanges();
return Json(new { Success = true, Message = "操作成功" });
}
//异步保存订舱的规则检验,用于后续页面直接展示
[HttpPost]
public JsonResult SaveOrderCheckRule(string json)
{
RespCommon resp = new RespCommon();
var jobj = JsonConvert.DeserializeAnonymousType(json, new
{
OrdNO = "",
Alerts = new string[] { }
});
ruleContext.RuleCheckOrders.RemoveRange(ruleContext.RuleCheckOrders.Where(rc => rc.OrdNO == jobj.OrdNO));
var idx = 0;
foreach (string al in jobj.Alerts)
{
var rco = new OpRuleCheckOrder();
rco.GID = Guid.NewGuid().ToString();
rco.OrdNO = jobj.OrdNO;
rco.AlertData = al;
rco.Sort = idx++;
ruleContext.RuleCheckOrders.Add(rco);
}
ruleContext.SaveChanges();
resp.Success = true;
resp.Message = "保存成功 ";
return Json(resp);
}
}
}