排产修改-sjx

liweidong
sunjianxi 2 months ago
parent 32df8d1431
commit 076604f91c
  1. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java
  2. 22
      blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkOrderEntity.java
  3. 18
      blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java
  4. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java
  5. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java
  6. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  7. 34
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java
  8. 8
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java
  9. 199
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml
  10. 1
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/YieldOrderMapper.xml
  11. 8
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java
  12. 161
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java
  13. 7
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java
  14. 46
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/WorkPlanVO.java

@ -98,12 +98,12 @@ public class WorkPlan extends BaseEntity {
* 计划开始
*/
@Schema(description = "计划开始")
private LocalDateTime startTime;
private LocalDateTime planStartTime;
/**
* 计划结束
*/
@Schema(description = "计划结束")
private LocalDateTime endTime;
private LocalDateTime planEndTime;
/**
* 加工班组
*/

@ -330,5 +330,27 @@ public class WorkOrderEntity extends BaseEntity {
@Schema(description = "零件号")
private String partCode;
/**
* 计划开始
*/
@Schema(description = "计划开始")
private LocalDateTime planStartTime;
/**
* 计划结束
*/
@Schema(description = "计划结束")
private LocalDateTime planEndTime;
/**
* 实际开始
*/
@Schema(description = "实际开始")
private LocalDateTime factStartTime;
/**
* 实际结束
*/
@Schema(description = "实际结束")
private LocalDateTime factEndTime;
}

@ -102,12 +102,12 @@ public class WorkPlanEntity extends BaseEntity {
* 计划开始
*/
@Schema(description = "计划开始")
private LocalDateTime startTime;
private LocalDateTime planStartTime;
/**
* 计划结束
*/
@Schema(description = "计划结束")
private LocalDateTime endTime;
private LocalDateTime planEndTime;
/**
* 加工班组
*/
@ -157,12 +157,12 @@ public class WorkPlanEntity extends BaseEntity {
* 实际开始
*/
@Schema(description = "实际开始")
private Date factStartTime;
private LocalDateTime factStartTime;
/**
* 实际结束
*/
@Schema(description = "实际结束")
private Date factEndTime;
private LocalDateTime factEndTime;
/**
*
*/
@ -269,4 +269,14 @@ public class WorkPlanEntity extends BaseEntity {
*/
private String teamMembers;
/**
* 班组人员
*/
private String factTeamMembers;
/**
* 零件号
*/
private String partCode;
}

@ -521,10 +521,10 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
wp.setHourQuota(rp.getHourQuota());
wp.setMakeMemo(rp.getMakeMemo());
wp.setStatus(WorkPlan.STATUS_NO_START);
wp.setStartTime(rp.getStartTime().toInstant()
wp.setPlanStartTime(rp.getStartTime().toInstant()
.atZone(ZoneId.systemDefault()) // 指定时区(通常用系统默认)
.toLocalDateTime());
wp.setEndTime(rp.getEndTime().toInstant()
wp.setPlanEndTime(rp.getEndTime().toInstant()
.atZone(ZoneId.systemDefault()) // 指定时区(通常用系统默认)
.toLocalDateTime());
wp.setRpId(rp.getId());

@ -248,7 +248,7 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
prWorkOrder.setOcId(nextWorkPlan.getOcId());
}
prWorkOrder.setOemType(WorkOrder.OEM_TYPE_WHOLE);
nextWorkPlan.setEndTime(LocalDateTime.now());
nextWorkPlan.setPlanEndTime(LocalDateTime.now());
workPlanService.updateById(nextWorkPlan);
//产生外协生产进度记录信息
WorkOrderRun wr = new WorkOrderRun();

@ -331,8 +331,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
wpr.setCaId(wp.getCaId());
wpr.setProcessAbility(processAbilityService.getById(wp.getCaId()));
wpr.setStartTime(localDateTimeToDate(wp.getStartTime()));
wpr.setEndTime(localDateTimeToDate(wp.getEndTime()));
wpr.setStartTime(localDateTimeToDate(wp.getPlanStartTime()));
wpr.setEndTime(localDateTimeToDate(wp.getPlanEndTime()));
WorkPlanVO wpVO = new WorkPlanVO();
BeanUtils.copyProperties(wp, wpr);
wpVO.setProcessSet(bsProcessSetService.getById(wp.getPpsId()));

@ -51,6 +51,7 @@ import org.springblade.scheduling.scheduling.excel.SchedulingBoardExcel;
import org.springblade.scheduling.pojo.vo.WorkOrderVO;
import org.springblade.scheduling.scheduling.excel.WorkOrderExcel;
import org.springblade.scheduling.scheduling.service.IWorkOrderService;
import org.springblade.scheduling.scheduling.vo.WorkPlanVO;
import org.springblade.scheduling.scheduling.wrapper.WorkOrderWrapper;
import org.springframework.web.bind.annotation.*;
@ -263,4 +264,37 @@ public class WorkOrderController extends BladeController {
return R.success();
}
/**
* 资质执行分析 自定义分页
*/
@GetMapping("/selectQuaExecuteAnalysisPage")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入WorkOrder")
public R<IPage<WorkPlanVO>> selectQuaExecuteAnalysisPage(WorkPlanVO workPlan, Query query) {
IPage<WorkPlanVO> pages = workOrderService.selectQuaExecuteAnalysisPage(Condition.getPage(query), workPlan);
return R.data(pages);
}
/**
* 执行分析-按作业中心 自定义分页
*/
@GetMapping("/selectCenterExecuteList")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入WorkOrder")
public R<List<WorkPlanVO>> selectCenterExecuteList(WorkPlanVO workPlan) {
List<WorkPlanVO> list = workOrderService.selectCenterExecuteList(workPlan);
return R.data(list);
}
/**
* 资质执行分析 自定义分页
*/
@GetMapping("/selectOrderExecuteDetailPage")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入WorkOrder")
public R<IPage<WorkPlanVO>> selectOrderExecuteDetailPage(WorkPlanVO workPlan, Query query) {
IPage<WorkPlanVO> pages = workOrderService.selectOrderExecuteDetailPage(Condition.getPage(query), workPlan);
return R.data(pages);
}
}

@ -34,6 +34,7 @@ import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import org.springblade.scheduling.scheduling.excel.SchedulingBoardExcel;
import org.springblade.scheduling.scheduling.excel.WorkOrderExcel;
import org.springblade.scheduling.pojo.vo.WorkOrderVO;
import org.springblade.scheduling.scheduling.vo.WorkPlanVO;
import java.util.List;
@ -81,4 +82,11 @@ public interface WorkOrderMapper extends BaseMapper<WorkOrderEntity> {
List<WorkOrderVO> selectGlassCakeOrderPage(IPage page, WorkOrderVO workOrder);
List<WorkPlanVO> selectQuaExecuteAnalysisPage(IPage page, WorkPlanVO workPlan);
List<WorkPlanVO> selectCenterExecuteList(WorkPlanVO workPlan);
List<WorkPlanVO> selectOrderExecuteDetailPage(IPage page, WorkPlanVO workPlan);
}

@ -97,10 +97,10 @@
to_char(g.receive_time,'YYYY-MM-DD') AS "receiveTime",
f.name AS "currentProcessName",
d.name AS "processName",
to_char(b.start_time,'YYYY-MM-DD HH24:MI') AS "startTime",
to_char(b.end_time,'YYYY-MM-DD HH24:MI') AS "endTime",
to_char(b.start_time,'YYYY-MM-DD HH24:MI:SS') AS "planStartTime",
to_char(b.end_time,'YYYY-MM-DD HH24:MI:SS') AS "planEndTime",
to_char(b.plan_start_time,'YYYY-MM-DD HH24:MI') AS "startTime",
to_char(b.plan_end_time,'YYYY-MM-DD HH24:MI') AS "endTime",
to_char(b.plan_start_time,'YYYY-MM-DD HH24:MI:SS') AS "planStartTime",
to_char(b.plan_end_time,'YYYY-MM-DD HH24:MI:SS') AS "planEndTime",
to_char(b.fact_start_time,'YYYY-MM-DD HH24:MI:SS') AS "factStartTime",
to_char(b.fact_end_time,'YYYY-MM-DD HH24:MI:SS') AS "factEndTime",
c.ts_name AS "teamName",
@ -119,12 +119,12 @@
LEFT JOIN MES_YIELD_ORDER g on g.id = a.yo_id
<where>
a.is_deleted = 0 and b.is_deleted = 0 and a.status in (1,2,3,5)
and b.start_time is not null and b.end_time is not null and g.work_center_id = 81
and b.plan_start_time is not null and b.plan_end_time is not null and g.work_center_id = 81
<if test="startTime !=null and startTime != ''">
and to_char(b.start_time,'YYYY-MM-DD') <![CDATA[ >= ]]> #{startTime}
and to_char(b.plan_start_time,'YYYY-MM-DD') <![CDATA[ >= ]]> #{startTime}
</if>
<if test="endTime !=null and endTime != ''">
and to_char(b.end_time,'YYYY-MM-DD') <![CDATA[ <= ]]> #{endTime}
and to_char(b.plan_end_time,'YYYY-MM-DD') <![CDATA[ <= ]]> #{endTime}
</if>
<if test="woCode !=null and woCode != ''">
and a.wo_code = #{woCode}
@ -151,7 +151,7 @@
</foreach>
</if>
</where>
order by g.release_date,b.start_time,a.WO_CODE
order by g.release_date,b.plan_start_time,a.WO_CODE
</select>
<select id="getMaxByCodePattern" resultType="java.lang.String">
@ -230,10 +230,10 @@
<where>
a.is_deleted = 0 and h.is_deleted = 0 and a.status in (1,2,3,5)
<if test="startTime !=null and startTime != ''">
and to_char(h.start_time,'YYYY-MM-DD') <![CDATA[ >= ]]> #{startTime}
and to_char(h.plan_start_time,'YYYY-MM-DD') <![CDATA[ >= ]]> #{startTime}
</if>
<if test="endTime !=null and endTime != ''">
and to_char(h.end_time,'YYYY-MM-DD') <![CDATA[ <= ]]> #{endTime}
and to_char(h.plan_end_time,'YYYY-MM-DD') <![CDATA[ <= ]]> #{endTime}
</if>
<if test="woCode !=null and woCode != ''">
and a.wo_code = #{woCode}
@ -317,4 +317,183 @@
b.YIELD_TYPE = 12003
</select>
<select id="selectQuaExecuteAnalysisPage" resultType="org.springblade.scheduling.scheduling.vo.WorkPlanVO">
SELECT
b.wo_code as "woCode",
b.part_code as "partCode",
c.part_name as "partName",
b.batch_no as "batchNo",
b.card_no as "cardNo",
c.product_ident as "productIdent",
d.name as "processName",
e.ca_name as "craftName",
f.CERTIFICATE_NAME as "certificateName",
f.work_center_name as "workCenterName",
g.ts_name as "teamName",
a.team_members as "teamMembers",
a.fact_team_members as "factTeamMembers",
a.fact_end_time as "factEndTime",
case
when a.team_members is not null
and a.fact_team_members is not null
and INSTR(a.team_members, a.fact_team_members) > 0
then 1
else 0
end as isQua
FROM
MES_WORK_PLAN a
LEFT JOIN MES_WORK_ORDER b ON a.WO_ID = b.ID
LEFT JOIN MES_YIELD_ORDER c ON b.YO_ID = c.ID
LEFT JOIN BS_PROCESS_SET d on a.PPS_ID = d.ID
LEFT JOIN BS_CRAFT_ABILITY e on a.ca_id = e.ID
LEFT JOIN MES_PERSON_ABILITY f on a.WORK_CENTER_ID = f.WORK_CENTER_ID and f.CRAFT_ID = a.CA_ID and f.PROCESS_ID = a.PPS_ID
LEFT JOIN BS_TEAM_SET g on a.MAKE_TEAM = g.id
<where>
a.status in ('3','5') and TEAM_MEMBERS is not null
<if test="param2.startTime !=null and param2.startTime != ''">
and a.fact_end_time <![CDATA[ >= ]]> to_date(#{param2.startTime},'YYYY-MM-DD HH24:MI:SS')
</if>
<if test="param2.endTime !=null and param2.endTime != ''">
and a.fact_end_time <![CDATA[ <= ]]> to_date(#{param2.endTime},'YYYY-MM-DD HH24:MI:SS')
</if>
<if test="param2.partCode !=null and param2.partCode != ''">
and b.part_code like concat(concat('%',#{param2.partCode}),'%')
</if>
<if test="param2.woCode !=null and param2.woCode != ''">
and b.wo_code like concat(concat('%',#{param2.woCode}),'%')
</if>
<if test="param2.craftName !=null and param2.craftName != ''">
and e.ca_name = #{param2.craftName}
</if>
<if test="param2.processName !=null and param2.processName != ''">
and d.name = #{param2.processName}
</if>
<if test="param2.certificateName !=null and param2.certificateName != ''">
and f.CERTIFICATE_NAME like concat(concat('%',#{param2.certificateName}),'%')
</if>
<if test="param2.productIdent !=null and param2.productIdent != ''">
and c.product_ident = #{param2.productIdent}
</if>
<if test="param2.isQua == 1">
and a.fact_team_members is not null
and INSTR(a.team_members, a.fact_team_members) <![CDATA[ > ]]> 0
</if>
<if test="param2.isQua == 0">
and (a.fact_team_members is null or (a.fact_team_members is not null
and INSTR(a.team_members, a.fact_team_members) <![CDATA[ <= ]]> 0))
</if>
</where>
</select>
<select id="selectCenterExecuteList" resultType="org.springblade.scheduling.scheduling.vo.WorkPlanVO">
SELECT
b.WORK_CENTER_ID AS "workCenterId",
c.wc_name AS "workCenterName",
sum( CASE WHEN a.FACT_START_TIME <![CDATA[ < ]]> a.PLAN_START_TIME - #{interval} / 1440 THEN 1 ELSE 0 END ) AS earlyStartCount,
sum( CASE WHEN a.FACT_START_TIME BETWEEN a.PLAN_START_TIME - #{interval} / 1440 AND a.PLAN_START_TIME + #{interval} / 1440 THEN 1 ELSE 0 END ) AS onTimeStartCount,
sum( CASE WHEN a.FACT_START_TIME <![CDATA[ > ]]> a.PLAN_START_TIME + #{interval} / 1440 THEN 1 ELSE 0 END ) AS delayStartCount,
sum( CASE WHEN a.FACT_END_TIME <![CDATA[ < ]]> a.PLAN_END_TIME - #{interval} / 1440 THEN 1 ELSE 0 END ) AS earlyFinishCount,
sum( CASE WHEN a.FACT_END_TIME BETWEEN a.PLAN_END_TIME - #{interval} / 1440 AND a.PLAN_END_TIME + #{interval} / 1440 THEN 1 ELSE 0 END ) AS onTimeFinishCount,
sum( CASE WHEN a.FACT_END_TIME <![CDATA[ > ]]> a.PLAN_END_TIME + #{interval} / 1440 THEN 1 ELSE 0 END ) AS delayFinishCount,
count( 1 ) AS totalOrderCount
FROM
MES_WORK_ORDER a
LEFT JOIN MES_YIELD_ORDER b ON a.yo_id = b.id
LEFT JOIN BS_WORK_CENTER c ON b.work_center_id = c.id
<where>
a.IS_DELETED = 0
AND PLAN_START_TIME IS NOT NULL
AND FACT_START_TIME IS NOT NULL
AND PLAN_END_TIME IS NOT NULL
AND FACT_END_TIME IS NOT NULL
<if test="startTime !=null and startTime != ''">
and a.fact_end_time <![CDATA[ >= ]]> to_date(#{startTime},'YYYY-MM-DD HH24:MI:SS')
</if>
<if test="endTime !=null and endTime != ''">
and a.fact_end_time <![CDATA[ <= ]]> to_date(#{endTime},'YYYY-MM-DD HH24:MI:SS')
</if>
<if test="workCenterId !=null and workCenterId != ''">
and b.work_center_id = #{workCenterId}
</if>
</where>
group BY
b.WORK_CENTER_ID,
c.wc_name
</select>
<select id="selectOrderExecuteDetailPage" resultType="org.springblade.scheduling.scheduling.vo.WorkPlanVO">
SELECT
b.WORK_CENTER_ID AS "workCenterId",
c.wc_name AS "workCenterName",
a.wo_code as "woCode",
a.part_code as "partCode",
b.part_name as "partName",
a.batch_no as "batchNo",
a.card_no as "cardNo",
b.receive_time as "receiveTime",
a.plan_start_time as "planStartTime",
a.fact_start_time as "factStartTime",
CASE WHEN a.FACT_START_TIME <![CDATA[ < ]]> a.PLAN_START_TIME - #{param2.interval} / 1440 THEN '提前'
WHEN a.FACT_START_TIME BETWEEN a.PLAN_START_TIME - #{param2.interval} / 1440 AND a.PLAN_START_TIME + #{param2.interval} / 1440 THEN '准时'
ELSE '延迟' END AS startType,
a.plan_end_time as "planEndTime",
a.fact_end_time as "factEndTime",
CASE WHEN a.FACT_END_TIME <![CDATA[ < ]]> a.PLAN_END_TIME - #{param2.interval} / 1440 THEN '提前'
WHEN a.FACT_END_TIME BETWEEN a.PLAN_END_TIME - #{param2.interval} / 1440 AND a.PLAN_END_TIME + #{param2.interval} / 1440 THEN '准时'
ELSE '延迟' END AS endType,
ROUND((a.plan_end_time - a.plan_start_time) * 1440, 0) AS "planDurationMinute",
ROUND((a.fact_end_time - a.fact_start_time) * 1440, 0) AS "factDurationMinute",
ROUND((a.fact_end_time - a.fact_start_time) * 1440, 0) - ROUND((a.plan_end_time - a.plan_start_time) * 1440, 0) as "biasDurationMinute"
FROM
MES_WORK_ORDER a
LEFT JOIN MES_YIELD_ORDER b ON a.yo_id = b.id
LEFT JOIN BS_WORK_CENTER c ON b.work_center_id = c.id
<where>
a.IS_DELETED = 0
AND PLAN_START_TIME IS NOT NULL
AND FACT_START_TIME IS NOT NULL
AND PLAN_END_TIME IS NOT NULL
AND FACT_END_TIME IS NOT NULL
<if test="param2.startTime !=null and param2.startTime != ''">
and a.fact_end_time <![CDATA[ >= ]]> to_date(#{param2.startTime},'YYYY-MM-DD HH24:MI:SS')
</if>
<if test="param2.endTime !=null and param2.endTime != ''">
and a.fact_end_time <![CDATA[ <= ]]> to_date(#{param2.endTime},'YYYY-MM-DD HH24:MI:SS')
</if>
<if test="param2.partCode !=null and param2.partCode != ''">
and b.part_code like concat(concat('%',#{param2.partCode}),'%')
</if>
<if test="param2.woCode !=null and param2.woCode != ''">
and a.wo_code like concat(concat('%',#{param2.woCode}),'%')
</if>
<if test="param2.workCenterId !=null and param2.workCenterId != ''">
and b.work_center_id = #{param2.workCenterId}
</if>
<if test="param2.cardNo !=null and param2.cardNo != ''">
and a.card_no = #{param2.cardNo}
</if>
<if test="param2.batchNo !=null and param2.batchNo != ''">
and a.batch_no = #{param2.batchNo}
</if>
<if test="param2.interval != null and param2.interval != '' and param2.startType == '提前'">
and a.FACT_START_TIME <![CDATA[ < ]]> a.PLAN_START_TIME - #{param2.interval} / 1440
</if>
<if test="param2.interval != null and param2.interval != '' and param2.startType == '准时'">
and a.FACT_START_TIME BETWEEN a.PLAN_START_TIME - #{param2.interval} / 1440 AND a.PLAN_START_TIME + #{param2.interval} / 1440
</if>
<if test="param2.interval != null and param2.interval != '' and param2.startType == '延迟'">
and a.FACT_START_TIME <![CDATA[ > ]]> a.PLAN_START_TIME + #{param2.interval} / 1440
</if>
<if test="param2.interval != null and param2.interval != '' and param2.endType == '提前'">
and a.FACT_END_TIME <![CDATA[ < ]]> a.PLAN_END_TIME - #{param2.interval} / 1440
</if>
<if test="param2.interval != null and param2.interval != '' and param2.endType == '准时'">
and a.FACT_END_TIME BETWEEN a.PLAN_END_TIME - #{param2.interval} / 1440 AND a.PLAN_END_TIME + #{param2.interval} / 1440
</if>
<if test="param2.interval != null and param2.interval != '' and param2.endType == '延迟'">
and a.FACT_END_TIME <![CDATA[ > ]]> a.PLAN_END_TIME + #{param2.interval} / 1440
</if>
</where>
</select>
</mapper>

@ -87,6 +87,7 @@
<if test="yieldOrder.workCenterId != null">
and work_center_id = #{yieldOrder.workCenterId}
</if>
order by receive_time desc
</where>
</select>

@ -28,11 +28,13 @@ package org.springblade.scheduling.scheduling.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.scheduling.scheduling.dto.WorkOrderDto;
import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import org.springblade.scheduling.scheduling.excel.SchedulingBoardExcel;
import org.springblade.scheduling.scheduling.excel.WorkOrderExcel;
import org.springblade.scheduling.pojo.vo.WorkOrderVO;
import org.springblade.scheduling.scheduling.vo.WorkPlanVO;
import java.util.List;
@ -105,4 +107,10 @@ public interface IWorkOrderService extends BaseService<WorkOrderEntity> {
* @param cardNo
*/
void saveWorkOrderFromBak(String cardNo);
IPage<WorkPlanVO> selectQuaExecuteAnalysisPage(IPage<WorkPlanVO> page, WorkPlanVO workPlan);
List<WorkPlanVO> selectCenterExecuteList(WorkPlanVO workPlan);
IPage<WorkPlanVO> selectOrderExecuteDetailPage(IPage<WorkPlanVO> page, WorkPlanVO workPlan);
}

@ -49,6 +49,7 @@ import org.springblade.scheduling.scheduling.mapper.WorkOrderMapper;
import org.springblade.scheduling.scheduling.service.*;
import org.springblade.scheduling.scheduling.vo.SameTroughVO;
import org.springblade.scheduling.pojo.vo.WorkOrderVO;
import org.springblade.scheduling.scheduling.vo.WorkPlanVO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -246,9 +247,33 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
item.setPriorityAps(YieldOrderEnum.getName(Integer.parseInt(item.getPriorityAps())));
});
Map<String, List<WorkOrderDto>> woCodeGroup = list.stream().collect(Collectors.groupingBy(WorkOrderDto::getWoCode));
//默认不展示所有工序都完成的订单
if(StringUtils.isEmpty(workOrder.getBatchNo())){
woCodeGroup = woCodeGroup.entrySet().stream()
.filter(entry -> {
// 检查当前分组是否存在至少一个status≠5的元素
return entry.getValue().stream().anyMatch(dto -> !"5".equals(dto.getPlanStatus()));
})
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
//根据工序名称过滤订单
if(StringUtils.isNotEmpty(workOrder.getProcessName())){
woCodeGroup = woCodeGroup.entrySet().stream()
.filter(entry -> {
return entry.getValue().stream()
.anyMatch(dto -> workOrder.getProcessName().equals(dto.getProcessName()));
})
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(oldValue, newValue) -> oldValue,
LinkedHashMap::new
));
}
List<WorkOrderDto> resultList = new ArrayList<>();
for (Map.Entry<String, List<WorkOrderDto>> entry : woCodeGroup.entrySet()) {
if(StringUtils.isNotEmpty(workOrder.getProcessName())){
//根据工序名称过滤订单
/* if (StringUtils.isNotEmpty(workOrder.getProcessName())) {
List<WorkOrderDto> list1 = entry.getValue();
List<String> processNameList = list1.stream().map(WorkOrderDto::getProcessName).collect(Collectors.toList());
if (processNameList.contains(workOrder.getProcessName())) {
@ -261,7 +286,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} else {
continue;
}
}
}*/
WorkOrderDto workOrderDto = new WorkOrderDto();
String woCode = entry.getKey();
workOrderDto.setWoCode(woCode);
@ -403,7 +428,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//判断是否有公共工序已经处理了,如果有则重新定义workPlanList,获取公共工序的最后结束时间和当前时间做比较,取大的作为上一道工序结束时间
if (planMap.containsKey(order.getYoCode())) {
workPlanList = planMap.get(order.getYoCode());
prevProcessEnd = prevProcessEnd.compareTo(workPlanList.get(workPlanList.size() - 1).getEndTime()) > 0 ? prevProcessEnd : workPlanList.get(workPlanList.size() - 1).getEndTime();
prevProcessEnd = prevProcessEnd.compareTo(workPlanList.get(workPlanList.size() - 1).getPlanEndTime()) > 0 ? prevProcessEnd : workPlanList.get(workPlanList.size() - 1).getPlanEndTime();
}
//处理外协工序,外协可能多个工序连续的,共享开始结束时间
Map<Long, List<YieldOrderCraftEntity>> outSourceMap = craftList.stream().filter(item -> item.getIsOutsource() == true).collect(Collectors.groupingBy(YieldOrderCraftEntity::getOcId));
@ -526,11 +551,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} else {
//生成车间订单
WorkPlanEntity workPlan = new WorkPlanEntity();
workPlan.setStartTime(equipResource.getStartTime());
workPlan.setPlanStartTime(equipResource.getStartTime());
if ("0".equals(equipResource.getEquipType())) {
workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue()));
workPlan.setPlanEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue()));
} else {
workPlan.setEndTime(equipResource.getEndTime());
workPlan.setPlanEndTime(equipResource.getEndTime());
}
workPlan.setWorkQty(order.getYpQty());
workPlan.setCaId(craft.getCaId());
@ -544,7 +569,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan.setQualifiedQty(0);
workPlan.setUnqualifiedQty(0);
workPlan.setScrapQty(0);
workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime())));
workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getPlanStartTime(), workPlan.getPlanEndTime())));
workPlan.setEquipCode(equipResource.getEquipCode());
workPlan.setEquipName(equipResource.getEquipName());
workPlan.setEquipResourceId(equipResource.getId());
@ -574,8 +599,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
equipResourceService.update(equipResource1, updateWrapper);
//当前工序的结束时间作为下一工序的开始时间
prevProcessEnd = workPlan.getEndTime();
dateTime = workPlan.getEndTime();
prevProcessEnd = workPlan.getPlanEndTime();
dateTime = workPlan.getPlanEndTime();
isOccupied = true;
break;
}
@ -601,15 +626,15 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (ability != null) {
if ("镀后检验".equals(ability.getProcessName()) || "镀后接收".equals(ability.getProcessName())) {
totalTime = BigDecimal.valueOf(30);
workPlan.setStartTime(prevProcessEnd.plusMinutes(30));
workPlan.setEndTime(prevProcessEnd.plusMinutes(60));
workPlan.setPlanStartTime(prevProcessEnd.plusMinutes(30));
workPlan.setPlanEndTime(prevProcessEnd.plusMinutes(60));
if ("镀后接收".equals(ability.getProcessName())) {
workPlan.setMakeTeam(Long.valueOf(64));
}
if ("镀后检验".equals(ability.getProcessName())) {
workPlan.setMakeTeam(Long.valueOf(65));
}
prevProcessEnd = workPlan.getEndTime();
prevProcessEnd = workPlan.getPlanEndTime();
} else {
if ("0".equals(ability.getType())) {
totalTime = totalTime.add(BigDecimal.valueOf(order.getYpQty()).multiply(ability.getStandardTime()).add(ability.getPrepareTime()));
@ -682,8 +707,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workOrder.setBatchNo(order.getBatchNo());
workOrder.setYoId(order.getId());
workOrder.setMakeQty(order.getYpQty());
workOrder.setPlanStartDate(workPlanList.get(0).getStartTime() == null ? null : workPlanList.get(0).getStartTime().truncatedTo(ChronoUnit.DAYS).toString().substring(0, 10));
workOrder.setPlanEndDate(workPlanList.get(workPlanList.size() - 1).getEndTime() == null ? null : workPlanList.get(workPlanList.size() - 1).getEndTime().truncatedTo(ChronoUnit.DAYS).toString().substring(0, 10));
workOrder.setPlanStartDate(workPlanList.get(0).getPlanStartTime() == null ? null : workPlanList.get(0).getPlanStartTime().truncatedTo(ChronoUnit.DAYS).toString().substring(0, 10));
workOrder.setPlanEndDate(workPlanList.get(workPlanList.size() - 1).getPlanEndTime() == null ? null : workPlanList.get(workPlanList.size() - 1).getPlanEndTime().truncatedTo(ChronoUnit.DAYS).toString().substring(0, 10));
workOrder.setPlanStartTime(workPlanList.get(0).getPlanStartTime() == null ? null : workPlanList.get(0).getPlanStartTime());
workOrder.setPlanEndTime(workPlanList.get(workPlanList.size() - 1).getPlanEndTime() == null ? null : workPlanList.get(workPlanList.size() - 1).getPlanEndTime());
workOrder.setInventoryQty(0);
workOrder.setRunStatus(2);
workOrder.setPickingStatus(0);
@ -772,13 +799,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
int startIndex = -1;
int endIndex = -1;
for (int i = 0; i < workPlanList.size(); i++) {
if (workPlanList.get(i).getStartTime() != null) {
if (workPlanList.get(i).getPlanStartTime() != null) {
startIndex = i;
break;
}
}
for (int i = workPlanList.size() - 1; i > 0; i--) {
if (workPlanList.get(i).getEndTime() != null) {
if (workPlanList.get(i).getPlanEndTime() != null) {
endIndex = i;
break;
}
@ -790,13 +817,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
WorkPlanEntity next = workPlanList.get(i + 1); // 下一个计划(当前计划的后续计划)
// 当前计划的结束时间 = 下一个计划的开始时间
LocalDateTime currentEnd = next.getStartTime();
LocalDateTime currentEnd = next.getPlanStartTime();
// 当前计划的开始时间 = 结束时间 - 加工时间
LocalDateTime currentStart = currentEnd.minusMinutes(current.getHourQuota().longValue());
// 赋值给当前计划
current.setStartTime(currentStart);
current.setEndTime(currentEnd);
current.setPlanStartTime(currentStart);
current.setPlanEndTime(currentEnd);
current.setMakeTeam(next.getMakeTeam());
}
}
@ -807,40 +834,40 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
WorkPlanEntity prev = workPlanList.get(i - 1); // 上一个计划(当前计划的前置计划)
// 当前计划的开始时间 = 上一个计划的结束时间
LocalDateTime currentStart = prev.getEndTime();
LocalDateTime currentStart = prev.getPlanEndTime();
// 当前计划的结束时间 = 开始时间 + 加工时间
LocalDateTime currentEnd = currentStart.plusMinutes(current.getHourQuota().longValue());
// 赋值给当前计划
current.setStartTime(currentStart);
current.setEndTime(currentEnd);
current.setPlanStartTime(currentStart);
current.setPlanEndTime(currentEnd);
current.setMakeTeam(prev.getMakeTeam());
}
}
//特殊处理,一个作业中心只有人力资源的情况
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getStartTime() == null && list.get(i).getEndTime() == null){
if(i!=0 && list.get(i-1).getEndTime() != null){
list.get(i).setStartTime(list.get(i-1).getEndTime());
list.get(i).setEndTime(list.get(i).getStartTime().plusMinutes(list.get(i).getHourQuota().longValue()));
if (list.get(i).getPlanStartTime() == null && list.get(i).getPlanEndTime() == null) {
if (i != 0 && list.get(i - 1).getPlanEndTime() != null) {
list.get(i).setPlanStartTime(list.get(i - 1).getPlanEndTime());
list.get(i).setPlanEndTime(list.get(i).getPlanStartTime().plusMinutes(list.get(i).getHourQuota().longValue()));
continue;
}
if(i!=list.size()-1 && list.get(i+1).getStartTime() != null){
list.get(i).setEndTime(list.get(i+1).getStartTime());
list.get(i).setStartTime(list.get(i).getEndTime().minusMinutes(list.get(i).getHourQuota().longValue()));
if (i != list.size() - 1 && list.get(i + 1).getPlanStartTime() != null) {
list.get(i).setPlanEndTime(list.get(i + 1).getPlanStartTime());
list.get(i).setPlanStartTime(list.get(i).getPlanEndTime().minusMinutes(list.get(i).getHourQuota().longValue()));
}
}
}
//判断是否所有数据都没有开始结束时间,说明订单只有人力资源匹配
boolean isEmpty = list.stream().allMatch(item -> Objects.isNull(item.getStartTime())
&& Objects.isNull(item.getEndTime()));
boolean isEmpty = list.stream().allMatch(item -> Objects.isNull(item.getPlanStartTime())
&& Objects.isNull(item.getPlanEndTime()));
if (isEmpty) {
//上一道工序结束时间
LocalDateTime prevProcessEnd = LocalDateTime.now();
for (int i = 0; i < list.size(); i++) {
list.get(i).setStartTime(prevProcessEnd);
list.get(i).setEndTime(prevProcessEnd.plusMinutes(list.get(i).getHourQuota().longValue()));
prevProcessEnd = list.get(i).getEndTime();
list.get(i).setPlanStartTime(prevProcessEnd);
list.get(i).setPlanEndTime(prevProcessEnd.plusMinutes(list.get(i).getHourQuota().longValue()));
prevProcessEnd = list.get(i).getPlanEndTime();
}
}
@ -1089,8 +1116,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
equipResource.setIsUsed("1");
equipResourceService.updateById(equipResource);
WorkPlanEntity workPlan = new WorkPlanEntity();
workPlan.setStartTime(equipResource.getStartTime());
workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue()));
workPlan.setPlanStartTime(equipResource.getStartTime());
workPlan.setPlanEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue()));
workPlan.setWorkQty(order.getYpQty());
workPlan.setCaId(craft.getCaId());
workPlan.setPpsId(craft.getPpsId());
@ -1103,7 +1130,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan.setQualifiedQty(0);
workPlan.setUnqualifiedQty(0);
workPlan.setScrapQty(0);
workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime())));
workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getPlanStartTime(), workPlan.getPlanEndTime())));
workPlan.setEquipCode(equipResource.getEquipCode());
workPlan.setEquipName(equipResource.getEquipName());
workPlan.setEquipResourceId(equipResource.getId());
@ -1192,7 +1219,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
.eq(WorkPlanEntity::getWorkCenterId, craft.getWorkCenterId())
.eq(WorkPlanEntity::getCaId, craft.getCaId())
.eq(WorkPlanEntity::getPpsId, craft.getPpsId())
.ge(WorkPlanEntity::getStartTime,dateTime).orderByAsc(WorkPlanEntity::getStartTime));
.ge(WorkPlanEntity::getPlanStartTime, dateTime).orderByAsc(WorkPlanEntity::getPlanStartTime));
if (CollectionUtils.isNotEmpty(workPlanOldList)) {
//总生产量
BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty()));
@ -1282,11 +1309,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
EquipResourceEntity equipResource = equipResourceService.getById(resourceId);
//生成车间订单
WorkPlanEntity workPlan = new WorkPlanEntity();
workPlan.setStartTime(equipResource.getStartTime());
workPlan.setPlanStartTime(equipResource.getStartTime());
if ("0".equals(equipResource.getEquipType())) {
workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue()));
workPlan.setPlanEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue()));
} else {
workPlan.setEndTime(equipResource.getEndTime());
workPlan.setPlanEndTime(equipResource.getEndTime());
}
workPlan.setWorkQty(order.getYpQty());
workPlan.setCaId(craft.getCaId());
@ -1300,7 +1327,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan.setQualifiedQty(0);
workPlan.setUnqualifiedQty(0);
workPlan.setScrapQty(0);
workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime())));
workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getPlanStartTime(), workPlan.getPlanEndTime())));
workPlan.setEquipCode(equipResource.getEquipCode());
workPlan.setEquipName(equipResource.getEquipName());
workPlan.setEquipResourceId(equipResource.getId());
@ -1319,6 +1346,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
return isSameTrough;
}
public Map<String, Object> sameFurnace(YieldOrderEntity order, YieldOrderCraftEntity craft, List<WorkPlanEntity> workPlanList, LocalDateTime prevProcessEnd, String glassCodeStr, Map<Long, List<SintTempCurveEntity>> sintMap) {
Map<String, Object> map = new HashMap<>();
Boolean isSameFurnace = false;
@ -1365,11 +1393,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (equipResource.getRestCapacity().compareTo(sumCapacity) > 0) {
//生成车间订单
WorkPlanEntity workPlan = new WorkPlanEntity();
workPlan.setStartTime(equipResource.getStartTime());
workPlan.setPlanStartTime(equipResource.getStartTime());
if ("0".equals(equipResource.getEquipType())) {
workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue()));
workPlan.setPlanEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue()));
} else {
workPlan.setEndTime(equipResource.getEndTime());
workPlan.setPlanEndTime(equipResource.getEndTime());
}
workPlan.setWorkQty(order.getYpQty());
workPlan.setCaId(craft.getCaId());
@ -1383,7 +1411,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan.setQualifiedQty(0);
workPlan.setUnqualifiedQty(0);
workPlan.setScrapQty(0);
workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime())));
workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getPlanStartTime(), workPlan.getPlanEndTime())));
workPlan.setEquipCode(equipResource.getEquipCode());
workPlan.setEquipName(equipResource.getEquipName());
workPlan.setEquipResourceId(equipResource.getId());
@ -1430,4 +1458,45 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
});
}
@Override
public IPage<WorkPlanVO> selectQuaExecuteAnalysisPage(IPage<WorkPlanVO> page, WorkPlanVO workPlan) {
if (StringUtils.isNotEmpty(workPlan.getStartTime())) {
workPlan.setStartTime(workPlan.getStartTime() + " 00:00:00");
}
if (StringUtils.isNotEmpty(workPlan.getEndTime())) {
workPlan.setEndTime(workPlan.getEndTime() + " 23:59:59");
}
List<WorkPlanVO> list = baseMapper.selectQuaExecuteAnalysisPage(page, workPlan);
return page.setRecords(list);
}
@Override
public List<WorkPlanVO> selectCenterExecuteList(WorkPlanVO workPlan) {
List<WorkPlanVO> list = baseMapper.selectCenterExecuteList(workPlan);
if (CollectionUtils.isNotEmpty(list)) {
for (WorkPlanVO vo : list) {
vo.setEarlyStartCountRate(vo.getEarlyStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getEarlyStartCount() / vo.getTotalOrderCount())) * 100 + "%");
vo.setOnTimeStartCountRate(vo.getOnTimeStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getOnTimeStartCount() / vo.getTotalOrderCount())) * 100 + "%");
vo.setDelayStartCountRate(vo.getDelayStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getDelayStartCount() / vo.getTotalOrderCount())) * 100 + "%");
vo.setEarlyFinishCountRate(vo.getEarlyFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getEarlyFinishCount() / vo.getTotalOrderCount())) * 100 + "%");
vo.setOnTimeFinishCountRate(vo.getOnTimeFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getOnTimeFinishCount() / vo.getTotalOrderCount())) * 100 + "%");
vo.setDelayFinishCountRate(vo.getDelayFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getDelayFinishCount() / vo.getTotalOrderCount())) * 100 + "%");
}
}
return list;
}
@Override
public IPage<WorkPlanVO> selectOrderExecuteDetailPage(IPage<WorkPlanVO> page, WorkPlanVO workPlan) {
if (StringUtils.isNotEmpty(workPlan.getStartTime())) {
workPlan.setStartTime(workPlan.getStartTime() + " 00:00:00");
}
if (StringUtils.isNotEmpty(workPlan.getEndTime())) {
workPlan.setEndTime(workPlan.getEndTime() + " 23:59:59");
}
List<WorkPlanVO> list = baseMapper.selectOrderExecuteDetailPage(page, workPlan);
return page.setRecords(list);
}
}

@ -38,6 +38,9 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
@ -69,7 +72,7 @@ public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPla
WorkPlanEntity workPlanUpdate = new WorkPlanEntity();
workPlanUpdate.setId(id);
if (ObjectUtils.isNotEmpty(factStartTime)) {
workPlanUpdate.setFactStartTime(factStartTime);
workPlanUpdate.setFactStartTime(LocalDateTime.ofInstant(factStartTime.toInstant(), ZoneId.systemDefault()));
workPlanUpdate.setStatus(WorkPlanEntity.STATUS_START);
//获取当前计划
WorkPlanEntity workPlan = baseMapper.selectById(id);
@ -82,7 +85,7 @@ public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPla
}
}
if (ObjectUtils.isNotEmpty(factEndTime)) {
workPlanUpdate.setFactEndTime(factEndTime);
workPlanUpdate.setFactEndTime(LocalDateTime.ofInstant(factEndTime.toInstant(), ZoneId.systemDefault()));
workPlanUpdate.setStatus(WorkPlanEntity.STATUS_COMPLETE);
}
this.updateById(workPlanUpdate);

@ -43,4 +43,50 @@ public class WorkPlanVO extends WorkPlanEntity {
@Serial
private static final long serialVersionUID = 1L;
private String partName;
private String batchNo;
private String cardNo;
private String productIdent;
private String processName;
private String craftName;
private String certificateName;
private String workCenterName;
private String teamName;
private String woCode;
private String startTime;
private String endTime;
private String isQua;
private Integer earlyStartCount;
private Integer onTimeStartCount;
private Integer delayStartCount;
private Integer earlyFinishCount;
private Integer onTimeFinishCount;
private Integer delayFinishCount;
private String earlyStartCountRate;
private String onTimeStartCountRate;
private String delayStartCountRate;
private String earlyFinishCountRate;
private String onTimeFinishCountRate;
private String delayFinishCountRate;
private Integer totalOrderCount;
private Integer interval;
private String startType;
private String endType;
private String planDurationMinute;
private String factDurationMinute;
private String biasDurationMinute;
private String receiveTime;
}

Loading…
Cancel
Save