------------------------ AppController.java ------------------------
package com.kucun.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kucun.Service.AppService;
import com.kucun.Service.DynamicRepositoryService;
import com.kucun.data.entity.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/app")
public class AppController {
@Autowired
private AppService appService;
@Autowired
private ObjectMapper objectMapper;
private Map<String, Class<?>> ENTITY_MAP ;
@Autowired
public AppController(
DynamicRepositoryService dynamicRepositoryService,
AppService appService,
ObjectMapper objectMapper
) {
this.ENTITY_MAP = dynamicRepositoryService.getStringClassMap();
this.appService = appService;
this.objectMapper = objectMapper;
}
// ====================== 数据查询 ======================
@GetMapping("/all")
public Information getAllData() throws JsonProcessingException {
System.out.println(Information.NewSuccess(ENTITY_MAP).DataJson());
return appService.getAllData();
}
@GetMapping("/all/{entityType}")
public Information getEntityData(@PathVariable String entityType) {
return appService.getEntityData(entityType.toLowerCase());
}
// ====================== CRUD操作 ======================
@PostMapping("/add/{entityType}")
public Information addEntity(
@PathVariable String entityType,
@RequestBody Map<String, Object> requestBody
) {
return handleEntityOperation(entityType, requestBody, "add");
}
@PostMapping("/select/{entityType}")
public Information queryEntity(
@PathVariable String entityType,
@RequestBody Map<String, Object> requestBody
) {
return handleEntityOperation(entityType, requestBody, "select");
}
@PostMapping("/delete/{entityType}")
public Information deleteEntity(
@PathVariable String entityType,
@RequestBody Map<String, Object> requestBody
) {
return handleEntityOperation(entityType, requestBody, "delete");
}
@PostMapping("/update/{entityType}")
public Information updateEntity(
@PathVariable String entityType,
@RequestBody Map<String, Object> requestBody
) {
return handleEntityOperation(entityType, requestBody, "update");
}
// ====================== 核心辅助方法 ======================
private Information handleEntityOperation(
String entityType,
Map<String, Object> requestBody,
String operation
) {
String normalizedType = entityType.toLowerCase();
Class<?> entityClass = ENTITY_MAP.get(normalizedType);
if (entityClass == null) {
return Information.NewFail("不支持的实体类型: " + entityType);
}
try {
Object entity = objectMapper.convertValue(requestBody, entityClass);
System.out.println(Information.NewSuccess(requestBody).DataJson());
switch (operation) {
case "add":
return appService.addEntity(entity);
case "select":
return appService.queryEntity(entity);
case "delete":
// 确保实体实现了EntityBasis接口
if (entity instanceof EntityBasis) {
return appService.deleteEntity((EntityBasis) entity);
} else {
return Information.NewFail("删除操作需要实体实现EntityBasis接口");
}
case "update":
return appService.updateEntity(entity);
default:
return Information.NewFail("无效的操作类型");
}
} catch (Exception e) {
return Information.NewFail(operation + "操作失败: " + e.getMessage());
}
}
}
------------------------ AppService.java ------------------------
package com.kucun.Service;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;
import javax.persistence.EntityNotFoundException;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;
import com.kucun.data.entity.*;
import com.kucun.dataDo.*;
/**
*
*
*
*/
@Service
public class AppService {
// 自动注入所有依赖
@Autowired private KucunRepository kucunRepository;
@Autowired private DynamicRepositoryService repositoryService;
@Autowired private EntityDependencyService dependencyService;
/**
* 获取所有实体类型的数据
* @return 包含所有实体数据的Map
*
*
*/
public Information getAllData() {
Map<String, Object> response = new HashMap<>();
repositoryService.getRepositoryNameMap().forEach((key, repo) ->
response.put(key + "s", repo.findAll())
);
return Information.NewSuccess(response);
}
/**
* 获取指定实体类型的所有数据
* @param entityName 实体名称
* @return 实体数据列表
*
*
*/
public Information getEntityData(String entityName) {
JpaRepository<?, ?> repo = repositoryService.getJpaRepository(entityName);
return Information.NewSuccess(repo.findAll());
}
/**
* 添加新实体
* @param entity 要添加的实体对象
* @return 添加结果
*
*
*/
public Information addEntity(@Valid Object entity) {
try {
// 处理关联字段
handleAssociations(entity);
System.out.println("----------------------------------------------------------------------------"+entity);
// 获取对应的Repository并保存
JpaRepository<Object, Serializable> repo =
(JpaRepository<Object, Serializable>) repositoryService.getJpaRepository(entity.getClass());
//System.out.println(Information.NewSuccess(entity).DataJson());
if(entity instanceof User) {
if(((User) entity).getPass()!=null) {
String psass=((User) entity).getPass();
((User) entity).setPass(PasswordService.hashPassword(psass));
}
}
Object savedEntity = repo.save(entity);
System.out.println("----------------------------------------------------------------------------"+entity);
// 如果是板材,初始化库存
if (savedEntity instanceof Bancai) {
initializeKucunForBancai((Bancai) savedEntity);
}
return Information.NewSuccess(savedEntity);
} catch (Exception ex) {
return Information.Newfail(500, "创建失败: " + ex.getMessage(), null);
}
}
/**
* 更新实体
* @param entity 包含ID的实体对象
* @return 更新结果
*
*
*/
public Information updateEntity(Object entity) {
if (entity == null) {
return Information.Newfail(403, "参数为空", null);
}
// 获取ID字段
Field idField=null;
try {
idField = getIdField(entity);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
idField.setAccessible(true);
Object idValue = idField.get(entity);
if (idValue == null) {
return Information.Newfail(403, "ID为空", null);
}
// 获取Repository和现有实体
JpaRepository<Object, Serializable> repo =
(JpaRepository<Object, Serializable>) repositoryService.getJpaRepository(entity.getClass());
Object existingEntity = repo.findById((Serializable) idValue)
.orElseThrow(() -> new RuntimeException("实体不存在"));
if(entity instanceof User) {
if(((User) entity).getPass()!=null) {
String psass=((User) entity).getPass();
((User) entity).setPass(PasswordService.hashPassword(psass));
}
}
// 复制非空属性并保存
copyNonNullProperties(entity, existingEntity);
return Information.NewSuccess(repo.save(existingEntity));
} catch (Exception ex) {
ex.fillInStackTrace();
return Information.Newfail(500, "更新失败: " + ex.getMessage(), null);
}
}
/**
* 删除实体
* @param entity 要删除的实体
* @return 删除结果
*/
public Information deleteEntity(EntityBasis entity) {
if (entity == null) {
return Information.NewFail("删除对象不能为空");
}
try {
String entityName = entity.getClass().getSimpleName().toLowerCase();
JpaRepository<Object, Serializable> repo =
(JpaRepository<Object, Serializable>) repositoryService.getJpaRepository(entityName);
// 先加载完整实体(关键步骤)
Object managedEntity = repo.findById(entity.getId())
.orElseThrow(() -> new EntityNotFoundException("实体不存在"));
System.out.println("// 获得实体");
if(entity instanceof Bancai) {
Kucun k=kucunRepository.findByBancai((Bancai)entity);
if(k!=null&&k.getShuliang()>0) {
return Information.NewFail("库存不为零,无法删除");
}
if(k!=null)
kucunRepository.delete(k);
}
System.out.println("// 检查库存");
// 检查依赖关系
if (dependencyService.hasDependencies(entity.getClass(), entity.getId())) {
return Information.NewFail("该记录已被引用,无法删除");
}
System.out.println("// 检查依赖关系");
// 使用实体对象删除(触发级联操作)
repo.delete(managedEntity);
return Information.NewSuccess("删除成功");
} catch (Exception e) {
return Information.NewFail("删除错误: " + e.getMessage());
}
}/**
* 动态查询实体
* @param entity 包含查询条件的实体对象
* @return 查询结果
*/
public <T> Information queryEntity(T entity) {
if (entity == null) {
return Information.NewFail("查询参数不能为空");
}
try {
JpaRepository<T, ?> repo = (JpaRepository<T, ?>) repositoryService.getJpaRepository(entity.getClass());
Example<T> example = Example.of(entity, ExampleMatcher.matching()
.withIgnoreNullValues()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING));
return Information.NewSuccess(repo.findAll(example));
} catch (Exception e) {
return Information.NewFail("查询失败: " + e.getMessage());
}
}
// ====================== 私有辅助方法 ======================
/**
* 为板材初始化库存
* @param bancai 板材对象
*/
private void initializeKucunForBancai(Bancai bancai) throws Exception {
Kucun kucun = new Kucun(null, bancai, 0);
bancai.setKucun(kucunRepository.save(kucun));
}
/**
* 处理实体关联关系
* @param entity 要处理的实体
*/
private void handleAssociations(Object entity) throws Exception {
for (Field field : entity.getClass().getDeclaredFields()) {
field.setAccessible(true);
Object value = field.get(entity);
if (value == null) continue;
// 处理 JPA 实体关联
if (value instanceof EntityBasis) {
EntityBasis associated = (EntityBasis) value;
JpaRepository<Object, Serializable> repo =
(JpaRepository<Object, Serializable>) repositoryService.getJpaRepository(associated.getClass().getSimpleName().toLowerCase());
// 只处理已存在实体(不创建新关联)
if (associated.getId() != null) {
Object managedEntity = repo.findById(associated.getId())
.orElseThrow(() -> new Exception("关联实体不存在"));
field.set(entity, managedEntity);
}
}
// 处理集合关联
else if (value instanceof Collection) {
List<Object> managedEntities = new ArrayList<>();
for (Object item : (Collection<?>) value) {
if (item instanceof EntityBasis) {
EntityBasis eb = (EntityBasis) item;
JpaRepository<Object, Serializable> repo =
(JpaRepository<Object, Serializable>) repositoryService.getJpaRepository(eb.getClass().getSimpleName().toLowerCase());
if (eb.getId() != null) {
managedEntities.add(repo.findById(eb.getId())
.orElseThrow(() -> new Exception("关联实体不存在")));
}
}
}
if (!managedEntities.isEmpty()) {
field.set(entity, managedEntities);
}
}
}
}
/**
* 处理实体关联关系
* @param entity 要处理的实体
*/
private void handleAssociationss(Object entity) throws Exception {
for (Field field : entity.getClass().getDeclaredFields()) {
field.setAccessible(true);
Object value = field.get(entity);
if(value instanceof EntityBasis) {
}
}
}
/**
* 复制非空属性
* @param source 源对象
* @param target 目标对象
*/
private void copyNonNullProperties(Object source, Object target) throws IllegalAccessException {
for (Field field : source.getClass().getDeclaredFields()) {
field.setAccessible(true);
Object value = field.get(source);
// 跳过关联字段和ID字段
if (value != null &&
!(value instanceof EntityBasis) &&
!(value instanceof Collection) &&
!field.getName().equals("id")) {
try {
Field targetField = target.getClass().getDeclaredField(field.getName());
targetField.setAccessible(true);
targetField.set(target, value);
} catch (NoSuchFieldException ignored) {}
}
}
}
/*
* 获取实体类的id字段(支持父类查找)
* @param entity 实体对象
* @return Field对象或null
*/
public static Field getIdField(Object entity) {
if (entity == null) {
return null;
}
Class<?> clazz = entity.getClass();
// 递归查找类及其父类的id字段
while (clazz != null && clazz != Object.class) {
try {
Field idField = clazz.getDeclaredField("id");
idField.setAccessible(true);
return idField;
} catch (NoSuchFieldException e) {
// 继续向上查找父类
clazz = clazz.getSuperclass();
} catch (SecurityException e) {
e.printStackTrace();
return null;
}
}
return null;
}
}
------------------------ 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 extends EntityBasis {
@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 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(Integer id, Caizhi caizhi, Mupi mupi1, Mupi mupi2, Double houdu) {
super( 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 EntityBasis{
@OneToMany(mappedBy="caizhi")
private List<Bancai> bancai;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Bancai> getBancai() {
return bancai;
}
public void setBancai(List<Bancai> 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 = "chanpin",
fields = {"bianhao"},
message = "该产品已存在"
)
public class Chanpin extends EntityBasis {
// 关联订单产品
@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 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", "zujian"},
message = "产品下也有该组件"
)
public class Chanpin_zujian extends EntityBasis {
// 关联到产品
@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;
//生产多少组件
private Double zujianshu;
public Double getZujianshu() {
return zujianshu;
}
public void setZujianshu(Double zujianshu) {
this.zujianshu = zujianshu;
}
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;
import com.kucun.data.entity.DTO.UniqueEntity;
/**
* 订单
* @author Administrator
*
*/
@Entity
@Table(name="dingdan", uniqueConstraints = {
@UniqueConstraint(columnNames = "number")
})
@UniqueEntity(
repositoryName = "dingdan",
fields = {"numder"},
message = "该订单已存在"
)
@JsonSerialize(using = FullEntitySerializer.class)
public class Dingdan extends EntityBasis{
//订单号
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;
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> getDingdan_chanpin() {
return dingdan_chanpin;
}
public void setDingdan_chanpin(List<Dingdan_chanpin> dingdan_chanpins) {
this.dingdan_chanpin = dingdan_chanpins;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public Dingdan(Integer id, String number) {
super(id);
this.number = number;
}
public Dingdan() {
super();
// TODO Auto-generated constructor stub
}
}
------------------------ Dingdan_bancai.java ------------------------
package com.kucun.data.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.kucun.data.entity.DTO.UniqueEntity;
/**
* 订单订购记录,
* @author Administrator
*
*/
@Entity
@Table(name="dingdan_bancai")
@UniqueEntity(
repositoryName = "dingdan_chanpin",
fields = {"dingdan","chanpin","zujian","bancai"},
message = "订单下已有该产品"
)
public class Dingdan_bancai extends EntityBasis{
//订单
@ManyToOne(optional=true)
private Dingdan dingdan;
//产品
@ManyToOne(optional=true)
private Chanpin chanpin;
//组件
@ManyToOne(optional=true)
private Zujian zujian;
//板材
@ManyToOne
private Bancai bancai;
private Integer shuliang;
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;
}
}
------------------------ 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;
import com.kucun.data.entity.DTO.UniqueEntity;
/**
* 订单和产品关联
* @author Administrator
*
*/
@Entity
@Table(name="dingdan_chanpin")
@UniqueEntity(
repositoryName = "dingdan_chanpin",
fields = {"dingdan","chanpin"},
message = "订单下已有该产品"
)
@JsonSerialize(using = FullEntitySerializer.class)
public class Dingdan_chanpin extends EntityBasis {
//产品信息
@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 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;
}
}
------------------------ EntityBasis.java ------------------------
package com.kucun.data.entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class EntityBasis implements EntityBasisId {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public EntityBasis(Integer id) {
super();
this.id = id;
}
public EntityBasis() {
super();
// TODO Auto-generated constructor stub
}
}
------------------------ EntityBasisId.java ------------------------
package com.kucun.data.entity;
public interface EntityBasisId {
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> T fromJson(String json, Class<T> 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 extends EntityBasis{
@ManyToOne
private Dingdan_bancai dingdan_bancai;
private Integer shuliang;
private Date date;
@ManyToOne
private User user;
public Dingdan_bancai getDingdan_bancai() {
return dingdan_bancai;
}
public void setDingdan_bancai(Dingdan_bancai dingdan_bancai) {
this.dingdan_bancai = dingdan_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;
}
public Jinhuo(Integer id, Dingdan_bancai dingdan_bancai, Integer shuliang, Date date, User user) {
super(id);
this.dingdan_bancai = dingdan_bancai;
this.shuliang = shuliang;
this.date = date;
this.user = user;
}
public Jinhuo() {
super();
// TODO Auto-generated constructor stub
}
}
------------------------ Kucun.java ------------------------
package com.kucun.data.entity;
import java.util.List;
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 extends EntityBasis{
private Integer shuliang;
@OneToOne(fetch = FetchType.LAZY) // 正确映射 Bancai 实体
@JoinColumn(name = "bancai_id", referencedColumnName = "id")
private Bancai bancai;
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(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 EntityBasis{
/**
* 是否有油漆
*/
@Column(name="you")
@Type(type = "org.hibernate.type.BooleanType")
private Boolean you;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 添加 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 EntityBasisId{
@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 extends EntityBasis{
/**
* 名字
*/
@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(id);
this.name = name;
this.andy = andy;
this.pass = pass;
}
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;
}
}
------------------------ 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 EntityBasis{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 反向关联到产品组件
@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;
}
}
设计一个根据时间返回全部新增数据
最新发布