JeePlus练习-实现采购计划定制
根据下图所示的原型,实现采购计划订制。业务需求如下:采购计划可根据采购需求自动生成,还可以手动添加;添加时,打开采购需求界面,多选采购需求,然后添加到采购计划中。这种操作是ERP里经典操作之一,即支持数据自动导入,业务上也兼容手工处理。

解决方法:
1、创建两个按钮
JSP页面按钮代码:
<shiro:hasPermission name="test:proc_plan:purcPlan:manual"> <a id="manual" class="btn btn-primary" onclick="manual()"><i class="glyphicon"></i> 手动添加</a> </shiro:hasPermission> <shiro:hasPermission name="test:proc_plan:purcPlan:auto"> <a id="auto" class="btn btn-primary" onclick="auto()"><i class="glyphicon"></i> 自动导入</a> </shiro:hasPermission>
到菜单管理添加对应页面中按钮的权限标志:
按钮效果图:

最后还要到权限设置页面对角色进行按钮显示权限授权。
2、设置对应按钮的逻辑
添加按钮触发函数(在采购计划构建里的JS文件中添加):
1 function manual(){ 2 jp.openDialog('采购需求记录', "${ctx}/test/proc_plan/purcPlan/manual",'1200px', '800px', $('#purcPlanTable')); 3 } 4 5 function auto(){ 6 jp.loading("处理中..."); 7 jp.get("${ctx}/test/proc_plan/purcPlan/requnum",function(data){ 8 if(data.success){ 9 jp.confirm(data.msg,function(){ 10 jp.loading("导入中..."); 11 jp.get("${ctx}/test/proc_plan/purcPlan/requimport",function(data1){ 12 $('#purcPlanTable').bootstrapTable('refresh'); 13 jp.info(data1.msg); 14 }) 15 }); 16 }else{ 17 jp.error(data.msg); 18 } 19 }) 20 }
在采购计划构建里的Cotroller添加业务代码:
1 @Autowired 2 private PurcRequService purcRequService;//注入一个采购需求构建的service 3 4 /** 5 * 显示需求表中可选取记录 6 */ 7 @RequestMapping(value = "manual") 8 public String manual(PurcRequ purcRequ,Model model) { 9 model.addAttribute("purcRequ",purcRequ); 10 return "modules/test/proc_plan/purcRequSelect"; 11 } 12 13 /** 14 * 手动选择需求表中的数据导入 15 */ 16 @ResponseBody //返回值非界面的JSON字符串时注意添加这句话 17 @RequiresPermissions("test:proc_plan:purcPlan:manual") 18 @RequestMapping(value = "manualImport") 19 public AjaxJson manualImport( @RequestParam("ids") String ids) { //,@RequestParam("pher") String pher) { 20 List<Object> result=purcPlanService.executeSelectSql("select count(*) from purc_plan"); 21 long count = (long)result.get(0); 22 AjaxJson j = new AjaxJson(); 23 String idArray[]=ids.split(","); 24 25 for(String id : idArray){ 26 count++; 27 PurcPlan newPlan=new PurcPlan(); 28 PurcRequ requ=purcRequService.get(id); 29 newPlan.setDate(requ.getDate()); 30 newPlan.setPno(Long.toString(count)); 31 newPlan.setMno(requ.getMno()); 32 newPlan.setMname(requ.getMname()); 33 newPlan.setNum(requ.getNum()); 34 35 purcPlanService.save(newPlan); 36 } 37 j.setSuccess(true); 38 j.setMsg("成功导入"+idArray.length+"条采购需求数据。"); 39 return j; 40 } 41 42 43 /** 44 * 查询需求表记录数 45 */ 46 @ResponseBody 47 @RequestMapping(value = "requnum") 48 public AjaxJson requnum(RedirectAttributes redirectAttributes) { 49 int num=purcRequService.findList(new PurcRequ()).size(); 50 AjaxJson json=new AjaxJson(); 51 if(num>0) { 52 json.setSuccess(true); 53 json.setMsg("将从需求列表中导入"+num+"条数据?"); 54 55 }else { 56 json.setSuccess(false); 57 json.setMsg("没有读取到采购需求的数据!"); 58 } 59 return json; 60 } 61 62 /** 63 * 导入需求表所有记录 64 */ 65 @ResponseBody 66 @RequestMapping(value = "requimport") 67 public AjaxJson requimport(RedirectAttributes redirectAttributes) { 68 List<PurcRequ> requs=purcRequService.findList(new PurcRequ()); 69 int num=purcPlanService.findList(new PurcPlan()).size(); 70 AjaxJson json=new AjaxJson(); 71 for (PurcRequ requ : requs) { 72 num++; 73 PurcPlan newPlan=new PurcPlan(); 74 newPlan.setDate(requ.getDate()); 75 newPlan.setPno(Integer.toString(num)); 76 newPlan.setMno(requ.getMno()); 77 newPlan.setMname(requ.getMname()); 78 newPlan.setNum(requ.getNum()); 79 80 purcPlanService.save(newPlan); 81 } 82 83 json.setMsg("成功导入"+requs.size()+"条采购需求数据。"); 84 return json; 85 }
一个可以手动选择采购需求记录的JSP页面效果:

该JSP页面的代码:
<%@ page contentType="text/html;charset=UTF-8" %> <%@ include file="/webpage/include/taglib.jsp"%> <html> <head> <title>采购需求记录</title> <meta name="decorator" content="ani"/> <%@ include file="/webpage/include/bootstraptable.jsp"%> <%@include file="/webpage/include/treeview.jsp" %> <%@include file="/webpage/modules/test/purc_requ/purcRequList.js" %> <script type="text/javascript"> var $table; // 父页面table表格id var $topIndex;//弹出窗口的 index var selectdata; function doSubmit(table, index){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。 /* if(validateForm.form()){ $table = table; $topIndex = index; jp.loading(); $("#inputForm").submit(); return true; } */ if(getIdSelections()){ //if(($("#pher").val() == "" || $.trim($("#pher").val()).length == 0)){ // jp.info("请填写采购人!"); // }else{ //原本打算从前台把所选数据全部传到后台;现在仅把所选的数据id传回后台 /* selectdata=$("#purcRequTable").bootstrapTable('getSelections'); obj={"selectdata":selectdata,"pher":$("#pher").val()}; */ jp.loading(); jp.post("${ctx}/test/proc_plan/purcPlan/manualImport",{ids:getIdSelections()+"",pher:$("#pher").val()}, function(data){ if(data.success){ table.bootstrapTable('refresh'); jp.success(data.msg); jp.close(index); }else{ jp.error(data.msg); } }) // } }else{ jp.info("请选择要导入的记录!"); } } /* $(document).ready(function() { $('#date').datetimepicker({ format: "YYYY-MM-DD HH:mm:ss" }); }); */ </script> </head> <body> <div class="wrapper wrapper-content"> <sys:message content="${message}"/> <div class="row"> <div class="col-md-12"> <div class="panel panel-primary"> <div class="panel-body"> <div class="accordion-group"> <div id="collapseTwo" class="accordion-body collapse in"> <div class="accordion-inner"> <form:form id="searchForm" modelAttribute="purcRequ" class="form form-horizontal well clearfix"> <div class="col-xs-12 col-sm-6 col-md-4"> <label class="label-item single-overflow pull-left" title="需求编号:">需求编号:</label> <form:input path="eqno" htmlEscape="false" maxlength="64" class=" form-control"/> </div> <div class="col-xs-12 col-sm-6 col-md-4"> <label class="label-item single-overflow pull-left" title="物料编号:">物料编号:</label> <form:input path="mno" htmlEscape="false" maxlength="64" class=" form-control"/> </div> <div class="col-xs-12 col-sm-6 col-md-4"> <label class="label-item single-overflow pull-left" title="物料名称:">物料名称:</label> <form:input path="mname" htmlEscape="false" maxlength="64" class=" form-control"/> </div> <div class="col-xs-12 col-sm-6 col-md-4"> <div class="form-group"> <label class="label-item single-overflow pull-left" title="需求日期:"> 需求日期:</label> <div class="col-xs-12"> <div class="col-xs-12 col-sm-5"> <div class='input-group date' id='beginDate' style="left: -10px;" > <input type='text' name="beginDate" class="form-control" /> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> </div> </div> <div class="col-xs-12 col-sm-1"> ~ </div> <div class="col-xs-12 col-sm-5"> <div class='input-group date' id='endDate' style="left: -10px;" > <input type='text' name="endDate" class="form-control" /> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> </div> </div> </div> </div> </div> <div class="col-xs-12 col-sm-6 col-md-4"> <div style="margin-top:26px"> <a id="search" class="btn btn-primary btn-rounded btn-bordered btn-sm"><i class="fa fa-search"></i> 查询</a> <a id="reset" class="btn btn-primary btn-rounded btn-bordered btn-sm" ><i class="fa fa-refresh"></i> 重置</a> </div> </div> </form:form> </div> </div> </div> <!-- 表格 --> <table id="purcRequTable" data-toolbar="#toolbar"></table> <div class="col-xs-12 col-sm-6 col-md-4"> <input id="pher" class=" form-control" maxlength="64" placeholder="填写采购人" /> </div> </div> </div> </div> </div> </div> </body> </html>
JEEPLUS代码生成器遇到问题:
1.表单配置中报错:

解决:JDK版本问题,把JDK版本换成1.8就好了。
2.表单配置页面打不开:

解决:Tomcat 8.5中的jasper.jar包引起的,Tomcat换成7.0就正常了。估计是代码生成器不兼容高版本的jasper.jar。
Everyone has their own Time Zone. Just keep moving forward.
浙公网安备 33010602011771号