采购单构思设计

Posted 1999wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了采购单构思设计相关的知识,希望对你有一定的参考价值。

                采购单构思设计

采购单设计:

    技术图片

    如图可知采购订单中的字段分别有   供应商   审核人   采购员  订单状态   交易时间  订单明细表  产品数量  产品小计 产品价格 产品描述

    那么他们之间的关系:供应商  -->  产品  (多对一), 产品-->产品订单明细表,产品-->采购员(多对一),如图配置   采购单-->供应商

技术图片技术图片

 

高级查询:通过订单的时间和状态进行查询

public Specification createSpecification() 

Date tempDate = null;
if(this.endDate!=null)
tempDate = DateUtils.addDays(this.endDate,1 );
System.out.println(tempDate);


Specification<Purchasebill> spe = Specifications.<Purchasebill>and().
ge(this.beginDate != null, "vdate",this.beginDate ).
lt(this.endDate!=null,"vdate",tempDate).
eq(this.status!=null && !"".equals(this.status),"status",this.status)
.build();

return spe;

时间的转换:可以加在字段上面 也可以加在set方法上面

技术图片

高级查询的流程:

技术图片

通过JS绑定事件过后他会根据你传入的数据自动封装成对象传到加在路劲的page查询里面:

技术图片

传到controller层:controller就收传过来的数据进行调用方法查询

技术图片

 调用条件查询的方法

最后返回json数据加载到页面

 技术图片

 按钮绑定事件:

技术图片

多表的格式转换:

技术图片

状态的格式转换:

技术图片

 删除:获取选中刚的数据判断有没有值 有值就传个id到后台进行删除

 技术图片

 采购明细单:http://www.easyui-extlib.com/

 下载完后引入资源文件:

<script src="/easyui/plugin/cellEdit/jeasyui.extensions.datagrid.getColumnInfo.js"></script>
<script src="/easyui/plugin/cellEdit/jeasyui.extensions.datagrid.editors.js"></script>
<script src="/easyui/plugin/cellEdit/jeasyui.extensions.datagrid.edit.cellEdit.js"></script>

采购单属性定义:

$(function () 
//明细表格
var dg = $("#gridItem"),
//默认行
defaultRow = productId: "", color: "", smallpic: "", num: 0, price: 0, amount: 0, descs: "" ,
insertPosition = "bottom";//插的位置

//表格初始化
var dgInit = function ()
//得到所有列
var getColumns = function ()
var result = [];
//具体列的配置
var normal = [

field: ‘productId‘, title: 产品, width: 180,
editor:
type: "combobox",
options:
required: true,
valueField:‘id‘,
textField:‘name‘,
url:‘/util/findAllProduct‘,
panelHeight:‘auto‘

,
formatter:function(value,row)
//value当前这个单元格的值 row整个行的值
return value.name;

,

field: ‘color‘, title: 颜色, width: 180,
/* editor:
type: "validatebox",
options:
required: false,
readonly: true

,*/
formatter:function(value,row)
console.log(value);
console.log(row.productId.color);
if(row && row.productId)
return "<div style=‘width:20px;height:20px;">productId.color+"‘ ></div>"


,

field: ‘smallpic‘, title: 图片, width: 100,
formatter:function(value,row)
console.log(row.productId);
if(row && row.productId.smallPic)
return "<img src=‘"+row.productId.smallPic+"‘ width=‘20px‘ height=‘20px‘/>"


,

field: ‘num‘, title: 产品数量, width: 100,
editor:
type: "numberbox",
options:
required: true


,

field: ‘price‘, title: 价格, width: 100,
editor:
type: "numberbox",
required: true

,

field: ‘amount‘, title: 小计, width: 100,
formatter:function(value,row)
//小计
if(row.num && row.price)
return row.num * row.price;


,

field: ‘descs‘, title: 备注, width: 100,
editor:
type: "text"


];
result.push(normal);

return result;
;
//设置表格配置
var options =
idField: "productId",
rownumbers: true,
fitColumns: true,
fit: true,
border: true,//边框
singleSelect: true,
toolbar:"#itemBtns",
columns: getColumns(),//得到所有列
//表示开启单元格编辑功能
enableCellEdit: true
;

//创建编辑表格
dg.datagrid(options);

;

//定义方法 得到插入的行的索引
var getInsertRowIndex = function ()
return insertPosition == "top" ? 0 : dg.datagrid("getRows").length;


//按钮的绑定的事件
var buttonBindEvent = function ()
//插入行的按钮
$("#btnInsert").click(function ()
//获取插入表里面位置 最末尾
var targetIndex = getInsertRowIndex(),targetRow = $.extend(, defaultRow, ID: $.util.guid() );
//在表格里面添加一行
dg.datagrid("insertRow", index: targetIndex, row: targetRow );
//插入一行之后,定义到第一个单元格
dg.datagrid("editCell", index: 0, field: "productId" );
);
//删除表格里面单元格
$("#btnRemove").click(function ()
//得到选中的行
var row = dg.datagrid(‘getSelected‘);
if(row)
//得到行索引
var index = dg.datagrid(‘getRowIndex‘, row);
//通过索引删除
dg.datagrid(‘deleteRow‘,index);

);
;

//调用初始化表格 创建表格
dgInit();
buttonBindEvent();//绑定事件


);

添加明细单的时候提交额外的参数:

 public Map save(Purchasebill purchasebill)
Map mp = new HashMap();
try

List<Purchasebillitem> items = purchasebill.getItems();
BigDecimal totalAmount = new BigDecimal("0");
BigDecimal totalNum = new BigDecimal("0");

for (Purchasebillitem item : items)
//算总的数量
totalNum = totalNum.add(item.getNum());
//计算小计
item.setAmount(item.getPrice().multiply(item.getNum()));
//算总的金额
totalAmount = totalAmount.add(item.getAmount());
//双向多对一 或一对多 一方放弃 建立多方到一方关系
item.setBill(purchasebill);


//主的采购单
purchasebill.setTotalAmount(totalAmount);
purchasebill.setTotalNum(totalNum);

//录入人--登陆人
purchasebill.setInputUser(UserContext.getUser());
//级联保存
purchasebillService.save(purchasebill);
mp.put("success", true);
catch (Exception e)
e.printStackTrace();
mp.put("success", false);
mp.put("msg", e.getMessage());

return mp;

 修改回显问题:

 public Map update(@ModelAttribute("editPurchasebill") Purchasebill purchasebill)
Map mp = new HashMap();
try
//Purchasebill purchasebill = findOne(purchasebill.getId())

List<Purchasebillitem> items = purchasebill.getItems();
BigDecimal totalAmount = new BigDecimal("0");
BigDecimal totalNum = new BigDecimal("0");

for (Purchasebillitem item : items)
//算总的数量
totalNum = totalNum.add(item.getNum());
//计算小计
item.setAmount(item.getPrice().multiply(item.getNum()));
//算总的金额
totalAmount = totalAmount.add(item.getAmount());
//双向多对一 或一对多 一方放弃 建立多方到一方关系
item.setBill(purchasebill);


//主的采购单
purchasebill.setTotalAmount(totalAmount);
purchasebillService.save(purchasebill);
purchasebill.setTotalNum(totalNum);


mp.put("success", true);
catch (Exception e)
e.printStackTrace();
mp.put("success", false);
mp.put("msg", e.getMessage());

return mp;

删除 解决notono问题:

删除删除完过后设置关联对象为null

 技术图片

 

以上是关于采购单构思设计的主要内容,如果未能解决你的问题,请参考以下文章

037医疗项目-模块四:采购单模块—采购单数据模型

设计模式-行为型-职责链设计模式

23中设计模式

接口自动化测试系列之PHPUnit-框架设计构思

接口自动化测试系列之PHPUnit-框架设计构思

《智能背诵助手APP》作品构思与设计