发货单打印还原
This commit is contained in:
parent
ed4f521faa
commit
edee20587b
@ -76,6 +76,6 @@ public class PlanSubDetailPageReqVO extends PageParam {
|
|||||||
private String customerBrief;
|
private String customerBrief;
|
||||||
private String projectName;
|
private String projectName;
|
||||||
private String planNo;
|
private String planNo;
|
||||||
|
private Boolean statusflag;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -292,4 +292,11 @@ public class TaskDispatchController {
|
|||||||
public CommonResult<PageResult<TaskDispatchDetailDO>> taskPage(@Valid TaskPlanJDBaoBiaoPageReqVO pageReqVO) {
|
public CommonResult<PageResult<TaskDispatchDetailDO>> taskPage(@Valid TaskPlanJDBaoBiaoPageReqVO pageReqVO) {
|
||||||
return success(taskDispatchService.taskPage(pageReqVO));
|
return success(taskDispatchService.taskPage(pageReqVO));
|
||||||
}
|
}
|
||||||
|
@GetMapping("/task-dispatch-detail/pagexl")
|
||||||
|
@Operation(summary = "小程序获得派工明细分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')")
|
||||||
|
public CommonResult<PageResult<TaskDispatchDetailDO>> getTaskDispatchPageDetailXl(@Valid TaskDispatchDetailPageReqVO pageReqVO) {
|
||||||
|
PageResult<TaskDispatchDetailDO> pageResult = taskDispatchService.getTaskDispatchPageDetailXl(pageReqVO);
|
||||||
|
return success(pageResult);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -105,8 +105,6 @@ public class TaskDispatchDetailDO extends BaseDO {
|
|||||||
private Integer planStatus;
|
private Integer planStatus;
|
||||||
private Integer isReport;
|
private Integer isReport;
|
||||||
|
|
||||||
private Integer inReportProcess;
|
|
||||||
private String returnRemark;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工序状态 默认 已提交 已完成 0 1 2
|
* 工序状态 默认 已提交 已完成 0 1 2
|
||||||
@ -115,6 +113,22 @@ public class TaskDispatchDetailDO extends BaseDO {
|
|||||||
private Integer reportProcess;
|
private Integer reportProcess;
|
||||||
private String matPlanProcess;
|
private String matPlanProcess;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下料报工进度0 未报工 1 已报工 2 报工完成
|
||||||
|
*/
|
||||||
|
private Integer inReportProcess;
|
||||||
|
/**
|
||||||
|
* 下料是否报工(Y\N)
|
||||||
|
*/
|
||||||
|
private String isInProcess;
|
||||||
|
/**
|
||||||
|
* 返工原因
|
||||||
|
*/
|
||||||
|
private String returnRemark;
|
||||||
|
/**
|
||||||
|
* 返工原因
|
||||||
|
*/
|
||||||
|
private String returnWRematk;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String projectName;
|
private String projectName;
|
||||||
|
|
||||||
@ -282,4 +296,16 @@ public class TaskDispatchDetailDO extends BaseDO {
|
|||||||
private String reportFlag;
|
private String reportFlag;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String finishedProduct;
|
private String finishedProduct;
|
||||||
|
/**
|
||||||
|
* 密度
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private BigDecimal density;
|
||||||
|
/**
|
||||||
|
* 重量
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private BigDecimal weight;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private BigDecimal purchaseAmounts;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -320,6 +320,9 @@ public interface PlanSubMapper extends BaseMapperX<PlanSubDO> {
|
|||||||
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()), ProjectOrderDO::getProjectName, pageReqVO.getProjectName());
|
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()), ProjectOrderDO::getProjectName, pageReqVO.getProjectName());
|
||||||
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectSubName()), ProjectOrderSubDO::getName, pageReqVO.getProjectSubName());
|
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectSubName()), ProjectOrderSubDO::getName, pageReqVO.getProjectSubName());
|
||||||
query.like(ObjectUtil.isNotEmpty(pageReqVO.getCustomerName()), CustomerDO::getName, pageReqVO.getCustomerName());
|
query.like(ObjectUtil.isNotEmpty(pageReqVO.getCustomerName()), CustomerDO::getName, pageReqVO.getCustomerName());
|
||||||
|
if (ObjectUtil.isNotEmpty(pageReqVO.getCustomerName())&&ObjectUtil.isEmpty(pageReqVO.getProjectCode())&&ObjectUtil.isEmpty(pageReqVO.getProjectName())&&ObjectUtil.isEmpty(pageReqVO.getProjectSubName())){
|
||||||
|
query.ne(ProjectOrderDO::getDeliveryStatus,3);
|
||||||
|
}
|
||||||
query.orderByAsc(ProjectOrderDO::getCode);
|
query.orderByAsc(ProjectOrderDO::getCode);
|
||||||
return selectPage(pageReqVO, query);
|
return selectPage(pageReqVO, query);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -398,10 +398,16 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
|
|||||||
@Delete("delete from pro_process_design where project_id = #{id}")
|
@Delete("delete from pro_process_design where project_id = #{id}")
|
||||||
void deleteOrderId(@Param("id") Long id);
|
void deleteOrderId(@Param("id") Long id);
|
||||||
|
|
||||||
@Select("SELECT pd.* FROM pro_process_design pd " +
|
// @Select("SELECT pd.* FROM pro_process_design pd " +
|
||||||
"INNER JOIN project_plan_sub_detail psd ON psd.project_sub_id = pd.project_sub_id " +
|
// "INNER JOIN project_plan_sub_detail psd ON psd.project_sub_id = pd.project_sub_id " +
|
||||||
"AND psd.sub_type = pd.process_design_type " +
|
// "AND psd.sub_type = pd.process_design_type " +
|
||||||
"WHERE pd.project_sub_id = #{projectSubId} " +
|
// "WHERE pd.project_sub_id = #{projectSubId} " +
|
||||||
"AND pd.process_design_type IN ('BLUEPRINT_3D', 'BLUEPRINT_2D', 'BLUEPRINT_WORKBLANK')")
|
// "AND pd.process_design_type IN ('BLUEPRINT_3D', 'BLUEPRINT_2D', 'BLUEPRINT_WORKBLANK')")
|
||||||
|
@Select("SELECT DISTINCT pd.* \n" +
|
||||||
|
"FROM pro_process_design pd \n" +
|
||||||
|
"INNER JOIN project_plan_sub_detail psd ON psd.project_sub_id = pd.project_sub_id \n" +
|
||||||
|
" AND psd.sub_type = pd.process_design_type \n" +
|
||||||
|
"WHERE pd.project_sub_id = #{projectSubId} \n" +
|
||||||
|
" AND pd.process_design_type IN ('BLUEPRINT_3D', 'BLUEPRINT_2D', 'BLUEPRINT_WORKBLANK')")
|
||||||
List<ProcessDesignDO> selectWithDetailExists(@Param("projectSubId") Long projectSubId);
|
List<ProcessDesignDO> selectWithDetailExists(@Param("projectSubId") Long projectSubId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
|
|||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pgmaster.PgMasterLineDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pgmaster.PgMasterLineDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
|
||||||
@ -29,6 +30,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.Pur
|
|||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetailowner.TaskDispatchDetailOwnerDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetailowner.TaskDispatchDetailOwnerDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskinreport.TaskInReportDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO;
|
||||||
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
|
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
@ -906,11 +908,20 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
|
|||||||
.select("a.bom_detail_id as bomDetailId")
|
.select("a.bom_detail_id as bomDetailId")
|
||||||
.select("b.material_name as materialName","c.name as projectSubName")
|
.select("b.material_name as materialName","c.name as projectSubName")
|
||||||
.select("d.name as procedureName","u.nickname as ownerName")
|
.select("d.name as procedureName","u.nickname as ownerName")
|
||||||
|
.select("COALESCE(f.purchase_amount, e.boom_amount) AS purchaseAmounts")
|
||||||
.leftJoin(TaskDispatchDO.class,"a",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId)
|
.leftJoin(TaskDispatchDO.class,"a",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId)
|
||||||
.leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,TaskDispatchDO::getBomDetailId)
|
.leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,TaskDispatchDO::getBomDetailId)
|
||||||
.leftJoin(ProjectOrderSubDO.class,"c",ProjectOrderSubDO::getId,TaskDispatchDO::getProjectSubId)
|
.leftJoin(ProjectOrderSubDO.class,"c",ProjectOrderSubDO::getId,TaskDispatchDO::getProjectSubId)
|
||||||
.leftJoin(ProcedureDO.class,"d",ProcedureDO::getId,TaskDispatchDetailDO::getProcedureId)
|
.leftJoin(ProcedureDO.class,"d",ProcedureDO::getId,TaskDispatchDetailDO::getProcedureId)
|
||||||
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId,TaskDispatchDetailDO::getOwner)
|
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId,TaskDispatchDetailDO::getOwner)
|
||||||
|
// .leftJoin(MaterialPlanBoomDO.class,"e",MaterialPlanBoomDO::getId,TaskDispatchDetailDO::getProjectMaterialPlanDetailId)
|
||||||
|
// .leftJoin(PurchaseOrderMakeDetailDO.class,"f",PurchaseOrderMakeDetailDO::getId,MaterialPlanBoomDO::getProjectPurchaseOrderMakeDetailId)
|
||||||
|
|
||||||
|
.leftJoin(MaterialPlanBoomDO.class, "e",
|
||||||
|
wrapper -> wrapper.eq(MaterialPlanBoomDO::getId,TaskDispatchDetailDO::getProjectMaterialPlanDetailId))
|
||||||
|
.leftJoin(PurchaseOrderMakeDetailDO.class, "f",
|
||||||
|
wrapper -> wrapper.eq(PurchaseOrderMakeDetailDO::getId,MaterialPlanBoomDO::getProjectPurchaseOrderMakeDetailId))
|
||||||
|
.disableSubLogicDel()
|
||||||
.orderByAsc(ProcessBomDetailDO::getMaterialName)
|
.orderByAsc(ProcessBomDetailDO::getMaterialName)
|
||||||
.orderByAsc(TaskDispatchDO::getCode);
|
.orderByAsc(TaskDispatchDO::getCode);
|
||||||
query.eq(TaskDispatchDO::getProjectSubId,projectSubId);
|
query.eq(TaskDispatchDO::getProjectSubId,projectSubId);
|
||||||
@ -935,4 +946,71 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
|
|||||||
query.eq(TaskDispatchDO::getDispatchType,"ASSEMBLE");
|
query.eq(TaskDispatchDO::getDispatchType,"ASSEMBLE");
|
||||||
return selectList(query);
|
return selectList(query);
|
||||||
}
|
}
|
||||||
|
default PageResult<TaskDispatchDetailDO> selectPageXl(TaskDispatchDetailPageReqVO reqVO , Map<String, Set<Long>> postIds) {
|
||||||
|
// 假设reqVO中包含了页码(page)和每页数量(limit)
|
||||||
|
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
|
||||||
|
query.selectAll(TaskDispatchDetailDO.class)
|
||||||
|
.select("a.code as dispatchCode")
|
||||||
|
.select("b.code as projectCode", "b.project_name as projectName", "c.name as projectSubName")
|
||||||
|
.select("d.material_name as materialName")
|
||||||
|
.select("e.name as procedureName")
|
||||||
|
.select("g.name as compositionName","g.density as density")
|
||||||
|
.selectSum(TaskInReportDO::getWeight, "weight")
|
||||||
|
.leftJoin(TaskDispatchDO.class, "a", TaskDispatchDO::getId, TaskDispatchDetailDO::getDispatchId)
|
||||||
|
.leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, TaskDispatchDO::getProjectId)
|
||||||
|
.leftJoin(ProjectOrderSubDO.class, "c", ProjectOrderSubDO::getId, TaskDispatchDO::getProjectSubId)
|
||||||
|
.leftJoin(ProcessBomDetailDO.class, "d", ProcessBomDetailDO::getId, TaskDispatchDO::getBomDetailId)
|
||||||
|
.leftJoin(ProcedureDO.class, "e", ProcedureDO::getId, TaskDispatchDetailDO::getProcedureId)
|
||||||
|
.leftJoin(TaskInReportDO.class, "f", TaskInReportDO::getDispatchDetailId, TaskDispatchDetailDO::getId)
|
||||||
|
.leftJoin(PlanSubDO.class,"plan", PlanSubDO::getProjectSubId, TaskDispatchDO::getProjectSubId)
|
||||||
|
.leftJoin(CompositionDO.class, "g", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
|
||||||
|
.groupBy(TaskDispatchDetailDO::getId)
|
||||||
|
.disableSubLogicDel();;
|
||||||
|
if (reqVO.getProcedureStatusList().size() == 1 && reqVO.getProcedureStatusList().get(0) == 2) {
|
||||||
|
// 完工降序
|
||||||
|
query.orderByDesc(TaskDispatchDetailDO::getDispatchId, TaskDispatchDetailDO::getSort);
|
||||||
|
} else {
|
||||||
|
// 未完工升序
|
||||||
|
query
|
||||||
|
.orderByAsc(TaskDispatchDetailDO::getDispatchId, TaskDispatchDetailDO::getSort);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reqVO.getSubOrDetailName() != null && !reqVO.getSubOrDetailName().trim().equals("")){
|
||||||
|
query.and( e ->e.eq(ProjectOrderDO::getProjectName, reqVO.getSubOrDetailName()).or().eq(
|
||||||
|
ProjectOrderSubDO::getName, reqVO.getSubOrDetailName()
|
||||||
|
).or().eq(ProcessBomDetailDO::getMaterialName, reqVO.getSubOrDetailName()).or().eq(ProcessBomDetailDO::getBomBlueprintNo, reqVO.getSubOrDetailName())
|
||||||
|
.or().eq(PlanSubDO::getProjectSubCode, reqVO.getSubOrDetailName()));
|
||||||
|
|
||||||
|
// query.eq(" (b.project_name like '%" + reqVO.getSubOrDetailName() + "%' or c.name like '%" + reqVO.getSubOrDetailName() + "%')");
|
||||||
|
}
|
||||||
|
query.and(wrapper -> {
|
||||||
|
wrapper.ne(ProjectOrderDO::getStatus,6);
|
||||||
|
|
||||||
|
if (CollUtil.isNotEmpty(postIds)) {
|
||||||
|
wrapper.and(i -> {
|
||||||
|
// 为每个岗位创建对应的工序查询条件
|
||||||
|
for (String postId : postIds.keySet()) {
|
||||||
|
Set<Long> processId = postIds.get(postId);
|
||||||
|
if (ObjectUtil.isNotEmpty(processId)) {
|
||||||
|
i.or(j -> j.eq(TaskDispatchDetailDO::getPostId, postId)
|
||||||
|
.in(TaskDispatchDetailDO::getProcedureId, processId)
|
||||||
|
.isNull(TaskDispatchDetailDO::getOwner));
|
||||||
|
} else {
|
||||||
|
i.or(j -> j.eq(TaskDispatchDetailDO::getPostId, postId)
|
||||||
|
.isNull(TaskDispatchDetailDO::getOwner));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 添加所有者查询条件
|
||||||
|
wrapper.or(k -> k.eq(reqVO.getOwner() != null, TaskDispatchDetailDO::getOwner, reqVO.getOwner()));
|
||||||
|
} else {
|
||||||
|
wrapper.eq(reqVO.getOwner() != null, TaskDispatchDetailDO::getOwner, reqVO.getOwner());
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
query.in(CollUtil.isNotEmpty(reqVO.getProcedureStatusList()), TaskDispatchDetailDO::getInReportProcess, reqVO.getProcedureStatusList())
|
||||||
|
.eq(TaskDispatchDetailDO::getIsInProcess,"Y");
|
||||||
|
|
||||||
|
return selectPage(reqVO, query);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -412,7 +412,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
if (planSubDO.getDeliveryStatus() == 3) {
|
if (planSubDO.getDeliveryStatus() == 3) {
|
||||||
planDO.setProjectProgress("已发货");
|
planDO.setProjectProgress("已发货");
|
||||||
} else if (now.isAfter(planSubDO.getProjectEndTime())) {
|
} else if (now.toLocalDate().isAfter(planSubDO.getProjectEndTime().toLocalDate())) {
|
||||||
long overdueDays = ChronoUnit.DAYS.between(
|
long overdueDays = ChronoUnit.DAYS.between(
|
||||||
planSubDO.getProjectEndTime().toLocalDate(), now.toLocalDate());
|
planSubDO.getProjectEndTime().toLocalDate(), now.toLocalDate());
|
||||||
planDO.setProjectProgress("已延迟" + overdueDays + "天");
|
planDO.setProjectProgress("已延迟" + overdueDays + "天");
|
||||||
@ -438,21 +438,21 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
LocalDateTime dateAsLocalDateTime = processDesignProgressDO.getEndTime().toInstant()
|
LocalDateTime dateAsLocalDateTime = processDesignProgressDO.getEndTime().toInstant()
|
||||||
.atZone(ZoneId.systemDefault())
|
.atZone(ZoneId.systemDefault())
|
||||||
.toLocalDateTime();
|
.toLocalDateTime();
|
||||||
if (ObjectUtil.isNotEmpty(planSubDO.getCraftEndDate())){
|
if (ObjectUtil.isNotEmpty(planSubDO.getCraftEndDate())) {
|
||||||
if (dateAsLocalDateTime.isAfter(planSubDO.getCraftEndDate())) {
|
if (dateAsLocalDateTime.toLocalDate().isAfter(planSubDO.getCraftEndDate().toLocalDate())) {
|
||||||
|
planDO.setProcessFlag("1");
|
||||||
|
} else {
|
||||||
|
planDO.setProcessFlag("0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ObjectUtil.isNotEmpty(planSubDO.getCraftEndDate())) {
|
||||||
|
if (now.toLocalDate().isAfter(planSubDO.getCraftEndDate().toLocalDate())) {
|
||||||
planDO.setProcessFlag("1");
|
planDO.setProcessFlag("1");
|
||||||
} else {
|
} else {
|
||||||
planDO.setProcessFlag("0");
|
planDO.setProcessFlag("0");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (ObjectUtil.isNotEmpty(planSubDO.getCraftEndDate())){
|
|
||||||
if (now.isAfter(planSubDO.getCraftEndDate())) {
|
|
||||||
planDO.setProcessFlag("1");
|
|
||||||
} else {
|
|
||||||
planDO.setProcessFlag("0");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Long l = processDesignProgressMapper.selectCount(new LambdaQueryWrapper<ProcessDesignProgressDO>().eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()));
|
Long l = processDesignProgressMapper.selectCount(new LambdaQueryWrapper<ProcessDesignProgressDO>().eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()));
|
||||||
if (l > 0) {
|
if (l > 0) {
|
||||||
@ -462,7 +462,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for (PlanSubDO subDO : list) {
|
for (PlanSubDO subDO : list) {
|
||||||
//设计计划
|
//设计计划
|
||||||
// 1. 查询已完成的工艺设计
|
// 1. 查询已完成的工艺设计
|
||||||
@ -475,7 +475,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
handleCompletedDesigns(subDO, completedProcessDesigns, latestTwoDimPlan);
|
handleCompletedDesigns(subDO, completedProcessDesigns, latestTwoDimPlan);
|
||||||
} else {
|
} else {
|
||||||
// 情况2:未完成或部分完成
|
// 情况2:未完成或部分完成
|
||||||
handleIncompleteDesigns(subDO, completedProcessDesigns, latestTwoDimPlan, now);
|
handleIncompleteDesigns(subDO, completedProcessDesigns, latestTwoDimPlan, LocalDateTime.now());
|
||||||
}
|
}
|
||||||
//外协任务
|
//外协任务
|
||||||
// 1.查询外协的派工单
|
// 1.查询外协的派工单
|
||||||
@ -528,7 +528,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 4. 处理时间相关逻辑
|
// 4. 处理时间相关逻辑
|
||||||
processProcessingTimeLogic(subDO, dispatchDetailDOS, taskReportDOS, allCompleted1, now);
|
processProcessingTimeLogic(subDO, dispatchDetailDOS, taskReportDOS, allCompleted1, LocalDateTime.now());
|
||||||
|
|
||||||
//过程检
|
//过程检
|
||||||
//1.查询非外协需要过程检的数据
|
//1.查询非外协需要过程检的数据
|
||||||
@ -558,10 +558,9 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
processAssemblyTask(subDO, assemblyTask, taskReportDOList);
|
processAssemblyTask(subDO, assemblyTask, taskReportDOList);
|
||||||
}
|
}
|
||||||
// 4. 处理时间相关逻辑
|
// 4. 处理时间相关逻辑
|
||||||
processAssemblyTaskTimeLogic(subDO, assemblyTask, taskReportDOList, allCompleted2, now);
|
processAssemblyTaskTimeLogic(subDO, assemblyTask, taskReportDOList, allCompleted2, LocalDateTime.now());
|
||||||
}
|
}
|
||||||
planDO.setList( pageResult);
|
planDO.setList( pageResult);
|
||||||
}
|
|
||||||
return planDO;
|
return planDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -578,11 +577,32 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
subDO.setAssemblyTask(TASK_NOT_STARTED);
|
subDO.setAssemblyTask(TASK_NOT_STARTED);
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
BigDecimal dispatchAmount = calculateDispatchAmount(dispatchDetailDOS);
|
List<TaskDispatchDetailDO> collect = dispatchDetailDOS.stream().filter(detailDO -> detailDO.getProcedureStatus() == 2).collect(Collectors.toList());
|
||||||
BigDecimal reportedAmount = calculateReportedAmount(taskReportDOS);
|
//已报工完的工时
|
||||||
int percentage = calculatePercentage(reportedAmount, dispatchAmount);
|
if (ObjectUtil.isNotEmpty(collect)){
|
||||||
subDO.setAssemblyTask(String.format(TASK_STARTED_FORMAT, percentage));
|
BigDecimal workTime = calculateDispatchTime(collect);
|
||||||
subDO.setAssemblyTaskFlag(TASK_FLAG_NORMAL);
|
Set<Long> dispatchDetailIdSet = collect.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(TaskDispatchDetailDO::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
// 过滤 taskReportDOS
|
||||||
|
List<TaskReportDO> filteredReports = taskReportDOS.stream()
|
||||||
|
.filter(report -> !dispatchDetailIdSet.contains(report.getDispatchDetailId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
BigDecimal bigDecimal = calculateReportedTime(filteredReports);
|
||||||
|
bigDecimal = bigDecimal.add(workTime);
|
||||||
|
BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS);
|
||||||
|
int percentage = calculatePercentage(bigDecimal, dispatchAmount);
|
||||||
|
subDO.setAssemblyTask(String.format(TASK_STARTED_FORMAT, percentage));
|
||||||
|
subDO.setAssemblyTaskFlag(TASK_FLAG_NORMAL);
|
||||||
|
}else{
|
||||||
|
BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS);
|
||||||
|
BigDecimal reportedAmount = calculateReportedTime(taskReportDOS);
|
||||||
|
int percentage = calculatePercentage(reportedAmount, dispatchAmount);
|
||||||
|
subDO.setAssemblyTask(String.format(TASK_STARTED_FORMAT, percentage));
|
||||||
|
subDO.setAssemblyTaskFlag(TASK_FLAG_NORMAL);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -660,7 +680,7 @@ public boolean isSameSizeAndNotEmpty(Collection<?> list1, Collection<?> list2)
|
|||||||
return taskReportMapper.selectList(
|
return taskReportMapper.selectList(
|
||||||
new LambdaQueryWrapper<TaskReportDO>()
|
new LambdaQueryWrapper<TaskReportDO>()
|
||||||
.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds)
|
.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds)
|
||||||
.eq(TaskReportDO::getHasReport, 1)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -731,12 +751,12 @@ public boolean isSameSizeAndNotEmpty(Collection<?> list1, Collection<?> list2)
|
|||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
// 如果报工结束时间晚于派工结束时间,标记为延迟
|
// 如果报工结束时间晚于派工结束时间,标记为延迟
|
||||||
if (maxReportEndTime != null && maxReportEndTime.isAfter(maxDispatchEndTime)) {
|
if (maxReportEndTime != null && maxReportEndTime.toLocalDate().isAfter(maxDispatchEndTime.toLocalDate())) {
|
||||||
subDO.setAssemblyTaskFlag(TASK_FLAG_DELAYED);
|
subDO.setAssemblyTaskFlag(TASK_FLAG_DELAYED);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 当前时间晚于派工结束时间,标记为延迟
|
// 当前时间晚于派工结束时间,标记为延迟
|
||||||
if (now.isAfter(maxDispatchEndTime)) {
|
if (now.toLocalDate().isAfter(maxDispatchEndTime.toLocalDate())) {
|
||||||
subDO.setAssemblyTaskFlag(TASK_FLAG_DELAYED);
|
subDO.setAssemblyTaskFlag(TASK_FLAG_DELAYED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -778,12 +798,12 @@ public boolean isSameSizeAndNotEmpty(Collection<?> list1, Collection<?> list2)
|
|||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
// 如果报工结束时间晚于派工结束时间,标记为延迟
|
// 如果报工结束时间晚于派工结束时间,标记为延迟
|
||||||
if (maxReportEndTime != null && maxReportEndTime.isAfter(maxDispatchEndTime)) {
|
if (maxReportEndTime != null && maxReportEndTime.toLocalDate().isAfter(maxDispatchEndTime.toLocalDate())) {
|
||||||
subDO.setProcessingTaskFlag(TASK_FLAG_DELAYED);
|
subDO.setProcessingTaskFlag(TASK_FLAG_DELAYED);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 当前时间晚于派工结束时间,标记为延迟
|
// 当前时间晚于派工结束时间,标记为延迟
|
||||||
if (now.isAfter(maxDispatchEndTime)) {
|
if (now.toLocalDate().isAfter(maxDispatchEndTime.toLocalDate())) {
|
||||||
subDO.setProcessingTaskFlag(TASK_FLAG_DELAYED);
|
subDO.setProcessingTaskFlag(TASK_FLAG_DELAYED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -801,6 +821,18 @@ public boolean isSameSizeAndNotEmpty(Collection<?> list1, Collection<?> list2)
|
|||||||
.map(BigDecimal::new)
|
.map(BigDecimal::new)
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 计算已报工数量
|
||||||
|
*/
|
||||||
|
private BigDecimal calculateReportedTime(List<TaskReportDO> taskReportDOS) {
|
||||||
|
return Optional.ofNullable(taskReportDOS)
|
||||||
|
.orElse(Collections.emptyList())
|
||||||
|
.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(TaskReportDO::getWorkTime)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 计算已报工数量
|
* 计算已报工数量
|
||||||
*/
|
*/
|
||||||
@ -853,7 +885,16 @@ private List<PurchaseOrderNoDetailDO> queryPurchaseOrderDetails(PlanSubDO subDO)
|
|||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
}
|
}
|
||||||
|
// 计算派工数量
|
||||||
|
private BigDecimal calculateDispatchTime(List<TaskDispatchDetailDO> detailDOS) {
|
||||||
|
return Optional.ofNullable(detailDOS)
|
||||||
|
.orElse(Collections.emptyList())
|
||||||
|
.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(TaskDispatchDetailDO::getWorkTime)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
}
|
||||||
// 计算派工数量
|
// 计算派工数量
|
||||||
private BigDecimal calculateDispatchAmount(List<TaskDispatchDetailDO> detailDOS) {
|
private BigDecimal calculateDispatchAmount(List<TaskDispatchDetailDO> detailDOS) {
|
||||||
return Optional.ofNullable(detailDOS)
|
return Optional.ofNullable(detailDOS)
|
||||||
@ -899,12 +940,12 @@ private List<PurchaseOrderNoDetailDO> queryPurchaseOrderDetails(PlanSubDO subDO)
|
|||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
// 如果到货时间晚于要求时间,标记为延迟
|
// 如果到货时间晚于要求时间,标记为延迟
|
||||||
if (maxArriveTime != null && maxArriveTime.isAfter(maxRequireTime)) {
|
if (maxArriveTime != null && maxArriveTime.toLocalDate().isAfter(maxRequireTime.toLocalDate())) {
|
||||||
subDO.setOutsourcingTasksFlag(TASK_FLAG_DELAYED);
|
subDO.setOutsourcingTasksFlag(TASK_FLAG_DELAYED);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 当前时间晚于最大要求时间,标记为延迟
|
// 当前时间晚于最大要求时间,标记为延迟
|
||||||
if (LocalDateTime.now().isAfter(maxRequireTime)) {
|
if (LocalDateTime.now().toLocalDate().isAfter(maxRequireTime.toLocalDate())) {
|
||||||
subDO.setOutsourcingTasksFlag(TASK_FLAG_DELAYED);
|
subDO.setOutsourcingTasksFlag(TASK_FLAG_DELAYED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -974,21 +1015,49 @@ private List<PurchaseOrderNoDetailDO> queryPurchaseOrderDetails(PlanSubDO subDO)
|
|||||||
subDO.setDesignTask("");
|
subDO.setDesignTask("");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
List<ProcessDesignDO> collect = processDesigns.stream()
|
||||||
|
.filter(processDesignDO -> processDesignDO.getIsOverProcess() != 1).collect(Collectors.toList());
|
||||||
|
List<ProcessDesignDO> collect1 = processDesigns.stream()
|
||||||
|
.filter(processDesignDO -> processDesignDO.getIsOverProcess() == 1).collect(Collectors.toList());
|
||||||
List<Long> processDesignIds = processDesigns.stream()
|
List<Long> processDesignIds = processDesigns.stream()
|
||||||
|
.filter(processDesignDO -> processDesignDO.getIsOverProcess() !=1)
|
||||||
|
.map(ProcessDesignDO::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
List<Long> ids = processDesigns.stream()
|
||||||
.map(ProcessDesignDO::getId)
|
.map(ProcessDesignDO::getId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
// 获取工艺设计进度列表
|
// 获取工艺设计进度列表
|
||||||
List<ProcessDesignProgressDO> progressList = getProcessDesignProgressList(processDesignIds);
|
List<ProcessDesignProgressDO> progressList = getProcessDesignProgressList(processDesignIds);
|
||||||
|
List<ProcessDesignProgressDO> processDesignProgressDOS = getProcessDesignProgressList(ids);
|
||||||
|
|
||||||
if (ObjectUtil.isEmpty(progressList)&&ObjectUtil.isNotEmpty(latestTwoDimPlan)) {
|
if (ObjectUtil.isEmpty(processDesignProgressDOS)&&ObjectUtil.isNotEmpty(latestTwoDimPlan)) {
|
||||||
subDO.setDesignTask("未开始");
|
subDO.setDesignTask("未开始");
|
||||||
}
|
}
|
||||||
if (ObjectUtil.isNotEmpty(progressList)) {
|
if (ObjectUtil.isNotEmpty(processDesignProgressDOS)) {
|
||||||
// 计算总工时和当前工时
|
// 计算总工时和当前工时
|
||||||
BigDecimal totalWorkTime = calculateTotalWorkTime(progressList);
|
BigDecimal totalWorkTime = calculateTotalWorkTime(progressList);
|
||||||
BigDecimal currentTime = calculateCurrentTime(subDO);
|
BigDecimal currentTime = calculateCurrentTime(subDO,collect);
|
||||||
|
for (ProcessDesignDO processDesignDO : collect1) {
|
||||||
|
if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
|
||||||
|
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getThreeDimNum().toString()).multiply(new BigDecimal("8")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString()));
|
||||||
|
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getBlankNum().toString()).multiply(new BigDecimal("8")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString()));
|
||||||
|
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getTwoDimNum().toString()).multiply(new BigDecimal("8")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
currentTime = currentTime.multiply(new BigDecimal("8"));
|
currentTime = currentTime.multiply(new BigDecimal("8"));
|
||||||
// 计算完成百分比
|
// 计算完成百分比
|
||||||
Integer percentage = calculatePercentage(totalWorkTime, currentTime);
|
Integer percentage = calculatePercentage(totalWorkTime, currentTime);
|
||||||
@ -1000,7 +1069,7 @@ private List<PurchaseOrderNoDetailDO> queryPurchaseOrderDetails(PlanSubDO subDO)
|
|||||||
// 检查是否超期
|
// 检查是否超期
|
||||||
if (
|
if (
|
||||||
ObjectUtil.isNotEmpty(latestTwoDimPlan) &&
|
ObjectUtil.isNotEmpty(latestTwoDimPlan) &&
|
||||||
now.isAfter(latestTwoDimPlan.getTwoDimDate())) {
|
now.toLocalDate().isAfter(latestTwoDimPlan.getTwoDimDate().toLocalDate())) {
|
||||||
subDO.setDesignTaskFlag("1");
|
subDO.setDesignTaskFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1047,21 +1116,25 @@ private List<PurchaseOrderNoDetailDO> queryPurchaseOrderDetails(PlanSubDO subDO)
|
|||||||
/**
|
/**
|
||||||
* 计算当前工时(将三个数值相加)
|
* 计算当前工时(将三个数值相加)
|
||||||
*/
|
*/
|
||||||
private BigDecimal calculateCurrentTime(PlanSubDO subDO) {
|
private BigDecimal calculateCurrentTime(PlanSubDO subDO,List<ProcessDesignDO> collect) {
|
||||||
BigDecimal currentTime = BigDecimal.ZERO;
|
BigDecimal currentTime = BigDecimal.ZERO;
|
||||||
|
for (ProcessDesignDO processDesignDO : collect) {
|
||||||
if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) {
|
if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){
|
||||||
currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString()));
|
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
|
|
||||||
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) {
|
|
||||||
currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return currentTime;
|
return currentTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1090,7 +1163,7 @@ private List<PurchaseOrderNoDetailDO> queryPurchaseOrderDetails(PlanSubDO subDO)
|
|||||||
.atZone(ZoneId.systemDefault())
|
.atZone(ZoneId.systemDefault())
|
||||||
.toLocalDateTime();
|
.toLocalDateTime();
|
||||||
|
|
||||||
return dateAsLocalDateTime.isAfter(localDateTime);
|
return dateAsLocalDateTime.toLocalDate().isAfter(localDateTime.toLocalDate());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1829,7 +1829,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
// 设置日期字段
|
// 设置日期字段
|
||||||
setDateFields(designTask, planSubDetail);
|
setDateFields(designTask, planSubDetail);
|
||||||
// 设置状态和进度
|
// 设置状态和进度
|
||||||
setTaskStatus(designTask, planSubDetail);
|
setTaskStatus(designTask, planSubDetail,pageReqVO.getProjectSubId());
|
||||||
if ( !"已完成".equals(designTask.getStatus()) ||
|
if ( !"已完成".equals(designTask.getStatus()) ||
|
||||||
pageReqVO.getFlag()==1){
|
pageReqVO.getFlag()==1){
|
||||||
// 如果未完成且有数据,计算进度
|
// 如果未完成且有数据,计算进度
|
||||||
@ -1853,8 +1853,11 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
setOutsourcedTaskDateFields(outsourcedTask, dispatchDetailDOS);
|
setOutsourcedTaskDateFields(outsourcedTask, dispatchDetailDOS);
|
||||||
|
|
||||||
List<PurchaseOrderNoDetailDO> orderNoDetailDOS = queryPurchaseOrderDetails(pageReqVO.getProjectSubId());
|
List<PurchaseOrderNoDetailDO> orderNoDetailDOS = queryPurchaseOrderDetails(pageReqVO.getProjectSubId());
|
||||||
|
|
||||||
|
// 3.查询是否送审
|
||||||
|
List<PurchaseOrderMakeDetailDO> purchaseOrderMakeDetailDOS = queryPurchaseOrderMakeDetails(pageReqVO.getProjectSubId());
|
||||||
// 设置状态和进度
|
// 设置状态和进度
|
||||||
setOutsourcedTaskStatus(outsourcedTask,orderNoDetailDOS,dispatchDetailDOS);
|
setOutsourcedTaskStatus(outsourcedTask,orderNoDetailDOS,dispatchDetailDOS,purchaseOrderMakeDetailDOS);
|
||||||
if ( !"已完成".equals(outsourcedTask.getStatus()) ||
|
if ( !"已完成".equals(outsourcedTask.getStatus()) ||
|
||||||
pageReqVO.getFlag()==1){
|
pageReqVO.getFlag()==1){
|
||||||
// 如果未完成且有数据,计算进度
|
// 如果未完成且有数据,计算进度
|
||||||
@ -1881,7 +1884,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
// 2. 查询报工数据
|
// 2. 查询报工数据
|
||||||
List<TaskReportDO> taskReportDOS = queryTaskReports(dispatchDetailDOList);
|
List<TaskReportDO> taskReportDOS = queryTaskReports(dispatchDetailDOList);
|
||||||
//设置状态
|
//设置状态
|
||||||
setProcessingPlanStatus(processingPlan, dispatchDetailDOList);
|
setProcessingPlanStatus(processingPlan, dispatchDetailDOList,taskReportDOS);
|
||||||
if ( !"已完成".equals(processingPlan.getStatus()) ||
|
if ( !"已完成".equals(processingPlan.getStatus()) ||
|
||||||
pageReqVO.getFlag()==1){
|
pageReqVO.getFlag()==1){
|
||||||
processTime(processingPlan, dispatchDetailDOList,taskReportDOS);
|
processTime(processingPlan, dispatchDetailDOList,taskReportDOS);
|
||||||
@ -1929,11 +1932,11 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
List<TaskReportDO> taskReportDOList = queryTaskReports(taskDispatchDetailDOList);
|
List<TaskReportDO> taskReportDOList = queryTaskReports(taskDispatchDetailDOList);
|
||||||
setOutsourcedTaskDateFields(assemblyTask, taskDispatchDetailDOList);
|
setOutsourcedTaskDateFields(assemblyTask, taskDispatchDetailDOList);
|
||||||
// 设置状态和进度
|
// 设置状态和进度
|
||||||
setProcessingPlanStatus(assemblyTask, taskDispatchDetailDOList);
|
setProcessingPlanStatus(assemblyTask, taskDispatchDetailDOList,taskReportDOList);
|
||||||
if ( !"已完成".equals(assemblyTask.getStatus()) ||
|
if ( !"已完成".equals(assemblyTask.getStatus()) ||
|
||||||
pageReqVO.getFlag()==1){
|
pageReqVO.getFlag()==1){
|
||||||
processTime(assemblyTask, taskDispatchDetailDOList,taskReportDOList);
|
processTime(assemblyTask, taskDispatchDetailDOList,taskReportDOList);
|
||||||
processInProgressTask(assemblyTask, taskDispatchDetailDOList, taskReportDOList);
|
processInProgressAssemblyTask(assemblyTask, taskDispatchDetailDOList, taskReportDOList);
|
||||||
planSubDetailDOS.add(assemblyTask);
|
planSubDetailDOS.add(assemblyTask);
|
||||||
}
|
}
|
||||||
return planSubDetailDOS;
|
return planSubDetailDOS;
|
||||||
@ -2035,6 +2038,9 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
planSubDetailDO.setPercentage("0%");
|
planSubDetailDO.setPercentage("0%");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (pageReqVO.getStatusflag()){
|
||||||
|
return planSubDetailDOS.stream().filter(planSubDetailDO -> !"100%".equals(planSubDetailDO.getPercentage())).collect(Collectors.toList());
|
||||||
|
}
|
||||||
return planSubDetailDOS;
|
return planSubDetailDOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2122,12 +2128,14 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
processPurchaseOrderNoDetail(dispatchDetailDO, noDetail, now);
|
processPurchaseOrderNoDetail(dispatchDetailDO, noDetail, now);
|
||||||
} else {
|
} else {
|
||||||
// 如果没有采购订单号详情,检查是否超期
|
// 如果没有采购订单号详情,检查是否超期
|
||||||
if (now.isAfter(dispatchDetailDO.getEndTime())) {
|
if (now.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) {
|
||||||
dispatchDetailDO.setReceivingFlag("1");
|
dispatchDetailDO.setReceivingFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (pageReqVO.getStatusflag()){
|
||||||
|
return dispatchDetailDOS.stream().filter(taskDispatchDetailDO -> !"已收货".equals(taskDispatchDetailDO.getReceiving())).collect(Collectors.toList());
|
||||||
|
}
|
||||||
return dispatchDetailDOS;
|
return dispatchDetailDOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2151,8 +2159,6 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
if (!dispatchDetailIds.isEmpty()) {
|
if (!dispatchDetailIds.isEmpty()) {
|
||||||
LambdaQueryWrapper<TaskReportDO> taskReportWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<TaskReportDO> taskReportWrapper = new LambdaQueryWrapper<>();
|
||||||
taskReportWrapper.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds);
|
taskReportWrapper.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds);
|
||||||
taskReportWrapper.eq(TaskReportDO::getHasReport, "1");
|
|
||||||
|
|
||||||
List<TaskReportDO> allTaskReports = taskReportMapper.selectList(taskReportWrapper);
|
List<TaskReportDO> allTaskReports = taskReportMapper.selectList(taskReportWrapper);
|
||||||
taskReportMap = allTaskReports.stream()
|
taskReportMap = allTaskReports.stream()
|
||||||
.collect(Collectors.groupingBy(TaskReportDO::getDispatchDetailId));
|
.collect(Collectors.groupingBy(TaskReportDO::getDispatchDetailId));
|
||||||
@ -2203,6 +2209,9 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
processReportStatus(dispatchDetailDO, taskReportDOS, now);
|
processReportStatus(dispatchDetailDO, taskReportDOS, now);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pageReqVO.getStatusflag()){
|
||||||
|
return dispatchDetailDOS.stream().filter(taskDispatchDetailDO -> !"已完成".equals(taskDispatchDetailDO.getReport())).collect(Collectors.toList());
|
||||||
|
}
|
||||||
return dispatchDetailDOS;
|
return dispatchDetailDOS;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -2261,7 +2270,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
|
|
||||||
// 模拟 limit 1 的效果:取第一条记录
|
// 模拟 limit 1 的效果:取第一条记录
|
||||||
PgMasterLineDO pgMasterLineDO = pgMasterLines.get(0);
|
PgMasterLineDO pgMasterLineDO = pgMasterLines.get(0);
|
||||||
|
dispatchDetailDO.setEndTime(pgMasterLineDO.getEntTime());
|
||||||
if ("END".equals(pgMasterLineDO.getActive())) {
|
if ("END".equals(pgMasterLineDO.getActive())) {
|
||||||
dispatchDetailDO.setReport("已完成");
|
dispatchDetailDO.setReport("已完成");
|
||||||
|
|
||||||
@ -2277,7 +2286,9 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
dispatchDetailDO.setReport("已生成");
|
dispatchDetailDO.setReport("已生成");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (pageReqVO.getStatusflag()){
|
||||||
|
return dispatchDetailDOS.stream().filter(taskDispatchDetailDO -> !"已完成".equals(taskDispatchDetailDO.getReport())).collect(Collectors.toList());
|
||||||
|
}
|
||||||
return dispatchDetailDOS;
|
return dispatchDetailDOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2308,8 +2319,6 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
if (!dispatchDetailIds.isEmpty()) {
|
if (!dispatchDetailIds.isEmpty()) {
|
||||||
LambdaQueryWrapper<TaskReportDO> taskReportWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<TaskReportDO> taskReportWrapper = new LambdaQueryWrapper<>();
|
||||||
taskReportWrapper.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds);
|
taskReportWrapper.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds);
|
||||||
taskReportWrapper.eq(TaskReportDO::getHasReport, "1");
|
|
||||||
|
|
||||||
List<TaskReportDO> allTaskReports = taskReportMapper.selectList(taskReportWrapper);
|
List<TaskReportDO> allTaskReports = taskReportMapper.selectList(taskReportWrapper);
|
||||||
taskReportMap = allTaskReports.stream()
|
taskReportMap = allTaskReports.stream()
|
||||||
.collect(Collectors.groupingBy(TaskReportDO::getDispatchDetailId));
|
.collect(Collectors.groupingBy(TaskReportDO::getDispatchDetailId));
|
||||||
@ -2327,7 +2336,6 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
if (zjPgMasterLineDO != null && !"1".equals(zjPgMasterLineDO.getPgType())) {
|
if (zjPgMasterLineDO != null && !"1".equals(zjPgMasterLineDO.getPgType())) {
|
||||||
LambdaQueryWrapper<ZjBgMasterLineDO> zjBgMasterLineWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ZjBgMasterLineDO> zjBgMasterLineWrapper = new LambdaQueryWrapper<>();
|
||||||
zjBgMasterLineWrapper.eq(ZjBgMasterLineDO::getZjMxId, zjPgMasterLineDO.getId());
|
zjBgMasterLineWrapper.eq(ZjBgMasterLineDO::getZjMxId, zjPgMasterLineDO.getId());
|
||||||
zjBgMasterLineWrapper.isNotNull(ZjBgMasterLineDO::getEntTime);
|
|
||||||
|
|
||||||
List<ZjBgMasterLineDO> zjBgMasterLineDOList = zjBgMasterLineMapper.selectList(zjBgMasterLineWrapper);
|
List<ZjBgMasterLineDO> zjBgMasterLineDOList = zjBgMasterLineMapper.selectList(zjBgMasterLineWrapper);
|
||||||
zjBgMasterLineMap = zjBgMasterLineDOList.stream()
|
zjBgMasterLineMap = zjBgMasterLineDOList.stream()
|
||||||
@ -2359,12 +2367,13 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
if (totalReported != null) {
|
if (totalReported != null) {
|
||||||
BigDecimal workingHour = totalReported.divide(DIVISOR, 2, RoundingMode.HALF_UP);
|
BigDecimal workingHour = totalReported.divide(DIVISOR, 2, RoundingMode.HALF_UP);
|
||||||
taskDispatchDetailDO.setWorkingHour(workingHour);
|
taskDispatchDetailDO.setWorkingHour(workingHour);
|
||||||
|
taskDispatchDetailDO.setBgWorkTime(taskDispatchDetailDO.getWorkTime());
|
||||||
}
|
}
|
||||||
BigDecimal amount = calculateTotalAmount(allTaskReports);
|
BigDecimal amount = calculateTotalAmount(allTaskReports);
|
||||||
taskDispatchDetailDO.setNumAmount(Integer.parseInt(amount.toString()));
|
taskDispatchDetailDO.setNumAmount(Integer.parseInt(amount.toString()));
|
||||||
if (CollectionUtils.isNotEmpty(allTaskReports)) {
|
if (CollectionUtils.isNotEmpty(allTaskReports)) {
|
||||||
LocalDateTime maxEndTime = findMaxEndTime(allTaskReports);
|
LocalDateTime maxEndTime = findMaxEndTime(allTaskReports);
|
||||||
if (maxEndTime != null && maxEndTime.isAfter(taskDispatchDetailDO.getEndTime())) {
|
if (maxEndTime != null && maxEndTime.toLocalDate().isAfter(taskDispatchDetailDO.getEndTime().toLocalDate())) {
|
||||||
taskDispatchDetailDO.setReportFlag("1");
|
taskDispatchDetailDO.setReportFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2376,6 +2385,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
if (totalReported != null) {
|
if (totalReported != null) {
|
||||||
BigDecimal workingHour = totalReported.divide(DIVISOR, 2, RoundingMode.HALF_UP);
|
BigDecimal workingHour = totalReported.divide(DIVISOR, 2, RoundingMode.HALF_UP);
|
||||||
taskDispatchDetailDO.setWorkingHour(workingHour);
|
taskDispatchDetailDO.setWorkingHour(workingHour);
|
||||||
|
taskDispatchDetailDO.setBgWorkTime(workingHour);
|
||||||
}
|
}
|
||||||
BigDecimal amount = calculateTotalAmount(allTaskReports);
|
BigDecimal amount = calculateTotalAmount(allTaskReports);
|
||||||
taskDispatchDetailDO.setNumAmount(Integer.parseInt(amount.toString()));
|
taskDispatchDetailDO.setNumAmount(Integer.parseInt(amount.toString()));
|
||||||
@ -2384,7 +2394,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
taskDispatchDetailDO.setPercentage("0%");
|
taskDispatchDetailDO.setPercentage("0%");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (now.isAfter(taskDispatchDetailDO.getEndTime())) {
|
if (now.toLocalDate().isAfter(taskDispatchDetailDO.getEndTime().toLocalDate())) {
|
||||||
taskDispatchDetailDO.setReportFlag("1");
|
taskDispatchDetailDO.setReportFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2408,9 +2418,13 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
.collect(Collectors.groupingBy(TaskDispatchDetailDO::getDetailOwnerId));
|
.collect(Collectors.groupingBy(TaskDispatchDetailDO::getDetailOwnerId));
|
||||||
|
|
||||||
// 2. 对每个分组进行合并计算,生成新的合并后的对象
|
// 2. 对每个分组进行合并计算,生成新的合并后的对象
|
||||||
return groupedMap.entrySet().stream()
|
List<TaskDispatchDetailDO> collect = groupedMap.entrySet().stream()
|
||||||
.map(entry -> mergeGroup(entry.getKey(), entry.getValue()))
|
.map(entry -> mergeGroup(entry.getKey(), entry.getValue()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
if (pageReqVO.getStatusflag()){
|
||||||
|
return collect.stream().filter(taskDispatchDetailDO -> !"已完成".equals(taskDispatchDetailDO.getReport())).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return collect;
|
||||||
|
|
||||||
}
|
}
|
||||||
private TaskDispatchDetailDO mergeGroup(Long detailOwnerId, List<TaskDispatchDetailDO> groupList) {
|
private TaskDispatchDetailDO mergeGroup(Long detailOwnerId, List<TaskDispatchDetailDO> groupList) {
|
||||||
@ -2423,7 +2437,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
merged.setWorkingHour(totalWorkTime);
|
merged.setWorkingHour(totalWorkTime);
|
||||||
|
merged.setBgAmount(groupList.size());
|
||||||
// 2. reportFlag 进行或运算(只要有一个是1就是1)
|
// 2. reportFlag 进行或运算(只要有一个是1就是1)
|
||||||
boolean hasReportFlagOne = groupList.stream()
|
boolean hasReportFlagOne = groupList.stream()
|
||||||
.anyMatch(item -> item.getReportFlag() != null && "1".equals(item.getReportFlag()));
|
.anyMatch(item -> item.getReportFlag() != null && "1".equals(item.getReportFlag()));
|
||||||
@ -2451,14 +2465,12 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
merged.setPercentage("0%"); // 0%
|
merged.setPercentage("0%"); // 0%
|
||||||
} else {
|
} else {
|
||||||
BigDecimal totalAmount = groupList.stream()
|
BigDecimal totalAmount = groupList.stream()
|
||||||
.map(TaskDispatchDetailDO::getAmount)
|
.map(TaskDispatchDetailDO::getWorkTime)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.map(BigDecimal::new) // 将 Integer 转换为 BigDecimal
|
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
BigDecimal numAmount = groupList.stream()
|
BigDecimal numAmount = groupList.stream()
|
||||||
.map(TaskDispatchDetailDO::getNumAmount)
|
.map(TaskDispatchDetailDO::getBgWorkTime)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.map(BigDecimal::new) // 将 Integer 转换为 BigDecimal
|
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
int percentage = calculatePercentage(numAmount,
|
int percentage = calculatePercentage(numAmount,
|
||||||
@ -2502,16 +2514,21 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
List<TaskReportDO> taskReportDOS,
|
List<TaskReportDO> taskReportDOS,
|
||||||
LocalDateTime now) {
|
LocalDateTime now) {
|
||||||
if (Integer.valueOf(2).equals(dispatchDetailDO.getProcedureStatus())) {
|
if (Integer.valueOf(2).equals(dispatchDetailDO.getProcedureStatus())) {
|
||||||
dispatchDetailDO.setReport("已报工");
|
dispatchDetailDO.setReport("已完成");
|
||||||
|
|
||||||
if (taskReportDOS != null) {
|
if (taskReportDOS != null) {
|
||||||
LocalDateTime maxEndTime = findMaxEndTime(taskReportDOS);
|
LocalDateTime maxEndTime = findMaxEndTime(taskReportDOS);
|
||||||
if (maxEndTime != null && maxEndTime.isAfter(dispatchDetailDO.getEndTime())) {
|
if (maxEndTime != null && maxEndTime.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) {
|
||||||
dispatchDetailDO.setReportFlag("1");
|
dispatchDetailDO.setReportFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (now.isAfter(dispatchDetailDO.getEndTime())) {
|
if (ObjectUtil.isNotEmpty(taskReportDOS)){
|
||||||
|
dispatchDetailDO.setReport("已报工");
|
||||||
|
}else {
|
||||||
|
dispatchDetailDO.setReport("未报工");
|
||||||
|
}
|
||||||
|
if (now.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) {
|
||||||
dispatchDetailDO.setReportFlag("1");
|
dispatchDetailDO.setReportFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2549,12 +2566,12 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService {
|
|||||||
dispatchDetailDO.setReceivingTime(arriveTime);
|
dispatchDetailDO.setReceivingTime(arriveTime);
|
||||||
|
|
||||||
// 检查是否超期
|
// 检查是否超期
|
||||||
if (arriveTime != null && arriveTime.isAfter(dispatchDetailDO.getEndTime())) {
|
if (arriveTime != null && arriveTime.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) {
|
||||||
dispatchDetailDO.setReceivingFlag("1");
|
dispatchDetailDO.setReceivingFlag("1");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 未收货或状态不是3,检查是否超期
|
// 未收货或状态不是3,检查是否超期
|
||||||
if (now.isAfter(dispatchDetailDO.getEndTime())) {
|
if (now.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) {
|
||||||
dispatchDetailDO.setReceivingFlag("1");
|
dispatchDetailDO.setReceivingFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2610,7 +2627,7 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
.atZone(ZoneId.systemDefault())
|
.atZone(ZoneId.systemDefault())
|
||||||
.toLocalDateTime();
|
.toLocalDateTime();
|
||||||
|
|
||||||
if (endLocalDateTime.isAfter(planSubDetailDO.getTwoDimDate())) {
|
if (endLocalDateTime.toLocalDate().isAfter(planSubDetailDO.getTwoDimDate().toLocalDate())) {
|
||||||
planSubDetailDO.setStatus("已延期");
|
planSubDetailDO.setStatus("已延期");
|
||||||
planSubDetailDO.setStatusFlag("1");
|
planSubDetailDO.setStatusFlag("1");
|
||||||
}
|
}
|
||||||
@ -2627,7 +2644,7 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
new BigDecimal(planSubDetailDO.getDesignNum()));
|
new BigDecimal(planSubDetailDO.getDesignNum()));
|
||||||
planSubDetailDO.setPercentage(calculatePercentage + "%");
|
planSubDetailDO.setPercentage(calculatePercentage + "%");
|
||||||
|
|
||||||
if (LocalDateTime.now().isAfter(planSubDetailDO.getTwoDimDate())) {
|
if (LocalDateTime.now().toLocalDate().isAfter(planSubDetailDO.getTwoDimDate().toLocalDate())) {
|
||||||
planSubDetailDO.setStatus("已延期");
|
planSubDetailDO.setStatus("已延期");
|
||||||
planSubDetailDO.setStatusFlag("1");
|
planSubDetailDO.setStatusFlag("1");
|
||||||
}
|
}
|
||||||
@ -2664,12 +2681,12 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
// 如果到货时间晚于要求时间,标记为延迟
|
// 如果到货时间晚于要求时间,标记为延迟
|
||||||
if (maxRequireTime != null && maxRequireTime.isAfter(maxArriveTime)) {
|
if (maxRequireTime != null && maxRequireTime.toLocalDate().isAfter(maxArriveTime.toLocalDate())) {
|
||||||
outsourcedTask.setStatusFlag("1");
|
outsourcedTask.setStatusFlag("1");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 当前时间晚于最大要求时间,标记为延迟
|
// 当前时间晚于最大要求时间,标记为延迟
|
||||||
if (LocalDateTime.now().isAfter(maxArriveTime)) {
|
if (LocalDateTime.now().toLocalDate().isAfter(maxArriveTime.toLocalDate())) {
|
||||||
outsourcedTask.setStatusFlag("1");
|
outsourcedTask.setStatusFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2736,7 +2753,7 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
.eq(PgMasterLineDO::getActive, "END")
|
.eq(PgMasterLineDO::getActive, "END")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
private void setProcessingPlanStatus(PlanSubDetailDO processingPlan, List<TaskDispatchDetailDO> dispatchDetailDOList) {
|
private void setProcessingPlanStatus(PlanSubDetailDO processingPlan, List<TaskDispatchDetailDO> dispatchDetailDOList,List<TaskReportDO> taskReportDOS) {
|
||||||
if (CollectionUtils.isEmpty(dispatchDetailDOList)) {
|
if (CollectionUtils.isEmpty(dispatchDetailDOList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2746,7 +2763,7 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
if (allCompleted) {
|
if (allCompleted) {
|
||||||
processingPlan.setStatus("已完成");
|
processingPlan.setStatus("已完成");
|
||||||
} else {
|
} else {
|
||||||
if (hasThree(dispatchDetailDOList)) {
|
if (ObjectUtil.isNotEmpty(taskReportDOS)) {
|
||||||
processingPlan.setStatus("已开始");
|
processingPlan.setStatus("已开始");
|
||||||
processingPlan.setStatusFlag("0");
|
processingPlan.setStatusFlag("0");
|
||||||
} else {
|
} else {
|
||||||
@ -2762,6 +2779,51 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.anyMatch(detail -> detail.getProcedureStatus() == 2);
|
.anyMatch(detail -> detail.getProcedureStatus() == 2);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 处理进行中的任务状态
|
||||||
|
*/
|
||||||
|
private void processInProgressAssemblyTask(PlanSubDetailDO processingPlan,
|
||||||
|
List<TaskDispatchDetailDO> dispatchDetailDOS,
|
||||||
|
List<TaskReportDO> taskReportDOS) {
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(taskReportDOS)) {
|
||||||
|
processingPlan.setProductionSchedule("0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isEmpty(dispatchDetailDOS)){
|
||||||
|
processingPlan.setProductionSchedule("0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<TaskDispatchDetailDO> collect = dispatchDetailDOS.stream().filter(detailDO -> detailDO.getProcedureStatus() == 2).collect(Collectors.toList());
|
||||||
|
//已报工完的工时
|
||||||
|
if (ObjectUtil.isNotEmpty(collect)){
|
||||||
|
BigDecimal workTime = calculateDispatchTime(collect);
|
||||||
|
Set<Long> dispatchDetailIdSet = collect.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(TaskDispatchDetailDO::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
// 过滤 taskReportDOS
|
||||||
|
List<TaskReportDO> filteredReports = taskReportDOS.stream()
|
||||||
|
.filter(report -> !dispatchDetailIdSet.contains(report.getDispatchDetailId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
BigDecimal bigDecimal = calculateReportedTime(filteredReports);
|
||||||
|
bigDecimal = bigDecimal.add(workTime);
|
||||||
|
BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS);
|
||||||
|
Integer percentage = calculatePercentage(bigDecimal, dispatchAmount);
|
||||||
|
processingPlan.setProductionSchedule(percentage.toString());
|
||||||
|
}else{
|
||||||
|
BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS);
|
||||||
|
BigDecimal reportedAmount = calculateReportedTime(taskReportDOS);
|
||||||
|
Integer percentage = calculatePercentage(reportedAmount, dispatchAmount);
|
||||||
|
processingPlan.setProductionSchedule(percentage.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS);
|
||||||
|
// BigDecimal reportedAmount = calculateReportedTime(taskReportDOS);
|
||||||
|
// Integer percentage = calculatePercentage(reportedAmount, dispatchAmount);
|
||||||
|
//
|
||||||
|
// processingPlan.setProductionSchedule(percentage.toString());
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 处理进行中的任务状态
|
* 处理进行中的任务状态
|
||||||
*/
|
*/
|
||||||
@ -2796,6 +2858,18 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 计算已报工工时
|
||||||
|
*/
|
||||||
|
private BigDecimal calculateReportedTime(List<TaskReportDO> taskReportDOS) {
|
||||||
|
return Optional.ofNullable(taskReportDOS)
|
||||||
|
.orElse(Collections.emptyList())
|
||||||
|
.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(TaskReportDO::getWorkTime)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 计算已报工数量
|
* 计算已报工数量
|
||||||
*/
|
*/
|
||||||
@ -2838,7 +2912,7 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
return taskReportMapper.selectList(
|
return taskReportMapper.selectList(
|
||||||
new LambdaQueryWrapper<TaskReportDO>()
|
new LambdaQueryWrapper<TaskReportDO>()
|
||||||
.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds)
|
.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds)
|
||||||
.eq(TaskReportDO::getHasReport, 1)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// 处理时间相关逻辑
|
// 处理时间相关逻辑
|
||||||
@ -2875,18 +2949,18 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
// 如果到货时间晚于要求时间,标记为延迟
|
// 如果到货时间晚于要求时间,标记为延迟
|
||||||
if (maxArriveTime != null && maxArriveTime.isAfter(maxRequireTime)) {
|
if (maxArriveTime != null && maxArriveTime.toLocalDate().isAfter(maxRequireTime.toLocalDate())) {
|
||||||
outsourcedTask.setStatusFlag("1");
|
outsourcedTask.setStatusFlag("1");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 当前时间晚于最大要求时间,标记为延迟
|
// 当前时间晚于最大要求时间,标记为延迟
|
||||||
if (LocalDateTime.now().isAfter(maxRequireTime)) {
|
if (LocalDateTime.now().toLocalDate().isAfter(maxRequireTime.toLocalDate())) {
|
||||||
outsourcedTask.setStatusFlag("1");
|
outsourcedTask.setStatusFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void setOutsourcedTaskStatus(PlanSubDetailDO outsourcedTask, List<PurchaseOrderNoDetailDO> orderNoDetailDOS,List<TaskDispatchDetailDO> dispatchDetailDOS) {
|
private void setOutsourcedTaskStatus(PlanSubDetailDO outsourcedTask, List<PurchaseOrderNoDetailDO> orderNoDetailDOS,List<TaskDispatchDetailDO> dispatchDetailDOS,List<PurchaseOrderMakeDetailDO> purchaseOrderMakeDetailDOS) {
|
||||||
if (CollectionUtils.isEmpty(orderNoDetailDOS)||CollectionUtils.isEmpty(dispatchDetailDOS)) {
|
if (CollectionUtils.isEmpty(dispatchDetailDOS)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 判断所有采购订单是否都已收货
|
// 判断所有采购订单是否都已收货
|
||||||
@ -2894,15 +2968,30 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
if (allCompleted) {
|
if (allCompleted) {
|
||||||
outsourcedTask.setStatus("已完成");
|
outsourcedTask.setStatus("已完成");
|
||||||
} else {
|
} else {
|
||||||
if (hasStatusThree(orderNoDetailDOS)) {
|
if (ObjectUtil.isNotEmpty(dispatchDetailDOS)){
|
||||||
outsourcedTask.setStatus("已开始");
|
if (ObjectUtil.isNotEmpty(purchaseOrderMakeDetailDOS)) {
|
||||||
outsourcedTask.setStatusFlag("0");
|
outsourcedTask.setStatus("已开始");
|
||||||
} else {
|
outsourcedTask.setStatusFlag("0");
|
||||||
|
} else {
|
||||||
|
outsourcedTask.setStatus("未开始");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
outsourcedTask.setStatus("未开始");
|
outsourcedTask.setStatus("未开始");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 计算派工数量
|
// 计算派工数量
|
||||||
|
private BigDecimal calculateDispatchTime(List<TaskDispatchDetailDO> detailDOS) {
|
||||||
|
return Optional.ofNullable(detailDOS)
|
||||||
|
.orElse(Collections.emptyList())
|
||||||
|
.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.map(TaskDispatchDetailDO::getWorkTime)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
}
|
||||||
|
// 计算派工数量
|
||||||
private BigDecimal calculateDispatchAmount(List<TaskDispatchDetailDO> detailDOS) {
|
private BigDecimal calculateDispatchAmount(List<TaskDispatchDetailDO> detailDOS) {
|
||||||
return Optional.ofNullable(detailDOS)
|
return Optional.ofNullable(detailDOS)
|
||||||
.orElse(Collections.emptyList())
|
.orElse(Collections.emptyList())
|
||||||
@ -2941,6 +3030,14 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.allMatch(item -> item.getReceivingStatus() == 3)&&purchaseOrderNoDetailDOS.size()==dispatchDetailDOS.size();
|
.allMatch(item -> item.getReceivingStatus() == 3)&&purchaseOrderNoDetailDOS.size()==dispatchDetailDOS.size();
|
||||||
}
|
}
|
||||||
|
// 查询采购订单送审详情
|
||||||
|
private List<PurchaseOrderMakeDetailDO> queryPurchaseOrderMakeDetails(Long projectSubId) {
|
||||||
|
return purchaseOrderMakeDetailMapper.selectList(
|
||||||
|
new LambdaQueryWrapper<PurchaseOrderMakeDetailDO>()
|
||||||
|
.eq(PurchaseOrderMakeDetailDO::getProjectPlanSubId, projectSubId)
|
||||||
|
.isNotNull(PurchaseOrderMakeDetailDO::getBoomDetailId)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private List<PurchaseOrderNoDetailDO> queryPurchaseOrderDetails(Long projectSubId) {
|
private List<PurchaseOrderNoDetailDO> queryPurchaseOrderDetails(Long projectSubId) {
|
||||||
return purchaseOrderNoDetailMapper.selectList(
|
return purchaseOrderNoDetailMapper.selectList(
|
||||||
@ -2992,7 +3089,7 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 3. 提取状态判断逻辑
|
// 3. 提取状态判断逻辑
|
||||||
private void setTaskStatus(PlanSubDetailDO designTask, List<PlanSubDetailDO> planSubDetail) {
|
private void setTaskStatus(PlanSubDetailDO designTask, List<PlanSubDetailDO> planSubDetail,Long projectSubId) {
|
||||||
if (CollectionUtils.isEmpty(planSubDetail)) {
|
if (CollectionUtils.isEmpty(planSubDetail)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3005,17 +3102,33 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
designTask.setStatus("已完成");
|
designTask.setStatus("已完成");
|
||||||
designTask.setProductionSchedule("100");
|
designTask.setProductionSchedule("100");
|
||||||
} else {
|
} else {
|
||||||
boolean hasStarted = planSubDetail.stream()
|
// boolean hasStarted = planSubDetail.stream()
|
||||||
.filter(Objects::nonNull)
|
// .filter(Objects::nonNull)
|
||||||
.anyMatch(item -> item.getIsOverProcess() == 1);
|
// .anyMatch(item -> item.getIsOverProcess() == 1);
|
||||||
|
LambdaQueryWrapper<ProcessDesignDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(ProcessDesignDO::getProjectSubId, projectSubId);
|
||||||
|
List<ProcessDesignDO> processDesigns = processDesignMapper.selectList(queryWrapper);
|
||||||
|
List<Long> processDesignIds = processDesigns.stream()
|
||||||
|
.map(ProcessDesignDO::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
designTask.setStatus(hasStarted ? "已开始" : "未开始");
|
// 获取工艺设计进度列表
|
||||||
if (hasStarted) {
|
List<ProcessDesignProgressDO> progressList = getProcessDesignProgressList(processDesignIds);
|
||||||
designTask.setStatusFlag("0");
|
designTask.setStatus(ObjectUtil.isNotEmpty(progressList) ? "已开始" : "未开始");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 获取工艺设计进度列表
|
||||||
|
*/
|
||||||
|
private List<ProcessDesignProgressDO> getProcessDesignProgressList(List<Long> processDesignIds) {
|
||||||
|
if (ObjectUtil.isEmpty(processDesignIds)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
LambdaQueryWrapper<ProcessDesignProgressDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.in(ProcessDesignProgressDO::getProcessDesignId, processDesignIds);
|
||||||
|
return processDesignProgressMapper.selectList(queryWrapper);
|
||||||
|
}
|
||||||
// 4. 提取进度计算逻辑
|
// 4. 提取进度计算逻辑
|
||||||
private void calculateAndSetProgress(PlanSubDetailDO designTask, Long projectSubId) {
|
private void calculateAndSetProgress(PlanSubDetailDO designTask, Long projectSubId) {
|
||||||
if (projectSubId == null) return;
|
if (projectSubId == null) return;
|
||||||
@ -3031,7 +3144,12 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
designTask.setProductionSchedule("0");
|
designTask.setProductionSchedule("0");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
List<ProcessDesignDO> collect = processDesigns.stream()
|
||||||
|
.filter(processDesignDO -> processDesignDO.getIsOverProcess() != 1).collect(Collectors.toList());
|
||||||
|
List<ProcessDesignDO> collect1 = processDesigns.stream()
|
||||||
|
.filter(processDesignDO -> processDesignDO.getIsOverProcess() == 1).collect(Collectors.toList());
|
||||||
List<Long> ids = processDesigns.stream()
|
List<Long> ids = processDesigns.stream()
|
||||||
|
.filter(processDesignDO -> processDesignDO.getIsOverProcess() != 1)
|
||||||
.map(ProcessDesignDO::getId)
|
.map(ProcessDesignDO::getId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
@ -3048,7 +3166,28 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
wrapper1.last("limit 1");
|
wrapper1.last("limit 1");
|
||||||
PlanSubDO subDO = planSubMapper.selectOne(wrapper1);
|
PlanSubDO subDO = planSubMapper.selectOne(wrapper1);
|
||||||
|
|
||||||
BigDecimal currentTime = calculateCurrentTime(subDO).multiply(new BigDecimal("8"));
|
BigDecimal currentTime = calculateCurrentTime(subDO,collect);
|
||||||
|
for (ProcessDesignDO processDesignDO : collect1) {
|
||||||
|
if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
|
||||||
|
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getThreeDimNum().toString()).multiply(new BigDecimal("8")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString()));
|
||||||
|
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getBlankNum().toString()).multiply(new BigDecimal("8")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString()));
|
||||||
|
totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getTwoDimNum().toString()).multiply(new BigDecimal("8")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
currentTime = currentTime.multiply(new BigDecimal("8"));
|
||||||
Integer percentage = calculatePercentage(totalWorkTime, currentTime);
|
Integer percentage = calculatePercentage(totalWorkTime, currentTime);
|
||||||
|
|
||||||
designTask.setProductionSchedule(percentage.toString());
|
designTask.setProductionSchedule(percentage.toString());
|
||||||
@ -3093,7 +3232,7 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
designTask.setStatusFlag(isOverdue ? "1" : "");
|
designTask.setStatusFlag(isOverdue ? "1" : "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (maxTime != null && now.isAfter(maxTime)) {
|
} else if (maxTime != null && now.toLocalDate().isAfter(maxTime.toLocalDate())) {
|
||||||
designTask.setStatusFlag("1");
|
designTask.setStatusFlag("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3119,26 +3258,31 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 计算总工时(将三个数值相加)
|
* 计算当前工时(将三个数值相加)
|
||||||
*/
|
*/
|
||||||
private BigDecimal calculateCurrentTime(PlanSubDO subDO) {
|
private BigDecimal calculateCurrentTime(PlanSubDO subDO,List<ProcessDesignDO> collect) {
|
||||||
BigDecimal currentTime = BigDecimal.ZERO;
|
BigDecimal currentTime = BigDecimal.ZERO;
|
||||||
|
for (ProcessDesignDO processDesignDO : collect) {
|
||||||
if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) {
|
if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){
|
||||||
currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString()));
|
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){
|
||||||
|
if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) {
|
||||||
|
currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) {
|
|
||||||
currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) {
|
|
||||||
currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return currentTime;
|
return currentTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断 Date 是否在 LocalDateTime 之后
|
* 判断 Date 是否在 LocalDateTime 之后
|
||||||
*/
|
*/
|
||||||
@ -3151,7 +3295,7 @@ if (ObjectUtil.isNotEmpty(progressList)){
|
|||||||
.atZone(ZoneId.systemDefault())
|
.atZone(ZoneId.systemDefault())
|
||||||
.toLocalDateTime();
|
.toLocalDateTime();
|
||||||
|
|
||||||
return dateAsLocalDateTime.isAfter(localDateTime);
|
return dateAsLocalDateTime.toLocalDate().isAfter(localDateTime.toLocalDate());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -112,4 +112,6 @@ public interface TaskDispatchService {
|
|||||||
PageResult<TaskDispatchDetailDO> taskPage( TaskPlanJDBaoBiaoPageReqVO pageReqVO);
|
PageResult<TaskDispatchDetailDO> taskPage( TaskPlanJDBaoBiaoPageReqVO pageReqVO);
|
||||||
|
|
||||||
PageResult<TaskDispatchDetailDO> taskBbPage(TaskPlanJDBaoBiaoPageReqVO pageReqVO);
|
PageResult<TaskDispatchDetailDO> taskBbPage(TaskPlanJDBaoBiaoPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
PageResult<TaskDispatchDetailDO> getTaskDispatchPageDetailXl(TaskDispatchDetailPageReqVO pageReqVO);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -264,13 +264,19 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
|||||||
for (TaskDispatchDetailDO dispatchDetailDO : list) {
|
for (TaskDispatchDetailDO dispatchDetailDO : list) {
|
||||||
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(dispatchDetailDO.getId());
|
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(dispatchDetailDO.getId());
|
||||||
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
|
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
|
||||||
|
ProcedureDO procedureDO = procedureMapper.selectById(dispatchDetailDO.getProcedureId());
|
||||||
if ("false".equals(dispatchDetailDO.getIsOutsourcing())){
|
if ("false".equals(dispatchDetailDO.getIsOutsourcing())){
|
||||||
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO.getPurchaseNo())){
|
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO.getPurchaseNo())){
|
||||||
ProcedureDO procedureDO = procedureMapper.selectById(dispatchDetailDO.getProcedureId());
|
|
||||||
if (ObjectUtil.isNotEmpty(procedureDO)){
|
if (ObjectUtil.isNotEmpty(procedureDO)){
|
||||||
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做零件采购,不允许去掉外协,请确认!"));
|
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做零件采购,不允许去掉外协,请确认!"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
// if (taskDispatchDetailDO.getInReportProcess()!=0){
|
||||||
|
// if (ObjectUtil.isNotEmpty(procedureDO)) {
|
||||||
|
// throw exception(new ErrorCode(400, "该工序" + procedureDO.getName() + "已做下料,不允许修改外协!"));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
// if (isDetailChanged(taskDispatchDetailDO, dispatchDetailDO)) {
|
// if (isDetailChanged(taskDispatchDetailDO, dispatchDetailDO)) {
|
||||||
// if (taskDispatchDetailDO.getPlanStatus()==1){
|
// if (taskDispatchDetailDO.getPlanStatus()==1){
|
||||||
@ -688,6 +694,9 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)&&taskDispatchDetailDO.getReportProcess()!=0){
|
||||||
|
// throw exception(new ErrorCode(400,"该工序已做下料报工,不允许删除"));
|
||||||
|
// }
|
||||||
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.eq(TaskDispatchDO::getId, taskDispatchDetailDO.getDispatchId());
|
queryWrapper.eq(TaskDispatchDO::getId, taskDispatchDetailDO.getDispatchId());
|
||||||
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne(queryWrapper);
|
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne(queryWrapper);
|
||||||
@ -1054,7 +1063,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
|||||||
// bdgzsomthingMapper.updateById(bdgzsomthingDO);
|
// bdgzsomthingMapper.updateById(bdgzsomthingDO);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && taskDispatchDetailDO.getTestYn().equals("N")&&taskDispatchDetailDO.getCheckYn().equals("0")){
|
if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && taskDispatchDetailDO.getTestYn().equals("N")&&taskDispatchDetailDO.getCheckYn()==0){
|
||||||
pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId(),taskDispatchDetailDO);
|
pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId(),taskDispatchDetailDO);
|
||||||
}
|
}
|
||||||
// if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && isBomDetailProductionOver){
|
// if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && isBomDetailProductionOver){
|
||||||
@ -1571,6 +1580,22 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
|||||||
return taskDispatchDetailMapper.taskBbPage(pageReqVO);
|
return taskDispatchDetailMapper.taskBbPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<TaskDispatchDetailDO> getTaskDispatchPageDetailXl(TaskDispatchDetailPageReqVO pageReqVO) {
|
||||||
|
List<FpUserDetailDO> fpUserDetailDOS = fpUserDetailMapper.selectList(new LambdaQueryWrapper<FpUserDetailDO>().eq(FpUserDetailDO::getBusyId, pageReqVO.getOwner()));
|
||||||
|
// Set<String> postIds = new HashSet<>();
|
||||||
|
// Set<String> procedureIds = new HashSet<>();
|
||||||
|
Map<String,Set<Long>> postIds = new HashMap<>();
|
||||||
|
for (FpUserDetailDO fpUserDetailDO : fpUserDetailDOS) {
|
||||||
|
if (ObjectUtil.isNotEmpty(fpUserDetailDO.getPostId())&&ObjectUtil.isNotEmpty(fpUserDetailDO.getProcCd())){
|
||||||
|
postIds.put(fpUserDetailDO.getPostId(), fpUserDetailDO.getProcCd());
|
||||||
|
}else if (ObjectUtil.isNotEmpty(fpUserDetailDO.getPostId())){
|
||||||
|
postIds.put(fpUserDetailDO.getPostId(), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return taskDispatchDetailMapper.selectPageXl(pageReqVO, postIds);
|
||||||
|
}
|
||||||
|
|
||||||
private void updateAssembleDetail(OperateTypeEnum operateTypeEnum,Long dispatchId, List<TaskDispatchDetailOwnerDO> list) {
|
private void updateAssembleDetail(OperateTypeEnum operateTypeEnum,Long dispatchId, List<TaskDispatchDetailOwnerDO> list) {
|
||||||
list.forEach(o -> o.setDispatchId(dispatchId));
|
list.forEach(o -> o.setDispatchId(dispatchId));
|
||||||
|
|
||||||
@ -1685,15 +1710,23 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
|||||||
list = list.stream()
|
list = list.stream()
|
||||||
.peek(item -> {
|
.peek(item -> {
|
||||||
item.setDispatchId(dispatchId);
|
item.setDispatchId(dispatchId);
|
||||||
|
ProcedureDO procedureDO = procedureMapper.selectById(item.getProcedureId());
|
||||||
if ("true".equals(item.getIsOutsourcing())) {
|
if ("true".equals(item.getIsOutsourcing())) {
|
||||||
// 外协处理逻辑
|
// 外协处理逻辑
|
||||||
item.setIsOutsourcing("Y");
|
item.setIsOutsourcing("Y");
|
||||||
item.setIsReport(0);
|
item.setIsReport(0);
|
||||||
}else {
|
// if (ObjectUtil.isNotEmpty(procedureDO)) {
|
||||||
|
// if ("下料1".equals(procedureDO.getName())||"下料2".equals(procedureDO.getName())) {
|
||||||
|
// item.setIsInProcess("N");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}else {
|
||||||
item.setIsOutsourcing("N");
|
item.setIsOutsourcing("N");
|
||||||
ProcedureDO procedureDO = procedureMapper.selectById(item.getProcedureId());
|
|
||||||
if (ObjectUtil.isNotEmpty(procedureDO)){
|
if (ObjectUtil.isNotEmpty(procedureDO)){
|
||||||
item.setIsReport(procedureDO.getIsReport());
|
item.setIsReport(procedureDO.getIsReport());
|
||||||
|
// if ("下料1".equals(procedureDO.getName())||"下料2".equals(procedureDO.getName())) {
|
||||||
|
// item.setIsInProcess("Y");
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ("true".equals(item.getIsFoam())) {
|
if ("true".equals(item.getIsFoam())) {
|
||||||
|
|||||||
@ -18,78 +18,78 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 发货编号 </td>
|
<td colspan="2"> 发货编号 </td>
|
||||||
<td colspan="7">
|
<td colspan="3">
|
||||||
<span>{{ formData.code }}</span>
|
<span>{{ formData.code }}</span>
|
||||||
</td>
|
</td>
|
||||||
<td colspan="2">合同号</td>
|
<td>合同号</td>
|
||||||
<td colspan="2">{{ formData.contractNo }}</td>
|
<td colspan="2">{{ formData.contractNo }}</td>
|
||||||
<td colspan="2"> 性质: </td>
|
<td> 性质: </td>
|
||||||
<td colspan="4">{{ formData.property }} </td>
|
<td>{{ formData.property }} </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 发货日期 </td>
|
<td colspan="2"> 发货日期 </td>
|
||||||
<td colspan="7">
|
<td colspan="3">
|
||||||
{{ formatDate(new Date(formData.deliverDate), 'YYYY-MM-DD') }}
|
{{ formatDate(new Date(formData.deliverDate), 'YYYY-MM-DD') }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="2"> 联系人</td>
|
<td> 联系人</td>
|
||||||
<td colspan="2">{{ formData.receivePersonName }} </td>
|
<td>{{ formData.receivePersonName }} </td>
|
||||||
<td colspan="2"> 电话 </td>
|
<td> 电话 </td>
|
||||||
<td colspan="4">{{ formData.receivePersonMobile }} </td>
|
<td colspan="2">{{ formData.receivePersonMobile }} </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 收货单位 </td>
|
<td colspan="2"> 收货单位 </td>
|
||||||
<td colspan="17">{{ formData.customerName }}</td>
|
<td colspan="8">{{ formData.customerName }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 收货地址 </td>
|
<td colspan="2"> 收货地址 </td>
|
||||||
<td colspan="17">{{ formData.receiveAddress }}</td>
|
<td colspan="8">{{ formData.receiveAddress }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 项目名称</td>
|
<td colspan="2"> 项目名称</td>
|
||||||
<td colspan="9" :style="fontSizeStyle">{{ formData.projectName }}</td>
|
<td colspan="4">{{ formData.projectName }}</td>
|
||||||
<td colspan="2">重量(T)</td>
|
<td>重量(T)</td>
|
||||||
<td colspan="2">{{ formData.transportWeight }}</td>
|
<td>{{ formData.transportWeight }}</td>
|
||||||
<td colspan="2">位置(米)</td>
|
<td>位置(米)</td>
|
||||||
<td colspan="2">{{ formData.transportSize }}</td>
|
<td>{{ formData.transportSize }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="7"> 内容清单 </td>
|
<td colspan="4"> 内容清单 </td>
|
||||||
<td colspan="2"> 单位 </td>
|
<td> 单位 </td>
|
||||||
<td colspan="2"> 数量 </td>
|
<td> 数量 </td>
|
||||||
<td colspan="2">重量(T)</td>
|
<td>重量(T)</td>
|
||||||
<td colspan="2">尺寸(米)</td>
|
<td>尺寸(米)</td>
|
||||||
<td colspan="4"> 备注 </td>
|
<td colspan="2"> 备注 </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-show="subTotalAmount <= splitThreshold" v-for="(item, index) in formData.deliverOrderSubs" :key="index">
|
<tr v-show="subTotalAmount <= splitThreshold" v-for="(item, index) in formData.deliverOrderSubs" :key="index">
|
||||||
<td colspan="7" v-if="item.category == 'DELIVER_LIST'">{{ item.name }}</td>
|
<td colspan="4" v-if="item.category == 'DELIVER_LIST'">{{ item.name }}</td>
|
||||||
<td colspan="7" v-if="item.category== 'OTHER_LIST' && item.subType == 1">备件:{{ item.name }}</td>
|
<td colspan="4" v-if="item.category== 'OTHER_LIST' && item.subType == 1">备件:{{ item.name }}</td>
|
||||||
<td colspan="7" v-if="item.category== 'OTHER_LIST' && item.subType == 2">刀具:{{ item.name }}</td>
|
<td colspan="4" v-if="item.category== 'OTHER_LIST' && item.subType == 2">刀具:{{ item.name }}</td>
|
||||||
<td colspan="2">{{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, item.unit) }}</td>
|
<td>{{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, item.unit) }}</td>
|
||||||
<td colspan="2">{{ item.amount }}</td>
|
<td>{{ item.amount }}</td>
|
||||||
<td colspan="2">{{ item.weight }}</td>
|
<td>{{ item.weight }}</td>
|
||||||
<td colspan="2">{{ item.size }}</td>
|
<td>{{ item.size }}</td>
|
||||||
<td colspan="4">{{ item.remark }}</td>
|
<td colspan="2">{{ item.remark }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-if="subTotalAmount > splitThreshold">
|
<tr v-if="subTotalAmount > splitThreshold">
|
||||||
<td colspan="7">详见清单附件</td>
|
<td colspan="4">详见清单附件</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
<td colspan="2"></td>
|
<td colspan="2"></td>
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="4"></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-for="item in num" :key="item">
|
<tr v-for="item in num" :key="item">
|
||||||
<td colspan="7"> </td>
|
<td colspan="4"> </td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
<td colspan="2"></td>
|
<td colspan="2"></td>
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="4"></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="19">{{formData.remark?formData.remark:' '}}</td>
|
<td colspan="10">{{formData.remark?formData.remark:' '}}</td>
|
||||||
<!-- <td></td>-->
|
<!-- <td></td>-->
|
||||||
<!-- <td></td>-->
|
<!-- <td></td>-->
|
||||||
<!-- <td></td>-->
|
<!-- <td></td>-->
|
||||||
@ -99,33 +99,33 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 发货单位 </td>
|
<td colspan="2"> 发货单位 </td>
|
||||||
<td colspan="7">
|
<td colspan="3">
|
||||||
{{ formData.deliverCompany }}
|
{{ formData.deliverCompany }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="2"> 联系人</td>
|
<td> 联系人</td>
|
||||||
<td colspan="2">{{ formData.deliverPersonName }} </td>
|
<td>{{ formData.deliverPersonName }} </td>
|
||||||
<td colspan="2"> 电话 </td>
|
<td> 电话 </td>
|
||||||
<td colspan="4">{{ formData.deliverPersonMobile }} </td>
|
<td colspan="2">{{ formData.deliverPersonMobile }} </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 司机姓名 </td>
|
<td colspan="2"> 司机姓名 </td>
|
||||||
<td colspan="5" v-if="formData.transportDriverName">
|
<td colspan="2" v-if="formData.transportDriverName">
|
||||||
{{ formData.transportDriverName }}
|
{{ formData.transportDriverName }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="5" v-else style="width: 60px"></td>
|
<td colspan="2" v-else style="width: 60px"></td>
|
||||||
<td colspan="2">车牌号</td>
|
<td>车牌号</td>
|
||||||
<td colspan="4" v-if="formData.transportBusNumber">{{ formData.transportBusNumber }}</td>
|
<td colspan="2" v-if="formData.transportBusNumber">{{ formData.transportBusNumber }}</td>
|
||||||
<td colspan="4" v-else style="width: 50px"></td>
|
<td colspan="2" v-else style="width: 50px"></td>
|
||||||
<td colspan="2"> 电话 </td>
|
<td> 电话 </td>
|
||||||
<td colspan="4" v-if="formData.transportDriverMobile">{{ formData.transportDriverMobile }}
|
<td colspan="2" v-if="formData.transportDriverMobile">{{ formData.transportDriverMobile }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="4" v-else style="width: 50px"></td>
|
<td colspan="2" v-else style="width: 50px"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="9">
|
<td colspan="5">
|
||||||
<div style="text-align: left">内部货物门点人签名:</div>
|
<div style="text-align: left">内部货物门点人签名:</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan="10">
|
<td colspan="5">
|
||||||
<div style="text-align: left">收货人签名:</div>
|
<div style="text-align: left">收货人签名:</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -151,77 +151,77 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 发货编号 </td>
|
<td colspan="2"> 发货编号 </td>
|
||||||
<td colspan="7">
|
<td colspan="3">
|
||||||
<span>{{ formData.code }}</span>
|
<span>{{ formData.code }}</span>
|
||||||
</td>
|
</td>
|
||||||
<td colspan="2">合同号</td>
|
<td>合同号</td>
|
||||||
<td colspan="2">{{ formData.contractNo }}</td>
|
<td colspan="2">{{ formData.contractNo }}</td>
|
||||||
<td colspan="2"> 性质: </td>
|
<td> 性质: </td>
|
||||||
<td colspan="4">{{ formData.property }} </td>
|
<td>{{ formData.property }} </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 发货日期 </td>
|
<td colspan="2"> 发货日期 </td>
|
||||||
<td colspan="7">
|
<td colspan="3">
|
||||||
{{ formatDate(new Date(formData.deliverDate), 'YYYY-MM-DD') }}
|
{{ formatDate(new Date(formData.deliverDate), 'YYYY-MM-DD') }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="2 "> 联系人</td>
|
<td> 联系人</td>
|
||||||
<td colspan="2">{{ formData.receivePersonName }} </td>
|
<td>{{ formData.receivePersonName }} </td>
|
||||||
<td colspan="2"> 电话 </td>
|
<td> 电话 </td>
|
||||||
<td colspan="4">{{ formData.receivePersonMobile }} </td>
|
<td colspan="2">{{ formData.receivePersonMobile }} </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 收货单位 </td>
|
<td colspan="2"> 收货单位 </td>
|
||||||
<td colspan="17">{{ formData.customerName }}</td>
|
<td colspan="8">{{ formData.customerName }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 收货地址 </td>
|
<td colspan="2"> 收货地址 </td>
|
||||||
<td colspan="17">{{ formData.receiveAddress }}</td>
|
<td colspan="8">{{ formData.receiveAddress }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 项目名称</td>
|
<td colspan="2"> 项目名称 收货单位</td>
|
||||||
<td colspan="9" :style="fontSizeStyle">{{ formData.projectName }}</td>
|
<td colspan="4" >{{ formData.projectName }}</td>
|
||||||
<td colspan="2">重量(T)</td>
|
<td>重量(T)</td>
|
||||||
<td colspan="2">{{ formData.transportWeight }}</td>
|
<td>{{ formData.transportWeight }}</td>
|
||||||
<td colspan="2">位置(米)</td>
|
<td>位置(米)</td>
|
||||||
<td colspan="2">{{ formData.transportSize }}</td>
|
<td>{{ formData.transportSize }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="7"> 内容清单 </td>
|
<td colspan="4"> 内容清单 </td>
|
||||||
<td colspan="2"> 单位 </td>
|
<td> 单位 </td>
|
||||||
<td colspan="2"> 数量 </td>
|
<td> 数量 </td>
|
||||||
<td colspan="2">重量(T)</td>
|
<td>重量(T)</td>
|
||||||
<td colspan="2">尺寸(米)</td>
|
<td>尺寸(米)</td>
|
||||||
<td colspan="4"> 备注 </td>
|
<td colspan="2"> 备注 </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-show="subTotalAmount <= splitThreshold" v-for="(item, index) in formData.deliverOrderSubs" :key="index">
|
<tr v-show="subTotalAmount <= splitThreshold" v-for="(item, index) in formData.deliverOrderSubs" :key="index">
|
||||||
<td colspan="7">{{ item.name }}</td>
|
<td colspan="4">{{ item.name }}</td>
|
||||||
<td colspan="2">{{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, item.unit) }}</td>
|
<td>{{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, item.unit) }}</td>
|
||||||
<td colspan="2">{{ item.amount }}</td>
|
<td>{{ item.amount }}</td>
|
||||||
<td colspan="2">{{ item.weight }}</td>
|
<td>{{ item.weight }}</td>
|
||||||
<td colspan="2">{{ item.size }}</td>
|
<td>{{ item.size }}</td>
|
||||||
<td colspan="4">{{ item.remark }}</td>
|
<td colspan="2">{{ item.remark }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-if="subTotalAmount > splitThreshold">
|
<tr v-if="subTotalAmount > splitThreshold">
|
||||||
<td colspan="7">详见清单附件</td>
|
<td colspan="4">详见清单附件</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
<td colspan="2"></td>
|
<td colspan="2"></td>
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="4"></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr v-for="item in num" :key="item">
|
<tr v-for="item in num" :key="item">
|
||||||
<td colspan="7"> </td>
|
<td colspan="4"> </td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
<td colspan="2"></td>
|
<td colspan="2"></td>
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="2"></td>
|
|
||||||
<td colspan="4"></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="19">{{formData.remark?formData.remark:' '}}</td>
|
<td colspan="10">{{formData.remark?formData.remark:' '}}</td>
|
||||||
<!-- <td></td>-->
|
<!-- <td></td>-->
|
||||||
<!-- <td></td>-->
|
<!-- <td></td>-->
|
||||||
<!-- <td></td>-->
|
<!-- <td></td>-->
|
||||||
@ -232,33 +232,33 @@
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 发货单位 </td>
|
<td colspan="2"> 发货单位 </td>
|
||||||
<td colspan="7">
|
<td colspan="3">
|
||||||
{{ formData.deliverCompany }}
|
{{ formData.deliverCompany }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="2"> 联系人</td>
|
<td> 联系人</td>
|
||||||
<td colspan="2">{{ formData.deliverPersonName }} </td>
|
<td>{{ formData.deliverPersonName }} </td>
|
||||||
<td colspan="2"> 电话 </td>
|
<td> 电话 </td>
|
||||||
<td colspan="4">{{ formData.deliverPersonMobile }} </td>
|
<td colspan="2">{{ formData.deliverPersonMobile }} </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"> 司机姓名 </td>
|
<td colspan="2"> 司机姓名 </td>
|
||||||
<td colspan="5" v-if="formData.transportDriverName">
|
<td colspan="2" v-if="formData.transportDriverName">
|
||||||
{{ formData.transportDriverName }}
|
{{ formData.transportDriverName }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="5" v-else style="width: 60px"></td>
|
<td colspan="2" v-else style="width: 60px"></td>
|
||||||
<td colspan="2">车牌号</td>
|
<td>车牌号</td>
|
||||||
<td colspan="4" v-if="formData.transportBusNumber">{{ formData.transportBusNumber }}</td>
|
<td colspan="2" v-if="formData.transportBusNumber">{{ formData.transportBusNumber }}</td>
|
||||||
<td colspan="4" v-else style="width: 50px"></td>
|
<td colspan="2" v-else style="width: 50px"></td>
|
||||||
<td colspan="2"> 电话 </td>
|
<td> 电话 </td>
|
||||||
<td colspan="4" v-if="formData.transportDriverMobile">{{ formData.transportDriverMobile }}
|
<td colspan="2" v-if="formData.transportDriverMobile">{{ formData.transportDriverMobile }}
|
||||||
</td>
|
</td>
|
||||||
<td colspan="4" v-else style="width: 50px"></td>
|
<td colspan="2" v-else style="width: 50px"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="9">
|
<td colspan="5">
|
||||||
<div style="text-align: left">内部货物门点人签名:</div>
|
<div style="text-align: left">内部货物门点人签名:</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan="10">
|
<td colspan="5">
|
||||||
<div style="text-align: left">收货人签名:</div>
|
<div style="text-align: left">收货人签名:</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -504,7 +504,6 @@ const onPrint = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
table {
|
table {
|
||||||
table-layout: fixed;
|
|
||||||
width: 100%; /* 让表格宽度100%占满其父元素宽度 */
|
width: 100%; /* 让表格宽度100%占满其父元素宽度 */
|
||||||
height: auto; /* 高度根据内容自适应 */
|
height: auto; /* 高度根据内容自适应 */
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@ -591,16 +590,7 @@ const subTotalAmount = ref(0)
|
|||||||
const num = ref(0)
|
const num = ref(0)
|
||||||
const splitThreshold = 6
|
const splitThreshold = 6
|
||||||
const logoDataUrl = ref('') // 存储Logo的Base64编码数据URL
|
const logoDataUrl = ref('') // 存储Logo的Base64编码数据URL
|
||||||
const fontSizeStyle = computed(() => {
|
|
||||||
const projectName = formData.value?.projectName ?? ''
|
|
||||||
return {
|
|
||||||
textAlign: 'left',
|
|
||||||
width: '100%',
|
|
||||||
fontSize: projectName.length > 20
|
|
||||||
? '13px !important'
|
|
||||||
: '14px !important'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (id: number) => {
|
const open = async (id: number) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
@ -692,7 +682,6 @@ onMounted(() => {})
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
table {
|
table {
|
||||||
table-layout: fixed;
|
|
||||||
width: 100%; /* 让表格宽度100%占满其父元素宽度 */
|
width: 100%; /* 让表格宽度100%占满其父元素宽度 */
|
||||||
height: auto; /* 高度根据内容自适应 */
|
height: auto; /* 高度根据内容自适应 */
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-card>
|
</el-card>
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table" height="250" border @row-click="rowClick" :cell-class-name="cellClassName5">
|
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table custom-hover-table" height="250" border @row-click="rowClick" :cell-class-name="cellClassName5">
|
||||||
<el-table-column type="index" width="100" fixed label="序号" align="center" />
|
<el-table-column type="index" width="100" fixed label="序号" align="center" />
|
||||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" />
|
<el-table-column label="子项目名称" align="center" prop="projectSubName" />
|
||||||
<el-table-column label="任务" align="center" prop="subType" />
|
<el-table-column label="任务" align="center" prop="subType" />
|
||||||
@ -34,6 +34,10 @@
|
|||||||
<el-card class="hl-card-info">
|
<el-card class="hl-card-info">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">工单信息</span>
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">工单信息</span>
|
||||||
|
<label style="display: inline-flex; align-items: center; margin-left: 40px;">
|
||||||
|
<el-checkbox class="large-checkbox" v-model="formData.statusflag" style="order: 1;" @change="change1"/>
|
||||||
|
<span style="order: 2; margin-left: 10px;">不显示已完成</span>
|
||||||
|
</label>
|
||||||
</template>
|
</template>
|
||||||
</el-card>
|
</el-card>
|
||||||
<ContentWrap v-if="type=='sheji'">
|
<ContentWrap v-if="type=='sheji'">
|
||||||
@ -59,6 +63,7 @@
|
|||||||
<el-table-column label="工序" align="center" prop="procedureName" />
|
<el-table-column label="工序" align="center" prop="procedureName" />
|
||||||
<el-table-column label="要求完成日期" align="center" prop="endTime" :formatter="dateFormatter2"/>
|
<el-table-column label="要求完成日期" align="center" prop="endTime" :formatter="dateFormatter2"/>
|
||||||
<el-table-column label="负责人" align="center" prop="ownerName" />
|
<el-table-column label="负责人" align="center" prop="ownerName" />
|
||||||
|
<el-table-column label="采购数量" align="center" prop="purchaseAmounts" />
|
||||||
<el-table-column label="收货日期" align="center" prop="receivingTime" :formatter="dateFormatter2"/>
|
<el-table-column label="收货日期" align="center" prop="receivingTime" :formatter="dateFormatter2"/>
|
||||||
<el-table-column label="零件采购" align="center" prop="partsProcurement" />
|
<el-table-column label="零件采购" align="center" prop="partsProcurement" />
|
||||||
<el-table-column label="派工单状态" align="center" prop="receiving" />
|
<el-table-column label="派工单状态" align="center" prop="receiving" />
|
||||||
@ -73,6 +78,7 @@
|
|||||||
<el-table-column label="预计开始时间" align="center" prop="startTime" :formatter="dateFormatter2"/>
|
<el-table-column label="预计开始时间" align="center" prop="startTime" :formatter="dateFormatter2"/>
|
||||||
<el-table-column label="预计结束时间" align="center" prop="endTime" :formatter="dateFormatter2"/>
|
<el-table-column label="预计结束时间" align="center" prop="endTime" :formatter="dateFormatter2"/>
|
||||||
<el-table-column label="负责人" align="center" prop="ownerName" />
|
<el-table-column label="负责人" align="center" prop="ownerName" />
|
||||||
|
<el-table-column label="派工数量" align="center" prop="amount" />
|
||||||
<el-table-column label="预计工时(天)" align="center" prop="workTime" />
|
<el-table-column label="预计工时(天)" align="center" prop="workTime" />
|
||||||
<el-table-column label="实际工时(天)" align="center" prop="workingHour" />
|
<el-table-column label="实际工时(天)" align="center" prop="workingHour" />
|
||||||
<el-table-column label="报工进度(%)" align="center" prop="percentage" />
|
<el-table-column label="报工进度(%)" align="center" prop="percentage" />
|
||||||
@ -97,7 +103,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="过程检状态" align="center" prop="report" />
|
<el-table-column label="过程检状态" align="center" prop="report" />
|
||||||
<el-table-column label="负责人" align="center" prop="ownerName" />
|
<el-table-column label="负责人" align="center" prop="ownerName" />
|
||||||
|
<el-table-column label="报工时间" align="center" prop="endTime" :formatter="dateFormatter2"/>
|
||||||
</el-table>
|
</el-table>
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
<ContentWrap v-if="type=='zhuangpei'">
|
<ContentWrap v-if="type=='zhuangpei'">
|
||||||
@ -108,7 +114,9 @@
|
|||||||
<el-table-column label="预计开始时间" align="center" prop="startTime" :formatter="dateFormatter2"/>
|
<el-table-column label="预计开始时间" align="center" prop="startTime" :formatter="dateFormatter2"/>
|
||||||
<el-table-column label="预计结束时间" align="center" prop="endTime" :formatter="dateFormatter2"/>
|
<el-table-column label="预计结束时间" align="center" prop="endTime" :formatter="dateFormatter2"/>
|
||||||
<el-table-column label="负责人" align="center" prop="ownerName" />
|
<el-table-column label="负责人" align="center" prop="ownerName" />
|
||||||
|
<el-table-column label="派工数量" align="center" prop="amount" />
|
||||||
<el-table-column label="预计工时(天)" align="center" prop="workTime" />
|
<el-table-column label="预计工时(天)" align="center" prop="workTime" />
|
||||||
|
<el-table-column label="派工人数" align="center" prop="bgAmount" />
|
||||||
<el-table-column label="实际工时(天)" align="center" prop="workingHour" />
|
<el-table-column label="实际工时(天)" align="center" prop="workingHour" />
|
||||||
<el-table-column label="报工进度(%)" align="center" prop="percentage" />
|
<el-table-column label="报工进度(%)" align="center" prop="percentage" />
|
||||||
<el-table-column label="派工单状态" align="center" prop="report" />
|
<el-table-column label="派工单状态" align="center" prop="report" />
|
||||||
@ -141,24 +149,28 @@ const list3 = ref([]) // 加工数据
|
|||||||
const list4 = ref([]) // 过程检数据
|
const list4 = ref([]) // 过程检数据
|
||||||
const list5 = ref([]) // 装配任务数据
|
const list5 = ref([]) // 装配任务数据
|
||||||
const type = ref('')
|
const type = ref('')
|
||||||
|
const type1 = ref('')
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
id:undefined,
|
id:undefined,
|
||||||
projectSubId:undefined,
|
projectSubId:undefined,
|
||||||
flag:true
|
flag:true,
|
||||||
|
statusflag:true
|
||||||
})
|
})
|
||||||
//初始化方法
|
//初始化方法
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
console.log(query)
|
console.log(query)
|
||||||
formData.projectSubId = query.projectSubId
|
formData.projectSubId = query.projectSubId
|
||||||
getList()
|
await getList()
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
projectSubId:formData.projectSubId
|
projectSubId:formData.projectSubId,
|
||||||
|
statusflag:formData.statusflag
|
||||||
})
|
})
|
||||||
if (list.value){
|
if (list.value){
|
||||||
const hasDesignTask = list.value.some(item => item.subType === "设计任务");
|
const hasDesignTask = list.value.some(item => item.subType == "设计任务");
|
||||||
if (hasDesignTask){
|
if (hasDesignTask){
|
||||||
list1.value= await PlansubdetailApi.getList1(queryParams)
|
list1.value= await PlansubdetailApi.getList1(queryParams)
|
||||||
type.value='sheji'
|
type.value='sheji'
|
||||||
|
type1.value='sheji'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,43 +178,90 @@ const formData = reactive({
|
|||||||
const change = (val) => {
|
const change = (val) => {
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
/** 处理某一行的点击 */
|
const change1 =async (val) => {
|
||||||
const rowClick = async (row) => {
|
|
||||||
console.log(row);
|
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
projectSubId:formData.projectSubId,
|
projectSubId:formData.projectSubId,
|
||||||
|
statusflag:formData.statusflag
|
||||||
|
})
|
||||||
|
type.value=type1.value
|
||||||
|
if (type.value=='sheji'){
|
||||||
|
list1.value= await PlansubdetailApi.getList1(queryParams)
|
||||||
|
if (list1.value.length<=0){
|
||||||
|
type1.value=type.value
|
||||||
|
type.value=''
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if (type.value=='waixei'){
|
||||||
|
list2.value= await PlansubdetailApi.getList2(queryParams)
|
||||||
|
if (list2.value.length<=0){
|
||||||
|
type1.value=type.value
|
||||||
|
type.value=''
|
||||||
|
}
|
||||||
|
}else if (type.value=='jiagong'){
|
||||||
|
list3.value= await PlansubdetailApi.getList3(queryParams)
|
||||||
|
if (list3.value.length<=0){
|
||||||
|
type1.value=type.value
|
||||||
|
type.value=''
|
||||||
|
}
|
||||||
|
}else if (type.value=='guochengjian'){
|
||||||
|
list4.value= await PlansubdetailApi.getList4(queryParams)
|
||||||
|
if (list4.value.length<=0){
|
||||||
|
type1.value=type.value
|
||||||
|
type.value=''
|
||||||
|
}
|
||||||
|
}else if (type.value=='zhuangpei'){
|
||||||
|
list5.value= await PlansubdetailApi.getList5(queryParams)
|
||||||
|
console.log(list5.value.length)
|
||||||
|
if (list5.value.length<=0){
|
||||||
|
type1.value=type.value
|
||||||
|
type.value=''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** 处理某一行的点击 */
|
||||||
|
const rowClick = async (row) => {
|
||||||
|
console.log(type1.value);
|
||||||
|
const queryParams = reactive({
|
||||||
|
projectSubId:formData.projectSubId,
|
||||||
|
statusflag:formData.statusflag
|
||||||
})
|
})
|
||||||
type.value=''
|
type.value=''
|
||||||
|
|
||||||
if (row.subType=='设计任务'){
|
if (row.subType=='设计任务'){
|
||||||
list1.value= await PlansubdetailApi.getList1(queryParams)
|
list1.value= await PlansubdetailApi.getList1(queryParams)
|
||||||
if (list1.value.length>0){
|
if (list1.value.length>0){
|
||||||
type.value='sheji'
|
type.value='sheji'
|
||||||
}
|
}
|
||||||
|
type1.value='sheji'
|
||||||
}else if (row.subType=='外协任务'){
|
}else if (row.subType=='外协任务'){
|
||||||
list2.value= await PlansubdetailApi.getList2(queryParams)
|
list2.value= await PlansubdetailApi.getList2(queryParams)
|
||||||
if (list2.value.length>0){
|
if (list2.value.length>0){
|
||||||
type.value='waixei'
|
type.value='waixei'
|
||||||
}
|
}
|
||||||
|
type1.value='waixei'
|
||||||
}else if (row.subType=='加工任务'){
|
}else if (row.subType=='加工任务'){
|
||||||
list3.value= await PlansubdetailApi.getList3(queryParams)
|
list3.value= await PlansubdetailApi.getList3(queryParams)
|
||||||
if (list3.value.length>0){
|
if (list3.value.length>0){
|
||||||
type.value='jiagong'
|
type.value='jiagong'
|
||||||
}
|
}
|
||||||
|
type1.value='jiagong'
|
||||||
}else if (row.subType=='过程检任务'){
|
}else if (row.subType=='过程检任务'){
|
||||||
list4.value= await PlansubdetailApi.getList4(queryParams)
|
list4.value= await PlansubdetailApi.getList4(queryParams)
|
||||||
if (list4.value.length>0){
|
if (list4.value.length>0){
|
||||||
type.value='guochengjian'
|
type.value='guochengjian'
|
||||||
}
|
}
|
||||||
|
type1.value='guochengjian'
|
||||||
}else{
|
}else{
|
||||||
list5.value= await PlansubdetailApi.getList5(queryParams)
|
list5.value= await PlansubdetailApi.getList5(queryParams)
|
||||||
if (list5.value.length>0){
|
if (list5.value.length>0){
|
||||||
type.value='zhuangpei'
|
type.value='zhuangpei'
|
||||||
}
|
}
|
||||||
|
type1.value='zhuangpei'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const cellClassName = ({ row,column }) => {
|
const cellClassName = ({ row,column }) => {
|
||||||
if (column.label === '任务状态' && row.statusFlag) {
|
if (column.label === '任务状态' && row.statusFlag) {
|
||||||
return row.statusFlag === '1' ? 'warning-row1' : row.statusFlag === '0' ?'warning-row2':"";
|
return row.statusFlag === '1' ? 'warning-row1' :"";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -228,7 +287,7 @@ const cellClassName4 = ({ row,column }) => {
|
|||||||
}
|
}
|
||||||
const cellClassName5 = ({ row,column }) => {
|
const cellClassName5 = ({ row,column }) => {
|
||||||
if (column.label === '工单状态' && row.statusFlag) {
|
if (column.label === '工单状态' && row.statusFlag) {
|
||||||
return row.statusFlag === '1' ? 'warning-row1' : row.statusFlag === '0' ?'warning-row2':"";
|
return row.statusFlag === '1' ? 'warning-row1' :"";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -249,22 +308,32 @@ const getList = async () => {
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style scoped>
|
||||||
.hl-card .alter-class {
|
|
||||||
position: relative;
|
:deep(.warning-row1) {
|
||||||
border: solid 1px orange;
|
background-color:#d9001b !important;
|
||||||
outline: solid 1px orange;
|
}
|
||||||
}
|
|
||||||
.warning-row1 {
|
|
||||||
background-color:#F08080 !important;
|
|
||||||
}
|
|
||||||
.warning-row2 {
|
|
||||||
background-color: #1E90FF !important; /* 道奇蓝 */
|
|
||||||
}
|
|
||||||
.large-checkbox {
|
.large-checkbox {
|
||||||
transform: scale(1.5); /* 方法1:使用scale放大 */
|
transform: scale(1.5); /* 方法1:使用scale放大 */
|
||||||
/* 或者 */
|
/* 或者 */
|
||||||
/* 方法2:通过调整字体大小 */
|
/* 方法2:通过调整字体大小 */
|
||||||
/* font-size: 18px; */
|
/* font-size: 18px; */
|
||||||
}
|
}
|
||||||
|
/* 添加 hover 效果 */
|
||||||
|
.custom-hover-table ::v-deep .el-table__body tr:hover>td {
|
||||||
|
background-color: #e8e8e8 !important;
|
||||||
|
cursor: pointer; /* 如果需要鼠标变为手型 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 如果表格有固定列,也需要设置 hover 效果 */
|
||||||
|
.custom-hover-table ::v-deep .el-table__fixed,
|
||||||
|
.custom-hover-table ::v-deep .el-table__fixed-right {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-hover-table ::v-deep .el-table__fixed tr:hover>td,
|
||||||
|
.custom-hover-table ::v-deep .el-table__fixed-right tr:hover>td {
|
||||||
|
background-color: #e8e8e8 !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -42,19 +42,19 @@
|
|||||||
<el-row :gutter="16">
|
<el-row :gutter="16">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="项目名称" prop="projectName" label-width="150">
|
<el-form-item label="项目名称" prop="projectName" label-width="150">
|
||||||
<el-input class="!w-265px" placeholder="项目名称" v-model="formData.projectName" disabled />
|
<el-input class="!w-265px" placeholder="项目名称" v-model="formData.projectName" readonly />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="项目结束日期" prop="projectEndTime">
|
<el-form-item label="项目结束日期" prop="projectEndTime">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
disabled class="!w-265px" v-model="formData.projectEndTime" type="date" value-format="x"
|
readonly class="!w-265px" v-model="formData.projectEndTime" type="date" value-format="x"
|
||||||
placeholder="项目结束日期" />
|
placeholder="项目结束日期" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="项目进度" prop="projectProgress">
|
<el-form-item label="项目进度" prop="projectProgress">
|
||||||
<el-input class="!w-265px" placeholder="项目进度" v-model="formData.projectProgress" disabled />
|
<el-input class="!w-265px" placeholder="项目进度" v-model="formData.projectProgress" readonly />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -63,19 +63,19 @@
|
|||||||
<el-row :gutter="16">
|
<el-row :gutter="16">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="工艺负责人" prop="craftOwnerName" label-width="150">
|
<el-form-item label="工艺负责人" prop="craftOwnerName" label-width="150">
|
||||||
<el-input class="!w-265px" placeholder="工艺负责人" v-model="formData.craftOwnerName" disabled />
|
<el-input class="!w-265px" placeholder="工艺负责人" v-model="formData.craftOwnerName" readonly />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="工艺结束日期" prop="craftEndDate">
|
<el-form-item label="工艺结束日期" prop="craftEndDate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
disabled class="!w-265px" v-model="formData.craftEndDate" type="date" value-format="x"
|
readonly class="!w-265px" v-model="formData.craftEndDate" type="date" value-format="x"
|
||||||
placeholder="工艺结束日期" />
|
placeholder="工艺结束日期" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8" >
|
<el-col :span="8" >
|
||||||
<el-form-item label="工艺进度" prop="processProgress" >
|
<el-form-item label="工艺进度" prop="processProgress" >
|
||||||
<el-input class=" !w-265px" :class="{ 'red-background': formData.processFlag == '1' }" placeholder="工艺进度" v-model="formData.processProgress" disabled
|
<el-input class=" !w-265px" :class="{ 'red-background': formData.processFlag == '1' }" placeholder="工艺进度" v-model="formData.processProgress" readonly
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -162,7 +162,7 @@ const formData = ref({
|
|||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
if ((queryParams.projectCode==null||queryParams.projectCode=='')&&(queryParams.projectSubName==null||queryParams.projectSubName=='')&&(queryParams.projectName==null ||queryParams.projectName=='')) {
|
if ((queryParams.projectCode==null||queryParams.projectCode=='')&&(queryParams.projectSubName==null||queryParams.projectSubName=='')&&(queryParams.projectName==null ||queryParams.projectName=='')&&(queryParams.customerName==null ||queryParams.customerName=='')) {
|
||||||
message.error("必须输入查询条件查询")
|
message.error("必须输入查询条件查询")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -179,19 +179,19 @@ const getList = async () => {
|
|||||||
|
|
||||||
const cellClassName = ({ row,column }) => {
|
const cellClassName = ({ row,column }) => {
|
||||||
if (column.label === '设计任务' && row.designTaskFlag) {
|
if (column.label === '设计任务' && row.designTaskFlag) {
|
||||||
return row.designTaskFlag === '1' ? 'warning-row1' :row.designTaskFlag === '0' ? 'warning-row2':"";
|
return row.designTaskFlag === '1' ? 'warning-row1' :"";
|
||||||
}
|
}
|
||||||
if (column.label === '外协任务' && row.outsourcingTasksFlag) {
|
if (column.label === '外协任务' && row.outsourcingTasksFlag) {
|
||||||
return row.outsourcingTasksFlag === '1' ? 'warning-row1' :row.outsourcingTasksFlag === '0' ? 'warning-row2':"";
|
return row.outsourcingTasksFlag === '1' ? 'warning-row1' :"";
|
||||||
}
|
}
|
||||||
if (column.label === '加工任务' && row.processingTaskFlag) {
|
if (column.label === '加工任务' && row.processingTaskFlag) {
|
||||||
return row.processingTaskFlag === '1' ? 'warning-row1' : row.processingTaskFlag === '0' ?'warning-row2':"";
|
return row.processingTaskFlag === '1' ? 'warning-row1' :"";
|
||||||
}
|
}
|
||||||
if (column.label === '过程检任务' && row.processInspectionFlag) {
|
if (column.label === '过程检任务' && row.processInspectionFlag) {
|
||||||
return row.processInspectionFlag === '1' ? 'warning-row1' : row.processInspectionFlag === '0' ? 'warning-row2':"";
|
return row.processInspectionFlag === '1' ? 'warning-row1' :"";
|
||||||
}
|
}
|
||||||
if (column.label === '装配任务' && row.assemblyTaskFlag) {
|
if (column.label === '装配任务' && row.assemblyTaskFlag) {
|
||||||
return row.assemblyTaskFlag === '1' ? 'warning-row1' : row.assemblyTaskFlag === '0' ?'warning-row2':"";
|
return row.assemblyTaskFlag === '1' ? 'warning-row1' :"";
|
||||||
}
|
}
|
||||||
// return '';
|
// return '';
|
||||||
}
|
}
|
||||||
@ -242,13 +242,13 @@ window.addEventListener('beforeunload', () => {
|
|||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
:deep(.warning-row1) {
|
:deep(.warning-row1) {
|
||||||
background-color:#F08080 !important;
|
background-color:#d9001b !important;
|
||||||
}
|
}
|
||||||
:deep(.warning-row2) {
|
:deep(.warning-row2) {
|
||||||
background-color: #1E90FF !important; /* 道奇蓝 */
|
background-color: #1E90FF !important; /* 道奇蓝 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.red-background :deep(.el-input__wrapper) {
|
.red-background :deep(.el-input__wrapper) {
|
||||||
background-color: #F08080 !important;
|
background-color: #d9001b !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -164,7 +164,7 @@ ref="multipleTableRef"
|
|||||||
<template #dropdown>
|
<template #dropdown>
|
||||||
<el-dropdown-menu>
|
<el-dropdown-menu>
|
||||||
<el-dropdown-item command="detail">查看详情</el-dropdown-item>
|
<el-dropdown-item command="detail">查看详情</el-dropdown-item>
|
||||||
<el-dropdown-item v-if="scope.row.orderStatus == 32" command="printProject">
|
<el-dropdown-item v-if="scope.row.orderStatus == 32||scope.row.orderStatus == 16" command="printProject">
|
||||||
打印开发项目启动单
|
打印开发项目启动单
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
|
|
||||||
|
|||||||
@ -145,18 +145,18 @@
|
|||||||
<tbody style="height: 50px;">
|
<tbody style="height: 50px;">
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 3.33%;font-weight: bolder;font-size: 16.5px !important;">序号</td>
|
<td style="width: 3.33%;font-weight: bolder;font-size: 16.5px !important;">序号</td>
|
||||||
<td colspan="3" style="max-width: 120px;min-width: 200px;font-weight: bolder;font-size: 16.5px !important;">子项目名称</td>
|
<td colspan="3" style="max-width: 120px;min-width: 200px;font-weight: bolder;font-size: 12px !important;">子项目名称</td>
|
||||||
<td colspan="1" style="font-weight: bolder;font-size: 16.5px !important;">主要材料</td>
|
<td colspan="1" style="font-weight: bolder;font-size: 12px !important;">主要材料</td>
|
||||||
<td colspan="2" style="font-weight: bolder;font-size: 16.5px !important;" >设备</td>
|
<td colspan="2" style="font-weight: bolder;font-size: 12px !important;" >设备</td>
|
||||||
<td colspan="1" style="height: 50px;font-weight: bolder;font-size: 16.5px !important;">数量<br/>(套)</td>
|
<td colspan="1" style="height: 50px;font-weight: bolder;font-size:12px !important;">数量<br/>(套)</td>
|
||||||
<td colspan="1" style="font-weight: bolder;font-size: 16.5px !important;">备注</td>
|
<td colspan="1" style="font-weight: bolder;font-size: 12px !important;">备注</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
<tbody style="height: 28px;">
|
<tbody style="height: 28px;">
|
||||||
|
|
||||||
<tr v-for="(item,idx) in formData.projectOrderSubs" :key="idx">
|
<tr v-for="(item,idx) in formData.projectOrderSubs" :key="idx">
|
||||||
<td colspan="1" style="max-width: 40px;min-width: 40px"> {{item.name ==null?' ': idx+1 }} </td>
|
<td colspan="1" style="max-width: 40px;min-width: 40px"> {{item.name ==null?' ': idx+1 }} </td>
|
||||||
<td colspan="3" style="max-width: 120px;min-width: 200px;font-weight: bolder;text-align: left;font-size: 16.5px !important;">
|
<td colspan="3" style="max-width: 120px;min-width: 200px;font-weight: bolder;text-align: left;font-size: 11.5px !important;">
|
||||||
<!-- <div style="display: flex; flex-direction: column; justify-content: space-between"> -->
|
<!-- <div style="display: flex; flex-direction: column; justify-content: space-between"> -->
|
||||||
{{item.name}}
|
{{item.name}}
|
||||||
<!-- <span v-if="!item.projectSubShortName"> </span>
|
<!-- <span v-if="!item.projectSubShortName"> </span>
|
||||||
@ -530,7 +530,7 @@ const onPrint = () => {
|
|||||||
background: white;
|
background: white;
|
||||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
||||||
position: relative;
|
position: relative;
|
||||||
font-size: 14px !important;
|
font-size: 11.5px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
@ -578,7 +578,7 @@ const onPrint = () => {
|
|||||||
table {
|
table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: auto;
|
height: auto;
|
||||||
font-size: 14px;
|
font-size: 11.5px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
border: 2px solid #333;
|
border: 2px solid #333;
|
||||||
@ -862,9 +862,9 @@ const handleInitPlanSub = async (id) => {
|
|||||||
item.threeDimOwner = subTemp.threeDimOwner
|
item.threeDimOwner = subTemp.threeDimOwner
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if(formData.value.projectOrderSubs.length < 20) {
|
if(formData.value.projectOrderSubs.length < 18) {
|
||||||
// 计算需要添加的空对象数量
|
// 计算需要添加的空对象数量
|
||||||
var numberOfItemsToAdd = 20 - formData.value.projectOrderSubs.length;
|
var numberOfItemsToAdd = 18 - formData.value.projectOrderSubs.length;
|
||||||
|
|
||||||
// 循环并添加空对象到数组中
|
// 循环并添加空对象到数组中
|
||||||
for(var i = 0; i < numberOfItemsToAdd; i++) {
|
for(var i = 0; i < numberOfItemsToAdd; i++) {
|
||||||
@ -959,7 +959,7 @@ const resetForm = () => {
|
|||||||
background: white;
|
background: white;
|
||||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
||||||
position: relative;
|
position: relative;
|
||||||
font-size: 14px !important;
|
font-size: 11.5px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
@ -982,7 +982,7 @@ const resetForm = () => {
|
|||||||
table {
|
table {
|
||||||
width: 100%; /* 让表格宽度100%占满其父元素宽度 */
|
width: 100%; /* 让表格宽度100%占满其父元素宽度 */
|
||||||
height: auto; /* 高度根据内容自适应 */
|
height: auto; /* 高度根据内容自适应 */
|
||||||
font-size: 16px;
|
font-size: 13.5px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
margin-top: 5mm; /* 添加顶部外边距,替代原先的页内边距 */
|
margin-top: 5mm; /* 添加顶部外边距,替代原先的页内边距 */
|
||||||
|
|||||||
@ -267,6 +267,7 @@ class="!w-260px" v-model="formData.requiredCompletedDate" type="date" value-form
|
|||||||
|
|
||||||
<el-table-column fixed label="外协" align="center" width="60">
|
<el-table-column fixed label="外协" align="center" width="60">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
|
<!-- <el-checkbox class="large-checkbox" v-model="row.isOutsourcing" @change="handleOutsourcingChange(row)" :disabled="getDisabledState2(row)||flag"/>-->
|
||||||
<el-checkbox class="large-checkbox" v-model="row.isOutsourcing" @change="handleOutsourcingChange(row)" :disabled="getDisabledState2(row)"/>
|
<el-checkbox class="large-checkbox" v-model="row.isOutsourcing" @change="handleOutsourcingChange(row)" :disabled="getDisabledState2(row)"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -478,7 +479,9 @@ v-model="row.deviceModel"
|
|||||||
|
|
||||||
<el-table-column fixed="right" label="操作" align="center" min-width="90">
|
<el-table-column fixed="right" label="操作" align="center" min-width="90">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<!-- v-if="'detail' != active && ((scope.row.purchaseNo ==null || scope.row.purchaseNo=='') && scope.row.reportProcess == 0&&formData.dispatchStatus != 2)&&!flag" link type="danger"-->
|
||||||
|
|
||||||
|
<el-button
|
||||||
v-if="'detail' != active && ((scope.row.purchaseNo ==null || scope.row.purchaseNo=='') && scope.row.reportProcess == 0&&formData.dispatchStatus != 2)" link type="danger"
|
v-if="'detail' != active && ((scope.row.purchaseNo ==null || scope.row.purchaseNo=='') && scope.row.reportProcess == 0&&formData.dispatchStatus != 2)" link type="danger"
|
||||||
size="small" @click.prevent="onDeleteItem(scope.row,scope.$index)">
|
size="small" @click.prevent="onDeleteItem(scope.row,scope.$index)">
|
||||||
删除
|
删除
|
||||||
@ -1315,6 +1318,7 @@ const resetForm = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const subFormLoading = ref(false) // 子表单的加载中
|
const subFormLoading = ref(false) // 子表单的加载中
|
||||||
|
const flag = ref(false) // 是否下料报工
|
||||||
const subFormRules = reactive({
|
const subFormRules = reactive({
|
||||||
procedureName: [{
|
procedureName: [{
|
||||||
required: true,
|
required: true,
|
||||||
@ -1394,6 +1398,9 @@ const queryData = async (id?: number) => {
|
|||||||
if(items.id == item.procedureId){
|
if(items.id == item.procedureId){
|
||||||
checkList.value.push(items.name)
|
checkList.value.push(items.name)
|
||||||
disabledLabels.value.push(items.name)
|
disabledLabels.value.push(items.name)
|
||||||
|
// if ((items.name=='下料1'||items.name=='下料2')&&item.inReportProcess!=0&& !item.isOutsourcing){
|
||||||
|
// flag.value=true
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
dispatchListTemp.value.push(JSON.parse(JSON.stringify(item)));
|
dispatchListTemp.value.push(JSON.parse(JSON.stringify(item)));
|
||||||
|
|||||||
@ -43,7 +43,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view is="pages/index/components/footRight">
|
<view is="pages/index/components/footRight">
|
||||||
<view class="copy-right footRight--copy-right sk-transparent sk-text-14-2857-199 sk-text">Copyright ©上海长江云息数字科技有限公司,All Rights Reserved. 专注工业信息化-供应链解决方案</view>
|
<view class="copy-right footRight--copy-right sk-transparent sk-text-14-2857-199 sk-text">Copyright ©上海云赛易数字技术有限公司,All Rights Reserved. 专注工业信息化-供应链解决方案</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
//
|
//
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<view class="copy-right">Copyright ©上海长江云息数字科技有限公司,All Rights Reserved. 专注工业信息化-供应链解决方案</view>
|
<view class="copy-right">Copyright ©上海云赛易数字技术有限公司,All Rights Reserved. 专注工业信息化-供应链解决方案</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
|||||||
@ -94,6 +94,13 @@ const categoryList = ref([
|
|||||||
imgUrl: "/static/images/pic_cgsh.png",
|
imgUrl: "/static/images/pic_cgsh.png",
|
||||||
defaultImgUrl: "/static/images/approveOrder-default.png",
|
defaultImgUrl: "/static/images/approveOrder-default.png",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "productionInReport",
|
||||||
|
name: "下料报工",
|
||||||
|
auth: false,
|
||||||
|
imgUrl: "/static/images/productionReport.png",
|
||||||
|
defaultImgUrl: "/static/images/approveOrder-default.png",
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
const categoryList1 = ref([
|
const categoryList1 = ref([
|
||||||
|
|
||||||
|
|||||||
@ -125,7 +125,7 @@ const handleForget = () => {
|
|||||||
</view>
|
</view>
|
||||||
<view class="foot">
|
<view class="foot">
|
||||||
<view class="desc"> 请联系管理员获取工号和密码 </view>
|
<view class="desc"> 请联系管理员获取工号和密码 </view>
|
||||||
<view class="copy-right">Copyright ©上海长江云息数字科技有限公司,All Rights Reserved. 专注工业信息化-供应链解决方案</view>
|
<view class="copy-right">Copyright ©上海云赛易数字技术有限公司,All Rights Reserved. 专注工业信息化-供应链解决方案</view>
|
||||||
<view class="login" @tap="onSubmit"> 登录 </view>
|
<view class="login" @tap="onSubmit"> 登录 </view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@ -90,7 +90,7 @@ const getUserInfoData = async () => {
|
|||||||
<view class="logout" @click="handleLogut">退出登录</view>
|
<view class="logout" @click="handleLogut">退出登录</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="foot">
|
<view class="foot">
|
||||||
<view class="copy-right">Copyright ©上海长江云息数字科技有限公司,All Rights Reserved. 专注工业信息化-供应链解决方案</view>
|
<view class="copy-right">Copyright ©上海云赛易数字技术有限公司,All Rights Reserved. 专注工业信息化-供应链解决方案</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -0,0 +1,559 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import {onMounted, computed, ref, onUnmounted} from "vue";
|
||||||
|
import {
|
||||||
|
getListWxAPI,
|
||||||
|
getTaskDetailAPI,
|
||||||
|
} from "@/services/productionReport";
|
||||||
|
import { useLoginStore } from "@/stores/modules/login";
|
||||||
|
import { formatDate } from "@/utils/index";
|
||||||
|
const userStore = useLoginStore();
|
||||||
|
const userId = userStore.userInfo.userId;
|
||||||
|
|
||||||
|
// 是否分页结束
|
||||||
|
const isFinish = ref(false);
|
||||||
|
// 是否触发下拉刷新
|
||||||
|
const isTriggered = ref(false);
|
||||||
|
// 定义 porps
|
||||||
|
const props = defineProps<{
|
||||||
|
orderState: string;
|
||||||
|
}>();
|
||||||
|
const statusText = computed(() => {
|
||||||
|
const text = props.orderState == "0,1" ? "去报工" : "查看";
|
||||||
|
return text;
|
||||||
|
});
|
||||||
|
// 是否加载中标记,用于防止滚动触底触发多次请求
|
||||||
|
const isLoading = ref(false);
|
||||||
|
// 从本地存储获取搜索条件
|
||||||
|
const getStoredSearchValue = () => {
|
||||||
|
try {
|
||||||
|
const stored = uni.getStorageSync(`search_${props.orderState}_${userId}`);
|
||||||
|
return stored || "";
|
||||||
|
} catch (error) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 保存搜索条件到本地存储
|
||||||
|
const saveSearchValue = (value: string) => {
|
||||||
|
try {
|
||||||
|
uni.setStorageSync(`search_${props.orderState}_${userId}`, value);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('保存搜索条件失败:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 请求参数
|
||||||
|
const queryParams: Required<any> = {
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
owner: userId, //
|
||||||
|
procedureStatusList: props.orderState, // 工序完成状态列表
|
||||||
|
dispatchType: "PRODUCTION", // 派工类型
|
||||||
|
isReport: 1, // 是否需要报工
|
||||||
|
//20250601新增,项目名称/子项目名称
|
||||||
|
subOrDetailName: getStoredSearchValue(),
|
||||||
|
};
|
||||||
|
const dataList = ref([]);
|
||||||
|
const getListData = async () => {
|
||||||
|
if (props.orderState == "2") {
|
||||||
|
queryParams.subOrDetailName = "";
|
||||||
|
}
|
||||||
|
// 如果数据出于加载中,退出函数
|
||||||
|
if (isLoading.value) return;
|
||||||
|
if (isFinish.value === true) {
|
||||||
|
return uni.showToast({ icon: "none", title: "没有更多数据~" });
|
||||||
|
}
|
||||||
|
isLoading.value = true;
|
||||||
|
// 发送请求
|
||||||
|
const data = await getListWxAPI(queryParams);
|
||||||
|
isLoading.value = false;
|
||||||
|
// 数组追加
|
||||||
|
dataList.value.push(...data.list);
|
||||||
|
// 分页条件
|
||||||
|
if (queryParams.pageNo < data.total) {
|
||||||
|
// 页码累加
|
||||||
|
queryParams.pageNo++;
|
||||||
|
} else {
|
||||||
|
// 分页已结束
|
||||||
|
isFinish.value = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const todayStr = ref("");
|
||||||
|
const searchVal = ref("");
|
||||||
|
onMounted(async () => {
|
||||||
|
const today = new Date();
|
||||||
|
const year = today.getFullYear();
|
||||||
|
const month = String(today.getMonth() + 1).padStart(2, "0");
|
||||||
|
const day = String(today.getDate()).padStart(2, "0");
|
||||||
|
isFinish.value = false;
|
||||||
|
isLoading.value = false;
|
||||||
|
queryParams.pageNo = 1;
|
||||||
|
todayStr.value = `${year}-${month}-${day}`;
|
||||||
|
searchVal.value=getStoredSearchValue()
|
||||||
|
queryParams.subOrDetailName=getStoredSearchValue()
|
||||||
|
await getListData();
|
||||||
|
});
|
||||||
|
|
||||||
|
const isScanning = ref(false)
|
||||||
|
|
||||||
|
const handleDetail = async (item) => {
|
||||||
|
|
||||||
|
const url = `/pages/productionReport/productionReport-detail?id=${item.id}`;
|
||||||
|
uni.navigateTo({ url });
|
||||||
|
};
|
||||||
|
|
||||||
|
// 自定义下拉刷新被触发
|
||||||
|
const onRefresherrefresh = async () => {
|
||||||
|
// 开始动画
|
||||||
|
isTriggered.value = true;
|
||||||
|
// 重置数据
|
||||||
|
queryParams.pageNo = 1;
|
||||||
|
dataList.value = [];
|
||||||
|
isFinish.value = false;
|
||||||
|
// 加载数据
|
||||||
|
await getListData();
|
||||||
|
// 关闭动画
|
||||||
|
isTriggered.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleScan = async () => {
|
||||||
|
if (isScanning.value) return;
|
||||||
|
|
||||||
|
isScanning.value = true;
|
||||||
|
try {
|
||||||
|
console.log('触发扫码')
|
||||||
|
const res = await uni.scanCode();
|
||||||
|
searchVal.value = res.result;
|
||||||
|
// 使用 setTimeout 确保 UI 更新
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 0));
|
||||||
|
await handleSearch({ inputValue: res.result });
|
||||||
|
} catch (error) {
|
||||||
|
uni.showToast({ title: '扫码失败', icon: 'none' });
|
||||||
|
} finally {
|
||||||
|
isScanning.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSearch = async (e) => {
|
||||||
|
console.log('触发搜索')
|
||||||
|
console.log(e)
|
||||||
|
// 重置状态
|
||||||
|
queryParams.pageNo = 1;
|
||||||
|
isFinish.value = false;
|
||||||
|
dataList.value = [];
|
||||||
|
|
||||||
|
// 设置搜索词
|
||||||
|
queryParams.subOrDetailName = e.inputValue;
|
||||||
|
searchVal.value = e.inputValue; // 同步输入框值
|
||||||
|
saveSearchValue(searchVal.value)
|
||||||
|
|
||||||
|
try {
|
||||||
|
await getListData();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('搜索请求失败:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<view class="cont">
|
||||||
|
<!-- <view class="search" v-if="props.orderState == '0,1' ">
|
||||||
|
<spring-search-box :showScan="true" :showReset="true" bgColor="#E2F3FF" @input="(e) => handleSearch(e)" placeholderColor="#28A0F8" searchColor="#28A0F8" v-model="searchVal" :mode="3" @change="(e) => handleSearch(e)" placeholder="请输入项目或子项目名称" clearable></spring-search-box>
|
||||||
|
|
||||||
|
</view> -->
|
||||||
|
<view class="search" v-if="props.orderState == '0,1'">
|
||||||
|
<view
|
||||||
|
style="
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background: #e2f3ff;
|
||||||
|
border-radius: 20rpx;
|
||||||
|
padding: 0 8rpx;
|
||||||
|
height: 50px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
class="uni-input"
|
||||||
|
v-model="searchVal"
|
||||||
|
placeholder="请输入项目或子项目名称"
|
||||||
|
:placeholder-style="'color:#28A0F8;'"
|
||||||
|
style="
|
||||||
|
flex: 1;
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
font-size: 25rpx;
|
||||||
|
color: #28a0f8;
|
||||||
|
height: 50px;
|
||||||
|
line-height: 50px;
|
||||||
|
"
|
||||||
|
@input="handleSearch({ inputValue: searchVal })"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
<view
|
||||||
|
style="
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
padding: 0 10rpx;
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
"
|
||||||
|
@click="handleScan"
|
||||||
|
>
|
||||||
|
<uni-icons type="scan" size="28" color="#28A0F8"></uni-icons>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<scroll-view
|
||||||
|
enable-back-to-top
|
||||||
|
scroll-y
|
||||||
|
class="data-list"
|
||||||
|
refresher-enabled
|
||||||
|
:refresher-triggered="isTriggered"
|
||||||
|
@refresherrefresh="onRefresherrefresh"
|
||||||
|
@scrolltolower="getListData"
|
||||||
|
>
|
||||||
|
<view
|
||||||
|
class="item"
|
||||||
|
v-for="item in dataList"
|
||||||
|
:key="item.id"
|
||||||
|
@click="handleDetail(item)"
|
||||||
|
>
|
||||||
|
<view class="hd">
|
||||||
|
<view class="num">派工单:</view>
|
||||||
|
<view class="statusLabel">{{
|
||||||
|
item.dispatchCode
|
||||||
|
}}</view>
|
||||||
|
|
||||||
|
<view class="status-right" v-if="props.orderState == '0,1'" :style="
|
||||||
|
item.inReportProcess == 0
|
||||||
|
? 'color:red'
|
||||||
|
: 'color:blue'
|
||||||
|
">{{
|
||||||
|
item.inReportProcess == 0 ? "未开始" : "已报工"
|
||||||
|
}}</view>
|
||||||
|
<!-- <view class="statusLabel " ></view> -->
|
||||||
|
</view>
|
||||||
|
<view class="md">
|
||||||
|
<view class="product-item"
|
||||||
|
>项目名称:{{ item.projectName }}</view
|
||||||
|
>
|
||||||
|
<view class="product-item"
|
||||||
|
>子项目名称:{{ item.projectSubCode || "" }}
|
||||||
|
{{ " " + item.projectSubName }}</view
|
||||||
|
>
|
||||||
|
<view class="product-row">
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">零件名称: {{ item.materialName }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label" >派工工序: <span style="font-weight: bold;">{{ item.procedureName }}</span></view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="product-row">
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">材质:{{ item.compositionName }}</view>
|
||||||
|
<!-- <view class="val">{{ item.compositionName }}</view>-->
|
||||||
|
</view>
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">密度:{{ item.density }}t/m³</view>
|
||||||
|
<!-- <view class="val high-color">{{ item.density }}t/m³</view>-->
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="product-row">
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">派工数量:{{ item.amount }}</view>
|
||||||
|
<!-- <view class="val">{{ item.amount }}</view>-->
|
||||||
|
</view>
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">报工重量:{{ item.weight }}Kg</view>
|
||||||
|
<!-- <view class="val high-color">{{ item.weight }}Kg</view>-->
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
class="product-item"
|
||||||
|
:style="
|
||||||
|
item.endTime < todayStr
|
||||||
|
? 'color:red'
|
||||||
|
: null
|
||||||
|
"
|
||||||
|
>预计生产日期:{{ item.startTime }} ~ {{ item.endTime }}</view
|
||||||
|
>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- <view class="statusText">{{ statusText }}</view>-->
|
||||||
|
<view class="statusText">{{ statusText }}</view>
|
||||||
|
</view>
|
||||||
|
<!-- 底部提示文字 -->
|
||||||
|
<view
|
||||||
|
class="loading-text"
|
||||||
|
:style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }"
|
||||||
|
>
|
||||||
|
{{ isFinish ? "没有更多数据~" : "正在加载..." }}
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
// 订单列表
|
||||||
|
.search {
|
||||||
|
padding: 0rpx;
|
||||||
|
width: 90%;
|
||||||
|
margin: auto;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
position: relative;
|
||||||
|
.uni-input {
|
||||||
|
border: 1px solid #d1d6db;
|
||||||
|
height: 60rpx;
|
||||||
|
line-height: 60rpx;
|
||||||
|
padding: 4rpx 10rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
}
|
||||||
|
.icons {
|
||||||
|
width: 30rpx;
|
||||||
|
position: absolute;
|
||||||
|
right: 40rpx;
|
||||||
|
top: 0rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-list {
|
||||||
|
height: 90vh;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
position: relative;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
margin: 20rpx 20rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
|
||||||
|
.hd {
|
||||||
|
padding: 10rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.statusLabel {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #737d88;
|
||||||
|
}
|
||||||
|
.status-right{
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: 10rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.md {
|
||||||
|
position: relative;
|
||||||
|
padding: 10rpx;
|
||||||
|
min-height: 100rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
border-top: 2rpx solid #f2f2f2;
|
||||||
|
|
||||||
|
.product-item {
|
||||||
|
margin: 20rpx 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #737d88;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-row {
|
||||||
|
margin: 20rpx 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
color: #737d88;
|
||||||
|
|
||||||
|
.row-item {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
margin-bottom: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.val {
|
||||||
|
color: #1d2129;
|
||||||
|
|
||||||
|
&.high-color {
|
||||||
|
color: #00b42a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.statusText {
|
||||||
|
position: absolute;
|
||||||
|
right: 20rpx;
|
||||||
|
top: 400rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
padding: 10rpx 30rpx;
|
||||||
|
background: linear-gradient(149deg, #2dace6 4%, #356899 98%);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
padding-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.status {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999;
|
||||||
|
margin-bottom: 15rpx;
|
||||||
|
|
||||||
|
.date {
|
||||||
|
color: #666;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.primary {
|
||||||
|
color: #ff9240;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-delete {
|
||||||
|
line-height: 1;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
padding-left: 10rpx;
|
||||||
|
border-left: 1rpx solid #e3e3e3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.goods {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
|
||||||
|
.cover {
|
||||||
|
width: 170rpx;
|
||||||
|
height: 170rpx;
|
||||||
|
margin-right: 20rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.image {
|
||||||
|
width: 170rpx;
|
||||||
|
height: 170rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.quantity {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 6rpx 4rpx 6rpx 8rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 10rpx 0 0 0;
|
||||||
|
background-color: rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.meta {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name {
|
||||||
|
height: 80rpx;
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.type {
|
||||||
|
line-height: 1.8;
|
||||||
|
padding: 0 15rpx;
|
||||||
|
margin-top: 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
align-self: flex-start;
|
||||||
|
border-radius: 4rpx;
|
||||||
|
color: #888;
|
||||||
|
background-color: #f7f7f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.more {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 22rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.payment {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
text-align: right;
|
||||||
|
color: #999;
|
||||||
|
font-size: 28rpx;
|
||||||
|
border-bottom: 1rpx solid #eee;
|
||||||
|
|
||||||
|
.quantity {
|
||||||
|
font-size: 24rpx;
|
||||||
|
margin-right: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.amount {
|
||||||
|
color: #444;
|
||||||
|
margin-left: 6rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.symbol {
|
||||||
|
font-size: 20rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding-top: 20rpx;
|
||||||
|
|
||||||
|
.button {
|
||||||
|
width: 180rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin-left: 20rpx;
|
||||||
|
border-radius: 60rpx;
|
||||||
|
border: 1rpx solid #ccc;
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.secondary {
|
||||||
|
color: #3775f6;
|
||||||
|
border-color: #3775f6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.primary {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #3775f6;
|
||||||
|
border-color: #3775f6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading-text {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>import type { stringify } from 'querystring';
|
||||||
@ -0,0 +1,710 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { toRaw, ref, computed } from 'vue'
|
||||||
|
import { formatDate } from '@/utils/index'
|
||||||
|
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||||||
|
import { useLoginStore } from '@/stores/modules/login'
|
||||||
|
import { getTaskRepotPageAPI, getTaskDetailAPI, postOperateAPI, getListWxAPI } from '@/services/productionReport'
|
||||||
|
const popup = ref<UniHelper.UniPopupInstance>()
|
||||||
|
const userStore = useLoginStore()
|
||||||
|
const dictInfo = userStore?.dictInfo || []
|
||||||
|
const unitDictData = dictInfo.filter(e => e.dictType == 'heli_material_unit') || []
|
||||||
|
const userId = userStore.userInfo.userId
|
||||||
|
|
||||||
|
const isShowStart = ref(false)
|
||||||
|
const isCancel = ref(true)
|
||||||
|
|
||||||
|
|
||||||
|
const isShowEnd = ref(false)
|
||||||
|
// const isShowStart = computed(() => {
|
||||||
|
// let flag = true
|
||||||
|
// if (historyList.value.length) {
|
||||||
|
// const obj = historyList.value[0]
|
||||||
|
// if (!obj?.endTime) {
|
||||||
|
// flag = false
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // // 派工数量和总报工数量相等了就不展示开始生产
|
||||||
|
// // if (detailInfo.value.amount == detailInfo.value.totalReportAmount) {
|
||||||
|
// // flag = false
|
||||||
|
// // }
|
||||||
|
// return flag
|
||||||
|
// })
|
||||||
|
// const isShowEnd = computed(() => {
|
||||||
|
// let flag = true
|
||||||
|
// if (historyList.value.length) {
|
||||||
|
// const obj = historyList.value[0]
|
||||||
|
// if (obj?.endTime) {
|
||||||
|
// flag = false
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// flag = false
|
||||||
|
// }
|
||||||
|
// return flag
|
||||||
|
// })
|
||||||
|
const amount = ref('')
|
||||||
|
const workTime = ref('')
|
||||||
|
// 详情数据
|
||||||
|
const detailInfo = ref({})
|
||||||
|
let isLoading = ref(false)
|
||||||
|
const historyList = ref([])
|
||||||
|
const formObj = ref({})
|
||||||
|
// 历史明细
|
||||||
|
const getData = async () => {
|
||||||
|
// 发送请求
|
||||||
|
isLoading.value = true
|
||||||
|
const params = {
|
||||||
|
pageNo: 1,
|
||||||
|
integerpageSize: 5,
|
||||||
|
owner: userId,
|
||||||
|
dispatchDetailId: detailInfo.value.id,
|
||||||
|
}
|
||||||
|
const data = await getTaskRepotPageAPI(params)
|
||||||
|
data.list.forEach((e) => {
|
||||||
|
e.startTimeStr = e.startTime && formatDate(e.startTime, 'YYYY-MM-DD HH:mm')
|
||||||
|
e.endTimeStr = e.endTime && formatDate(e.endTime, 'YYYY-MM-DD HH:mm')
|
||||||
|
// e.endTimeStr = '2025-01-13 00:00'
|
||||||
|
})
|
||||||
|
if (data.list[0]) {
|
||||||
|
// 将字符串转换为Date对象
|
||||||
|
formObj.value = data.list[0]
|
||||||
|
const endTime = new Date(formObj.value.endTimeStr);
|
||||||
|
const startTime = new Date(formObj.value.startTimeStr);
|
||||||
|
// 计算两个日期之间的毫秒差
|
||||||
|
const timeDifferenceInMs = endTime - startTime;
|
||||||
|
|
||||||
|
// 将毫秒差转换为小时
|
||||||
|
const timeDifferenceInHours = timeDifferenceInMs / (3600 * 1000);
|
||||||
|
const roundedTimeDifference = parseFloat(timeDifferenceInHours.toFixed(2));
|
||||||
|
if ("Y" == detailInfo.value.isOutsourcing) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
workTime.value = roundedTimeDifference;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
historyList.value = data.list
|
||||||
|
isShowEnd.value = true;
|
||||||
|
isShowStart.value = true
|
||||||
|
if (historyList.value.length) {
|
||||||
|
const obj = historyList.value[0]
|
||||||
|
if (obj.amount !=null && obj.amount >= 0 ) {
|
||||||
|
isShowStart.value = true
|
||||||
|
}else{
|
||||||
|
isShowStart.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (historyList.value.length) {
|
||||||
|
const obj = historyList.value[0]
|
||||||
|
if (obj.amount !=null && obj.amount >= 0 ) {
|
||||||
|
isShowEnd.value = false
|
||||||
|
}else{
|
||||||
|
isShowEnd.value = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
isShowEnd.value = false
|
||||||
|
}
|
||||||
|
if (historyList.value != null && historyList.value.length > 0) {
|
||||||
|
var totalAmount = detailInfo.value.amount;
|
||||||
|
var beforeAmount = detailInfo.value.totalReportAmount
|
||||||
|
if (totalAmount >= beforeAmount) {
|
||||||
|
amount.value = totalAmount - beforeAmount
|
||||||
|
} else {
|
||||||
|
amount.value = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
isLoading.value = false
|
||||||
|
}
|
||||||
|
const isOverBeforeProcedure = ref(true)
|
||||||
|
// 详情
|
||||||
|
const getDetailData = async (id) => {
|
||||||
|
// 发送请求
|
||||||
|
// isLoading.value = true
|
||||||
|
const params = {
|
||||||
|
id,
|
||||||
|
}
|
||||||
|
const data = await getTaskDetailAPI(params)
|
||||||
|
// if (data.beforeProcedureStatus == 0) {
|
||||||
|
// //如果上一道工序没结束
|
||||||
|
// isOverBeforeProcedure.value = true;
|
||||||
|
// }
|
||||||
|
if ("Y"==data.isOutsourcing){
|
||||||
|
workTime.value=data.estimatedPrice
|
||||||
|
}
|
||||||
|
data.startTime = formatDate(data.startTime, 'YYYY-MM-DD')
|
||||||
|
data.endTime = formatDate(data.endTime, 'YYYY-MM-DD')
|
||||||
|
// 单位枚举
|
||||||
|
const lineObj = unitDictData.find((q) => q.value == data.unit) || {}
|
||||||
|
data.unit = lineObj.label
|
||||||
|
|
||||||
|
detailInfo.value = data || {}
|
||||||
|
isLoading.value = false
|
||||||
|
}
|
||||||
|
onLoad(async (options : any) => {
|
||||||
|
await getDetailData(options.id)
|
||||||
|
await getData()
|
||||||
|
const obj = historyList.value[0]
|
||||||
|
// 最新的报工是否完成
|
||||||
|
if (obj && obj?.workTime == null && obj.endTime) {
|
||||||
|
popupShow.value = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 生产完成
|
||||||
|
const handleComplate = async () => {
|
||||||
|
isLoading.value = true;
|
||||||
|
const params = {
|
||||||
|
id: detailInfo.value?.id,
|
||||||
|
active: 'FINISH',
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const data = await postOperateAPI(params);
|
||||||
|
} catch (error) {
|
||||||
|
uni.showToast({
|
||||||
|
icon: 'none',
|
||||||
|
duration: 3000,
|
||||||
|
title: error.data.msg,
|
||||||
|
})
|
||||||
|
} finally {
|
||||||
|
await getDetailData(detailInfo.value.id)
|
||||||
|
await getData()
|
||||||
|
const obj = historyList.value[0]
|
||||||
|
// 最新的报工是否完成
|
||||||
|
if (obj && obj?.workTime == null && obj.endTime) {
|
||||||
|
popupShow.value = true
|
||||||
|
}
|
||||||
|
isLoading.value = false;
|
||||||
|
}
|
||||||
|
// const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}`
|
||||||
|
// uni.redirectTo({
|
||||||
|
// url,
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
// 提交报工
|
||||||
|
const handleOk = async (active) => {
|
||||||
|
const params = {
|
||||||
|
id: detailInfo.value?.id,
|
||||||
|
active: 'SUBMIT',
|
||||||
|
amount: amount.value,
|
||||||
|
workTime: workTime.value,
|
||||||
|
}
|
||||||
|
const data = await postOperateAPI(params)
|
||||||
|
const pages = getCurrentPages(); // 获取当前页面栈
|
||||||
|
const currentPage = pages[pages.length - 1]; // 当前页面
|
||||||
|
const url = `/${currentPage.route}?${Object.entries(currentPage.options).map(([key, val]) => `${key}=${val}`).join('&')}`;
|
||||||
|
uni.reLaunch({ url }); // 重新加载当前页面
|
||||||
|
|
||||||
|
// const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}`
|
||||||
|
// uni.redirectTo({
|
||||||
|
// url,
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
// 开始生产
|
||||||
|
const handleStart = async () => {
|
||||||
|
const params = {
|
||||||
|
id: detailInfo.value.id,
|
||||||
|
active: 'START',
|
||||||
|
ownerId: userId
|
||||||
|
}
|
||||||
|
productionTitle.value = '生产中';
|
||||||
|
const data = await postOperateAPI(params)
|
||||||
|
const pages = getCurrentPages(); // 获取当前页面栈
|
||||||
|
const currentPage = pages[pages.length - 1]; // 当前页面
|
||||||
|
const url = `/${currentPage.route}?${Object.entries(currentPage.options).map(([key, val]) => `${key}=${val}`).join('&')}`;
|
||||||
|
uni.reLaunch({ url }); // 重新加载当前页面
|
||||||
|
// const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}`
|
||||||
|
// uni.redirectTo({
|
||||||
|
// url,
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
const popupShow = ref(false)
|
||||||
|
const productionTitle = ref('开始生产')
|
||||||
|
const cancel = () => {
|
||||||
|
isLoading.value = false;
|
||||||
|
const pages = getCurrentPages(); // 获取当前页面栈
|
||||||
|
if (pages.length>1){
|
||||||
|
uni.navigateBack({
|
||||||
|
delta: 1 // 返回的页面数,这里1表示返回上一页
|
||||||
|
});
|
||||||
|
}else {
|
||||||
|
const url = `/pages/productionReport/productionReport`
|
||||||
|
uni.redirectTo({
|
||||||
|
url,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 结束生产
|
||||||
|
const handleStop = async () => {
|
||||||
|
const params = {
|
||||||
|
id: detailInfo.value?.id,
|
||||||
|
active: 'END',
|
||||||
|
}
|
||||||
|
console.log(detailInfo.value)
|
||||||
|
const data = await postOperateAPI(params)
|
||||||
|
await getData()
|
||||||
|
// const url = `/pages/productionReport/productionReport-detail?id=${detailInfo.value.id}`
|
||||||
|
// uni.redirectTo({
|
||||||
|
// url,
|
||||||
|
// })
|
||||||
|
popup.value?.open()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<view class="data-detail">
|
||||||
|
<template v-if="!isLoading">
|
||||||
|
<view class="module">
|
||||||
|
<view class="module-info">
|
||||||
|
<view class="product-item product-name">项目:{{ detailInfo.projectCode }}
|
||||||
|
{{ detailInfo.projectName }}</view>
|
||||||
|
<image src="/static/images/productionReport-page.png" class="product-img" mode="scaleToFill">
|
||||||
|
</image>
|
||||||
|
<view :class="[detailInfo.procedureStatus == 2 ? 'had' : 'unhad', 'product-status']">{{
|
||||||
|
detailInfo.procedureStatus == 2 ? '已完成' : '未完成' }}</view>
|
||||||
|
<view class="product-item">子项目:{{ detailInfo.projectSubCode || '' }}
|
||||||
|
{{' ' + detailInfo.projectSubName }}
|
||||||
|
</view>
|
||||||
|
<view class="product-row">
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">零件名称: {{ detailInfo.materialName }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">派工工序: {{ detailInfo.procedureName }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="product-row">
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">派工数量</view>
|
||||||
|
<view class="val">{{ detailInfo.amount }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">总报工数量</view>
|
||||||
|
<view class="val high-color">{{ detailInfo.totalReportAmount }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="product-row">
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">预计工时</view>
|
||||||
|
<view class="val">{{ detailInfo.workTime }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">总报工工时</view>
|
||||||
|
<view class="val high-color">{{ detailInfo.totalWorkTime }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="product-item">预计生产日期:{{ detailInfo.startTime }} ~ {{ detailInfo.endTime }}</view>
|
||||||
|
<view class="finish"
|
||||||
|
v-if="isShowStart && detailInfo.procedureStatus !== 2 && detailInfo.totalWorkTime"
|
||||||
|
@click="handleComplate">
|
||||||
|
<image class="complate-img" src="/static/images/productionReport-detail-complate.png"
|
||||||
|
mode="scaleToFill" />
|
||||||
|
生产结束
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="module-list">
|
||||||
|
<view class="module-title">历史报工明细</view>
|
||||||
|
<view class="history-list">
|
||||||
|
<view class="no-data" v-if="!historyList.length">
|
||||||
|
无数据...
|
||||||
|
</view>
|
||||||
|
<template v-else>
|
||||||
|
<view class="item" v-for="(item, index) in historyList" :key="item.id">
|
||||||
|
<view class="product-item">生产开始时间:{{ item.startTimeStr }}</view>
|
||||||
|
<view class="product-item">生产结束时间:{{ item.endTimeStr }}</view>
|
||||||
|
|
||||||
|
<view class="product-row">
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">报工工时:</view>
|
||||||
|
<view class="val high-color">{{ item.workTime }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="row-item">
|
||||||
|
<view class="label">报工数量:</view>
|
||||||
|
<view class="val high-color">{{ item.amount }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="tip-index">
|
||||||
|
<image src="/static/images/productionReport-detail-index.png" class="icon-status"
|
||||||
|
mode="scaleToFit">
|
||||||
|
</image>
|
||||||
|
<view class="text">{{historyList.length - index}}</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="action" v-if="detailInfo.procedureStatus !== 2">
|
||||||
|
<view class="action-item info" v-if="isCancel" @click="cancel()">取消</view>
|
||||||
|
<view class="action-item start" v-if="isShowStart" @click="handleStart">开始生产</view>
|
||||||
|
<view class="action-item stop" v-if="isShowEnd" @click="handleStop">结束生产</view>
|
||||||
|
</view>
|
||||||
|
<view class="action" v-if="detailInfo.procedureStatus == 2">
|
||||||
|
<view class="action-item info" v-if="isCancel" @click="cancel()">取消</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<view class="loading-text" v-else>加载中..</view>
|
||||||
|
<uni-popup class="popup" ref="popup" :mask-click="false" type="bottom" background-color="#fff">
|
||||||
|
<view class="title">
|
||||||
|
<view class="text">填写信息</view>
|
||||||
|
<!-- <view class="close" @click="handleClose">X</view> -->
|
||||||
|
</view>
|
||||||
|
<view class="cont">
|
||||||
|
<view class="item">
|
||||||
|
<view class="label">开始生产时间:</view>
|
||||||
|
<view class="val">{{ formObj.startTimeStr }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="label">结束生产时间:</view>
|
||||||
|
<view class="val">{{ formObj.endTimeStr }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="label"><span class="star">*</span>本次报工工时:</view>
|
||||||
|
<uni-easyinput class="val" type="digit" v-model="workTime" disabled
|
||||||
|
placeholder="请输入本次报工工时"></uni-easyinput>
|
||||||
|
<view class="unit" >{{ detailInfo.isOutsourcing=='Y'?"元":"小时" }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="label"><span class="star">*</span>本次报工数量:</view>
|
||||||
|
<uni-easyinput class="val" type="number" v-model="amount"
|
||||||
|
placeholder="请输入本次报工数量"></uni-easyinput>
|
||||||
|
<view class="unit"> {{ detailInfo.unit }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="ok" @click="handleOk">确定</view>
|
||||||
|
</uni-popup>
|
||||||
|
</view>
|
||||||
|
<view v-if="isOverBeforeProcedure==false">
|
||||||
|
<p>上一道工序尚未完工,请等待上一道工序完工后进行报工!</p>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<style lang="scss">
|
||||||
|
// 订单列表
|
||||||
|
.data-detail {
|
||||||
|
border-radius: 10rpx;
|
||||||
|
padding-bottom: 200rpx;
|
||||||
|
|
||||||
|
.module {
|
||||||
|
background: linear-gradient(178deg, #356899 7%, #356899 57%, #F4F6F9 94%);
|
||||||
|
padding: 20rpx;
|
||||||
|
|
||||||
|
.module-info {
|
||||||
|
padding: 20rpx 20rpx 80rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
min-height: 100rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
border-bottom: 2rpx solid #F2F2F2;
|
||||||
|
background: linear-gradient(215deg, #C7D3E5 8%, rgba(222, 228, 236, 0) 13%), linear-gradient(162deg, #FFFFFF 25%, #E4EFFD 106%);
|
||||||
|
position: relative;
|
||||||
|
border-top-right-radius: 100rpx;
|
||||||
|
|
||||||
|
.product-img {
|
||||||
|
position: absolute;
|
||||||
|
right: 0rpx;
|
||||||
|
top: 0;
|
||||||
|
width: 100rpx;
|
||||||
|
height: 100rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-status {
|
||||||
|
|
||||||
|
width: 140rpx;
|
||||||
|
border-raduis: 10rpx;
|
||||||
|
text-align: center;
|
||||||
|
padding: 8rpx 12rpx;
|
||||||
|
|
||||||
|
&.had {
|
||||||
|
background: #E8FFEA;
|
||||||
|
color: #00B42A;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.unhad {
|
||||||
|
background: #FFF7E8;
|
||||||
|
color: #FF7D00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-item {
|
||||||
|
margin: 20rpx 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #737D88
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-row {
|
||||||
|
margin: 20rpx 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
color: #737D88;
|
||||||
|
|
||||||
|
.row-item {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
margin-bottom: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.val {
|
||||||
|
color: #1D2129;
|
||||||
|
|
||||||
|
&.high-color {
|
||||||
|
color: #00B42A
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.finish {
|
||||||
|
position: absolute;
|
||||||
|
right: 40rpx;
|
||||||
|
bottom: 30rpx;
|
||||||
|
background: linear-gradient(142deg, #FEB34A 14%, #FE9B12 83%);
|
||||||
|
color: #fff;
|
||||||
|
width: 200rpx;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10rpx;
|
||||||
|
border-radius: 31rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.complate-img {
|
||||||
|
width: 30rpx;
|
||||||
|
height: 30rpx;
|
||||||
|
margin-right: 10rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.module-list {
|
||||||
|
padding: 20rpx 20rpx;
|
||||||
|
// box-shadow: 0px 0px 8px 0px rgba(161, 161, 177, 0.12);
|
||||||
|
|
||||||
|
.module-title {
|
||||||
|
color: #0D0D26;
|
||||||
|
font-size: 36rpx;
|
||||||
|
margin: 20rpx 0;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.history-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 200rpx;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 0rpx 10rpx;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
margin: 10rpx 0;
|
||||||
|
background: #EAEEF4;
|
||||||
|
font-size: 28rpx;
|
||||||
|
padding: 20rpx;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
color: #737D88;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.product-item {
|
||||||
|
margin: 10rpx 0;
|
||||||
|
|
||||||
|
.hight-color {
|
||||||
|
color: #00B42A;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-row {
|
||||||
|
margin: 20rpx 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
color: #737D88;
|
||||||
|
|
||||||
|
.row-item {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
margin-bottom: 10rpx;
|
||||||
|
|
||||||
|
&.high-color {
|
||||||
|
color: #00B42A
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.val {
|
||||||
|
color: #1D2129;
|
||||||
|
|
||||||
|
&.high-color {
|
||||||
|
color: #00B42A
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.tip-index {
|
||||||
|
position: absolute;
|
||||||
|
top: 0rpx;
|
||||||
|
right: 0rpx;
|
||||||
|
|
||||||
|
.icon-status {
|
||||||
|
width: 100rpx;
|
||||||
|
height: 72rpx;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
color: #fff;
|
||||||
|
position: absolute;
|
||||||
|
top: 4rpx;
|
||||||
|
right: 30rpx;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-data {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-cont {
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
color: #356899;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0rpx;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
padding: 30rpx 30rpx;
|
||||||
|
background: #FFFFFF;
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 100vw;
|
||||||
|
box-shadow: 0px -4px 10px 0px rgba(121, 153, 183, 0.2);
|
||||||
|
|
||||||
|
.action-item {
|
||||||
|
width: 272rpx;
|
||||||
|
height: 86rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin: 0 20rpx;
|
||||||
|
font-size: 40rpx;
|
||||||
|
color: #fff;
|
||||||
|
width: 272rpx;
|
||||||
|
height: 86rpx;
|
||||||
|
border-radius: 24rpx;
|
||||||
|
&.info {
|
||||||
|
background: linear-gradient(157deg, #A9A9A9 -3%, #A9A9A9 90%);
|
||||||
|
}
|
||||||
|
&.start {
|
||||||
|
background: linear-gradient(157deg, #2EACE6 -3%, #356899 90%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.stop {
|
||||||
|
background: linear-gradient(167deg, #FEA97B -2%, #F75E40 87%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.finish {
|
||||||
|
background: linear-gradient(142deg, #FEB34A 14%, #FE9B12 83%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading-text {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup {
|
||||||
|
.title {
|
||||||
|
line-height: 1;
|
||||||
|
padding: 40rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: normal;
|
||||||
|
border-bottom: 1rpx solid #ddd;
|
||||||
|
color: #444;
|
||||||
|
|
||||||
|
.close {
|
||||||
|
position: absolute;
|
||||||
|
right: 24rpx;
|
||||||
|
top: 40rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
width: 60rpx;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.cont {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin: 40rpx;
|
||||||
|
height: 50vh;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin: 20rpx 0;
|
||||||
|
color: #737D88;
|
||||||
|
width: 94%;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
font-size: 32rpx;
|
||||||
|
width: 260rpx;
|
||||||
|
|
||||||
|
.star {
|
||||||
|
color: red
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.val {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.unit {
|
||||||
|
width: 100rpx;
|
||||||
|
margin-left: 4rpx;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ok {
|
||||||
|
font-size: 32rpx;
|
||||||
|
margin: 20rpx auto 80rpx;
|
||||||
|
text-align: center;
|
||||||
|
width: 200rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
padding: 8rpx 0;
|
||||||
|
background-color: #3C8AF7;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -0,0 +1,151 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
|
import dataItem from './components/dataItem.vue'
|
||||||
|
// 定义 porps
|
||||||
|
const props = defineProps<{
|
||||||
|
state: string
|
||||||
|
}>()
|
||||||
|
// tabs 数据
|
||||||
|
const orderTabs = ref([
|
||||||
|
{ orderState: '0,1', title: '未完成', isRender: false },
|
||||||
|
{ orderState: '2', title: '已完成', isRender: false },
|
||||||
|
])
|
||||||
|
// 高亮下标
|
||||||
|
const activeIndex = ref(0)
|
||||||
|
const handleIndexChange = (index: any) => {
|
||||||
|
orderTabs.value.forEach((e) => {
|
||||||
|
e.isRender = false
|
||||||
|
})
|
||||||
|
activeIndex.value = index
|
||||||
|
orderTabs.value[index].isRender = true
|
||||||
|
}
|
||||||
|
onLoad(async (options) => {
|
||||||
|
if (options.state) {
|
||||||
|
// 高亮下标
|
||||||
|
orderTabs.value.forEach((e, index) => {
|
||||||
|
e.isRender = e.orderState == options.state
|
||||||
|
if (e.isRender) {
|
||||||
|
activeIndex.value = index
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
orderTabs.value.forEach((e, index) => {
|
||||||
|
e.isRender = e.orderState == '0,1'
|
||||||
|
if (e.isRender) {
|
||||||
|
activeIndex.value = index
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view class="viewport">
|
||||||
|
<view class="tabs">
|
||||||
|
<text class="item" :class="{ active: activeIndex == index }" v-for="(item, index) in orderTabs" :key="item.title"
|
||||||
|
@tap="handleIndexChange(index)">
|
||||||
|
{{ item.title }}
|
||||||
|
</text>
|
||||||
|
<!-- 游标 -->
|
||||||
|
<view class="cursor" :style="{ left: activeIndex ? '65%' : '14%' }"></view>
|
||||||
|
</view>
|
||||||
|
<!-- 滑动容器 -->
|
||||||
|
<swiper class="swiper" :current="activeIndex" @change="handleIndexChange($event.detail.current)">
|
||||||
|
<!-- 滑动项 -->
|
||||||
|
<swiper-item v-for="item in orderTabs" :key="item.title">
|
||||||
|
<dataItem v-if="item.isRender" :order-state="item.orderState" />
|
||||||
|
</swiper-item>
|
||||||
|
</swiper>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.viewport {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
// background-color: #3775F6;
|
||||||
|
.navbar {
|
||||||
|
width: 750rpx;
|
||||||
|
color: #000;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 9;
|
||||||
|
/* background-color: #f8f8f8; */
|
||||||
|
background-color: #3775f6;
|
||||||
|
|
||||||
|
.wrap {
|
||||||
|
position: relative;
|
||||||
|
background-color: #3775f6;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
height: 44px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 32rpx;
|
||||||
|
/* color: #000; */
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
height: 44px;
|
||||||
|
width: 44px;
|
||||||
|
font-size: 44rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
/* color: #000; */
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabs {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
line-height: 60rpx;
|
||||||
|
position: relative;
|
||||||
|
z-index: 9;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
padding: 20rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #1D2129;
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
color: #356899;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.cursor {
|
||||||
|
position: absolute;
|
||||||
|
left: 13%;
|
||||||
|
bottom: 0;
|
||||||
|
width: 20%;
|
||||||
|
height: 6rpx;
|
||||||
|
padding: 0 50rpx;
|
||||||
|
background-color: #356899;
|
||||||
|
/* 过渡效果 */
|
||||||
|
transition: all 0.4s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiper
|
||||||
|
.swiper {
|
||||||
|
background-color: #f7f7f8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Loading…
Reference in New Issue
Block a user