1.生产任务单若有删除项编辑后无法保存
2.生产任务派工单预计开始时间和预计结束时间自动带出 3.生产任务派工单预计工时取消* 4.生产任务派工单设备对比不需要 5.全部发货时生产计划变更为已完成 6.终检过程检添加加载管控 7.发货两个订单更新状态bug问题查找和修复 8.任务派工单查询报错问题解决
This commit is contained in:
parent
144ef8f8c5
commit
f01f5ac86a
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@ -89,6 +90,8 @@ public class DeliverOrderSubDO extends BaseDO {
|
||||
/**
|
||||
* 销售订单子项id
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private Long saleOrderId;
|
||||
private Long saleOrderSubId;
|
||||
/**
|
||||
* 销售订单编号
|
||||
|
@ -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.DeliverOrderSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantask.PlanTaskDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO;
|
||||
@ -115,6 +116,7 @@ public class CrossOrderManager {
|
||||
eq(ProjectOrderDO::getId, projectOrderId);
|
||||
last("LIMIT 1 FOR UPDATE");
|
||||
}});
|
||||
PlanDO planDO = planService.getPlanByProjectId(Long.valueOf(projectOrderId));
|
||||
|
||||
// 查询关联子项
|
||||
List<ProjectOrderSubDO> projectOrderSubDOList = projectOrderSubMapper.selectListByProjectOrderId(projectOrderDO.getId());
|
||||
@ -126,6 +128,7 @@ public class CrossOrderManager {
|
||||
.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()) return;
|
||||
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
|
||||
|
||||
@ -139,6 +142,8 @@ public class CrossOrderManager {
|
||||
if(allDone){
|
||||
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.ALL.getCode());
|
||||
projectOrderDO.setDeliveryDate(deliverDate);
|
||||
planDO.setStatus(3);
|
||||
planService.updateById(planDO);
|
||||
}else{
|
||||
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) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -139,8 +139,10 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
|
||||
updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs(), updateReqVO.getDeliverOrderOtherSubs());
|
||||
|
||||
if(updateObj.getDeliverStatus().intValue() == DeliverOrderStatusEnum.DELIVER.getCode()) {
|
||||
crossOrderManager.refreshProjectOrderDeliverStatus(updateReqVO.getSaleOrderIds().split(","),updateReqVO.getDeliverDate());
|
||||
// crossOrderManager.generateStockOutOrder(updateReqVO);
|
||||
// crossOrderManager.refreshProjectOrderDeliverStatus(updateReqVO.getSaleOrderIds().split(","),updateReqVO.getDeliverDate());
|
||||
crossOrderManager.refreshProjectOrderDeliverStatusNew(updateReqVO.getDeliverOrderSubs(),updateReqVO.getDeliverDate());
|
||||
|
||||
// crossOrderManager.generateStockOutOrder(updateReqVO);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -53,11 +53,13 @@ public interface PlanService {
|
||||
PageResult<PlanDO> getPlanPage(PlanPageReqVO pageReqVO);
|
||||
|
||||
PageResult<PlanDO> getPlanPageByStatus(PlanPageReqVO pageReqVO);
|
||||
|
||||
PlanDO getPlanByProjectId(Long projectId);
|
||||
Long generatePlanByProjectId(Long projectId);
|
||||
void generatePlanTaskByPlanId(Long planId ,String type);
|
||||
|
||||
void updatePlanStatusToTerminateByProjectId(Long projectId);
|
||||
|
||||
boolean complete(Long id);
|
||||
|
||||
int updateById(PlanDO planDO);
|
||||
}
|
||||
|
@ -162,7 +162,14 @@ private TaskReportMapper taskReportMapper;
|
||||
public PageResult<PlanDO> getPlanPageByStatus(PlanPageReqVO 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
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long generatePlanByProjectId(Long projectId){
|
||||
@ -270,7 +277,10 @@ private TaskReportMapper taskReportMapper;
|
||||
updatePlanTaskStatusToTerminateByPlanId(planDO.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateById(PlanDO planDO){
|
||||
return planMapper.updateById(planDO);
|
||||
}
|
||||
@Override
|
||||
public boolean complete(Long id) {
|
||||
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
|
@ -643,7 +643,13 @@ const submitForm = async (operate) => {
|
||||
item.category = 'OTHER_LIST'
|
||||
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)
|
||||
message.success(t('common.operationSuccess'))
|
||||
// 上传附件
|
||||
@ -909,24 +915,36 @@ const queryData = async (type: string, id?: number) => {
|
||||
formData.value.deliverOrderSubs = []
|
||||
let saleOrderIdArr = formData.value.saleOrderIds.split(',')
|
||||
for (let i = 0; i < saleOrderIdArr.length; i++) {
|
||||
formData.value.deliverOrderSubs = formData.value.deliverOrderSubs.concat(
|
||||
await getProjectOrderSubListByProjectOrderId(saleOrderIdArr[i])
|
||||
)
|
||||
formData.value.deliverOrderSubs.forEach((sub) => {
|
||||
var subList = await getProjectOrderSubListByProjectOrderId(saleOrderIdArr[i]);
|
||||
subList.forEach((sub)=>{
|
||||
sub.saleOrderId = saleOrderIdArr[i];
|
||||
sub.remark = ''
|
||||
sub.saleOrderSubId = sub.id
|
||||
sub.id = ''
|
||||
sub.saleOrderCode = sub.projectOrderCode
|
||||
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 {
|
||||
// 分类发货清单与其他物料清单
|
||||
formData.value.deliverOrderSubs = subArr.filter((sub) => sub.category == 'DELIVER_LIST')
|
||||
formData.value.deliverOrderOtherSubs = subArr.filter((sub) => sub.category == 'OTHER_LIST')
|
||||
}
|
||||
console.log("打印发货信息");
|
||||
console.log(formData.value.deliverOrderSubs);
|
||||
//console.log("打印发货信息");
|
||||
//
|
||||
// console.log(formData.value.deliverOrderSubs);
|
||||
// 操作日志
|
||||
let logParams = {
|
||||
pageNo: 1,
|
||||
|
@ -222,7 +222,10 @@
|
||||
<el-table-column min-width="120px" align="center" fixed="right">
|
||||
<template #header><span class="hl-table_header">*</span>需求完成日期</template>
|
||||
<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-form-item>
|
||||
</template>
|
||||
|
@ -312,9 +312,15 @@ v-model="row.owner" :disabled="detailDisabled || row.procedureStatus != 0"
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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 }">
|
||||
<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
|
||||
min="0" :precision="2" class="!w-240px"
|
||||
:disabled="detailDisabled " v-model="row.workTime"
|
||||
@ -775,7 +781,7 @@ watch(
|
||||
}
|
||||
}
|
||||
);
|
||||
watches.push(unwatchDeviceModel);
|
||||
// watches.push(unwatchDeviceModel);
|
||||
});
|
||||
}, {
|
||||
deep: true
|
||||
@ -980,11 +986,11 @@ const subFormRules = reactive({
|
||||
message: '负责人不能为空',
|
||||
trigger: 'blur'
|
||||
}],
|
||||
workTime: [{
|
||||
required: true,
|
||||
message: '预计工时不能为空',
|
||||
trigger: 'blur'
|
||||
}],
|
||||
// workTime: [{
|
||||
// required: true,
|
||||
// message: '预计工时不能为空',
|
||||
// trigger: 'blur'
|
||||
// }],
|
||||
amount: [{
|
||||
required: true,
|
||||
message: '派工数量不能为空',
|
||||
@ -1149,8 +1155,17 @@ const onAddItem = () => {
|
||||
checkListTemp.value = checkList.value;
|
||||
var list = [];
|
||||
var i = 1;
|
||||
var defaultStartTime = null;
|
||||
var defaultEndTme = null;
|
||||
var setSameTime = false;
|
||||
if(formData.value.taskDispatchDetails!=null){
|
||||
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){
|
||||
i ++
|
||||
list.push(item);
|
||||
@ -1173,6 +1188,8 @@ const onAddItem = () => {
|
||||
dispatchId: undefined,
|
||||
procedureCode:'' ,
|
||||
isReport:0 ,
|
||||
startTime:null,
|
||||
endTime:null
|
||||
}
|
||||
// 遍历对象的键
|
||||
// Object.keys(procedureList.value).forEach((key) => {
|
||||
@ -1203,6 +1220,10 @@ const onAddItem = () => {
|
||||
if(add){
|
||||
row.amount = formData.value.amount
|
||||
row.dispatchId = formData.value.id
|
||||
if(setSameTime ){
|
||||
row.startTime = defaultStartTime;
|
||||
row.endTime = defaultEndTme;
|
||||
}
|
||||
list.push(row)
|
||||
row.sort = i;
|
||||
i++;
|
||||
|
@ -136,6 +136,8 @@ const handleOk = async (active) => {
|
||||
}
|
||||
// 开始生产
|
||||
const handleStart = async () => {
|
||||
// 发送请求
|
||||
isLoading.value = true
|
||||
const params = {
|
||||
zjMxId: detailInfo.value?.id,
|
||||
workTime: workTime.value,
|
||||
|
@ -137,6 +137,7 @@ const handleOk = async (active) => {
|
||||
}
|
||||
// 开始生产
|
||||
const handleStart = async () => {
|
||||
isLoading.value = true;
|
||||
const params = {
|
||||
zjMxId: detailInfo.value?.id,
|
||||
workTime: workTime.value,
|
||||
|
Loading…
Reference in New Issue
Block a user