活动介绍
file-type

SAP MM采购业务用户指南使用手册

ZIP文件

下载需积分: 5 | 55.13MB | 更新于2025-08-04 | 138 浏览量 | 11 下载量 举报 1 收藏
download 立即下载
根据提供的文件信息,我们可以推断出以下知识点: 标题“Procurement with SAP MM - Business User Guide.zip”暗示该文档可能是关于如何使用SAP MM模块进行采购的指南,面向的是商业用户。SAP MM是SAP ERP中的物料管理模块,用于处理采购、库存管理、评估、物料需求计划等业务流程。 首先,SAP MM(Material Management)模块是SAP ERP系统的重要组成部分,它负责管理公司整个供应链中的物料流和相关的财务流。在SAP MM模块中,采购流程是关键功能之一,该流程负责采购活动的规划、实施和监控,包括创建采购订单、处理供应商发票、接收物料等。 接下来,我们可以从文档的标题“Procurement with SAP MM”中提取以下知识点: 1. 采购流程的概述:介绍SAP MM模块中的采购流程是什么,包括它的基本步骤和组成部分。 2. 采购订单的创建:详细说明如何在SAP系统中创建采购订单,采购订单的结构、类型和如何定义采购订单的相关参数。 3. 供应商管理:解释如何在SAP MM模块中管理和评估供应商,供应商信息的维护,以及供应商评估的重要性和方法。 4. 物料需求计划:讲述如何通过SAP系统确定物料的需求,并创建采购建议和计划采购订单。 5. 库存管理:介绍如何在SAP中进行库存管理,包括库存的收货、入库、出库等操作。 6. 应付账款处理:描述如何处理收到的货物和供应商的发票,以及如何在SAP中进行应付账款的管理。 7. 报告和分析:提供关于如何在SAP中使用标准报告和分析工具来监控和优化采购流程的信息。 8. SAP MM的最佳实践和案例研究:通过分析实际案例,介绍在企业环境中实施SAP MM采购流程的最佳实践和经验教训。 描述中的“sap press doc 解压密码:abap_developer”提供了关于文档格式和访问方式的信息。文档被压缩成ZIP格式,需要密码“abap_developer”来解压。这意味着文档是加密的,需要使用相应的密码才能访问其内容。"SAP PRESS"可能指的是SAP官方出版社出版的系列书籍,专门针对SAP系统的各个模块提供深入的教育和参考资料。 标签“SAP PRESS”进一步证实了文档来源于SAP官方出版社,因此内容可靠且与SAP官方提供的最佳实践保持一致。 文件名称列表并未直接提供,但是从“Procurement with SAP MM - Business User Guide.zip”标题,我们可以推断该文档可能包含以下文件或章节: - 采购流程概览:解释SAP MM采购流程的各个阶段,以及它们如何相互关联。 - 创建采购订单:提供详细的步骤和建议,帮助用户创建有效的采购订单。 - 供应商选择与评估:指南和模板,用于挑选合适的供应商,并对其绩效进行评估。 - 库存管理策略:解释在SAP MM中如何实施有效的库存管理策略。 - 应付账款处理流程:详细描述如何在SAP中管理与供应商的财务事务。 - 报告和分析工具:展示SAP提供的标准报告和分析工具的使用方法,以及如何根据这些工具进行采购决策。 - 实施案例研究:介绍SAP MM采购流程在不同行业和企业中的实际应用案例。 整合以上信息,我们知道“Procurement with SAP MM - Business User Guide.zip”是一个为SAP MM模块用户准备的指南,旨在帮助他们理解和掌握使用SAP进行采购管理的各个方面。文档可能采用问答、案例研究、操作步骤等形式,提供了从基础到高级的广泛知识,使商业用户能够有效地使用SAP系统进行采购活动。

相关推荐

filetype

CREATE PROCEDURE ZY_P_Procurement_demand_analysis @StartDate DATETIME = NULL, -- 过账时间开始 @EndDate DATETIME = NULL, -- 过账时间结束 @ItemCode NVARCHAR(50) = NULL, -- 物料编号 @Brand NVARCHAR(50) = NULL, -- 品牌 @ProdLine NVARCHAR(100) = NULL, -- 产品线 @SlpName NVARCHAR(100) = NULL, -- 销售员 @Department NVARCHAR(100) = NULL, -- 部门 @Company NVARCHAR(100) = NULL -- 公司 AS BEGIN SET NOCOUNT ON; -- 1. 计算订单数量 (按OR号+物料分组) WITH order_qty AS ( SELECT n.SupplCode AS OR号, MIN(COALESCE(n.NumAtCard, n1.U_PurContNo)) AS 合同号, n1.ItemCode AS 物料编码, MIN(n.DocDate) AS 最早订单日期, SUM(n1.Quantity) AS 订单数量, MIN(n1.U_Brand) AS 品牌, MIN(n1.U_prodline) AS 产品线, STRING_AGG(CAST(n.DocEntry AS VARCHAR(20)), ', ') WITHIN GROUP (ORDER BY n.DocDate) AS 采购单据号 FROM SINO_SAP.dbo.ORDR n INNER JOIN SINO_SAP.dbo.RDR1 n1 ON n.DocEntry = n1.DocEntry INNER JOIN SINO_SAP.dbo.OUDP p ON n1.U_Department = p.Name AND p.Remarks = '经销体系' LEFT JOIN [ZY_VIEW_XM] ON (n.NumAtCard = [ZY_VIEW_XM].ConCode OR n1.U_PurContNo = [ZY_VIEW_XM].ConCode) where [ZY_VIEW_XM].XM_YN is NULL and OCRD.Cardcode not in ('C005596','C003433') and n1.LineStatus = 'o' AND n.DocDate >= '2024-01-01' AND COALESCE(n.NumAtCard, n1.U_PurContNo) IS NOT NULL GROUP BY n.SupplCode ), -- 2. 计算占货数量 (按OR号+物料分组) alloc_qty AS ( SELECT T0.SupplCode AS OR号, J1.itemcode AS 物料编码, SUM(J1.ALLocqty) AS 占货数量 FROM SINO_SAP.dbo.ORDR T0 LEFT JOIN SINO_SAP.dbo.RDR1 T1 ON T0.DocEntry = T1.DocEntry LEFT JOIN SINO_SAP.dbo.OITL J0 ON J0.DocEntry = T1.DocEntry AND J0.DocType = '17' AND J0.DocLine = T1.LineNum JOIN SINO_SAP.dbo.ITL1 J1 ON J1.LogEntry = J0.LogEntry WHERE T1.LineStatus = 'o' GROUP BY T0.SupplCode, J1.itemcode ), -- 3. 计算在途总量 in_transit_total AS ( SELECT ItemCode AS 物料编码, SUM(未到货数量) AS 在途总量 FROM ( -- 报价单数量 SELECT n1.ItemCode, SUM(n1.Quantity) AS 未到货数量 FROM SINO_SAP.dbo.OPQT n LEFT JOIN SINO_SAP.dbo.PQT1 n1 ON n.DocEntry = n1.DocEntry LEFT JOIN SINO_SAP.dbo.OUDP p ON n1.U_Department = p.Name WHERE n.CANCELED = 'n' AND p.Remarks = '经销体系' AND n1.U_SaleContNo = '备货' AND COALESCE(n.NumAtCard, n1.U_PurContNo) IS NOT NULL AND n.DocDate >= '2024-01-01' GROUP BY n1.ItemCode UNION ALL -- 到货 SELECT n1.ItemCode, -SUM(n1.Quantity) FROM SINO_SAP.dbo.OPDN n LEFT JOIN SINO_SAP.dbo.PDN1 n1 ON n.DocEntry = n1.DocEntry LEFT JOIN SINO_SAP.dbo.OUDP p ON n1.U_Department = p.Name WHERE n.CANCELED = 'n' AND p.Remarks = '经销体系' AND n1.U_SaleContNo = '备货' AND COALESCE(n.NumAtCard, n1.U_PurContNo) IS NOT NULL AND n.NumAtCard NOT LIKE '%CFBZ%' AND n.U_UpTransNo IS NULL GROUP BY n1.ItemCode UNION ALL -- 退货 SELECT n1.ItemCode, SUM(n1.Quantity) FROM SINO_SAP.dbo.ORPD n LEFT JOIN SINO_SAP.dbo.RPD1 n1 ON n.DocEntry = n1.DocEntry LEFT JOIN SINO_SAP.dbo.OUDP p ON n1.U_Department = p.Name WHERE n.CANCELED = 'n' AND p.Remarks = '经销体系' AND n1.U_SaleContNo = '备货' AND COALESCE(n.NumAtCard, n1.U_PurContNo) IS NOT NULL AND n.NumAtCard NOT LIKE '%CFBZ%' AND n.U_UpTransNo IS NULL GROUP BY n1.ItemCode UNION ALL -- 贷项 SELECT n1.ItemCode, SUM(n1.Quantity) FROM SINO_SAP.dbo.ORPC n LEFT JOIN SINO_SAP.dbo.RPC1 n1 ON n.DocEntry = n1.DocEntry LEFT JOIN SINO_SAP.dbo.OUDP p ON n1.U_Department = p.Name WHERE n.CANCELED = 'n' AND p.Remarks = '经销体系' AND n1.U_SaleContNo = '备货' AND COALESCE(n.NumAtCard, n1.U_PurContNo) IS NOT NULL AND n.NumAtCard NOT LIKE '%CFBZ%' AND n.U_UpTransNo IS NULL GROUP BY n1.ItemCode ) t GROUP BY ItemCode HAVING SUM(未到货数量) > 0 ), -- 4. 计算现缺数量 shortage AS ( SELECT o.OR号, o.合同号, o.物料编码, o.最早订单日期, o.订单数量, o.品牌, o.产品线, o.采购单据号, COALESCE(a.占货数量, 0) AS 占货数量, CASE WHEN o.订单数量 - COALESCE(a.占货数量, 0) > 0 THEN o.订单数量 - COALESCE(a.占货数量, 0) ELSE 0 END AS 现缺数量, COALESCE(a.占货数量, 0) * 1.0 / NULLIF(o.订单数量, 0) AS 占货率 FROM order_qty o LEFT JOIN alloc_qty a ON o.OR号 = a.OR号 AND o.物料编码 = a.物料编码 ), -- 5. 分配在途数量 alloc_in_transit AS ( SELECT s.*, COALESCE(it.在途总量, 0) AS 总在途数量, CASE WHEN SUM(s.现缺数量) OVER ( PARTITION BY s.物料编码 ORDER BY s.最早订单日期, s.OR号 ) <= COALESCE(it.在途总量, 0) THEN s.现缺数量 WHEN COALESCE(it.在途总量, 0) > COALESCE(SUM(s.现缺数量) OVER ( PARTITION BY s.物料编码 ORDER BY s.最早订单日期, s.OR号 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ), 0) THEN COALESCE(it.在途总量, 0) - COALESCE(SUM(s.现缺数量) OVER ( PARTITION BY s.物料编码 ORDER BY s.最早订单日期, s.OR号 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ), 0) ELSE 0 END AS 分配的在途数量 FROM shortage s LEFT JOIN in_transit_total it ON s.物料编码 = it.物料编码 ) SELECT a.OR号, a.合同号 AS 售订单合同号, a.物料编码, a.品牌, a.产品线, a.最早订单日期 AS 过账日期, OSLP.slpname AS 销售员, r.U_Department AS 部门, r.U_company AS 公司, r.DocEntry AS 单据号, OCRD.CardName AS 客户名称, OCRD.U_province AS 客户省份, CAST(a.订单数量 AS INT) AS 订单数量, CAST(a.占货数量 AS INT) AS 占货数量, CAST(a.现缺数量 AS INT) AS 现缺数量, CAST(a.总在途数量 AS INT) AS 总在途数量, CAST(a.分配的在途数量 AS INT) AS 分配的在途数量, CAST( CASE WHEN a.现缺数量 - a.分配的在途数量 > 0 THEN a.现缺数量 - a.分配的在途数量 ELSE 0 END AS INT) AS 需下单数量 FROM alloc_in_transit a LEFT JOIN SINO_SAP.dbo.ORDR r ON a.OR号 = r.SupplCode LEFT JOIN SINO_SAP.dbo.OSLP ON r.slpcode = OSLP.SlpCode LEFT JOIN SINO_SAP.dbo.OCRD ON r.cardcode = OCRD.cardcode LEFT join [ZY_VIEW_XM] on a.合同号 = [ZY_VIEW_XM].concode where [ZY_VIEW_XM].XM_YN is NULL and OCRD.Cardcode not in ('C005596','C003433') and (a.最早订单日期 >= @StartDate OR @StartDate ='') AND (a.最早订单日期 <= @EndDate OR @EndDate ='') AND (a.物料编码 = @ItemCode OR @ItemCode ='') AND (a.品牌 = @Brand OR @Brand ='') AND (a.产品线 = @ProdLine OR @ProdLine ='') AND (OSLP.slpname = @SlpName OR @SlpName ='') AND (r.U_Department = @Department OR @Department ='') AND (r.U_company = @Company OR @Company ='') ORDER BY a.物料编码, a.最早订单日期, a.OR号; END 这个存储过程需要修改,第一个计算订单数量需要修改,修改的代码如下: SELECT o.SupplCode, -- OR号 COALESCE(o.NumAtCard, a.U_PurContNo), a.DocEntry, -- 单据编号 a.linenum, -- 行号 a.itemcode, -- 货号 a.DocDate, -- 单据时间 o.U_USER, -- 制单人 a.U_Memo, -- 行备注 a.U_oms_byhand, -- 是否other采购 a.FreeTxt, -- 自由文本字段 o.U_company, -- 公司 a.U_Brand, -- 品牌 OSLP.slpname, -- 销售员 o.U_Department, -- 部门 a.U_prodline, -- 产品线 OCRD.cardcode, -- 客户编号 OCRD.CardName, -- 客户名称 OCRD.U_province, -- 省份 a.quantity -- 订单数量 FROM RDR1 a LEFT JOIN OUDP d ON a.U_Department = d.Name LEFT JOIN ORDR o ON a.DocEntry = o.DocEntry LEFT JOIN OSLP ON o.slpcode = OSLP.SlpCode LEFT JOIN OCRD ON o.cardcode = OCRD.cardcode LEFT JOIN [ZY_VIEW_XM] ON (a.U_PurContNo = [ZY_VIEW_XM].ConCode OR o.NumAtCard = [ZY_VIEW_XM].ConCode) WHERE a.linestatus = 'o' AND d.Remarks = '经销体系' AND [ZY_VIEW_XM].XM_YN IS NULL AND OCRD.cardcode NOT IN ('C005596','C003433') AND o.DocDate >= '2024-01-01' ; 这个是计算订单数量的代码 就不需要分组了,因为or号+行号就可以锁定一个行数据,也就是一个物料。占货的也是同样的道理,代码如下: SELECT T0.SupplCode AS OR号, J1.itemcode AS 物料编码, J1.ALLocqty AS 占货数量, J0.DocLine as 行号 FROM SINO_SAP.dbo.ORDR T0 LEFT JOIN SINO_SAP.dbo.RDR1 T1 ON T0.DocEntry = T1.DocEntry LEFT JOIN SINO_SAP.dbo.OITL J0 ON J0.DocEntry = T1.DocEntry AND J0.DocType = '17' AND J0.DocLine = T1.LineNum JOIN SINO_SAP.dbo.ITL1 J1 ON J1.LogEntry = J0.LogEntry WHERE T1.LineStatus = 'o' 现在需要做的是 按照or号和行号进行分配在途,并且把销售订单中的数据都带出来

filetype

------------------------ Bancai.java ------------------------ package com.kucun.data.entity; import java.lang.annotation.Annotation; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.persistence.Table; import com.kucun.data.entity.DTO.*; import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** 板材 @author Administrator */ @Entity @Table(name=“bancai”) @JsonSerialize(using = FullEntitySerializer.class) @UniqueEntity( repositoryName = “bancai”, fields = {“houdu”, “caizhi”, “mupi1”, “mupi2”}, message = “板材组合已存在” ) public class Bancai implements EntityBasis { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @ManyToOne( fetch = FetchType.LAZY) @JoinColumn(name = “caizhi_id”) // private Caizhi caizhi; @ManyToOne( fetch = FetchType.LAZY) @JoinColumn(name = “mupi1_id”) private Mupi mupi1; @ManyToOne( fetch = FetchType.LAZY) @JoinColumn(name = “mupi2_id”) private Mupi mupi2; private Double houdu; @OneToOne( cascade = CascadeType.ALL, orphanRemoval = true, // 添加此配置 fetch = FetchType.LAZY ) @JoinColumn(name = “kucun_id”, referencedColumnName = “id”) private Kucun kucun; public Kucun getKucun() { return kucun; } public void setKucun(Kucun kucun) { this.kucun = kucun; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Caizhi getCaizhi() { return caizhi; } public void setCaizhi(Caizhi caizhi) { this.caizhi = caizhi; } public Mupi getMupi1() { return mupi1; } public void setMupi1(Mupi mupi1) { this.mupi1 = mupi1; } public Mupi getMupi2() { return mupi2; } public void setMupi2(Mupi mupi2) { this.mupi2 = mupi2; } public Double getHoudu() { return houdu; } public void setHoudu(Double houdu) { this.houdu = houdu; } public Bancai(int id, Caizhi caizhi, Mupi mupi1, Mupi mupi2, Double houdu) { super(); this.id = id; this.caizhi = caizhi; this.mupi1 = mupi1; this.mupi2 = mupi2; this.houdu = houdu; } public Bancai() { super(); } } ------------------------ Caizhi.java ------------------------ package com.kucun.data.entity; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; import com.kucun.data.entity.DTO.UniqueEntity; /** 板材材质 @author Administrator */ @Entity @Table(name=“caizhi”, uniqueConstraints = { @UniqueConstraint(columnNames = “name”) }) @UniqueEntity( repositoryName = “caizhi”, fields = {“name”}, message = “板材组合已存在” ) @JsonSerialize(using = FullEntitySerializer.class) public class Caizhi extends SimpleEntity implements EntityBasis{ @OneToMany(mappedBy=“caizhi”) private List bancai; public List getBancai() { return bancai; } public void setBancai(List bancai) { this.bancai = bancai; } } ------------------------ Chanpin.java ------------------------ package com.kucun.data.entity; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.*; /** 产品类 @author Administrator */ @Entity @Table(name=“chanpin”, uniqueConstraints = { @UniqueConstraint(columnNames = “bianhao”) }) @JsonSerialize(using = FullEntitySerializer.class) @UniqueEntity( repositoryName = “bancai”, fields = {“bianhao”}, message = “板材组合已存在” ) public class Chanpin implements EntityBasis { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; // 关联订单产品 @OneToMany( mappedBy = “chanpin”, cascade = CascadeType.ALL, fetch = FetchType.LAZY ) private List<Dingdan_chanpin> dingdan_chanpin; private String bianhao; @OneToMany( mappedBy = "chanpin", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true ) private List<Chanpin_zujian> chanpin_zujian; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getBianhao() { return bianhao; } public void setBianhao(String bianhao) { this.bianhao = bianhao; } public List<Dingdan_chanpin> getDingdan_chanpin() { return dingdan_chanpin; } public void setDingdan_chanpin(List<Dingdan_chanpin> dingdan_chanpin) { this.dingdan_chanpin = dingdan_chanpin; } public List<Chanpin_zujian> getChanpin_zujian() { return chanpin_zujian; } public void setChanpin_zujian(List<Chanpin_zujian> chanpin_zujian) { this.chanpin_zujian = chanpin_zujian; } } ------------------------ Chanpin_zujian.java ------------------------ package com.kucun.data.entity; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; import com.kucun.data.entity.DTO.UniqueEntity; /** 产品组件关联类 @author Administrator */ @Entity @Table(name=“chanpin_zujian”) @JsonSerialize(using = FullEntitySerializer.class) @UniqueEntity( repositoryName = “chanpin_zhujian”, fields = { “chanpin_id”, “zujian_id”}, message = “板材组合已存在” ) public class Chanpin_zujian implements EntityBasis { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; // 关联到产品 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “chanpin_id”) private Chanpin chanpin; // 关联到组件 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "zujian_id") private Zujian zujian; // 关联到板材 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "bancai_id") private Bancai bancai; private Double one_howmany; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Chanpin getChanpin() { return chanpin; } public void setChanpin(Chanpin chanpin) { this.chanpin = chanpin; } public Zujian getZujian() { return zujian; } public void setZujian(Zujian zujian) { this.zujian = zujian; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Double getOne_howmany() { return one_howmany; } public void setOne_howmany(Double one_howmany) { this.one_howmany = one_howmany; } public Chanpin_zujian() { super(); // TODO Auto-generated constructor stub } } ------------------------ Dingdan.java ------------------------ package com.kucun.data.entity; import java.util.Date; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; /** 订单 @author Administrator */ @Entity @Table(name=“dingdan”, uniqueConstraints = { @UniqueConstraint(columnNames = “number”) }) @JsonSerialize(using = FullEntitySerializer.class) public class Dingdan implements EntityBasis{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; //订单号 private String number; private Date xiadan; private Date jiaohuo; @OneToMany( mappedBy = “dingdan”, cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true ) private List<Dingdan_chanpin> dingdan_chanpin; // 优化订单与订单组件关联 @OneToMany( mappedBy = “dingdan”, cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true ) private List<Dingdan_chanpin_zujian> dingdan_chanpins_zujians; public Date getXiadan() { return xiadan; } public void setXiadan(Date xiadan) { this.xiadan = xiadan; } public Date getJiaohuo() { return jiaohuo; } public void setJiaohuo(Date jiaohuo) { this.jiaohuo = jiaohuo; } public List<Dingdan_chanpin_zujian> getDingdan_chanpins_zujians() { return dingdan_chanpins_zujians; } public void setDingdan_chanpins_zujians(List<Dingdan_chanpin_zujian> dingdan_chanpins_zujians) { this.dingdan_chanpins_zujians = dingdan_chanpins_zujians; } public List<Dingdan_chanpin> getDingdan_chanpin() { return dingdan_chanpin; } public void setDingdan_chanpin(List<Dingdan_chanpin> dingdan_chanpins) { this.dingdan_chanpin = dingdan_chanpins; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Dingdan(Integer id, String number) { super(); this.id = id; this.number = number; } public Dingdan() { super(); // TODO Auto-generated constructor stub } } ------------------------ Dingdan_chanpin.java ------------------------ package com.kucun.data.entity; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; /** 订单和产品关联 @author Administrator */ @Entity @Table(name=“dingdan_chanpin”) @JsonSerialize(using = FullEntitySerializer.class) public class Dingdan_chanpin implements EntityBasis { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; //产品信息 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “dingdan_id”) // 指 private Dingdan dingdan; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chanpin_id") // 指 private Chanpin chanpin; private Integer shuliang;//产品数量; public Chanpin getChanpin() { return chanpin; } public void setChanpin(Chanpin chanpin) { this.chanpin = chanpin; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan getDingdan() { return dingdan; } public void setDingdan(Dingdan dingdan) { this.dingdan = dingdan; } public Chanpin getChanping() { return chanpin; } public void setChanping(Chanpin chanping) { this.chanpin = chanping; } } ------------------------ Dingdan_chanpin_bancai.java ------------------------ package com.kucun.data.entity; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class Dingdan_chanpin_bancai implements EntityBasis { @Id private Integer id; private Dingdan_chanpin dingdan_chanpin; private Bancai bancai; private Integer shuliang; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan_chanpin getDingdan_chanpin() { return dingdan_chanpin; } public void setDingdan_chanpin(Dingdan_chanpin dingdan_chanpin) { this.dingdan_chanpin = dingdan_chanpin; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } public Dingdan_chanpin_bancai(Integer id, Dingdan_chanpin dingdan_chanpin, Bancai bancai, Integer shuliang) { super(); this.id = id; this.dingdan_chanpin = dingdan_chanpin; this.bancai = bancai; this.shuliang = shuliang; } public Dingdan_chanpin_bancai() { super(); // TODO Auto-generated constructor stub } } ------------------------ Dingdan_chanpin_zujian.java ------------------------ package com.kucun.data.entity; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; /** 一个订单中的产品组件订购板材数量 @author Administrator */ @Entity @JsonSerialize(using = FullEntitySerializer.class) public class Dingdan_chanpin_zujian implements EntityBasis{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dingdan_id") // 指定外键列 private Dingdan dingdan; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chanpin_zujian_id") // 指定外键列 private Chanpin_zujian chanpin_zujian; // 修改为单数形式 //板材 @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "bancai_id") private Bancai bancai; //订购数 private Integer shuliang ; public Dingdan_chanpin_zujian() { super(); // TODO Auto-generated constructor stub } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan getDingdan() { return dingdan; } public void setDingdan(Dingdan dingdan) { this.dingdan = dingdan; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Chanpin_zujian getChanpin_zujian() { return chanpin_zujian; } public void setChanpin_zujian(Chanpin_zujian chanpin_zujian) { this.chanpin_zujian = chanpin_zujian; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } } ------------------------ EntityBasis.java ------------------------ package com.kucun.data.entity; public interface EntityBasis { Integer getId(); void setId(Integer id); } ------------------------ Information.java ------------------------ package com.kucun.data.entity; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; /** 通信类 @author Administrator */ public class Information { private static final ObjectMapper mapper = new ObjectMapper(); private Integer Status ; private String text; private Object data; public Integer getStatus() { return Status; } public void setStatus(Integer status) { Status = status; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Information(Integer status, String text, Object data) { super(); Status = status; this.text = text; this.data = data; } @SuppressWarnings({“unchecked”,“rawtypes”}) public Information(Integer status, String text, String data, Class T) throws Exception { super(); Status = status; this.text = text; this.data = fromJson(data,T); } public Information() { super(); // TODO Auto-generated constructor stub } public String DataJson() throws JsonProcessingException { // Java对象转JSON return mapper.writeValueAsString(this); } @SuppressWarnings(“unchecked”) public T fromJson(String json, Class clazz) throws Exception { data= mapper.readValue(json, clazz); return (T) data; } public static Information NewSuccess(Object data) { return new Information(200, "success", data); } public static Information NewSuccess(String data) { return new Information(200, "success", data); } public static Information Newfail(Integer status,String text,Object data) { return new Information(status, "success", data); } public static Information NewFail(int i, String string) { // TODO Auto-generated method stub return new Information(i,string,null); } public static Information NewFail( String string) { // TODO Auto-generated method stub return new Information(400,string,null); } } ------------------------ Jinhuo.java ------------------------ package com.kucun.data.entity; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; @Entity @JsonSerialize(using = FullEntitySerializer.class) public class Jinhuo implements EntityBasis{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @ManyToOne private Dingdan dingdan; @ManyToOne private Chanpin chanpin; @ManyToOne private Zujian zujian; @ManyToOne private Bancai bancai; private Integer shuliang; private Date date; @ManyToOne private User user; public Jinhuo(Integer id, Dingdan dingdan, Chanpin chanpin, Zujian zujian, Bancai bancai, Integer shuliang, Date date, User user) { super(); this.id = id; this.dingdan = dingdan; this.chanpin = chanpin; this.zujian = zujian; this.bancai = bancai; this.shuliang = shuliang; this.date = date; this.user = user; } public Jinhuo() { super(); // TODO Auto-generated constructor stub } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dingdan getDingdan() { return dingdan; } public void setDingdan(Dingdan dingdan) { this.dingdan = dingdan; } public Chanpin getChanpin() { return chanpin; } public void setChanpin(Chanpin chanpin) { this.chanpin = chanpin; } public Zujian getZujian() { return zujian; } public void setZujian(Zujian zujian) { this.zujian = zujian; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } ------------------------ Kucun.java ------------------------ package com.kucun.data.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; /** 库存 @author Administrator */ @Entity @JsonSerialize(using = FullEntitySerializer.class) public class Kucun implements EntityBasis{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private Integer shuliang; @OneToOne(fetch = FetchType.LAZY) // 正确映射 Bancai 实体 @JoinColumn(name = "bancai_id", referencedColumnName = "id") private Bancai bancai; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Bancai getBancai() { return bancai; } public void setBancai(Bancai bancai) { this.bancai = bancai; } public Integer getShuliang() { return shuliang; } public void setShuliang(Integer shuliang) { this.shuliang = shuliang; } public Kucun(Integer id, Bancai bancai, Integer shuliang) { super(); this.id = id; this.bancai = bancai; this.shuliang = shuliang; } public Kucun() { super(); // TODO Auto-generated constructor stub } } ------------------------ Mupi.java ------------------------ package com.kucun.data.entity; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; /** 木皮 @author Administrator */ @Entity @Table(name=“mupi”, uniqueConstraints = { @UniqueConstraint(columnNames = “name”) }) @JsonSerialize(using = FullEntitySerializer.class) public class Mupi extends SimpleEntity implements EntityBasis{ /** * 是否有油漆 */ @Column(name="you") @Type(type = "org.hibernate.type.BooleanType") private Boolean you; // 添加 OneToMany 映射 @OneToMany(mappedBy = "mupi1") // 指向 Bancai 中的 mupi1 字段 private List<Bancai> bancaisForMupi1; @OneToMany(mappedBy = "mupi2") // 指向 Bancai 中的 mupi2 字段 private List<Bancai> bancaisForMupi2; public List<Bancai> getBancaisForMupi1() { return bancaisForMupi1; } public void setBancaisForMupi1(List<Bancai> bancaisForMupi1) { this.bancaisForMupi1 = bancaisForMupi1; } public List<Bancai> getBancaisForMupi2() { return bancaisForMupi2; } public void setBancaisForMupi2(List<Bancai> bancaisForMupi2) { this.bancaisForMupi2 = bancaisForMupi2; } public Mupi() { super(); } public Boolean getYou() { return you; } public void setYou(Boolean you) { this.you = you; } } ------------------------ SimpleEntity.java ------------------------ package com.kucun.data.entity; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class SimpleEntity implements EntityBasis{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(nullable = false, unique = true) private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } // Getters and Setters... } ------------------------ User.java ------------------------ package com.kucun.data.entity; import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; /** 用户 @author Administrator / @Entity @Table(name=“user”) @JsonSerialize(using = FullEntitySerializer.class) public class User implements EntityBasis{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; /* * 名字 / @Column(nullable=false) private String name; /* * 账号 / @Column(nullable=false) private String andy; /* * 密码 / @Column(nullable=false) private String pass; /* * 权限 */ @Column(nullable=false) private int role; public User() { super(); } public User(int id, String name, String andy, String pass) { super(); this.id = id; this.name = name; this.andy = andy; this.pass = pass; } public Integer getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAndy() { return andy; } public void setAndy(String andy) { this.andy = andy; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public int getRole() { System.out.println(role); return role; } public void setRole(int role) { this.role = role; } @Override public String toString() { return "{id:" + id + ", name:" + name + ", andy:" + andy + ", pass:" + pass + ", role:" + role + "}"; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(andy, user.andy)&& Objects.equals(role, user.role); //添加所有属性比较 } @Override public int hashCode() { return Objects.hash(id, name, andy,pass,role); } @Override public void setId(Integer id) { // TODO Auto-generated method stub } } ------------------------ Zujian.java ------------------------ package com.kucun.data.entity; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.OneToMany; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.kucun.data.entity.DTO.FullEntitySerializer; @Entity @JsonSerialize(using = FullEntitySerializer.class) public class Zujian extends SimpleEntity implements EntityBasis{ // 反向关联到产品组件 @OneToMany( mappedBy = "zujian", cascade = CascadeType.ALL, fetch = FetchType.LAZY ) private List<Chanpin_zujian> chanping_zujian; public List<Chanpin_zujian> getChanping_zujian() { return chanping_zujian; } public void setChanping_zujian(List<Chanpin_zujian> chanping_zujian) { this.chanping_zujian = chanping_zujian; } } 设计改造一个数据结构, 要求 一个订单有很多产品不同数量,每个产品可以再很多订单中,一个产品有很多组件,一个组件可以在很多产品中,因为每个组件因为在不同的产品中有不同的生产工艺,所以使用不同的板材和板材能生产组件数量,每个板材有不同的材质和两面木皮,木皮表面可能有油漆, 订购时可能直接购入板材,也可能按订单和产品订购,也用可能按订单产品组件订购 ,每次采购不标准,一个订单可能订购几次,用户有姓名 账号 密码 权限, 一个记录进货和消耗