1.生产任务单若有删除项编辑后无法保存

2.生产任务派工单预计开始时间和预计结束时间自动带出
3.生产任务派工单预计工时取消*
4.生产任务派工单设备对比不需要
5.全部发货时生产计划变更为已完成
6.终检过程检添加加载管控
7.发货两个订单更新状态bug问题查找和修复
8.任务派工单查询报错问题解决
This commit is contained in:
Ledo 2025-02-18 23:35:12 +08:00
parent 144ef8f8c5
commit f01f5ac86a
10 changed files with 146 additions and 22 deletions

View File

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder; package com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*; import lombok.*;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -89,6 +90,8 @@ public class DeliverOrderSubDO extends BaseDO {
/** /**
* 销售订单子项id * 销售订单子项id
*/ */
@TableField(exist = false)
private Long saleOrderId;
private Long saleOrderSubId; private Long saleOrderSubId;
/** /**
* 销售订单编号 * 销售订单编号

View File

@ -14,6 +14,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDis
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
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.plantask.PlanTaskDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantask.PlanTaskDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO;
@ -115,6 +116,7 @@ public class CrossOrderManager {
eq(ProjectOrderDO::getId, projectOrderId); eq(ProjectOrderDO::getId, projectOrderId);
last("LIMIT 1 FOR UPDATE"); last("LIMIT 1 FOR UPDATE");
}}); }});
PlanDO planDO = planService.getPlanByProjectId(Long.valueOf(projectOrderId));
// 查询关联子项 // 查询关联子项
List<ProjectOrderSubDO> projectOrderSubDOList = projectOrderSubMapper.selectListByProjectOrderId(projectOrderDO.getId()); List<ProjectOrderSubDO> projectOrderSubDOList = projectOrderSubMapper.selectListByProjectOrderId(projectOrderDO.getId());
@ -126,6 +128,7 @@ public class CrossOrderManager {
.eq(DeliverOrderDO::getDeliverStatus, DeliverOrderStatusEnum.DELIVER.getCode()) .eq(DeliverOrderDO::getDeliverStatus, DeliverOrderStatusEnum.DELIVER.getCode())
.in(DeliverOrderSubDO::getSaleOrderSubId, projectOrderSubDOList.stream().map(ProjectOrderSubDO::getId).collect(Collectors.toSet())); .in(DeliverOrderSubDO::getSaleOrderSubId, projectOrderSubDOList.stream().map(ProjectOrderSubDO::getId).collect(Collectors.toSet()));
List<DeliverOrderSubDO> historyDeliveredSubList = deliverOrderSubMapper.selectList(historyDeliveredSubQuery); List<DeliverOrderSubDO> historyDeliveredSubList = deliverOrderSubMapper.selectList(historyDeliveredSubQuery);
//如果历史没发过
if(historyDeliveredSubList.isEmpty()) return; if(historyDeliveredSubList.isEmpty()) return;
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId)); Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
@ -139,6 +142,8 @@ public class CrossOrderManager {
if(allDone){ if(allDone){
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.ALL.getCode()); projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.ALL.getCode());
projectOrderDO.setDeliveryDate(deliverDate); projectOrderDO.setDeliveryDate(deliverDate);
planDO.setStatus(3);
planService.updateById(planDO);
}else{ }else{
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.PART.getCode()); projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.PART.getCode());
} }
@ -146,6 +151,63 @@ public class CrossOrderManager {
} }
}
/**
* 刷新项目订单发货状态
* @param deliverOrderSubs
*/
@Transactional(rollbackFor = Exception.class)
public void refreshProjectOrderDeliverStatusNew( List<DeliverOrderSubDO> deliverOrderSubs,LocalDateTime deliverDate) {
//按销售订单号分组
Map<Long, List<DeliverOrderSubDO>> groupBySaleId = deliverOrderSubs.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderId));
for (Map.Entry<Long, List<DeliverOrderSubDO>> projectIdEntity : groupBySaleId.entrySet()) {
ProjectOrderDO projectOrderDO = projectOrderMapper.selectOne(new LambdaQueryWrapper<ProjectOrderDO>() {{
eq(ProjectOrderDO::getId, projectIdEntity.getKey());
last("LIMIT 1 FOR UPDATE");
}});
PlanDO planDO = planService.getPlanByProjectId(Long.valueOf(projectIdEntity.getKey()));
// 查询关联子项
List<ProjectOrderSubDO> projectOrderSubDOList = projectOrderSubMapper.selectListByProjectOrderId(projectOrderDO.getId());
// 查询发货记录
MPJLambdaWrapper<DeliverOrderSubDO> historyDeliveredSubQuery = new MPJLambdaWrapper<>();
historyDeliveredSubQuery.selectAll(DeliverOrderSubDO.class)
.leftJoin(DeliverOrderDO.class, DeliverOrderDO::getId, DeliverOrderSubDO::getDeliveryOrderId)
.eq(DeliverOrderDO::getDeliverStatus, DeliverOrderStatusEnum.DELIVER.getCode())
.in(DeliverOrderSubDO::getSaleOrderSubId, projectOrderSubDOList.stream().map(ProjectOrderSubDO::getId).collect(Collectors.toSet()));
List<DeliverOrderSubDO> historyDeliveredSubList = deliverOrderSubMapper.selectList(historyDeliveredSubQuery);
//如果历史没发过 以本次为准
if(historyDeliveredSubList.isEmpty()) {
historyDeliveredSubList = projectIdEntity.getValue();
}else {
historyDeliveredSubList.addAll(projectIdEntity.getValue());
}
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
// 考虑变更订单情况 只需判断历史发货是否大于等于订单子项数量
boolean allDone = projectOrderSubDOList.stream().allMatch(projectOrderSubDO -> {
List<DeliverOrderSubDO> historySubList = historyDeliveredSubsGroupBySaleSubId.get(projectOrderSubDO.getId());
int historyDeliveredAmount = historySubList == null || historySubList.isEmpty() ? 0 : historySubList.stream().mapToInt(DeliverOrderSubDO::getAmount).sum();
return historyDeliveredAmount >= projectOrderSubDO.getAmount();
});
if(allDone){
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.ALL.getCode());
projectOrderDO.setDeliveryDate(deliverDate);
planDO.setStatus(3);
planService.updateById(planDO);
}else{
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.PART.getCode());
}
projectOrderMapper.updateById(projectOrderDO);
}
// 锁定订单
for (DeliverOrderSubDO deliverOrderSubDO : deliverOrderSubs) {
}
} }
/** /**

View File

@ -139,8 +139,10 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs(), updateReqVO.getDeliverOrderOtherSubs()); updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs(), updateReqVO.getDeliverOrderOtherSubs());
if(updateObj.getDeliverStatus().intValue() == DeliverOrderStatusEnum.DELIVER.getCode()) { if(updateObj.getDeliverStatus().intValue() == DeliverOrderStatusEnum.DELIVER.getCode()) {
crossOrderManager.refreshProjectOrderDeliverStatus(updateReqVO.getSaleOrderIds().split(","),updateReqVO.getDeliverDate()); // crossOrderManager.refreshProjectOrderDeliverStatus(updateReqVO.getSaleOrderIds().split(","),updateReqVO.getDeliverDate());
// crossOrderManager.generateStockOutOrder(updateReqVO); crossOrderManager.refreshProjectOrderDeliverStatusNew(updateReqVO.getDeliverOrderSubs(),updateReqVO.getDeliverDate());
// crossOrderManager.generateStockOutOrder(updateReqVO);
} }
} }

View File

@ -53,11 +53,13 @@ public interface PlanService {
PageResult<PlanDO> getPlanPage(PlanPageReqVO pageReqVO); PageResult<PlanDO> getPlanPage(PlanPageReqVO pageReqVO);
PageResult<PlanDO> getPlanPageByStatus(PlanPageReqVO pageReqVO); PageResult<PlanDO> getPlanPageByStatus(PlanPageReqVO pageReqVO);
PlanDO getPlanByProjectId(Long projectId);
Long generatePlanByProjectId(Long projectId); Long generatePlanByProjectId(Long projectId);
void generatePlanTaskByPlanId(Long planId ,String type); void generatePlanTaskByPlanId(Long planId ,String type);
void updatePlanStatusToTerminateByProjectId(Long projectId); void updatePlanStatusToTerminateByProjectId(Long projectId);
boolean complete(Long id); boolean complete(Long id);
int updateById(PlanDO planDO);
} }

View File

@ -162,7 +162,14 @@ private TaskReportMapper taskReportMapper;
public PageResult<PlanDO> getPlanPageByStatus(PlanPageReqVO pageReqVO) { public PageResult<PlanDO> getPlanPageByStatus(PlanPageReqVO pageReqVO) {
return planMapper.selectPageByStatus(pageReqVO); return planMapper.selectPageByStatus(pageReqVO);
} }
@Override
public PlanDO getPlanByProjectId(Long projectId){
return planMapper.selectOne(new LambdaQueryWrapper<PlanDO>() {{
eq(PlanDO::getProjectId, projectId);
orderByDesc(PlanDO::getId);
last("LIMIT 1");
}});
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long generatePlanByProjectId(Long projectId){ public Long generatePlanByProjectId(Long projectId){
@ -270,7 +277,10 @@ private TaskReportMapper taskReportMapper;
updatePlanTaskStatusToTerminateByPlanId(planDO.getId()); updatePlanTaskStatusToTerminateByPlanId(planDO.getId());
} }
} }
@Override
public int updateById(PlanDO planDO){
return planMapper.updateById(planDO);
}
@Override @Override
public boolean complete(Long id) { public boolean complete(Long id) {
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();

View File

@ -643,7 +643,13 @@ const submitForm = async (operate) => {
item.category = 'OTHER_LIST' item.category = 'OTHER_LIST'
item.status = 1 item.status = 1
}) })
const data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO var data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO
// if(data.deliverOrderSubs.length >1){
// data.deliverOrderSubs.forEach(element => {
// element.saleOrderSubId = element.projectOrderId;
// });
// }
const orderId = await DeliverOrderApi.operateDeliverOrder(data) const orderId = await DeliverOrderApi.operateDeliverOrder(data)
message.success(t('common.operationSuccess')) message.success(t('common.operationSuccess'))
// //
@ -909,24 +915,36 @@ const queryData = async (type: string, id?: number) => {
formData.value.deliverOrderSubs = [] formData.value.deliverOrderSubs = []
let saleOrderIdArr = formData.value.saleOrderIds.split(',') let saleOrderIdArr = formData.value.saleOrderIds.split(',')
for (let i = 0; i < saleOrderIdArr.length; i++) { for (let i = 0; i < saleOrderIdArr.length; i++) {
formData.value.deliverOrderSubs = formData.value.deliverOrderSubs.concat( var subList = await getProjectOrderSubListByProjectOrderId(saleOrderIdArr[i]);
await getProjectOrderSubListByProjectOrderId(saleOrderIdArr[i]) subList.forEach((sub)=>{
) sub.saleOrderId = saleOrderIdArr[i];
formData.value.deliverOrderSubs.forEach((sub) => {
sub.remark = '' sub.remark = ''
sub.saleOrderSubId = sub.id sub.saleOrderSubId = sub.id
sub.id = '' sub.id = ''
sub.saleOrderCode = sub.projectOrderCode sub.saleOrderCode = sub.projectOrderCode
sub.amounts = sub.amount - sub.deliverAmount sub.amounts = sub.amount - sub.deliverAmount
}) })
formData.value.deliverOrderSubs = formData.value.deliverOrderSubs.concat(
subList
)
// formData.value.deliverOrderSubs.forEach((sub) => {
// sub.saleOrderId = saleOrderIdArr[i];
// sub.remark = ''
// sub.saleOrderSubId = sub.id
// sub.id = ''
// sub.saleOrderCode = sub.projectOrderCode
// sub.amounts = sub.amount - sub.deliverAmount
// })
} }
// console.log(formData.value.deliverOrderSubs )
} else { } else {
// //
formData.value.deliverOrderSubs = subArr.filter((sub) => sub.category == 'DELIVER_LIST') formData.value.deliverOrderSubs = subArr.filter((sub) => sub.category == 'DELIVER_LIST')
formData.value.deliverOrderOtherSubs = subArr.filter((sub) => sub.category == 'OTHER_LIST') formData.value.deliverOrderOtherSubs = subArr.filter((sub) => sub.category == 'OTHER_LIST')
} }
console.log("打印发货信息"); //console.log("");
console.log(formData.value.deliverOrderSubs); //
// console.log(formData.value.deliverOrderSubs);
// //
let logParams = { let logParams = {
pageNo: 1, pageNo: 1,

View File

@ -222,7 +222,10 @@
<el-table-column min-width="120px" align="center" fixed="right"> <el-table-column min-width="120px" align="center" fixed="right">
<template #header><span class="hl-table_header">*</span>需求完成日期</template> <template #header><span class="hl-table_header">*</span>需求完成日期</template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.requireEndDate`" class="mb-0px!" :rules="subFormRules.requireEndDate"> <el-form-item v-if="getDisable(row.bomEditStatus) == true" :prop="`${$index}.requireEndDate`" class="mb-0px!" >
<el-date-picker :disabled="getDisable(row.bomEditStatus)" class="!w-265px" v-model="row.requireEndDate" type="date" value-format="x" placeholder="需求完成日期" />
</el-form-item>
<el-form-item v-if="getDisable(row.bomEditStatus)==false" :prop="`${$index}.requireEndDate`" class="mb-0px!" :rules="subFormRules.requireEndDate">
<el-date-picker :disabled="getDisable(row.bomEditStatus)" class="!w-265px" v-model="row.requireEndDate" type="date" value-format="x" placeholder="需求完成日期" /> <el-date-picker :disabled="getDisable(row.bomEditStatus)" class="!w-265px" v-model="row.requireEndDate" type="date" value-format="x" placeholder="需求完成日期" />
</el-form-item> </el-form-item>
</template> </template>

View File

@ -312,9 +312,15 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预计工时" align="center" prop="workTime" width="145px"> <el-table-column label="预计工时" align="center" prop="workTime" width="145px">
<template #header> <span class="hl-table_header">*</span>预计工时</template> <template #header> 预计工时</template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.workTime`" :rules="subFormRules.workTime" class="mb-0px!"> <!-- <el-form-item :prop="`${$index}.workTime`" :rules="subFormRules.workTime" class="mb-0px!">
<el-input-number
min="0" :precision="2" class="!w-240px"
:disabled="detailDisabled " v-model="row.workTime"
placeholder="请输入预计工时" />
</el-form-item> -->
<el-form-item :prop="`${$index}.workTime`" class="mb-0px!">
<el-input-number <el-input-number
min="0" :precision="2" class="!w-240px" min="0" :precision="2" class="!w-240px"
:disabled="detailDisabled " v-model="row.workTime" :disabled="detailDisabled " v-model="row.workTime"
@ -775,7 +781,7 @@ watch(
} }
} }
); );
watches.push(unwatchDeviceModel); // watches.push(unwatchDeviceModel);
}); });
}, { }, {
deep: true deep: true
@ -980,11 +986,11 @@ const subFormRules = reactive({
message: '负责人不能为空', message: '负责人不能为空',
trigger: 'blur' trigger: 'blur'
}], }],
workTime: [{ // workTime: [{
required: true, // required: true,
message: '预计工时不能为空', // message: '',
trigger: 'blur' // trigger: 'blur'
}], // }],
amount: [{ amount: [{
required: true, required: true,
message: '派工数量不能为空', message: '派工数量不能为空',
@ -1149,8 +1155,17 @@ const onAddItem = () => {
checkListTemp.value = checkList.value; checkListTemp.value = checkList.value;
var list = []; var list = [];
var i = 1; var i = 1;
var defaultStartTime = null;
var defaultEndTme = null;
var setSameTime = false;
if(formData.value.taskDispatchDetails!=null){ if(formData.value.taskDispatchDetails!=null){
formData.value.taskDispatchDetails.forEach(item=>{ formData.value.taskDispatchDetails.forEach(item=>{
console.log('wuhu')
if(i ==1 && item.startTime != null && item.endTime != null && setSameTime == false){
defaultStartTime=item.startTime;
defaultEndTme = item.endTime;
setSameTime = true;
}
if(item.id !=null){ if(item.id !=null){
i ++ i ++
list.push(item); list.push(item);
@ -1173,6 +1188,8 @@ const onAddItem = () => {
dispatchId: undefined, dispatchId: undefined,
procedureCode:'' , procedureCode:'' ,
isReport:0 , isReport:0 ,
startTime:null,
endTime:null
} }
// //
// Object.keys(procedureList.value).forEach((key) => { // Object.keys(procedureList.value).forEach((key) => {
@ -1203,6 +1220,10 @@ const onAddItem = () => {
if(add){ if(add){
row.amount = formData.value.amount row.amount = formData.value.amount
row.dispatchId = formData.value.id row.dispatchId = formData.value.id
if(setSameTime ){
row.startTime = defaultStartTime;
row.endTime = defaultEndTme;
}
list.push(row) list.push(row)
row.sort = i; row.sort = i;
i++; i++;

View File

@ -136,6 +136,8 @@ const handleOk = async (active) => {
} }
// //
const handleStart = async () => { const handleStart = async () => {
//
isLoading.value = true
const params = { const params = {
zjMxId: detailInfo.value?.id, zjMxId: detailInfo.value?.id,
workTime: workTime.value, workTime: workTime.value,

View File

@ -137,6 +137,7 @@ const handleOk = async (active) => {
} }
// //
const handleStart = async () => { const handleStart = async () => {
isLoading.value = true;
const params = { const params = {
zjMxId: detailInfo.value?.id, zjMxId: detailInfo.value?.id,
workTime: workTime.value, workTime: workTime.value,