Aisell-Day8-采购单

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Spursxuezhu/article/details/102595303

1.采购模块

1.1 系统的采购模块
采购员去采购的产品,然后把信息录入到系统里面
1.2 采购模块的关系
数据库 purchasebill purchasebillitem

purchasebill 采购主表(

inputUser_id 录入人员

​ auditor_id审核人员

​ buyer_id 采购人员

​ supplier_id 供货商

​ )

purchasebillitem 采购明细 bill_id

1.3 完成domain的创建
Purchasebill

@Entity
@Table(name = "purchasebill")
public class Purchasebill extends BaseDomain {

    private Date vdate;// 交易时间 -> 需要录入(时间set的时候加上@DateTimeFormat(pattern = "yyyy-MM-dd"))
    private BigDecimal totalAmount; //总金额 -> 明细计算
    private BigDecimal totalNum; //总数量 -> 明细计算
    private Date inputTime = new Date(); //录入时间 ->系统自动生成 当前系统时间
    private Date auditorTime; //审核时间 -> 可以为空,审核时自己生成
    /**
     * 0待审,1已审,-1作废
     */
    private Integer status = 0; //单据状态 -> 默认待审

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "supplier_id")
    private Supplier supplier;// 多对一,optional非空 供应商(需要选择)

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "auditor_id")
    private Employee auditor;// 多对一,可以为空

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "inputUser_id")
    private Employee inputUser;// 多对一,非空 录入人 -> 登录用户就是录入人

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "buyer_id")
    private Employee buyer;// 多对一,非空 采购员 -> 需要

    // 一般组合关系使用List
    /**
     * 组合关系:整体和部分 不能分开 --强级联
     * 一个订单有多个明细
     * cascade:ALL 强级联(支持级联保存和级联删除)
     * mappedBy:让一方放弃管理 ,交给多方来维护 性能要高一点
     * 双向一对多或者多对一 一方放弃管理,性能要高一点
     * orphanRemoval:孤儿删除  可以通过一方删除多方  让一方解除关系 通过一方去上删除
     *
     */
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "bill", fetch = FetchType.LAZY, orphanRemoval = true)
    private List<Purchasebillitem> items = new ArrayList<Purchasebillitem>();

Purchasebillitem

@Entity
@Table(name = "purchasebillitem")
public class Purchasebillitem extends BaseDomain {

    private BigDecimal price; //价格
    private BigDecimal num; //数量
    private BigDecimal amount; //小计 = 价格*数量
    private String descs; //描述

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "product_id")
    private Product product;// 多对一,非空 产品

    //和订单的关系
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "bill_id")
    @JsonIgnore //生成json的时候忽略这个属性
    private Purchasebill bill;// 组合关系,非空
}

1.4 前台采购模块展示数据

创建purchasebill.jsp

​ purchasebill.js

和以前展示一样
1.5 高级查询–注意日期

完成按照交易时间和审核状态

(1) 页面在组件拷贝过去

(2)在purchasebillQuery 创建 beginDate endDate status

​ 拼接语句的方法添加代码

​ 注意:处理结束时间的问题 结束时间添加了一天

(3)就可以查询

2.采购明细

(1)准备一个dialog

(2)dialog对话框里面添加一个form表单

(3)dialog对话框里面添加一个编辑表格

​ 编辑表格–easyui扩展组件 celledit

​ 把代码拷贝过来改造

​ 注意产品的这个值
(4)写新增代码 --封装数据

onSubmit: function(params){//提交之前先做验证
                    //获取编辑表格所有数据
                    var rows = gridItem.datagrid('getRows');
                    for(var i=0;i<rows.length;i++){
                        //明细表格每个数据
                        var rowData = rows[i];
                        params["items["+i+"].product.id"] = rowData.productId.id;
                        params["items["+i+"].price"] = rowData.price;
                        params["items["+i+"].num"] = rowData.num;
                        params["items["+i+"].descs"] = rowData.descs;
                        if(!gridItem.datagrid('validateRow',i)){
                            alert('明细行还有问题,请编辑');
                            return false;
                        }
                    }

                    return true;//验证通过之后才返回true,否则返回false,false它会阻止你提交
                },

后台代码

public AjaxResult saveOrUpdate(Purchasebill purchasebill){
        try {
            //计算总金额 总数量  录入时间 录入人 状态
            BigDecimal totalAmount = new BigDecimal(0);
            BigDecimal totalNum = new BigDecimal(0);
            //从明细里面计算
            List<Purchasebillitem> items = purchasebill.getItems();
            for (Purchasebillitem item : items) {
                //总金额
                totalAmount = totalAmount.add(item.getNum().multiply(item.getPrice()));
                //总数量
                totalNum= totalNum.add(item.getNum());
                //计算明细小计
                item.setAmount(item.getNum().multiply(item.getPrice()));
                //建立多方到一方 一方放弃管理 交个多方来维护外键
                item.setBill(purchasebill);

            }
            purchasebill.setTotalAmount(totalAmount);
            purchasebill.setTotalNum(totalNum);
            purchasebill.setInputTime(new Date());
            //获取当前登录用户
            Employee employee = (Employee)UserContent.getUser();
            purchasebill.setInputUser(employee);
            purchasebill.setStatus(0);
            //级联保存
            purchasebillService.save(purchasebill);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult("操作失败"+e.getMessage());
        }
    }

(5)回显的细节问题

​ 表格回显和下拉回显

(6)解决n-to-n的问题

​ 设置关联对象为null

猜你喜欢

转载自blog.csdn.net/Spursxuezhu/article/details/102595303