@@ -0,0 +1,71 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.fasterxml.jackson.annotation.JsonInclude | |||
import com.fasterxml.jackson.annotation.JsonManagedReference | |||
import com.ffii.core.entity.BaseEntity | |||
import jakarta.persistence.* | |||
import jakarta.validation.constraints.NotNull | |||
@Entity | |||
@Table(name = "material") | |||
open class Material : BaseEntity<Long>() { | |||
@NotNull | |||
@Column(name = "code") | |||
open var code: String? = null | |||
@NotNull | |||
@Column(name = "name") | |||
open var name: String? = null | |||
@Column(name = "description") | |||
open var description: String? = null | |||
@Column(name = "remarks") | |||
open var remarks: String? = null | |||
@NotNull | |||
@Column(name = "isConsumables") | |||
open var isConsumables: Boolean? = null | |||
@OneToMany(mappedBy = "material", cascade = [CascadeType.ALL], orphanRemoval = true) | |||
@JsonManagedReference("material-weight-unit") | |||
@JsonInclude(JsonInclude.Include.NON_NULL) | |||
private val weightUnit: Set<ProductMaterialWeightUnit> = HashSet() | |||
@OneToMany(mappedBy = "material", cascade = [CascadeType.ALL], orphanRemoval = true) | |||
@JsonManagedReference("material-uom") | |||
@JsonInclude(JsonInclude.Include.NON_NULL) | |||
private val uom: Set<ProductMaterialWeightUnit> = HashSet() | |||
@OneToMany(mappedBy = "material", cascade = [CascadeType.ALL], orphanRemoval = true) | |||
@JsonManagedReference("material-uom") | |||
@JsonInclude(JsonInclude.Include.NON_NULL) | |||
private val type: Set<ProductMaterialType> = HashSet() | |||
@Column(name = "shelfLife") | |||
open var shelfLife: Number? = null | |||
@Column(name = "countryOfOrigin") | |||
open var countryOfOrigin: String? = null | |||
@Column(name = "minHumid") | |||
open var minHumid: Double? = null | |||
@Column(name = "maxHumid") | |||
open var maxHumid: Double? = null | |||
@Column(name = "minTemp") | |||
open var minTemp: Double? = null | |||
@Column(name = "maxTemp") | |||
open var maxTemp: Double? = null | |||
@Column(name = "sampleRate") | |||
open var sampleRate: Double? = null | |||
@Column(name = "passingRate") | |||
open var passingRate: Double? = null | |||
@Column(name = "netWeight") | |||
open var netWeight: Double? = null | |||
} |
@@ -0,0 +1,10 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.ffii.core.support.AbstractRepository | |||
import org.springframework.stereotype.Repository | |||
@Repository | |||
interface MaterialRepository : AbstractRepository<Material, Long> { | |||
// fun findAllByDeletedFalse(): List<Material>; | |||
} |
@@ -0,0 +1,71 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.fasterxml.jackson.annotation.JsonInclude | |||
import com.fasterxml.jackson.annotation.JsonManagedReference | |||
import com.ffii.core.entity.BaseEntity | |||
import jakarta.persistence.* | |||
import jakarta.validation.constraints.NotNull | |||
@Entity | |||
@Table(name = "product") | |||
open class Product : BaseEntity<Long>() { | |||
@NotNull | |||
@Column(name = "code") | |||
open var code: String? = null | |||
@NotNull | |||
@Column(name = "name") | |||
open var name: String? = null | |||
@Column(name = "description") | |||
open var description: String? = null | |||
@Column(name = "remarks") | |||
open var remarks: String? = null | |||
@NotNull | |||
@Column(name = "isConsumables") | |||
open var isConsumables: Boolean? = null | |||
@OneToMany(mappedBy = "product", cascade = [CascadeType.ALL], orphanRemoval = true) | |||
@JsonManagedReference("product-weight-unit") | |||
@JsonInclude(JsonInclude.Include.NON_NULL) | |||
private val weightUnit: Set<ProductMaterialWeightUnit> = HashSet() | |||
@OneToMany(mappedBy = "product", cascade = [CascadeType.ALL], orphanRemoval = true) | |||
@JsonManagedReference("product-uom") | |||
@JsonInclude(JsonInclude.Include.NON_NULL) | |||
private val uom: Set<ProductMaterialWeightUnit> = HashSet() | |||
@OneToMany(mappedBy = "product", cascade = [CascadeType.ALL], orphanRemoval = true) | |||
@JsonManagedReference("product-uom") | |||
@JsonInclude(JsonInclude.Include.NON_NULL) | |||
private val type: Set<ProductMaterialType> = HashSet() | |||
@Column(name = "shelfLife") | |||
open var shelfLife: Number? = null | |||
@Column(name = "countryOfOrigin") | |||
open var countryOfOrigin: String? = null | |||
@Column(name = "minHumid") | |||
open var minHumid: Double? = null | |||
@Column(name = "maxHumid") | |||
open var maxHumid: Double? = null | |||
@Column(name = "minTemp") | |||
open var minTemp: Double? = null | |||
@Column(name = "maxTemp") | |||
open var maxTemp: Double? = null | |||
@Column(name = "sampleRate") | |||
open var sampleRate: Double? = null | |||
@Column(name = "passingRate") | |||
open var passingRate: Double? = null | |||
@Column(name = "netWeight") | |||
open var netWeight: Double? = null | |||
} |
@@ -0,0 +1,27 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.fasterxml.jackson.annotation.JsonBackReference | |||
import jakarta.persistence.* | |||
import jakarta.validation.constraints.NotNull | |||
@Entity | |||
@Table(name = "product_material_type") | |||
open class ProductMaterialType { | |||
@ManyToOne | |||
@JoinColumn(name = "productId") | |||
@JsonBackReference | |||
@NotNull | |||
open var product: Product? = null | |||
@ManyToOne | |||
@JoinColumn(name = "materialId") | |||
@JsonBackReference | |||
@NotNull | |||
open var material: Material? = null | |||
@Id | |||
@NotNull | |||
@Column(name = "name") | |||
open var name: String? = null | |||
} |
@@ -0,0 +1,26 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.fasterxml.jackson.annotation.JsonBackReference | |||
import jakarta.persistence.* | |||
import jakarta.validation.constraints.NotNull | |||
@Entity | |||
@Table(name = "product_material_uom") | |||
open class ProductMaterialUom { | |||
@ManyToOne | |||
@JoinColumn(name = "productId") | |||
@JsonBackReference | |||
@NotNull | |||
open var product: Product? = null | |||
@ManyToOne | |||
@JoinColumn(name = "materialId") | |||
@JsonBackReference | |||
@NotNull | |||
open var material: Material? = null | |||
@Id | |||
@NotNull | |||
@Column(name = "uom") | |||
open var uom: String? = null | |||
} |
@@ -0,0 +1,31 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.fasterxml.jackson.annotation.JsonBackReference | |||
import jakarta.persistence.* | |||
import jakarta.validation.constraints.NotNull | |||
@Entity | |||
@Table(name = "product_material_weightUnit") | |||
open class ProductMaterialWeightUnit { | |||
@ManyToOne | |||
@JoinColumn(name = "productId") | |||
@JsonBackReference | |||
@NotNull | |||
open var product: Product? = null | |||
@ManyToOne | |||
@JoinColumn(name = "materialId") | |||
@JsonBackReference | |||
@NotNull | |||
open var material: Material? = null | |||
@Id | |||
@NotNull | |||
@Column(name = "weightUnit") | |||
open var weightUnit: String? = null | |||
@NotNull | |||
@Column(name = "conversion") | |||
open var conversion: Double? = null | |||
} |
@@ -0,0 +1,8 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.ffii.core.support.AbstractRepository | |||
interface ProductRepository: AbstractRepository<Product, Long> { | |||
fun findAllByDeletedFalse(): List<Product>; | |||
} |
@@ -0,0 +1,20 @@ | |||
package com.ffii.fpsms.modules.master.service | |||
import com.ffii.core.support.AbstractBaseEntityService | |||
import com.ffii.core.support.JdbcDao | |||
import com.ffii.fpsms.modules.master.entity.Material | |||
import com.ffii.fpsms.modules.master.entity.MaterialRepository | |||
import org.springframework.stereotype.Service | |||
@Service | |||
open class MaterialService( | |||
private val jdbcDao: JdbcDao, | |||
private val materialRepository: MaterialRepository, | |||
): AbstractBaseEntityService<Material, Long, MaterialRepository>(jdbcDao, materialRepository) { | |||
// do mapping with projection | |||
open fun getMaterials(): List<Material> { | |||
// TODO: Replace by actual logic | |||
val materials = materialRepository.findAll() | |||
return materials | |||
} | |||
} |
@@ -0,0 +1,15 @@ | |||
package com.ffii.fpsms.modules.master.service | |||
import com.ffii.core.support.AbstractBaseEntityService | |||
import com.ffii.core.support.JdbcDao | |||
import com.ffii.fpsms.modules.master.entity.Material | |||
import com.ffii.fpsms.modules.master.entity.MaterialRepository | |||
import com.ffii.fpsms.modules.master.entity.Product | |||
import com.ffii.fpsms.modules.master.entity.ProductRepository | |||
class ProductService( | |||
private val jdbcDao: JdbcDao, | |||
private val productRepository: ProductRepository | |||
): AbstractBaseEntityService<Product, Long, ProductRepository>(jdbcDao, productRepository) { | |||
} |
@@ -0,0 +1,18 @@ | |||
package com.ffii.fpsms.modules.master.web | |||
import com.ffii.fpsms.modules.master.entity.Material | |||
import com.ffii.fpsms.modules.master.service.MaterialService | |||
import org.springframework.web.bind.annotation.GetMapping | |||
import org.springframework.web.bind.annotation.RequestMapping | |||
import org.springframework.web.bind.annotation.RestController | |||
@RestController | |||
@RequestMapping("/materials") | |||
class MaterialController( | |||
private val materialService: MaterialService | |||
) { | |||
@GetMapping | |||
fun allMaterial(): List<Material> { | |||
return materialService.getMaterials() | |||
} | |||
} |
@@ -0,0 +1,77 @@ | |||
-- liquibase formatted sql | |||
-- changeset derek:material and product | |||
CREATE TABLE material ( | |||
id INT NOT NULL AUTO_INCREMENT, | |||
version INT NOT NULL DEFAULT '0', | |||
created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
createdBy VARCHAR(30) NULL, | |||
modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
modifiedBy VARCHAR(30) NULL, | |||
deleted TINYINT(1) NOT NULL DEFAULT '0', | |||
`code` VARCHAR(50) NOT NULL, | |||
`name` VARCHAR(50) NOT NULL, | |||
description VARCHAR(100) NULL, | |||
remarks varchar(500) NULL, | |||
isConsumables TINYINT(1) NOT NULL default 0, | |||
shelfLife INT(11) NULL, | |||
countryOfOrigin varchar(50) NULL, | |||
minHumid DECIMAL(16,2) NULL, | |||
maxHumid DECIMAL(16,2) NULL, | |||
minTemp DECIMAL(16,2) NULL, | |||
maxTemp DECIMAL(16,2) NULL, | |||
sampleRate DECIMAL(16,2) NULL, | |||
passingRate DECIMAL(16,2) NULL, | |||
netWeight DECIMAL(16,2) NULL, | |||
CONSTRAINT pk_material PRIMARY KEY (id) | |||
); | |||
CREATE TABLE product ( | |||
id INT NOT NULL AUTO_INCREMENT, | |||
version INT NOT NULL DEFAULT '0', | |||
created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
createdBy VARCHAR(30) NULL, | |||
modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
modifiedBy VARCHAR(30) NULL, | |||
deleted TINYINT(1) NOT NULL DEFAULT '0', | |||
`code` VARCHAR(50) NOT NULL, | |||
`name` VARCHAR(50) NOT NULL, | |||
description VARCHAR(100) NULL, | |||
remarks varchar(500) NULL, | |||
isConsumables TINYINT(1) NOT NULL default 0, | |||
shelfLife INT(11) NULL, | |||
countryOfOrigin varchar(50) NULL, | |||
minHumid DECIMAL(16,2) NULL, | |||
maxHumid DECIMAL(16,2) NULL, | |||
minTemp DECIMAL(16,2) NULL, | |||
maxTemp DECIMAL(16,2) NULL, | |||
sampleRate DECIMAL(16,2) NULL, | |||
passingRate DECIMAL(16,2) NULL, | |||
netWeight DECIMAL(16,2) NULL, | |||
CONSTRAINT pk_product PRIMARY KEY (id) | |||
); | |||
CREATE TABLE product_material_weightUnit ( | |||
productId INT NULL, | |||
materialId INT NULL, | |||
weightUnit VARCHAR(30) NOT NULL, | |||
conversion DECIMAL(16,2) NOT NULL DEFAULT 1 | |||
); | |||
CREATE TABLE product_material_uom ( | |||
productId INT NULL, | |||
materialId INT NULL, | |||
uom VARCHAR(30) NOT NULL | |||
); | |||
CREATE TABLE product_material_type ( | |||
productId INT NULL, | |||
materialId INT NULL, | |||
name VARCHAR(30) NOT NULL | |||
); | |||
ALTER TABLE product_material_weightUnit ADD CONSTRAINT FK_PRODUCT_ON_WEIGHTUNIT FOREIGN KEY (productId) REFERENCES product (id); | |||
ALTER TABLE product_material_weightUnit ADD CONSTRAINT FK_MATERIAL_ON_WEIGHTUNIT FOREIGN KEY (materialId) REFERENCES material (id); | |||
ALTER TABLE product_material_uom ADD CONSTRAINT FK_PRODUCT_ON_UOM FOREIGN KEY (productId) REFERENCES product (id); | |||
ALTER TABLE product_material_uom ADD CONSTRAINT FK_MATERIAL_ON_UOM FOREIGN KEY (materialId) REFERENCES material (id); | |||
ALTER TABLE product_material_type ADD CONSTRAINT FK_PRODUCT_ON_TYPE FOREIGN KEY (productId) REFERENCES product (id); | |||
ALTER TABLE product_material_type ADD CONSTRAINT FK_MATERIAL_ON_TYPE FOREIGN KEY (materialId) REFERENCES material (id); |