基于SSSDJ的产品采购订单模块

domain关系配置

  1. 采购订单设计表时用组合股关系(强聚合:双向的多对一,一对多),一般用最强级联+孤儿删除+放弃关系维护权(
    cascade ,orphanRemoval ,mappedBy
  2. 需求:多方能找到一方、一方也能找到多方
  3. Purchasebillding订单
    Purchasebillitem订单明细
1 @OneToMany(cascade = CascadeType.ALL,orphanRemoval = true,mappedBy = "bill")
2     private List<Purchasebillitem> items=new ArrayList<>();
1  @ManyToOne(fetch = FetchType.LAZY,optional = false)
2     @JoinColumn(name="bill_id")
3     @JsonIgnore//两类互相调用,会出现死循环(生成JSON的时候忽略此字段)
4     private Purchasebill bill;

  2.对于日期字段的配置

 1 //前台日期展示格式设置
 2     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
 3     public Date getVdate() {
 4         return vdate;
 5     }
 6     //前台传入后台格式设置(类型不对应浏览器会报400错误)
 7     @DateTimeFormat(pattern = "yyyy-MM-dd")
 8     public void setVdate(Date vdate) {
 9         this.vdate = vdate;
10     }

query层的查询

 分析:查询时间应该是  起始时间  <=查询时间  <结束时间+1

 1 public class PurchasebillQuery extends BaseQuery{
 2 
 3     private Date beginTime;
 4     private Date endTime;
 5     private Integer status;
 6 
 7     //高级查询
 8     @Override
 9     public Specification createSpec() {
10         Date date=null;
11         if(endTime !=null){
12             //利用long3包的时间工具,当前时间+1天
13             date = DateUtils.addDays(endTime, 1);
14         }
15         Specification<Purchasebill> specification = Specifications.<Purchasebill>and()
16                 //大于等于起始时间
17                 .ge(beginTime!=null,"vdate", beginTime)
18                 //小于终止时间+1
19                 .lt(date!=null,"vdate",endTime )
20                 //状态
21                 .eq(status!=null,"status",status)
22                 .build();
23         return specification;
24     }
25 }

前台页面与后台代码的结合

 1.对于关联表的字段显示  配置属性  formatter="formatName"

1 <th width="20" field="supplier" formatter="formatName">供应商</th>
1 function formatName(value,row,index) {
2     return value?(value.name||value.username):"";//对于有多个字段的可以配置 value?(value.name||value.username):""  返回第一个为true的值
3 }

2.下拉框

name为表内字段.id ,panelHeight:自适应长度,textField:显示的内容字段,url:内容查询路径

1 <input name="supplier.id" class="easyui-combobox" panelHeight="auto" style="width:120px"
2                            data-options="required:true,valueField:'id',textField:'name',url:'/util/supplierList'"/></td>

3.form表单的格外参数提交

 1 $('#purchasebillForm').form('submit', {
 2                 url: url,
 3                 onSubmit: function (param) {
 4                     //提交form表单外的数据
 5                     //获取所有行
 6                     var rows=dg.datagrid("getRows");
 7                     for(let i in rows){
 8                         var row=rows[i];//获取每行数据
 9                         param[`items[${i}].product.id`]=row.product.id; //提交参数格式  param["集合[i].字段"]=row.字段
10                         param[`items[${i}].num`]=row.num;
11                         param[`items[${i}].price`]=row.price;
12                         param[`items[${i}].descs`]=row.descs;
13                     }
14                }
15 } )   

4.回显操作

 1  var row =purchasebillDataGrid.datagrid("getSelected");
 2             if(!row){
 3                 $.messager.alert('提示','请选中一行','info');
 4                 return;
 5             }
 6             //打开对话框
 7             purchasebillDia.dialog("open");
 8             //清除表单数据
 9             purchasebillForm.form("clear");
10             if(row.supplier){
11                 row["supplier.id"]=row.supplier.id;//下拉框的回显
12             }16             //加载form表单
17             purchasebillForm.form("load",row);
18             //加载datagrid
19             var newItems=[...row.items];//复制
20             dg.datagrid("loadData",newItems);//弹出框的回显 (需要备份 items和loadDatag公用一份数据)

保存时组合关系确认

 1 private AjaxResult saveOrUpdate(Purchasebill purchasebill){
 2         try {
 3             //一方找多方
 4             List<Purchasebillitem> items = purchasebill.getItems();
 5             for (Purchasebillitem item:items){
 6                 //多方找一方
 7                 item.setBill(purchasebill);
 8             }
 9             //保存
10             purchasebillService.save(purchasebill);
11         } catch (Exception e) {
12             e.printStackTrace();
13             return new AjaxResult(false, e.getMessage());
14         }
15         return new AjaxResult();
16     }

修改时数据的丢失问题

  配置注解:

  @ModelAttribute("purchasebillEdit")将关联字段设置为null
 @ModelAttribute("purchasebillEdit")Purchasebill purchasebill
 1  //解决数据丢失问题
 2  2     @ModelAttribute("purchasebillEdit")
 3  3     public Purchasebill beforeEdit(Long id,String cmd){
 4  4         if(id!=null && "only".equals(cmd)){
 5  5        //只有修改操作才进此方法
 6  6             Purchasebill dbPurchasebill= purchasebillService.findOne(id);
 7  7            //将关联表的值设为null
 8  8             dbPurchasebill.setSupplier(null);
 9  9             return dbPurchasebill;
10 10         }
11 11         return null;
12 12     }    
13 13 @RequestMapping("/update")
14 14     @ResponseBody
15 15     public AjaxResult update(@ModelAttribute("purchasebillEdit")Purchasebill purchasebill){
16 16         return saveOrUpdate(purchasebill);
17 17     }

猜你喜欢

转载自www.cnblogs.com/guangbin0125/p/10611184.html
今日推荐