【需求开发】完成订单发货基础功能

pull/3/head
zengchenxi 9 months ago
parent 3857b0c162
commit 48cef0447a

@ -0,0 +1,21 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
/**
*
* @author chenxi
* @date 2024-01-18 01:19
*/
@Getter
public enum DeliverSubCategoryEnum {
DELIVER_LIST("发货清单"),
OTHER_LIST("其他清单")
;
private String description;
DeliverSubCategoryEnum(String description) {
this.description = description;
}
}

@ -49,8 +49,8 @@ public interface ErrorCodeConstants {
/************订单管理***********/
ErrorCode PROJECT_ORDER_NOT_EXISTS = new ErrorCode(1_004_001, "项目订单不存在");
/************发货管理***********/
ErrorCode DELIVER_ORDER_NOT_EXISTS = new ErrorCode(1_005_001, "发货订单不存在");
ErrorCode RELATION_PROJECT_ORDER_HAS_DONE = new ErrorCode(1_005_002, "关联项目订单已经发货完成");
ErrorCode DELIVER_AMOUNT_OVERFLOW = new ErrorCode(1_005_003, "超额发货");
}

@ -0,0 +1,24 @@
package com.chanko.yunxi.mes.module.heli.enums;
import lombok.Getter;
/**
*
* @author chenxi
* @date 2024-01-18 01:19
*/
@Getter
public enum ProjectOrderDeliverStatusEnum {
NOT(1, "未发货"),
PART(2, "部分发货"),
ALL(3, "全部发货")
;
private int code;
private String description;
ProjectOrderDeliverStatusEnum(int code, String description) {
this.code = code;
this.description = description;
}
}

@ -1,13 +1,15 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import java.util.List;
@Schema(description = "管理后台 - 发货订单新增/修改 Request VO")
@Data
@ -85,7 +87,11 @@ public class DeliverOrderSaveReqVO {
@Schema(description = "操作意见")
private String activeOpinion;
@Valid
@Schema(description = "发货订单子项列表")
private List<DeliverOrderSubDO> deliverOrderSubs;
@Valid
@Schema(description = "发货订单子项列表")
private List<DeliverOrderSubDO> deliverOrderOtherSubs;
}

@ -7,6 +7,8 @@ import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
import javax.validation.constraints.Min;
/**
* DO
*
@ -48,6 +50,7 @@ public class DeliverOrderSubDO extends BaseDO {
/**
*
*/
@Min(value = 1, message = "数量必须大于零")
private Integer amount;
/**
*

@ -49,10 +49,11 @@ public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
default ProjectOrderDO selectById(Long id) {
MPJLambdaWrapper<ProjectOrderDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProjectOrderDO.class)
.select("u.nickname as businessManName", "d.name as businessDeptName", "u1.nickname as creatorName")
.select("u.nickname as businessManName", "d.name as businessDeptName", "u1.nickname as creatorName", "e.name as customerName")
.leftJoin(AdminUserDO.class, "u", AdminUserDO::getId, ProjectOrderDO::getBusinessMan)
.leftJoin(AdminUserDO.class, "u1", AdminUserDO::getId, ProjectOrderDO::getCreator)
.leftJoin(DeptDO.class, "d", DeptDO::getId, ProjectOrderDO::getBusinessDeptId)
.leftJoin(CustomerDO.class, "e", CustomerDO::getId, ProjectOrderDO::getCustomerId)
.eq(ProjectOrderDO::getId, id)
.last("LIMIT 1")
.disableSubLogicDel();

@ -0,0 +1,81 @@
package com.chanko.yunxi.mes.module.heli.manager;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverordersub.DeliverOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.enums.DeliverOrderStatusEnum;
import com.chanko.yunxi.mes.module.heli.enums.ProjectOrderDeliverStatusEnum;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
*
* @author chenxi
* @date 2024-01-31 10:03
*/
@Component
public class CrossOrderStatusManager {
@Resource
private ProjectOrderMapper projectOrderMapper;
@Resource
private ProjectOrderSubMapper projectOrderSubMapper;
@Resource
private DeliverOrderSubMapper deliverOrderSubMapper;
/**
*
* @param projectOrderIds
*/
@Transactional(rollbackFor = Exception.class)
public void refreshProjectOrderDeliverStatus(String... projectOrderIds) {
// 锁定订单
for (String projectOrderId : projectOrderIds) {
ProjectOrderDO projectOrderDO = projectOrderMapper.selectOne(new LambdaQueryWrapper<ProjectOrderDO>() {{
eq(ProjectOrderDO::getId, projectOrderId);
last("LIMIT 1 FOR UPDATE");
}});
// 查询关联子项
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()) return;
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());
}else{
projectOrderDO.setDeliveryStatus(ProjectOrderDeliverStatusEnum.PART.getCode());
}
projectOrderMapper.updateById(projectOrderDO);
}
}
}

@ -8,25 +8,34 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.Deliver
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.DeliverOrderSaveReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverordersub.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverordersub.DeliverOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.DeliverOrderStatusEnum;
import com.chanko.yunxi.mes.module.heli.enums.ProjectOrderDeliverStatusEnum;
import com.chanko.yunxi.mes.module.heli.manager.CrossOrderStatusManager;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PROJECT_DELIVERY_ORDER;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.DELIVER_ORDER_NOT_EXISTS;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.INVALID_OPERATE;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
* Service
@ -43,6 +52,12 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
private DeliverOrderSubMapper deliverOrderSubMapper;
@Resource
private SerialNumberService serialNumberService;
@Resource
private ProjectOrderMapper projectOrderMapper;
@Resource
private ProjectOrderSubMapper projectOrderSubMapper;
@Resource
private CrossOrderStatusManager crossOrderStatusManager;
@Override
@Transactional(rollbackFor = Exception.class)
@ -60,9 +75,18 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
if(createReqVO.getDeliverOrderSubs() != null && !createReqVO.getDeliverOrderSubs().isEmpty()){
createDeliverOrderSubList(deliverOrder.getId(), createReqVO.getDeliverOrderSubs());
}
if(createReqVO.getDeliverOrderOtherSubs() != null && !createReqVO.getDeliverOrderOtherSubs().isEmpty()){
createDeliverOrderSubList(deliverOrder.getId(), createReqVO.getDeliverOrderOtherSubs());
}
createReqVO.setId(deliverOrder.getId()).setCode(deliverOrder.getCode());
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
OperateTypeEnum operateTypeEnum = OperateTypeEnum.valueOf(createReqVO.getActive());
if(operateTypeEnum == OperateTypeEnum.DELIVER) {
crossOrderStatusManager.refreshProjectOrderDeliverStatus(createReqVO.getSaleOrderIds().split(","));
}
// 返回
return deliverOrder.getId();
}
@ -72,9 +96,56 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
public void updateDeliverOrder(DeliverOrderSaveReqVO updateReqVO) {
// 校验存在
DeliverOrderDO oldDO = validateDeliverOrderExists(updateReqVO.getId());
if(!oldDO.canOperate(OperateTypeEnum.valueOf(updateReqVO.getActive()))){
OperateTypeEnum operateTypeEnum = OperateTypeEnum.valueOf(updateReqVO.getActive());
if(!oldDO.canOperate(operateTypeEnum)){
throw exception(INVALID_OPERATE);
}
// 校验数据 不容许超额发货
if(operateTypeEnum == OperateTypeEnum.DELIVER){
List<DeliverOrderSubDO> thisTimeSubs = updateReqVO.getDeliverOrderSubs();
List<DeliverOrderSubDO> thisTimeRelaSubList = thisTimeSubs.stream().filter(deliverOrderSubDO -> deliverOrderSubDO.getSaleOrderSubId() != null).collect(Collectors.toList());
if(!thisTimeRelaSubList.isEmpty()){
// 锁定订单
LambdaQueryWrapper<ProjectOrderDO> projectQuery = new LambdaQueryWrapper<>();
projectQuery.in(ProjectOrderDO::getId, updateReqVO.getSaleOrderIds().split(",")).last("FOR UPDATE");
List<ProjectOrderDO> projectOrderDOList = projectOrderMapper.selectList(projectQuery);
// 状态判断 已发货不容许操作
boolean anyoneDone = projectOrderDOList.stream().anyMatch(projectOrderDO -> {
return projectOrderDO.getOrderStatus().intValue() == ProjectOrderDeliverStatusEnum.ALL.getCode();
});
if(anyoneDone){
throw exception(RELATION_PROJECT_ORDER_HAS_DONE);
}
// 查询关联子项目信息判断额度
Map<Long, List<DeliverOrderSubDO>> thisTimeSubsGroupBySaleSubId = thisTimeRelaSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
List<ProjectOrderSubDO> relaProjectOrderSubList = projectOrderSubMapper.selectBatchIds(thisTimeSubsGroupBySaleSubId.keySet());
// 查询历史发货信息
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, thisTimeSubsGroupBySaleSubId.keySet());
List<DeliverOrderSubDO> historyDeliveredSubList = deliverOrderSubMapper.selectList(historyDeliveredSubQuery);
Map<Long, List<DeliverOrderSubDO>> historyDeliveredSubsGroupBySaleSubId = historyDeliveredSubList.stream().collect(Collectors.groupingBy(DeliverOrderSubDO::getSaleOrderSubId));
// 关联额度-历史发货额度-本次发货额度 >= 0 则可通过
boolean allDeliverable = relaProjectOrderSubList.stream().allMatch(relaSub -> {
int relaAmount = relaSub.getAmount();
List<DeliverOrderSubDO> historySubList = historyDeliveredSubsGroupBySaleSubId.get(relaSub.getId());
int historyDeliveredAmount = historySubList == null || historySubList.isEmpty() ? 0 : historySubList.stream().mapToInt(DeliverOrderSubDO::getAmount).sum();
int thisTimeAmount = thisTimeSubsGroupBySaleSubId.get(relaSub.getId()).get(0).getAmount();
return relaAmount-historyDeliveredAmount-thisTimeAmount >= 0;
});
if(!allDeliverable){
throw exception(DELIVER_AMOUNT_OVERFLOW);
}
}
}
// 更新
DeliverOrderDO updateObj = BeanUtils.toBean(updateReqVO, DeliverOrderDO.class);
updateObj.setDeliverStatus(DeliverOrderStatusEnum.valueOf(updateReqVO.getActive()).getCode());
@ -82,7 +153,11 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
updateReqVO.setDeliverStatus(updateObj.getDeliverStatus());
// 更新子表
updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs());
updateDeliverOrderSubList(updateReqVO.getId(), updateReqVO.getDeliverOrderSubs(), updateReqVO.getDeliverOrderOtherSubs());
if(operateTypeEnum == OperateTypeEnum.DELIVER) {
crossOrderStatusManager.refreshProjectOrderDeliverStatus(updateReqVO.getSaleOrderIds().split(","));
}
}
@Override
@ -140,10 +215,14 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
deliverOrderSubMapper.insertBatch(list);
}
private void updateDeliverOrderSubList(Long deliveryOrderId, List<DeliverOrderSubDO> list) {
private void updateDeliverOrderSubList(Long deliveryOrderId, List<DeliverOrderSubDO> list, @Valid List<DeliverOrderSubDO> deliverOrderOtherSubs) {
deleteDeliverOrderSubByDeliveryOrderId(deliveryOrderId);
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createDeliverOrderSubList(deliveryOrderId, list);
if(deliverOrderOtherSubs != null || !deliverOrderOtherSubs.isEmpty()){
deliverOrderOtherSubs.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createDeliverOrderSubList(deliveryOrderId, deliverOrderOtherSubs);
}
}
private void deleteDeliverOrderSubByDeliveryOrderId(Long deliveryOrderId) {

@ -117,7 +117,7 @@
</el-row>
</el-card>
<el-card class="hl-card-info" v-if="formType != 'create'">
<el-card class="hl-card-info" v-if="query.active != 'create'">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">收货信息</span>
</template>
@ -202,7 +202,7 @@
</el-row>
</el-card>
<el-card class="hl-card-info" v-if="formType != 'create'">
<el-card class="hl-card-info" v-if="query.active != 'create'">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">发货清单</span>
</template>
@ -285,7 +285,7 @@
<el-table-column label="操作" align="center" width="100">
<template #default="scope">
<el-button
v-if="'update,create'.indexOf(query.active) > -1"
v-if="'update,create,deliver'.indexOf(query.active) > -1"
link
type="danger"
size="small"
@ -302,12 +302,12 @@
</el-row>
</el-card>
<el-card class="hl-card-info" v-if="formType != 'create'">
<el-card class="hl-card-info" v-if="query.active != 'create'">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">其他物料清单</span>
</template>
<el-row>
<el-col v-if="formType != 'detail'">
<el-col v-if="query.active != 'detail'">
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem2"
>新增</el-button
>
@ -335,6 +335,7 @@
</template>
</el-table-column>
<el-table-column label="所属类型" min-width="150">
<template #header> <span class="hl-table_header">*</span>所属类型 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subType`" :rules="subFormRules.subType" class="mb-0px!">
<el-select :disabled="detailDisabled" v-model="row.subType" placeholder="请选择子项类型">
@ -364,6 +365,7 @@
</template>
</el-table-column>
<el-table-column label="单位" min-width="150">
<template #header> <span class="hl-table_header">*</span>单位 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px!">
<el-select :disabled="detailDisabled" v-model="row.unit" placeholder="请选择单位">
@ -387,7 +389,7 @@
<el-table-column label="操作" align="center" width="240">
<template #default="scope">
<el-button
v-if="'update,create'.indexOf(query.active) > -1"
v-if="'update,create,deliver'.indexOf(query.active) > -1"
link
type="danger"
size="small"
@ -404,12 +406,12 @@
</el-row>
</el-card>
<el-card class="hl-card-info" v-if="formType != 'create'">
<el-card class="hl-card-info" v-if="query.active != 'create'">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">附件信息</span>
</template>
<el-row>
<el-col v-if="formType != 'detail'">
<el-col v-if="query.active != 'detail'">
<el-upload
ref="attachmentUploadRef"
multiple
@ -439,7 +441,7 @@
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
v-if="'update,create'.indexOf(query.active) > -1"
v-if="'update,create,deliver'.indexOf(query.active) > -1"
link
type="danger"
size="small"
@ -492,12 +494,12 @@
</el-form>
<div class="text-center hl-footer">
<el-button @click="goback" size="large"> </el-button>
<el-button v-if="formType != 'detail' && formData.deliverStatus == 1" @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large"
> </el-button
>
<el-button v-if="formType != 'detail' && formData.deliverStatus == 1 && formData.id" @click="submitForm('DELIVER')" type="primary" :disabled="formLoading" size="large"
> </el-button
>
<el-button v-if="query.active != 'detail' && formData.deliverStatus == 1" @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large"
> </el-button>
<el-button v-if="(((query.active != 'detail' && formData.id) || query.active == 'deliver') && formData.deliverStatus == 1)" @click="submitForm('DELIVER')" type="primary" :disabled="formLoading" size="large"
> </el-button>
<el-button v-if="query.active == 'detail' && formData.deliverStatus == 2 && formData.id" type="primary" :disabled="formLoading" size="large"
>打印发货单</el-button>
</div>
</el-card>
<ProjectOrderDialog ref="projectOrderDialog" @success="handleSelectedProjectOrder" />
@ -517,8 +519,16 @@ import {getAccessToken, getTenantId} from "@/utils/auth";
import {dateFormatter} from "@/utils/formatTime";
import download from "@/utils/download";
import { inject } from 'vue'
import {getProjectOrderSubListByProjectOrderId, ProjectOrderVO} from "@/api/heli/projectorder";
import {
getProjectOrder,
getProjectOrderSubListByProjectOrderId,
ProjectOrderVO
} from "@/api/heli/projectorder";
import {getCustomer} from "@/api/heli/customer";
import ProjectOrderDialog from "@/views/heli/deliverorder/projectOrderDialog.vue";
defineOptions({ name: 'DeliverOrderDetail' })
const reload = inject('reload')
const { t } = useI18n() //
@ -594,7 +604,7 @@ const submitForm = async (active) => {
formData.value.active = active
await formRef.value.validate()
//
if(formType.value != 'create'){
if(query.active != 'create'){
await subFormRef.value.validate()
await otherSubFormRef.value.validate()
}
@ -611,10 +621,6 @@ const submitForm = async (active) => {
item.status = 1
})
const data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO
if(formData.value.deliverOrderOtherSubs){
data.deliverOrderSubs = data.deliverOrderSubs.concat(formData.value.deliverOrderOtherSubs)
}
const orderId = await DeliverOrderApi.operateDeliverOrder(data)
message.success(t('common.operationSuccess'))
//
@ -623,15 +629,15 @@ const submitForm = async (active) => {
attachmentUploadRef.value!.submit()
}
//
if (active != 'SAVE') {
goback()
} else {
//
if (active == 'SAVE') {
if(query.active != 'deliver'){
query.active = 'update'
}
}else if(active == 'DELIVER'){
query.active = 'detail'
}
query.id = orderId
reload()
}
} finally {
formLoading.value = false
}
@ -769,15 +775,23 @@ const downloadAttachment = async (name, url) => {
/** 打开弹窗 */
const queryData = async (type: string, id?: number) => {
console.log(type, id)
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
formLoading.value = true
try {
if (id) {
formData.value = await DeliverOrderApi.getDeliverOrder(id)
formData.value.deliverCompany = '杭州合立机械有限公司'
//
let properties = formData.value.property.split(",")
let property = "";
for (let i = 0; i < properties.length; i++) {
property += getDictLabel(DICT_TYPE.HELI_PROJECT_PROPERTY, properties[i]) + ",";
}
formData.value.property = property.substring(0, property.length-1);
//
const subArr = await DeliverOrderApi.getDeliverOrderSubListByDeliveryOrderId(id)
//
@ -817,6 +831,14 @@ const queryData = async (type: string, id?: number) => {
}
formData.value.attachments = (await getFilePage(attParams)).list
await initCustomerInfo()
}
} finally {
formLoading.value = false
}
}
const initCustomerInfo = async () => {
//
const customer = await getCustomer(formData.value.customerId)
if(customer.contact1Name){
@ -846,16 +868,11 @@ const queryData = async (type: string, id?: number) => {
"address": customer.contact3Addr
})
}
}
} finally {
formLoading.value = false
}
}
const projectOrderDialog = ref()
const openProjectOrderDialog = () => {
projectOrderDialog.value.open()
projectOrderDialog.value?.open()
}
const handleSelectedProjectOrder = (arr: ProjectOrderVO[]) => {
@ -894,13 +911,39 @@ const receiveOnChange = (val) => {
formData.value.receivePersonMobile = matchedPerson.mobile
}
}
const detailDisabled = ref(false)
onMounted(() => {
const initDeliverData = async (projectOrderId) => {
let projectOrder = await getProjectOrder(projectOrderId);
handleSelectedProjectOrder([projectOrder])
formData.value.deliverOrderSubs = [];
formData.value.deliverOrderSubs = formData.value.deliverOrderSubs.concat(await getProjectOrderSubListByProjectOrderId(projectOrderId));
formData.value.deliverOrderSubs.forEach(sub => {
sub.remark = ''
sub.saleOrderSubId = sub.id
sub.id = ''
sub.saleOrderCode = sub.projectOrderCode
})
await initCustomerInfo()
}
const initData = async () => {
resetForm()
if('detail' == query.active){
detailDisabled.value = true
}
queryData(query.active, query.id)
if('deliver' == query.active && query.projectOrderId){
await initDeliverData(query.projectOrderId)
}
await queryData(query.active, query.id)
}
const detailDisabled = ref(false)
onMounted(() => {
initData()
})
</script>
<style>
a {

@ -128,6 +128,7 @@
<el-table-column fixed="right" label="操作" align="center" width="220">
<template #default="scope">
<el-button
v-if="scope.row.deliverStatus == 1"
link
type="danger"
@click="handleDelete(scope.row.id)"
@ -135,6 +136,7 @@
删除
</el-button>
<el-button
v-if="scope.row.deliverStatus == 1"
link
type="primary"
@click="openDetail('update', scope.row.id)"

@ -268,10 +268,7 @@
>订单变更</el-dropdown-item
>
<el-dropdown-item command="viewArchive">查看归档日志</el-dropdown-item>
<!-- 临时隐藏分阶段上线 -->
<!-- <el-dropdown-item v-if="scope.row.orderStatus == 32" command="delivery"
>去发货</el-dropdown-item
>-->
<el-dropdown-item v-if="scope.row.orderStatus == 32 && scope.row.deliveryStatus != 3" command="delivery"></el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
@ -432,7 +429,14 @@ const handleCommand = async (command, id, code) => {
})
break
case 'delivery':
// TODO
router.push({
name: 'DeliverOrderDetail',
query: {
active: 'deliver',
projectOrderId: id,
operateId: Math.random()
}
})
break
}
}

Loading…
Cancel
Save