进度跟踪,小程序修改

This commit is contained in:
Ledo 2025-01-27 01:28:27 +08:00
parent 806ae14a9a
commit 71697bcd0a
9 changed files with 137 additions and 88 deletions

View File

@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.*;
import com.alibaba.excel.annotation.*;
@ -86,5 +87,7 @@ public class TrackRespVO {
@Schema(description = "完成状态")
@ExcelProperty("完成状态")
private Integer isover;
@Schema(description = "项目结束日期")
@ExcelProperty("项目结束日期")
private LocalDateTime projectEndTime;
}

View File

@ -5,6 +5,8 @@ import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Set;
/**
@ -111,9 +113,18 @@ public class ProjectOrderSubDO extends BaseDO {
@TableField(exist = false)
private String reportDateFormat;
@TableField(exist = false)
private String planCode;
@TableField(exist = false)
private Integer planType;
@TableField(exist = false)
private BigDecimal progress;
@TableField(exist = false)
private Integer totalReportAmount;
@TableField(exist = false)
private LocalDateTime projectEndTime;
// @TableField(exist = false)
// private Date projectStartTime;
@TableField(exist = false)
private Integer property;
}

View File

@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.dal.dataobject.track;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
@ -83,11 +84,11 @@ public class TrackDO extends BaseDO {
/**
* 总报工时间
*/
private BigDecimal reportAllHour;
private Integer reportAllHour;
/**
* 总预计工时
*/
private BigDecimal reportPreviewHour;
private Integer reportPreviewHour;
/**
* 总报工数量
*/
@ -96,5 +97,6 @@ public class TrackDO extends BaseDO {
* 完成状态
*/
private Integer isover;
private LocalDateTime projectEndTime;
}

View File

@ -45,8 +45,14 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.leftJoin("system_users u4 on u4.id = b.two_dim_owner")
.leftJoin("system_users u5 on u5.id = b.three_dim_owner")
.leftJoin("(select progress,process_design_id,blueprint_link FROM pro_process_design_progress where id in (select max(id) FROM pro_process_design_progress GROUP BY process_design_id) ) z on z.process_design_id = t.id")
.orderByDesc(ProcessDesignDO::getId)
.disableSubLogicDel();
if(reqVO.getPgType() == 0){
query.orderByAsc(ProjectOrderDO::getCode);
}else {
query.orderByDesc(ProjectOrderDO::getCode);
}
query.like(!StringUtils.isEmpty(reqVO.getPlanCode()), PlanDO::getPlanNo, reqVO.getPlanCode())
.like(!StringUtils.isEmpty(reqVO.getProjectCode()), ProjectOrderDO::getCode, reqVO.getProjectCode())
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName())

View File

@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.generator.IFill;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.ProjectOrderSubPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDispatchDetailPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
@ -19,6 +21,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatch
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.track.TrackDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@ -33,36 +36,36 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.track.vo.*;
@Mapper
public interface TrackMapper extends BaseMapperX<TrackDO> {
default PageResult<TaskDispatchDetailDO> selectPage(TrackPageReqVO reqVO, TaskDispatchDetailMapper taskDispatchDetailMapper) {
TaskDispatchDetailPageReqVO dispatchDetailPageReqVO = new TaskDispatchDetailPageReqVO();
dispatchDetailPageReqVO.setPageSize(reqVO.getPageSize()).setPageNo(reqVO.getPageNo());
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
query.select(TaskDispatchDetailDO::getAmount)
.select(TaskDispatchDetailDO::getWorkTime)
.select(TaskDispatchDetailDO::getProcedureId)
.select(TaskDispatchDetailDO::getProcedureStatus)
.select("pod.code as projectCode,pod.project_name as projectName")
default PageResult<ProjectOrderSubDO> selectPage(TrackPageReqVO reqVO, ProjectOrderSubMapper projectOrderSubMapper) {
ProjectOrderSubPageReqVO projectOrderSubPageReqVO = new ProjectOrderSubPageReqVO();
projectOrderSubPageReqVO.setPageSize(reqVO.getPageSize()).setPageNo(reqVO.getPageNo());
MPJLambdaWrapper<ProjectOrderSubDO> query = new MPJLambdaWrapper<>();
query.select(ProjectOrderSubDO::getAmount)
.select(ProjectOrderSubDO::getName)
.select("pod.code as projectCode,pod.project_name as projectName,pod.project_end_time as projectEndTime")
.select("pl.plan_no as planCode,pl.status as planType")
.select("tpd.bom_detail_id as bomDetailId")
.select("pos.name as projectSubName,ps.project_sub_code as projectSubCode")
.leftJoin(TaskDispatchDO.class,"tpd",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId)
.leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,TaskDispatchDO::getProjectSubId)
.leftJoin(ProjectOrderDO.class,"pod",ProjectOrderDO::getId,TaskDispatchDO::getProjectId)
.leftJoin(PlanDO.class,"pl",PlanDO::getId,TaskDispatchDO::getPlanId)
.leftJoin(PlanSubDO.class,"ps",PlanSubDO::getProjectSubId,TaskDispatchDO::getProjectSubId)
.leftJoin(TaskReportDO.class,"tr",TaskReportDO::getDispatchDetailId,TaskDispatchDetailDO::getId)
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId,TaskDispatchDetailDO::getOwner)
.leftJoin(ProcessBomDO.class,"pb",ProcessBomDO::getProjectSubId,TaskDispatchDO::getProjectSubId)
.ne(ProcessBomDO::getBomStatus,3)
.selectSum(TaskReportDO::getAmount,"totalReportAmount").selectSum(TaskReportDO::getWorkTime,"totalWorkTime")
.ne(ProjectOrderDO::getStatus,3)
.groupBy(TaskDispatchDetailDO::getId)
.getSelectDistinct();
.select("ps.project_sub_code as projectSubCode")
.leftJoin(ProjectOrderDO.class,"pod",ProjectOrderDO::getId,ProjectOrderSubDO::getProjectOrderId)
.leftJoin(PlanSubDO.class,"ps",PlanSubDO::getProjectSubId,ProjectOrderSubDO::getId)
.leftJoin(PlanDO.class,"pl",PlanDO::getId,PlanSubDO::getProjectPlanId)
.leftJoin(DeliverOrderSubDO.class,"dos",DeliverOrderSubDO::getSaleOrderSubId,ProjectOrderSubDO::getId)
.eq(DeliverOrderSubDO::getCategory,"DELIVER_LIST")
.selectSum(DeliverOrderSubDO::getAmount,"totalReportAmount")//总共发货数量
// .leftJoin(AdminUserDO.class,"u",AdminUserDO::getId,TaskDispatchDetailDO::getOwner)
// .leftJoin(ProcessBomDO.class,"pb",ProcessBomDO::getProjectSubId,TaskDispatchDO::getProjectSubId)
// .ne(ProcessBomDO::getBomStatus,3)
// .selectSum(TaskReportDO::getAmount,"totalReportAmount").selectSum(TaskReportDO::getWorkTime,"totalWorkTime")
.eq(ProjectOrderDO::getOrderStatus,32) //已启动
.ne(ProjectOrderDO::getDeliveryStatus,3) //不为全部发货
.orderByDesc(ProjectOrderDO::getProjectEndTime)
.isNotNull(DeliverOrderSubDO::getSaleOrderSubId)
.groupBy(ProjectOrderSubDO::getId);
// .getSelectDistinct();
if (reqVO.getProjectCode()!=null&&!reqVO.getProjectCode().trim().equals("")){
query.like(ProjectOrderDO::getCode,reqVO.getProjectCode());
}
if (reqVO.getPlanCode()!=null && !reqVO.getPlanCode().trim().equals("")){
query.like(PlanDO::getPlanNo,reqVO.getPlanCode());
query.like(ProjectOrderDO::getProjectName,reqVO.getPlanCode());
}
if (reqVO.getProjectOrderSubCode()!=null && !reqVO.getProjectOrderSubCode().trim().equals("")){
query.like(PlanSubDO::getProjectSubCode,reqVO.getProjectOrderSubCode());
@ -70,15 +73,15 @@ public interface TrackMapper extends BaseMapperX<TrackDO> {
if (reqVO.getProjectOrderSubName()!=null && !reqVO.getProjectOrderSubName().trim().equals("")){
query.like(ProjectOrderSubDO::getName,reqVO.getProjectOrderSubName());
}
if (reqVO.getBomDetailName()!=null && !reqVO.getBomDetailName().trim().equals("")){
query .select("pbd.material_name as materialName")
.leftJoin(ProcessBomDetailDO.class,"pbd",ProcessBomDetailDO::getId,TaskDispatchDO::getBomDetailId)
.like(ProcessBomDetailDO::getMaterialName,reqVO.getBomDetailName());
}
if (reqVO.getOwner()!=null){
query.eq(AdminUserDO::getId,reqVO.getOwner());
}
return taskDispatchDetailMapper.selectPage(dispatchDetailPageReqVO, query);
// if (reqVO.getBomDetailName()!=null && !reqVO.getBomDetailName().trim().equals("")){
// query .select("pbd.material_name as materialName")
// .leftJoin(ProcessBomDetailDO.class,"pbd",ProcessBomDetailDO::getId,TaskDispatchDO::getBomDetailId)
// .like(ProcessBomDetailDO::getMaterialName,reqVO.getBomDetailName());
// }
// if (reqVO.getOwner()!=null){
// query.eq(AdminUserDO::getId,reqVO.getOwner());
// }
return projectOrderSubMapper.selectPage(projectOrderSubPageReqVO, query);
}

View File

@ -412,6 +412,16 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
if(operate == TaskReportOperateEnum.END || operate == TaskReportOperateEnum.SUBMIT){
throw exception(TASK_DISPATCH_TASK_NO_PERMISSION_FOR_OPERATE);
}
if(operate==TaskReportOperateEnum.START){
List<TaskReportDO> historyReportList = taskReportMapper.selectList(new LambdaQueryWrapper<TaskReportDO>() {{
eq(TaskReportDO::getDispatchDetailId, taskDispatchDetailDO.getId())
.ne(TaskReportDO::getAmount, 0);
}});
int historyReportAmount = historyReportList.stream().mapToInt(TaskReportDO::getAmount).sum();
if (taskDispatchDetailDO.getAmount() <= historyReportAmount){
throw exception(TASK_DISPATCH_TASK_IS_OVER);
}
}
lastReportDO = new TaskReportDO();
}else{
// 如有

View File

@ -3,17 +3,24 @@ package com.chanko.yunxi.mes.module.heli.service.track;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import com.chanko.yunxi.mes.module.heli.dal.mysql.procedure.ProcedureMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskreport.TaskReportMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.track.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.track.TrackDO;
@ -38,7 +45,7 @@ public class TrackServiceImpl implements TrackService {
@Resource
private TrackMapper trackMapper;
@Resource
private TaskDispatchDetailMapper taskDispatchDetailMapper;
private ProjectOrderSubMapper projectOrderSubMapper;
@Resource
private ProcessBomDetailMapper processBomDetailDO;
@Resource
@ -84,50 +91,66 @@ public class TrackServiceImpl implements TrackService {
@Override
public PageResult<TrackDO> getTrackPage(TrackPageReqVO pageReqVO) {
PageResult<TaskDispatchDetailDO> taskDispatchDetailDOPageResult = trackMapper.selectPage(pageReqVO, taskDispatchDetailMapper);
PageResult<ProjectOrderSubDO> projectOrderSubDOPageResult = trackMapper.selectPage(pageReqVO, projectOrderSubMapper);
PageResult<TrackDO> pageResult = new PageResult<>();
pageResult.setTotalPages(taskDispatchDetailDOPageResult.getTotalPages());
pageResult.setTotal(taskDispatchDetailDOPageResult.getTotal());
List<TaskDispatchDetailDO> list = taskDispatchDetailDOPageResult.getList();
pageResult.setTotalPages(projectOrderSubDOPageResult.getTotalPages());
pageResult.setTotal(projectOrderSubDOPageResult.getTotal());
List<ProjectOrderSubDO> list = projectOrderSubDOPageResult.getList();
List<TrackDO> trackDOS = new ArrayList<>();
// 当前时间
LocalDateTime currentTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
pageResult.setList(trackDOS);
//如果零件名字为空就查一下零
for (TaskDispatchDetailDO to : list) {
for (ProjectOrderSubDO to : list) {
// 计算两个时间之间的天数差异
long daysBetween = ChronoUnit.DAYS.between(currentTime, to.getProjectEndTime());
// 四舍五入到最接近的整数
BigDecimal daysDifference = BigDecimal.valueOf(daysBetween).setScale(0, RoundingMode.HALF_UP);
TrackDO trackDO = new TrackDO();
trackDOS.add(trackDO);
trackDO.setProjectCode(to.getProjectCode())
.setProjectName(to.getProjectName())
.setPlanCode(to.getPlanCode())
.setPlanStatus(to.getPlanType())
.setProjectOrderSubName(to.getProjectSubName())
.setProjectOrderSubName(to.getName())
.setProjectOrderSubCode(to.getProjectSubCode())
.setProcessId(to.getProcedureId())
.setReportAmount(to.getTotalReportAmount())
.setDispatchAmount(to.getAmount())
.setReportPreviewHour(to.getWorkTime())
.setReportAllHour(to.getTotalWorkTime())
.setDispatchAmount(to.getAmount()) //
// .setReportAmount(to.getTotalReportAmount()) //已发货
.setProcessName(formatter.format(to.getProjectEndTime()))
// .setProjectEndTime(to.getProjectEndTime())
.setReportAmount(daysDifference.intValue())//日期
// .setProcessId(to.getProcedureId())
.setReportAllHour(to.getTotalReportAmount()) //已发货数量
.setReportPreviewHour(to.getAmount()-to.getTotalReportAmount()); //未发货数量
// .setReportPreviewHour(to.getWorkTime())
// .setReportAllHour(to.getTotalWorkTime())
;
if (to.getProcedureStatus() == 2){
trackDO.setIsover(2);
}else {
trackDO.setIsover(1);
}
// if (to.getProcedureStatus() == 2){
// trackDO.setIsover(2);
// }else {
// trackDO.setIsover(1);
// }
//1.零件名字if (reqVO.getBomDetailName()!=null && !reqVO.getBomDetailName().trim().equals(""))
if (to.getBomDetailId()!=null && (pageReqVO.getBomDetailName() == null || pageReqVO.getBomDetailName().trim().equals(""))){
ProcessBomDetailDO processBomDetailDO1 = processBomDetailDO.selectById(to.getBomDetailId());
if(processBomDetailDO1!=null&&processBomDetailDO1.getMaterialName()!=null){
trackDO.setBomDetailName(processBomDetailDO1.getMaterialName());
}
}
if (to.getProcedureId()!=null){
ProcedureDO procedureDO = procedureMapper.selectById(to.getProcedureId());
if (procedureDO!=null){
trackDO.setProcessName(procedureDO.getName());
}
}
// if (to.getBomDetailId()!=null && (pageReqVO.getBomDetailName() == null || pageReqVO.getBomDetailName().trim().equals(""))){
// ProcessBomDetailDO processBomDetailDO1 = processBomDetailDO.selectById(to.getBomDetailId());
//
// if(processBomDetailDO1!=null&&processBomDetailDO1.getMaterialName()!=null){
// trackDO.setBomDetailName(processBomDetailDO1.getMaterialName());
// }
// }
// if (to.getProcedureId()!=null){
// ProcedureDO procedureDO = procedureMapper.selectById(to.getProcedureId());
// if (procedureDO!=null){
// trackDO.setProcessName(procedureDO.getName());
// }
// }
}
return pageResult;

View File

@ -14,7 +14,6 @@ VITE_UPLOAD_BATCH_URL='http://127.0.0.1:8080/admin-api/infra/file/uploadBatch'
# 接口前缀
VITE_API_BASEPATH=/dev-api
# 接口地址
VITE_API_URL=/admin-api

View File

@ -11,10 +11,10 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="生产计划单号" prop="planCode">
<el-form-item label="项目名称" prop="planCode">
<el-input
v-model="queryParams.planCode"
placeholder="请输入生产计划单号"
placeholder="项目名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
@ -38,7 +38,7 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="零件名称" prop="bomDetailName">
<!-- <el-form-item label="零件名称" prop="bomDetailName">
<el-input
v-model="queryParams.bomDetailName"
placeholder="请输入零件名称"
@ -50,7 +50,7 @@
<el-form-item label="任务负责人" prop="owner">
<UserSelect v-model="queryParams.owner" @update:new-value="handleSelectedUser1" class="!w-265px"/>
</el-form-item>
</el-form-item> -->
<el-form-item>
<el-button type="primary" @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> </el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> </el-button>
@ -72,19 +72,11 @@
</el-table-column>
<el-table-column label="子项目编号" align="center" prop="projectOrderSubCode" />
<el-table-column label="子项目名称" align="center" prop="projectOrderSubName" width="120"/>
<el-table-column label="零件名称" align="center" prop="bomDetailName" width="120"/>
<el-table-column label="工序名称" align="center" prop="processName" width="110"/>
<el-table-column label="总派工数量" align="center" prop="dispatchAmount" width="120"/>
<el-table-column label="总报工时间" align="center" prop="reportAllHour" width="120"/>
<el-table-column label="总预计工时" align="center" prop="reportPreviewHour" width="120"/>
<el-table-column label="总报工数量" align="center" prop="reportAmount" width="120" />
<el-table-column label="完成标志" align="center" prop="isover" width="110">
<template #default="scope">
<el-tag v-if="scope.row.isover==2">完成</el-tag>
<el-tag v-else class="ml-2" type="danger">未完成</el-tag>
<!-- <dict-tag :type="DICT_TYPE.HELI_YINGFU_MONEY" :value="scope.row.isover" /> -->
</template>
</el-table-column>
<el-table-column label="订单数量" align="center" prop="dispatchAmount" width="120"/>
<el-table-column label="已发货数量" align="center" prop="reportAllHour" width="120"/>
<el-table-column label="未发货数量" align="center" prop="reportPreviewHour" width="120"/>
<el-table-column label="项目结束日期" align="center" prop="processName" width="150" />
<el-table-column label="剩余天数" align="center" prop="reportAmount" width="110"/>
<!-- <el-table-column label="操作" align="center">
<template #default="scope">
<el-button