系列目录

提交一个表单后

我们需要一个管理的列表。我的申请,我的申请包含了提交内容的列表状态

状态分:过期,未审核,审核通过,驳回,废弃

列表对应代码

@using App.Admin;
@using App.Common;
@using App.Models.Sys;
@{
ViewBag.Title = "主页";
Layout = "~/Views/Shared/_Index_Layout.cshtml";
List<permModel> perm = (List<permModel>)ViewBag.Perm;
if (perm == null)
{
perm = new List<permModel>();
}
}
<div class="mvctool" style="line-height:30px;">
我的申请:,过期:,未审核:,审核通过:,审核不通过:,审核中:
</div>
<table id="List"></table> <div id="modalwindow" class="easyui-window" data-options="modal:true,closed:true,minimizable:false,shadow:false"></div>
@Html.Partial("~/Views/Shared/_Partial_AutoGrid.cshtml")
<script type="text/javascript">
$(function () {
$('#List').datagrid({
url: '@Url.Action("GetListByUserId")',
width:SetGridWidthSub(),
methord: 'post',
height: SetGridHeightSub(),
fitColumns: true,
sortName: 'CreateTime',
sortOrder: 'desc',
idField: 'Id',
pageSize: ,
pageList: [, , , , ],
pagination: true,
striped: true, //奇偶行是否区分
singleSelect: true,//单选模式
rownumbers: true,//行号
columns: [[
{ field: 'Id', title: 'ID', width: ,hidden:true },
{ field: 'Title', title: '标题', width: ,sortable:true },
{ field: 'UserId', title: '发起用户', width: , sortable: true, hidden: true },
{ field: 'FormId', title: '对应表单', width: , sortable: true, hidden: true },
{ field: 'FormLevel', title: '公文级别', width: ,sortable:true, hidden: true },
{ field: 'CreateTime', title: '创建时间', width: ,sortable:true },
{ field: 'TimeOut', title: '截至时间', width: , sortable: true, formatter: function (value) { return SubStrYMD(value) } },
{ field: 'CurrentStep', title: '当前环节', width: , sortable: true, align: 'center' },
{ field: 'CurrentState', title: '当前状态', width: , sortable: true, align: 'center' },
{ field: 'Action', title: '管理', width: , sortable: true, align: 'center' }
]]
});
});
//ifram 返回
function frameReturnByClose() {
$("#modalwindow").window('close');
}
function frameReturnByReload(flag) {
if (flag)
$("#List").datagrid('load');
else
$("#List").datagrid('reload');
}
function frameReturnByMes(mes) {
$.messageBox5s('提示', mes);
}
function LookFlow(formId)
{
$("#modalwindow").html("<iframe width='100%' height='98%' scrolling='auto' frameborder='0' src='@Url.Action("Details")?id=" + formId + "&Ieguid=" + GetGuid() + "'></iframe>");
$("#modalwindow").window({ title: '图例', width: , height: , iconCls: 'icon-details' }).window('open');
}
function ManageFlow(formId,id)
{
$("#modalwindow").html("<iframe width='100%' height='98%' scrolling='auto' frameborder='0' src='@Url.Action("Edit")?formId=" + formId + "&id=" + id + "&Ieguid=" + GetGuid() + "'></iframe>");
$("#modalwindow").window({ title: '详细', width: , height: , iconCls: 'icon-details' }).window('open');
}
</script>

Index.cshtml

@model App.Models.Flow.Flow_FormModel
@using App.Common;
@using App.Models.Flow;
@using App.Admin;
@using App.Models.Sys;
@{
ViewBag.Title = "创建";
Layout = "~/Views/Shared/_Index_LayoutEdit.cshtml";
List<permModel> perm = (List<permModel>)ViewBag.Perm;
if (perm == null)
{
perm = new List<permModel>();
}
}
<style> .tbdetail { width: %; border-collapse: collapse; }
.tbdetail .alignRight { width: 150px; text-align: right; }
.tbdetail td { border-bottom: 1px solid #F4F4F4; height: 30px; word-wrap:break-word; word-break:break-all; }
.tbcalendar, .tbcalendar td, .tbcalendar th { border: 1px solid #cccccc; border-collapse: collapse; padding: 5px; text-align: center; }
.tbcalendar th{ background: #f4f4f4; }
</style>
<div class="tc" style="padding:10px;"> @Model.Name</div> <table class="tbdetail"> @{
int i = ;
foreach (var item in Model.stepList)
{
i++;
<tr>
<td align="center">
<table class="tbdetail">
<tr>
<td class="alignRight">

@i
步:
</td>
<td>
@item.Name
</td>
</tr>
<tr>
<td class="alignRight">
流转规则:
</td>
<td>
按@(item.FlowRule)
</td>
</tr>
@{
int j = ;
foreach (var judge in item.stepRuleList)
{
j++;
<tr>
<td class="alignRight">
分支
@j:
</td>
<td>
@String.Format("如果 [{0} {1} {2}] → [{3}]", judge.AttrName, judge.Operator, judge.Result, judge.NextStep == "" ? "流程结束" : judge.NextStepName)
</td>
</tr>
}
}
</table>
</td>
</tr>
<tr>
<td align="center">

</td>
</tr>
}
}
<tr>
<td align="center">
流程结束
</td>
</tr>
</table>

Details.cshtml

@model App.Models.Flow.Flow_FormContentModel
@using App.Common;
@using App.Models.Flow;
@using App.Admin;
@using App.Models.Sys;
@{
ViewBag.Title = "创建";
Layout = "~/Views/Shared/_Index_Layout.cshtml";
List<permModel> perm = (List<permModel>)ViewBag.Perm;
if (perm == null)
{
perm = new List<permModel>();
}
} <script>
$(function () {
$("*[name='AttrA']").val("@Model.AttrA");
$("*[name='AttrB']").val("@Model.AttrB");
$("*[name='AttrC']").val("@Model.AttrC");
$("*[name='AttrD']").val("@Model.AttrD");
$("*[name='AttrE']").val("@Model.AttrE");
$("*[name='AttrF']").val("@Model.AttrF");
$("*[name='AttrG']").val("@Model.AttrG");
$("*[name='AttrH']").val("@Model.AttrH");
$("*[name='AttrI']").val("@Model.AttrI");
$("*[name='AttrJ']").val("@Model.AttrJ");
$("*[name='AttrK']").val("@Model.AttrK");
$("*[name='AttrL']").val("@Model.AttrL");
$("*[name='AttrM']").val("@Model.AttrM");
$("*[name='AttrN']").val("@Model.AttrN");
$("*[name='AttrO']").val("@Model.AttrO");
$("*[name='AttrP']").val("@Model.AttrP");
$("*[name='AttrQ']").val("@Model.AttrQ");
$("*[name='AttrR']").val("@Model.AttrR");
$("*[name='AttrS']").val("@Model.AttrS");
$("*[name='AttrT']").val("@Model.AttrT");
$("*[name='AttrU']").val("@Model.AttrU");
$("*[name='AttrV']").val("@Model.AttrV");
$("*[name='AttrW']").val("@Model.AttrW");
$("*[name='AttrX']").val("@Model.AttrX");
$("*[name='AttrY']").val("@Model.AttrY");
$("*[name='AttrZ']").val("@Model.AttrZ"); });
</script>
<div class="mvctool ">
@Html.ToolButton("btnReturn", "icon-return", "返回",false)
</div>
<table class="fromEditTable setTextWidth300">
<tbody>
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.FormId)
@Html.HiddenFor(model => model.UserId)
<input id="CreateTime" type="hidden" name="CreateTime" value="2000-1-1" />
<tr>
<td style="width:100px; text-align:right;">
@Html.LabelFor(model => model.Title):
</td>
<td style="width:310px">
@Html.EditorFor(model => model.Title)
</td> </tr>
@Html.Raw(ViewBag.Html)
<tr>
<td style="width:100px; text-align:right;">
@Html.LabelFor(model => model.TimeOut):
</td>
<td style="width:310px">
@Html.EditorFor(model => model.TimeOut)
</td>
</tr>
<tr><td style='width:100px; text-align:right;'>紧急程度 :</td><td><select name="FormLevel" id="FormLevel"><option value="普通">普通</option><option value="重要">重要</option><option value="紧急">紧急</option></select></td></tr>
</tbody>
</table>
<hr />
@Html.Raw(ViewBag.StepCheckMes)

Edit.cshtml

using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using App.Common;
using App.IBLL;
using App.Models.Sys;
using Microsoft.Practices.Unity;
using App.Flow.IBLL;
using App.Models.Flow;
using System.Text;
using App.Flow.BLL;
using System; namespace App.Admin.Areas.Flow.Controllers
{
public class ApplyController : BaseController
{
[Dependency]
public ISysUserBLL userBLL { get; set; }
[Dependency]
public IFlow_TypeBLL m_BLL { get; set; }
[Dependency]
public IFlow_FormBLL formBLL { get; set; }
[Dependency]
public IFlow_FormAttrBLL formAttrBLL { get; set; }
[Dependency]
public IFlow_FormContentBLL formContentBLL { get; set; }
[Dependency]
public IFlow_StepBLL stepBLL { get; set; }
[Dependency]
public IFlow_StepRuleBLL stepRuleBLL { get; set; }
[Dependency]
public IFlow_FormContentStepCheckBLL stepCheckBLL { get; set; }
[Dependency]
public IFlow_FormContentStepCheckStateBLL stepCheckStateBLL { get; set; } ValidationErrors errors = new ValidationErrors(); [SupportFilter]
public ActionResult Index()
{
ViewBag.Perm = GetPermission();
return View();
}
[HttpPost]
public JsonResult GetListByUserId(GridPager pager, string queryStr)
{
List<Flow_FormContentModel> list = formContentBLL.GetListByUserId(ref pager, queryStr, GetUserId());
var json = new
{
total = pager.totalRows,
rows = (from r in list
select new Flow_FormContentModel()
{ Id = r.Id,
Title = r.Title,
UserId = r.UserId,
FormId = r.FormId,
FormLevel = r.FormLevel,
CreateTime = r.CreateTime,
TimeOut = r.TimeOut,
CurrentStep = GetCurrentStep(r),
CurrentState = GetCurrentState(r),
Action = "<a href='#' title='管理' onclick='ManageFlow(\"" + r.FormId + "\",\""+r.Id+"\")'>管理</a> | <a href='#' title='图例' onclick='LookFlow(\"" + r.FormId + "\")'>图例</a>" }).ToArray() };
return Json(json);
}
public string GetCurrentStep(Flow_FormContentModel model)
{
string str = "结束";
List<Flow_FormContentStepCheckModel> stepCheckModelList = stepCheckBLL.GetListByFormId(model.FormId,model.Id);
for (int i = stepCheckModelList.Count()-;i>=;i--)
{
if (stepCheckModelList[i].State == )
{
str = stepBLL.GetById(stepCheckModelList[i].StepId).Name;
}
}
return str;
}
public string GetCurrentState(Flow_FormContentModel model)
{
if (model.TimeOut < ResultHelper.NowTime)
{
return "<span style='color:#0094ff'>过期</span>";
}
List<Flow_FormContentStepCheckModel> stepCheckModelList = stepCheckBLL.GetListByFormId(model.FormId,model.Id); var v = from r in stepCheckModelList where r.State == select r;
if (v.Count() == stepCheckModelList.Count())
{
return "<span style='color:#6fce2f'>通过</span>";
}
var vv = from r in stepCheckModelList where r.State == select r;
if (vv.Count() > )
{
return "<span style='color:#ff6a00'>驳回</span>";
}
return "<span style='color:#ff6600'>待审核</span>";
} #region 详细
[SupportFilter(ActionName = "Details")]
public ActionResult Details(string id)
{
ViewBag.Perm = GetPermission();
Flow_FormModel flowFormModel = formBLL.GetById(id);
//获取现有的步骤
GridPager pager = new GridPager()
{
rows = ,
page = ,
sort = "Id",
order = "asc"
};
flowFormModel.stepList = new List<Flow_StepModel>();
flowFormModel.stepList = stepBLL.GetList(ref pager, flowFormModel.Id);
for (int i = ; i < flowFormModel.stepList.Count; i++)//获取步骤下面的步骤规则
{
flowFormModel.stepList[i].stepRuleList = new List<Flow_StepRuleModel>();
flowFormModel.stepList[i].stepRuleList = GetStepRuleListByStepId(flowFormModel.stepList[i].Id);
} return View(flowFormModel);
}
//获取步骤下面的规则
private List<Flow_StepRuleModel> GetStepRuleListByStepId(string stepId)
{
List<Flow_StepRuleModel> list = stepRuleBLL.GetList(stepId);
return list;
}
#endregion [SupportFilter(ActionName = "Details")]
public ActionResult Edit(string formId,string id)
{ ViewBag.Perm = GetPermission();
ViewBag.Html = ExceHtmlJs(formId);
ViewBag.StepCheckMes = GetCurrentStepCheckMes(formId, id);
Flow_FormContentModel model = formContentBLL.GetById(id);
return View(model);
} //根据设定公文,生成表单及控制条件
private string ExceHtmlJs(string id)
{
//定义一个sb为生成HTML表单
StringBuilder sbHtml = new StringBuilder();
StringBuilder sbJS = new StringBuilder();
sbJS.Append("<script type='text/javascript'>function CheckForm(){");
Flow_FormModel model = formBLL.GetById(id);
#region 判断流程是否有字段,有就生成HTML表单
Type formType = model.GetType();
//查找名称为"A-Z"的属性
string[] arrStr = { "AttrA", "AttrB", "AttrC", "AttrD", "AttrE", "AttrF", "AttrG", "AttrH", "AttrI", "AttrJ", "AttrK"
, "AttrL", "AttrM", "AttrN", "AttrO", "AttrP", "AttrQ", "AttrR", "AttrS", "AttrT", "AttrU"
, "AttrV", "AttrW", "AttrX", "AttrY", "AttrZ"};
foreach (string str in arrStr)
{
object o = formType.GetProperty(str).GetValue(model, null);
if (o != null)
{
//查找model类的Class对象的"str"属性的值
sbHtml.Append(GetHtml(o.ToString(), str.Replace("Attr", ""), ref sbJS));
}
} #endregion
sbJS.Append("return true}</script>");
ViewBag.HtmlJS = sbJS.ToString();
return sbHtml.ToString();
} //对比
private bool JudgeVal(string attrId, string rVal, string cVal, string lVal)
{
string attrType = formAttrBLL.GetById(attrId).AttrType;
return new FlowHelper().Judge(attrType, rVal, cVal, lVal);
} //获取指定名称的HTML表单
private string GetHtml(string id, string no, ref StringBuilder sbJS)
{
StringBuilder sb = new StringBuilder();
Flow_FormAttrModel attrModel = formAttrBLL.GetById(id);
sb.AppendFormat("<tr><td style='width:100px; text-align:right;'>{0} :</td>", attrModel.Title);
//获取指定类型的HTML表单
sb.AppendFormat("<td>{0}</td></tr>", new FlowHelper().GetInput(attrModel.AttrType, attrModel.Name, no));
sbJS.Append(attrModel.CheckJS);
return sb.ToString();
} //获取环节所有信息
public string GetCurrentStepCheckMes(string fromId, string contentId)
{
string stepCheckMes = "";
string stepCheckId = GetCurrentStepCheckId(fromId, contentId); List<Flow_FormContentStepCheckModel> stepCheckModelList = stepCheckBLL.GetListByFormId(fromId, contentId);
for (int i = ; i < stepCheckModelList.Count; i++)
{
Flow_FormContentStepCheckStateModel stepCheckStateModel = stepCheckStateBLL.GetByStepCheckId(stepCheckModelList[i].Id);
stepCheckMes = stepCheckMes + "第" + (i + ) + "步:审核人:" + stepCheckStateModel.UserId + " 审核意见:" + stepCheckStateModel.Reamrk + " 审核意见:" + (stepCheckStateModel.CheckFlag == ? "通过" : stepCheckStateModel.CheckFlag == ? "不通过" : "审核中") + "</br>";
}
return stepCheckMes;
}
//获取当前环节的审核条
public string GetCurrentStepCheckId(string fromId, string contentId)
{
List<Flow_FormContentStepCheckModel> stepCheckModelList = stepCheckBLL.GetListByFormId(fromId, contentId);
return new FlowHelper().GetCurrentStepCheckIdByStepCheckModelList(stepCheckModelList); }
}
}

ApplyController

 List<Flow_FormContentModel> GetListByUserId(ref GridPager pager, string queryStr,string userId);

IFlow_FormContentBLL

 [Dependency]
public IFlow_FormContentRepository m_Rep { get; set; }
public List<Flow_FormContentModel> GetListByUserId(ref GridPager pager, string queryStr, string userId)
{
IQueryable<Flow_FormContent> queryData = null;
if (!string.IsNullOrWhiteSpace(queryStr))
{
queryData = m_Rep.GetList(db).Where(a => a.Title.Contains(queryStr) && a.UserId==userId);
}
else
{
queryData = m_Rep.GetList(db).Where(a=>a.UserId == userId);
}
pager.totalRows = queryData.Count();
queryData = LinqHelper.SortingAndPaging(queryData, pager.sort, pager.order, pager.page, pager.rows);
return CreateModelList(ref queryData);
}
private List<Flow_FormContentModel> CreateModelList(ref IQueryable<Flow_FormContent> queryData)
{ List<Flow_FormContentModel> modelList = (from r in queryData
select new Flow_FormContentModel
{
Id = r.Id,
Title = r.Title,
UserId = r.UserId,
FormId = r.FormId,
FormLevel = r.FormLevel,
CreateTime = r.CreateTime,
AttrA = r.AttrA,
AttrB = r.AttrB,
AttrC = r.AttrC,
AttrD = r.AttrD,
AttrE = r.AttrE,
AttrF = r.AttrF,
AttrG = r.AttrG,
AttrH = r.AttrH,
AttrI = r.AttrI,
AttrJ = r.AttrJ,
AttrK = r.AttrK,
AttrL = r.AttrL,
AttrM = r.AttrM,
AttrN = r.AttrN,
AttrO = r.AttrO,
AttrP = r.AttrP,
AttrQ = r.AttrQ,
AttrR = r.AttrR,
AttrS = r.AttrS,
AttrT = r.AttrT,
AttrU = r.AttrU,
AttrV = r.AttrV,
AttrW = r.AttrW,
AttrX = r.AttrX,
AttrY = r.AttrY,
AttrZ = r.AttrZ,
CustomMember = r.CustomMember,
TimeOut = r.TimeOut
}).ToList();
return modelList;
}

Flow_FormContentBLL

 IQueryable<Flow_FormContent> GetList(DBContainer db);

IFlow_FormContentRepository

 public IQueryable<Flow_FormContent> GetList(DBContainer db)
{
IQueryable<Flow_FormContent> list = db.Flow_FormContent.AsQueryable();
return list;
}

Flow_FormContentRepository

运行效果。

图例效果

虽然显示效果不是很好,但是体现了流程的分支情况。

驳回废弃做完审批再回头来处理这个页面。这样来看代码比较清楚

直接看代码分析流程。目前没有特别模糊的逻辑

ASP.NET MVC5+EF6+EasyUI 后台管理系统(49)-工作流设计-我的申请的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试

    1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级

    系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

    系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析

    系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控

    系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox

    系列目录 https://yunpan.cn/cZVeSJ33XSHKZ  访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航

    系列目录 本节主要知识点是easyui 的手风琴加树结构做菜单导航 有园友抱怨原来菜单非常难看,但是基于原有树形无限级别的设计,没有办法只能已树形展示 先来看原来的效果 改变后的效果,当然我已经做好了 ...

随机推荐

  1. nodejs进阶(3)—路由处理

    1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

  2. 对Castle Windsor的Resolve方法的解析时new对象的探讨

    依赖注入框架Castle Windsor从容器里解析一个实例时(也就是调用Resolve方法),是通过调用待解析对象的构造函数new一个对象并返回,那么问题是:它是调用哪个构造函数呢? 无参的构造函数 ...

  3. 虚拟dom与diff算法 分析

    好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM

  4. 就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波

    注:这并不是一篇技术文章,而是记录了我这几个月经历的入职,裸辞,找工作的心路历程,简单介绍一个博主的情况,我是16年毕业生,校招进了一家北京的公司,java开发,和很多年轻人一样,干了一段时间,我发现 ...

  5. 深入浅出JavaScript之原型链&继承

    Javascript语言的继承机制,它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instanc ...

  6. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

  7. BI分析受阻?FineBI推出SPA螺旋式分析新功能!

    过去,企业级的数据分析通常会有这么几种场景,业务部门托信息部门分析数据,结果报表一出,唇枪舌剑争论你我高低,数据不准,指标不对.信息部门欠缺业务概念,业务部门不懂技术逻辑,数据分析之路,暂时搁浅. 后 ...

  8. Angular2 Hello World 之 RC6

    angular2还没有发布正式版,确实有点不靠谱,变化太频繁,之前写的demo直接将js升级到最新版之后发现就不能用了……所以现在在写一篇demo——基于RC6.参考:http://web3.code ...

  9. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  10. Maven安装

    开发分布式的商场系统,用到了一些新的技术,做一个记录和分享 这里讲一下maven安装 首先什么是Maven Maven作为一个构建工具,不仅帮我们自动化构建,还能抽象构建过程,提供构建任务实现.他跨平 ...