【需求】完成大屏订单状态列表与生产订单状态

dev
zengchenxi 5 months ago
parent 7786716f8e
commit 32059a44b5

@ -72,4 +72,7 @@ public class StorageMatRespVO {
private String unit;
@Schema(description = "库存数量")
private BigDecimal stockQuantity;
}

@ -146,6 +146,12 @@ public class TaskDispatchDO extends BaseDO {
@TableField(exist = false)
private Long materialId;
@TableField(exist = false)
private Integer qualifiedQuantity;
@TableField(exist = false)
private Integer unqualifiedQuantity;
public boolean canSave(){
return TaskDispatchStatusEnum.SAVE.getCode() == this.dispatchStatus.intValue();
}

@ -41,4 +41,8 @@ public interface ScEquipmentMapper extends BaseMapperX<ScEquipmentDO> {
@Select("CALL Fault_Time(#{id}, #{startTime}, #{endTime})")
@Options(statementType = StatementType.CALLABLE)
List<ScDashboardResVO> getFaultTimeInfo(ScDashboardReqVO reqVO);
@Select("CALL Equipment()")
@Options(statementType = StatementType.CALLABLE)
void generateLiveDataOfEquipment();
}

@ -9,6 +9,7 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.biz.controller.admin.screen.vo.ScreenPageReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.screen.vo.ScreenSaveReqVO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.equipmanufacture.EquipManufactureDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.processdesign.ProcessDesignDO;
@ -18,6 +19,7 @@ import com.chanko.yunxi.mes.module.biz.dal.dataobject.screen.ScreenDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskreport.TaskReportDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.unqualifiednotification.UnqualifiedNotificationDO;
import com.chanko.yunxi.mes.module.biz.dal.mysql.plansub.PlanSubMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.processdesign.ProcessDesignMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.projectorder.ProjectOrderMapper;
@ -43,6 +45,7 @@ import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.biz.enums.ErrorCodeConstants.SCREEN_NOT_EXISTS;
import static com.chanko.yunxi.mes.module.biz.enums.ScreenTypeEnum.ProductionOrderState;
/**
* Service
@ -165,38 +168,16 @@ public class ScreenServiceImpl implements ScreenService {
}
}
ScreenDO productionOrderState = todayDataList.stream().filter(screenDO -> ProductionOrderState.name().equals(screenDO.getType())).findFirst().get();
// 设置今天数据
// TODO 待开发
/*todayDataList.forEach(screenDO -> {
todayDataList.forEach(screenDO -> {
switch (ScreenTypeEnum.valueOf(screenDO.getType())){
case State:
ScreenDO yesterdayScreenDO = null;
if(CollUtil.isNotEmpty(yesterdayList)) {
yesterdayScreenDO = yesterdayList.stream().filter(yesterdayDO -> screenDO.getType().equals(yesterdayDO.getType())).findFirst().get();
}
buildState(screenDO, yesterdayScreenDO);
break;
case ProgressTrackingOfProduction:
buildProgressTrackingOfProduction(screenDO);
break;
case ProgressTrackingOfDesign:
buildProgressTrackingOfDesign(screenDO);
break;
case NumberOfMouldPerYear:
buildNumberOfMouldPerYear(screenDO);
break;
case NumberOfMouldPerMonth:
buildNumberOfMouldPerMonth(screenDO);
break;
case ProcessingStatusOfCNC:
buildProcessingStatusOfCNC(screenDO);
break;
case AssemblyShopInfo:
buildAssemblyShopInfo(screenDO);
case ProductionStateList:
// 同时设置 生产订单状态
buildProductionStateList(screenDO, productionOrderState);
break;
}
});*/
});
// 分插入与更新
List<ScreenDO> insertList = todayDataList.stream().filter(screenDO -> screenDO.getId() == null).collect(Collectors.toList());
@ -208,6 +189,76 @@ public class ScreenServiceImpl implements ScreenService {
return todayDataList;
}
/**
*
* <p>
* "1D": ["completionRate","deliveryRate"]
* [95.44, 97.0]
*
* @param screenDO
* @param completionRate
* @param deliveryRate
*/
private void buildProductionOrderState(ScreenDO screenDO, BigDecimal completionRate, BigDecimal deliveryRate) {
screenDO.setData(JSON.toJSONString(Arrays.asList(completionRate, deliveryRate)));
}
/**
* :
* <p>
* "2D": ["productionCode","productName","plannedQuantity", "qualifiedQuantity", "unqualifiedQuantity", "productionProgress"]
* [["xx", "上", 23, 20, 3, 87.0],["xx", "上", 23, 20, 3, 87.0],["xx", "上", 23, 20, 3, 87.0]]
*
* @param screenDO
* @param productionOrderState
*/
private void buildProductionStateList(ScreenDO screenDO, ScreenDO productionOrderState) {
ArrayList<LinkedList> resultData = new ArrayList<>(16);
MPJLambdaWrapper<TaskDispatchDO> query = new MPJLambdaWrapper<>();
query.selectAll(TaskDispatchDO.class)
.select("d.name as projectSubName", "d.code as projectSubCode")
.select("b.amount", "d.unit")
.select("COALESCE(sum(e.amount),0) as qualifiedQuantity")
.select("COALESCE(sum(f.amount),0) as unqualifiedQuantity")
.leftJoin(PlanDO.class, "a", PlanDO::getId, TaskDispatchDO::getPlanId)
.leftJoin(ProjectOrderSubDO.class, "b", ProjectOrderSubDO::getId, TaskDispatchDO::getProjectSubId)
.leftJoin(ProjectOrderDO.class, "c", ProjectOrderDO::getId, ProcessDesignDO::getProjectId)
.leftJoin(MaterialDO.class, "d", MaterialDO::getId, ProjectOrderSubDO::getMaterialId)
.leftJoin(TaskReportDO.class, "e", Wrapper -> Wrapper.eq(TaskReportDO::getDispatchId, TaskDispatchDO::getId)
.eq(TaskReportDO::getType, TaskDispatchTypeEnum.ASSEMBLE.name())
.eq(TaskReportDO::getHasReport, YesOrNoEnum.Y.getCode())
)
.leftJoin(UnqualifiedNotificationDO.class, "f", Wrapper -> Wrapper.eq(UnqualifiedNotificationDO::getProjectSubId, TaskDispatchDO::getProjectSubId)
.eq(UnqualifiedNotificationDO::getNotificationStatus, UnqualifiedNotificationStatusEnum.AUDIT.getCode()))
.orderByDesc(TaskDispatchDO::getId)
.groupBy(TaskDispatchDO::getId)
.disableSubLogicDel();
BigDecimal sumProductionProgress = new BigDecimal(0);
List<TaskDispatchDO> taskDispatchDOList = taskDispatchMapper.selectList(query);
taskDispatchDOList.forEach(taskDispatchDO -> {
BigDecimal productionProgress = new BigDecimal(taskDispatchDO.getQualifiedQuantity() * 100).divide(new BigDecimal(taskDispatchDO.getAmount()), 2, BigDecimal.ROUND_CEILING);
resultData.add(new LinkedList<Object>(){{
add(taskDispatchDO.getProjectSubCode());
add(taskDispatchDO.getProjectSubName());
add(taskDispatchDO.getAmount());
add(taskDispatchDO.getQualifiedQuantity());
add(taskDispatchDO.getUnqualifiedQuantity());
add(productionProgress);
}});
sumProductionProgress.add(sumProductionProgress);
});
screenDO.setData(JSON.toJSONString(resultData));
BigDecimal completionRate = sumProductionProgress.divide(new BigDecimal(taskDispatchDOList.size()), 2, BigDecimal.ROUND_CEILING);
BigDecimal deliveryRate = null;
buildProductionOrderState(productionOrderState, completionRate, deliveryRate);
}
/**
*
*

Loading…
Cancel
Save