1:新增实现生产时间的计算逻辑

yun-zuoyi
钮海涛 6 years ago
parent 5e78c31a70
commit 6816c7b566

@ -0,0 +1,22 @@
package cn.estsh.i3plus.pojo.aps.bean;
import cn.estsh.i3plus.pojo.aps.common.BaseAPS;
import io.swagger.annotations.Api;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* @Description :
* @Reference :
* @Author : jason.niu
* @CreateDate : 2019-09-22
* @Modify:
**/
@Data
@Entity
@Table(name = "APS_ASSIST_RESOURCE_SET_TIME")
@Api("副资源设置时间")
public class AssistResourceSetTime extends BaseAPS {
}

@ -0,0 +1,22 @@
package cn.estsh.i3plus.pojo.aps.bean;
import cn.estsh.i3plus.pojo.aps.common.BaseAPS;
import io.swagger.annotations.Api;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* @Description :
* @Reference :
* @Author : jason.niu
* @CreateDate : 2019-09-22
* @Modify:
**/
@Data
@Entity
@Table(name = "APS_DYNAMIC_SET_TIME")
@Api("动态设置时间")
public class DynamicSetTime extends BaseAPS {
}

@ -0,0 +1,28 @@
package cn.estsh.i3plus.pojo.aps.bean;
import cn.estsh.i3plus.pojo.aps.common.BaseAPS;
import io.swagger.annotations.Api;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* @Description :
* @Reference :
* @Author : jason.niu
* @CreateDate : 2019-10-22
* @Modify:
**/
@Data
@Entity
@DynamicInsert
@DynamicUpdate
@EqualsAndHashCode(callSuper = true)
@Table(name="APS_FURNACE_PLAN")
@Api("炉资源计划")
public class FurnacePlan extends BaseAPS {
}

@ -0,0 +1,22 @@
package cn.estsh.i3plus.pojo.aps.bean;
import cn.estsh.i3plus.pojo.aps.common.BaseAPS;
import io.swagger.annotations.Api;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* @Description :
* @Reference :
* @Author : jason.niu
* @CreateDate : 2019-09-22
* @Modify:
**/
@Data
@Entity
@Table(name = "APS_MATERIAL_SET_TIME")
@Api("物料设置时间")
public class MaterialSetTime extends BaseAPS {
}

@ -35,9 +35,9 @@ public class OperResource extends BaseAPS {
@ApiParam(value ="前设置时间")
private String prevTime;
@Column(name="MANUF_TIME")
@Column(name="PRODUCE_TIME")
@ApiParam(value ="生产时间")
private String manufTime;
private String produceTime;
@Column(name="POST_TIME")
@ApiParam(value ="后设置时间")
@ -47,9 +47,9 @@ public class OperResource extends BaseAPS {
@ApiParam(value ="最大前设置中断时间")
private String maxPrevSdTime;
@Column(name="MAX_MANUF_SD_TIME")
@Column(name="MAX_PRODUCE_SD_TIME")
@ApiParam(value ="最大生产中断时间")
private String maxManufSdTime;
private String maxProduceSdTime;
@Column(name="MAX_POST_SD_TIME")
@ApiParam(value ="最大后设置中断时间")

@ -2,6 +2,7 @@ package cn.estsh.i3plus.pojo.aps.bean;
import cn.estsh.i3plus.pojo.aps.common.BaseCode;
import cn.estsh.i3plus.pojo.aps.enums.RESOURCE_CLASS;
import cn.estsh.i3plus.pojo.aps.enums.RESOURCE_LOCK_TYPE;
import cn.estsh.i3plus.pojo.aps.enums.RESOURCE_TYPE;
import cn.estsh.i3plus.pojo.aps.enums.TIME_ROUND_TYPE;
import io.swagger.annotations.Api;
@ -48,37 +49,37 @@ public class Resource extends BaseCode {
@ApiParam(value ="后缓冲时间")
private String postBuffer;
@Column(name="MAX_MANUF_BATCH")
@Column(name="MAX_PRODUCE_BATCH")
@ApiParam(value ="最大生产批量")
private Double maxManufBatch;
private Double maxProduceBatch;
@Column(name="MANUF_ADJ_UNIT_TM")
@ApiParam(value ="生产时间尾数调整")
private String manufAdjUnitTm;
@Column(name="TIME_TAIL_ADJUST")
@ApiParam(value ="时间尾数调整")
private String timeTailAdjust;
@Column(name="MANUF_ADJ_UNIT")
@ApiParam(value ="生产时刻尾数调整")
private String manufAdjUnit;
@Column(name="TIME_ADJUST")
@ApiParam(value ="时间调整")
private String timeAdjust;
@Column(name="MAX_PREV_SD_TIME")
@ApiParam(value ="最大前设置中断时间")
private String maxPrevSdTime;
@Column(name="MAX_MANUF_SD_TIME")
@Column(name="MAX_PRODUCE_SD_TIME")
@ApiParam(value ="最大生产中断时间")
private String maxManufSdTime;
private String maxProduceSdTime;
@Column(name="MAX_POST_SD_TIME")
@ApiParam(value ="最大后设置中断时间")
private String maxPostSdTime;
@Column(name="ROUND_TYPE")
@ApiParam(value ="时间圆整类型")
@ApiParam(value ="时间与时间尾数圆整类型")
private TIME_ROUND_TYPE roundType;
@Column(name="MANUF_EFFECT")
@ApiParam(value ="生产效率影响")
private Integer manufEffect;
@Column(name="EFFICIENCY_EFFECT")
@ApiParam(value ="效率影响类型")
private Integer EfficiencyEffect;
@Column(name="TIME_ROUND")
@ApiParam(value ="时间圆整影响")
@ -88,4 +89,11 @@ public class Resource extends BaseCode {
@ApiParam(value ="时间尾数影响")
private Integer timeTailRound;
@Column(name="LOCK_TYPE")
@ApiParam(value ="锁定类型")
private RESOURCE_LOCK_TYPE lockType;
@Column(name="LOCK_TIME")
@ApiParam(value ="锁定时间长度")
private String lockTime;
}

@ -5,14 +5,17 @@ import cn.estsh.i3plus.pojo.aps.common.BeanRelation;
import cn.estsh.i3plus.pojo.aps.holders.EWorkPlan;
import cn.estsh.i3plus.pojo.aps.holders.EWorkRelation;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
import java.util.List;
/**
* @Description :
@ -29,24 +32,70 @@ import java.util.Date;
@Table(name="APS_WORK_PLAN")
@Api("工作计划")
public class WorkPlan extends BaseAPS {
private Date prevSetStart;
@Column(name="PREV_SET_BEGIN")
@ApiParam(value ="前设置开始时间")
private Date prevSetBegin;
@Column(name="PREV_SET_END")
@ApiParam(value ="前设置结束时间")
private Date prevSetEnd;
private String prevSetTime;
private Date produceStart;
@Column(name="PREV_SET_TIME")
@ApiParam(value ="前设置时间")
private Long prevSetTime;
@Column(name="PRODUCE_BEGIN")
@ApiParam(value ="生产开始时间")
private Date produceBegin;
@Column(name="PRODUCE_END")
@ApiParam(value ="生产结束时间")
private Date produceEnd;
private String produceTime;
private Date postSetStart;
@Column(name="PRODUCE_TIME")
@ApiParam(value ="生产时间")
private Long produceTime;
@Column(name="POST_SET_BEGIN")
@ApiParam(value ="后设置开始时间")
private Date postSetBegin;
@Column(name="POST_SET_END")
@ApiParam(value ="后设置结束时间")
private Date postSetEnd;
private String postSetTime;
private Date lockStart;
@Column(name="POST_SET_TIME")
@ApiParam(value ="后设置时间")
private Long postSetTime;
@Column(name="LOCK_BEGIN")
@ApiParam(value ="锁定开始时间")
private Date lockBegin;
@Column(name="LOCK_END")
@ApiParam(value ="锁定结束时间")
private Date lockEnd;
private String lockTime;
private Date edgeTime;
@Column(name="LOCK_TIME")
@ApiParam(value ="锁定时间")
private Long lockTime;
@Column(name="WORK_ID")
@ApiParam(value ="工作对象id")
private Long workId;
@Column(name="RESOURCE_ID")
@ApiParam(value ="资源对象id")
private Long resourceId;
@Column(name="WORK_RESOURCE_ID")
@ApiParam(value ="工作资源对象id")
private Long workResourceId;
@Column(name="MAIN_PLAN_ID")
@ApiParam(value ="主计划对象id")
private Long mainPlanId;
public Work getWork() { return BeanRelation.get(this, EWorkPlan.Work); }
public void setWork(Work work) {
@ -60,4 +109,20 @@ public class WorkPlan extends BaseAPS {
this.resourceId = resource != null ? resource.getId() : 0l;
BeanRelation.set(this, EWorkPlan.Resource, resource);
}
public WorkResource getWorkResource() { return BeanRelation.get(this, EWorkPlan.WorkResource); }
public void setWorkResource(WorkResource workResource) {
this.workResourceId = workResource != null ? workResource.getId() : 0l;
BeanRelation.set(this, EWorkPlan.WorkResource, workResource);
}
public WorkPlan getMainPlan() { return BeanRelation.get(this, EWorkPlan.MainPlan); }
public void setMainPlan(WorkPlan plan) {
this.mainPlanId = plan != null ? plan.getId() : 0l;
BeanRelation.set(this, EWorkPlan.MainPlan, plan);
}
public List<WorkPlan> getAssPlans() { return BeanRelation.list(this, EWorkPlan.AssPlans); }
}

@ -34,9 +34,9 @@ public class WorkResource extends BaseAPS {
@ApiParam(value ="前设置时间")
private Long prevTime;
@Column(name="MANUF_TIME")
@Column(name="PRODUCE_TIME")
@ApiParam(value ="制造时间")
private Long manufTime;
private Long produceTime;
@Column(name="POST_TIME")
@ApiParam(value ="后设置时间")
@ -50,9 +50,9 @@ public class WorkResource extends BaseAPS {
@ApiParam(value ="最大前设置中断时间")
private String maxPrevSdTime;
@Column(name="MAX_MANUF_SD_TIME")
@Column(name="MAX_PRODUCE_SD_TIME")
@ApiParam(value ="最大制造中断时间")
private String maxManufSdTime;
private String maxProduceSdTime;
@Column(name="MAX_POST_SD_TIME")
@ApiParam(value ="最大后设置中断时间")

@ -69,6 +69,13 @@ public class BeanRelation {
return temp;
}
/**
*
* @param bean
* @param holder
* @param <T>
* @return
*/
public static <T extends BaseBean> T get(BaseBean bean, Enum<?> holder) {
List<T> beans = (List<T>)get(bean).get(holder);
if (beans == null || beans.isEmpty()) {
@ -77,10 +84,27 @@ public class BeanRelation {
return beans.get(0);
}
/**
*
* @param bean
* @param holder
* @param args
* @param <T>
* @return
*/
public static <T extends BaseBean> T get(BaseBean bean, Enum<?> holder, Enum<?>... args) {
return get(bean, null, holder, args);
}
/**
*
* @param bean
* @param pred Lambdatrue
* @param holder
* @param args
* @param <T>
* @return
*/
public static <T extends BaseBean> T get(BaseBean bean, Predicate<T> pred, Enum<?> holder, Enum<?>... args) {
List<BaseBean> nextBeans = list(bean, holder);
for (BaseBean nextEntity : nextBeans) {
@ -111,6 +135,13 @@ public class BeanRelation {
return null;
}
/**
*
* @param bean
* @param holder
* @param <T>
* @return List
*/
public static <T extends BaseBean> List<T> list(BaseBean bean, Enum<?> holder) {
List<T> beans = (List<T>)get(bean).get(holder);
if (beans == null) {
@ -119,10 +150,27 @@ public class BeanRelation {
return beans;
}
/**
*
* @param bean
* @param holder
* @param args
* @param <T>
* @return List
*/
public static <T extends BaseBean> List<T> list(BaseBean bean, Enum<?> holder, Enum<?>... args) {
return list(bean, null, holder, args);
}
/**
*
* @param bean
* @param pred Lambdatrue
* @param holder
* @param args
* @param <T>
* @return List
*/
public static <T extends BaseBean> List<T> list(BaseBean bean, Predicate<T> pred, Enum<?> holder, Enum<?>... args) {
List<T> result = new ArrayList<>();
List<BaseBean> nextBeans = list(bean, holder);
@ -157,6 +205,38 @@ public class BeanRelation {
}
}
public static <T extends BaseBean> List<T> lastList(BaseBean entity, Enum<?>... args) {
List<T> result = new ArrayList<T>();
lastListImpl(result, entity, null, args, 0);
return result;
}
public static <T extends BaseBean> List<T> lastList(BaseBean entity, Predicate<T> filter, Enum<?>... args) {
List<T> result = new ArrayList<T>();
lastListImpl(result, entity, filter, args, 0);
return result;
}
@SuppressWarnings("unchecked")
private final static <T extends BaseBean> boolean lastListImpl(List<T> result, BaseBean entity, Predicate<T> filter,
Enum<?>[] args, int index) {
if (index >= args.length) {
index = 0;
}
boolean bNotLast = true;
List<BaseBean> relaEntities = list(entity, args[index]);
for (BaseBean relaEntity : relaEntities) {
if (lastListImpl(result, relaEntity, filter, args, index + 1)) {
result.add((T)relaEntity);
bNotLast = false;
}
}
return index == 0 && bNotLast;
}
/**
*
*
@ -282,4 +362,42 @@ public class BeanRelation {
}
}
}
/**
* lambdalambdafalse退
* @param bean
* @param fun
* @param holders
* @param <T>
*/
public static <T extends BaseBean> void recursion(BaseBean bean, Predicate<T> fun, Enum<?>... holders) {
if (holders.length == 0) {
return;
}
recursionImpl(bean, fun, holders, 0);
}
/**
* 广
* @param bean
* @param fun
* @param holders
* @param index
* @param <T>
*/
@SuppressWarnings("unchecked")
private final static <T extends BaseBean> void recursionImpl(BaseBean bean, Predicate<T> fun,
Enum<?>[] holders, int index) {
if (index >= holders.length) {
if (!fun.test((T) bean)) {
return;
}
index = 0;
}
List<BaseBean> relaBeans = list(bean, holders[index]);
for (BaseBean relaBean : relaBeans) {
recursionImpl(relaBean, fun, holders, index + 1);
}
}
}

@ -0,0 +1,7 @@
package cn.estsh.i3plus.pojo.aps.enums;
public enum DYNAMIC_SET_CALC {
MIN, // 取最小值
MAX, // 取最大值
SUM // 求和
}

@ -0,0 +1,7 @@
package cn.estsh.i3plus.pojo.aps.enums;
public enum DYNAMIC_SET_TYPE {
PREV_SET, // 只对前设置影响
POST_SET, // 只对后设置影响
ALL // 对前后设置都产生影响
}

@ -0,0 +1,18 @@
package cn.estsh.i3plus.pojo.aps.enums;
public enum EFFICIENCY_EFFECT {
NONE(0),
PREV_SET(1),
PRODUCE(2),
POST_SET(4);
private int _value;
EFFICIENCY_EFFECT(int value){
_value = value;
}
public int value() {
return this._value;
}
}

@ -0,0 +1,7 @@
package cn.estsh.i3plus.pojo.aps.enums;
public enum RESOURCE_LOCK_TYPE {
NONE, // 不锁定
PRODUCE_BEGIN, // 与后工序生产开始时刻有关
PRODUCE_END // 与后工序生产结束时刻有关
}

@ -8,7 +8,6 @@ package cn.estsh.i3plus.pojo.aps.enums;
* @Modify:
**/
public enum TIME_ROUND_TYPE {
NONE, // 不圆整
UP, // 向上
DOWN, // 向下
ROUNDING // 四舍五入

@ -15,7 +15,6 @@ public enum WORK_SORT_RULE {
ORDER_COUNT, // 订单数量
ORDER_RECEIVE_DATE,// 订单接单日期
ORDER_LET_SUB_EST,// 订单交货期与订单最早开始时刻之差
ORDER_PRESSURE, // 订单紧迫程度
ORDER_SURPLUS, // 订单余裕度
NOPLAN_OPERATION_SIZE,// 残留工序数
REMAIN_PRODUCE_TIME, // 残留生产时间

@ -0,0 +1,5 @@
package cn.estsh.i3plus.pojo.aps.holders;
public enum EFurnacePlan {
WorkPlans
}

@ -3,5 +3,10 @@ package cn.estsh.i3plus.pojo.aps.holders;
public enum EWorkPlan {
Work,
Resource,
AssPlans // 关联的为副资源的工作计划
WorkResource,
MainPlan, // 关联的为主资源的工作计划
AssPlans, // 关联的为副资源的工作计划
PrevPlan,
PostPlan,
FurnacePlan,
}

@ -0,0 +1,9 @@
package cn.estsh.i3plus.pojo.aps.repository;
import cn.estsh.i3plus.pojo.aps.bean.AssistResourceSetTime;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface AssistResourceSetTimeRepository extends CrudRepository<AssistResourceSetTime, Long> {
}

@ -0,0 +1,9 @@
package cn.estsh.i3plus.pojo.aps.repository;
import cn.estsh.i3plus.pojo.aps.bean.DynamicSetTime;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface DynamicSetTimeRepository extends CrudRepository<DynamicSetTime, Long> {
}

@ -0,0 +1,9 @@
package cn.estsh.i3plus.pojo.aps.repository;
import cn.estsh.i3plus.pojo.aps.bean.FurnacePlan;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface FurnacePlanRepository extends CrudRepository<FurnacePlan, Long> {
}

@ -0,0 +1,9 @@
package cn.estsh.i3plus.pojo.aps.repository;
import cn.estsh.i3plus.pojo.aps.bean.MaterialSetTime;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface MaterialSetTimeRepository extends CrudRepository<MaterialSetTime, Long> {
}

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<Class name="FurnacePlan">
<Relation field="WorkPlans" name="WorkPlan" reverse="FurnacePlan" type="ONE_TO_MULTI" owner="true">
</Relation>
</Class>

@ -12,6 +12,8 @@
</Relation>
<Relation field="Operation" name="Operation" type="MULTI_TO_ONE" owner="false">
</Relation>
<Relation field="WorkPlan" name="WorkPlan" reverse="Work" type="ONE_TO_ONE" owner="true">
</Relation>
<Relation field="PlanFeedbacks" name="PlanFeedback" reverse="Work" type="ONE_TO_MULTI" owner="true">
</Relation>
</Class>

@ -1,9 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<Class name="WorkPlan">
<Relation field="Work" name="Work" reverse="WorkPlan" type="ONE_TO_ONE" owner="true">
</Relation>
<Relation field="Resource" name="Resource" type="MULTI_TO_ONE" owner="false">
</Relation>
<Relation field="AssPlans" name="WorkPlan" type="ONE_TO_MULTI" owner="false">
<Relation field="WorkResource" name="WorkResource" type="ONE_TO_ONE" owner="false">
</Relation>
<Relation field="AssPlans" name="WorkPlan" reverse="MainPlan" type="ONE_TO_MULTI" owner="false">
</Relation>
<Relation field="PrevPlan" name="WorkPlan" reverse="PostPlan" type="MULTI_TO_MULTI" owner="false">
</Relation>
</Class>
Loading…
Cancel
Save