【功能优化】完善项目订单列表查询

pull/1/head
zengchenxi 9 months ago
parent a11a73e542
commit 074d5e787a

@ -104,4 +104,10 @@ public class ProjectOrderPageReqVO extends PageParam {
@Schema(description = "业务员")
private Long businessMan;
@Schema(description = "客户名称")
private String customerName;
@Schema(description = "客户名称")
private String businessManName;
}

@ -35,13 +35,19 @@ public class ProjectOrderRespVO {
private Integer deliveryStatus;
@Schema(description = "提出部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "9959")
@ExcelProperty("提出部门id")
private Long businessDeptId;
@Schema(description = "提出部门", requiredMode = Schema.RequiredMode.REQUIRED, example = "9959")
@ExcelProperty("提出部门")
private String businessDeptName;
@Schema(description = "客户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27214")
@ExcelProperty("客户id")
private Long customerId;
@Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED, example = "27214")
@ExcelProperty("客户")
private String customerName;
@Schema(description = "模具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@ExcelProperty("模具名称")
private String mouldName;
@ -135,9 +141,12 @@ public class ProjectOrderRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "业务员id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long businessMan;
@Schema(description = "业务员", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("业务员")
private Long businessMan;
private String businessManName;
@Schema(description = "合同编号")
@ExcelProperty("合同编号")

@ -165,6 +165,15 @@ public class ProjectOrderDO extends BaseDO {
*/
private String contractNo;
@TableField(exist = false)
private String businessDeptName;
@TableField(exist = false)
private String customerName;
@TableField(exist = false)
private String businessManName;
public boolean canSave(){
return this.orderStatus.intValue() <= ProjectOrderStatusEnum.SAVE.getCode();
}
@ -194,7 +203,7 @@ public class ProjectOrderDO extends BaseDO {
return this.orderStatus.intValue() == ProjectOrderStatusEnum.SAVE.getCode() && this.hasAlter.intValue() == YesOrNoEnum.NO.getCode();
}
public boolean canOperate(final OperateTypeEnum operateTypeEnum){
public boolean canOperate(OperateTypeEnum operateTypeEnum){
switch (operateTypeEnum){
case SAVE:
return canSave();
@ -208,9 +217,15 @@ public class ProjectOrderDO extends BaseDO {
return canRepulse();
case TERMINATE:
return canTerminate();
case ALTER:
return canAlter();
default:
return false;
}
}
private boolean canAlter() {
return this.orderStatus.intValue() == ProjectOrderStatusEnum.APPROVE.getCode();
}
}

@ -2,10 +2,14 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.ProjectOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.DeptDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.util.StringUtils;
/**
* Mapper
@ -16,36 +20,22 @@ import org.apache.ibatis.annotations.Mapper;
public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
default PageResult<ProjectOrderDO> selectPage(ProjectOrderPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProjectOrderDO>()
.eqIfPresent(ProjectOrderDO::getCode, reqVO.getCode())
.eqIfPresent(ProjectOrderDO::getOrderStatus, reqVO.getOrderStatus())
.eqIfPresent(ProjectOrderDO::getDeliveryStatus, reqVO.getDeliveryStatus())
.eqIfPresent(ProjectOrderDO::getBusinessDeptId, reqVO.getBusinessDeptId())
.eqIfPresent(ProjectOrderDO::getCustomerId, reqVO.getCustomerId())
.likeIfPresent(ProjectOrderDO::getMouldName, reqVO.getMouldName())
.eqIfPresent(ProjectOrderDO::getBusinessLine, reqVO.getBusinessLine())
.eqIfPresent(ProjectOrderDO::getBlueprintNo, reqVO.getBlueprintNo())
.eqIfPresent(ProjectOrderDO::getHasPrice, reqVO.getHasPrice())
.eqIfPresent(ProjectOrderDO::getPrice, reqVO.getPrice())
.eqIfPresent(ProjectOrderDO::getCurrency, reqVO.getCurrency())
.betweenIfPresent(ProjectOrderDO::getProjectStartTime, reqVO.getProjectStartTime())
.betweenIfPresent(ProjectOrderDO::getProjectEndTime, reqVO.getProjectEndTime())
.eqIfPresent(ProjectOrderDO::getIsUrgency, reqVO.getIsUrgency())
.eqIfPresent(ProjectOrderDO::getProperty, reqVO.getProperty())
.eqIfPresent(ProjectOrderDO::getReferenceTechnology, reqVO.getReferenceTechnology())
.eqIfPresent(ProjectOrderDO::getHasAlter, reqVO.getHasAlter())
.betweenIfPresent(ProjectOrderDO::getLastAlterTime, reqVO.getLastAlterTime())
.eqIfPresent(ProjectOrderDO::getQualityRequirement, reqVO.getQualityRequirement())
.eqIfPresent(ProjectOrderDO::getRemark, reqVO.getRemark())
.eqIfPresent(ProjectOrderDO::getHasContract, reqVO.getHasContract())
.eqIfPresent(ProjectOrderDO::getHasTechnologyProtocol, reqVO.getHasTechnologyProtocol())
.eqIfPresent(ProjectOrderDO::getHasBlueprint, reqVO.getHasBlueprint())
.eqIfPresent(ProjectOrderDO::getBlueprintRemark, reqVO.getBlueprintRemark())
.eqIfPresent(ProjectOrderDO::getStatus, reqVO.getStatus())
.betweenIfPresent(ProjectOrderDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(ProjectOrderDO::getBusinessMan, reqVO.getBusinessMan())
.eqIfPresent(ProjectOrderDO::getContractNo, reqVO.getContractNo())
.orderByDesc(ProjectOrderDO::getId));
MPJLambdaWrapper<ProjectOrderDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProjectOrderDO.class)
.select("u.nickname as businessManName", "d.name as businessDeptName", "e.name as customerName")
.leftJoin(AdminUserDO.class, "u", AdminUserDO::getId, ProjectOrderDO::getBusinessMan)
.leftJoin(DeptDO.class, "d", DeptDO::getId, ProjectOrderDO::getBusinessDeptId)
.leftJoin(CustomerDO.class, "e", CustomerDO::getId, ProjectOrderDO::getCustomerId)
.disableSubLogicDel()
.orderByDesc(ProjectOrderDO::getId);
query.like(!StringUtils.isEmpty(reqVO.getCode()), ProjectOrderDO::getCode, reqVO.getCode())
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), "e.name", reqVO.getCustomerName())
.like(!StringUtils.isEmpty(reqVO.getBusinessManName()), "u.nickname", reqVO.getBusinessManName())
.like(!StringUtils.isEmpty(reqVO.getMouldName()), ProjectOrderDO::getMouldName, reqVO.getMouldName())
.eq(reqVO.getHasPrice() != null, ProjectOrderDO::getHasPrice, reqVO.getHasPrice())
.eq(reqVO.getOrderStatus() != null, ProjectOrderDO::getOrderStatus, reqVO.getOrderStatus())
.eq(reqVO.getDeliveryStatus() != null, ProjectOrderDO::getDeliveryStatus, reqVO.getDeliveryStatus());
return selectPage(reqVO, query);
}
}

@ -13,6 +13,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumber
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.ProjectOrderStatusEnum;
import com.chanko.yunxi.mes.module.heli.service.customer.CustomerService;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import org.springframework.stereotype.Service;
@ -82,6 +83,7 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
}
// 更新
ProjectOrderDO updateObj = BeanUtils.toBean(updateReqVO, ProjectOrderDO.class);
updateObj.setOrderStatus(ProjectOrderStatusEnum.valueOf(updateReqVO.getActive()).getCode());
projectOrderMapper.updateById(updateObj);
// 更新子表

@ -34,6 +34,7 @@
node-key="id"
clearable
placeholder="请选择提出部门"
:disabled="alterDisabled"
/>
</el-form-item>
</el-col>
@ -41,7 +42,9 @@
<el-row>
<el-col :span="24">
<el-form-item label="所属业务线" prop="businessLine">
<el-select v-model="formData.businessLine" placeholder="请选择所属业务线">
<el-select v-model="formData.businessLine" placeholder="请选择所属业务线"
:disabled="alterDisabled"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_BUSINESS_LINE)"
:key="dict.value"
@ -60,6 +63,7 @@
type="date"
value-format="x"
placeholder="选择项目开始日期"
:disabled="alterDisabled"
/>
</el-form-item>
</el-col>
@ -99,6 +103,7 @@
reserve-keyword
filterable
:loading="userSelectLoading"
:disabled="alterDisabled"
>
<el-option
v-for="item in userSelectList"
@ -113,7 +118,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="模具图号" prop="blueprintNo">
<el-input v-model="formData.blueprintNo" placeholder="请输入模具图号" />
<el-input :disabled="alterDisabled" v-model="formData.blueprintNo" placeholder="请输入模具图号" />
</el-form-item>
</el-col>
</el-row>
@ -150,6 +155,7 @@
reserve-keyword
filterable
:loading="customerSelectLoading"
:disabled="alterDisabled"
>
<el-option
v-for="item in customerSelectList"
@ -194,7 +200,7 @@
<el-row>
<el-col :span="24">
<el-form-item label="是否已变更" prop="hasAlter">
<el-radio-group v-model="formData.hasAlter">
<el-radio-group v-model="formData.hasAlter" disabled>
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)"
:key="dict.value"
@ -226,14 +232,14 @@
<el-row>
<el-col :span="24">
<el-form-item label="合同号" prop="contractNo">
<el-input v-model="formData.contractNo" placeholder="请输入合同号" />
<el-input :disabled="alterDisabled" v-model="formData.contractNo" placeholder="请输入合同号" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="模具名称" prop="mouldName">
<el-input v-model="formData.mouldName" placeholder="请输入模具名称" />
<el-input :disabled="alterDisabled" v-model="formData.mouldName" placeholder="请输入模具名称" />
</el-form-item>
</el-col>
</el-row>
@ -327,7 +333,7 @@
<el-row>
<el-col>
<el-card class="hl-incard">
<el-col>
<el-col v-if="('update,create'.indexOf(query.active) > -1)">
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem"></el-button>
</el-col>
<el-form ref="projectOrderSubFormRef" :model="formData.projectOrderSubs"
@ -407,6 +413,7 @@
<el-table-column label="操作" align="center" width="240">
<template #default="scope">
<el-button
v-if="('update,create'.indexOf(query.active) > -1) || !alterDisabled"
link
type="danger"
size="small"
@ -429,7 +436,7 @@
<el-row>
<el-col>
<el-card class="hl-incard">
<el-col>
<el-col v-if="('update,create'.indexOf(query.active) > -1)">
<el-upload
ref="contractUploadRef"
:file-list="contractUploadFiles"
@ -472,7 +479,7 @@
<el-table-column prop="createTime" align="center" label="上传时间" :formatter="dateFormatter"/>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button link type="danger" size="small" @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
<el-button v-if="('update,create'.indexOf(query.active) > -1)" link type="danger" size="small" @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
删除
</el-button>
<el-button v-if="!!scope.row.id" link type="primary" size="small" @click="downloadAttachment(scope.row.name, scope.row.url)"> </el-button>
@ -513,22 +520,25 @@
</el-form>
<div class="text-center hl-footer">
<el-button @click="() => router.back()" size="large"> </el-button>
<el-button @click="submitForm('SAVE')" type="success" size="large"
<el-button v-if="('update,create'.indexOf(query.active) > -1) && formData.orderStatus <= 4" @click="submitForm('SAVE')" type="success" size="large"
> </el-button
>
<el-button @click="submitForm('SUBMIT_AUDIT')" type="primary" size="large"
<el-button v-if="query.active == 'update' && formData.orderStatus < 8" @click="submitForm('SUBMIT_AUDIT')" type="primary" size="large"
> </el-button
>
<el-button @click="submitForm('AUDIT')" type="primary" size="large"
<el-button v-if="query.active == 'update' && formData.orderStatus == 8" @click="submitForm('AUDIT')" type="primary" size="large"
> </el-button
>
<el-button @click="submitForm('APPROVE')" type="primary" size="large"
<el-button v-if="query.active == 'update' && formData.orderStatus == 16" @click="submitForm('APPROVE')" type="primary" size="large"
> </el-button
>
<el-button @click="submitForm('REPULSE')" type="danger" size="large"
<el-button v-if="query.active == 'update' && formData.orderStatus == 32" @click="submitForm('ALTER')" type="danger" size="large"
>确定变更</el-button
>
<el-button v-if="query.active == 'update' && formData.orderStatus == 8 || formData.orderStatus == 16" @click="submitForm('REPULSE')" type="danger" size="large"
> </el-button
>
<el-button @click="submitForm('TERMINATE')" type="danger" size="large"
<el-button v-if="query.active == 'update' && formData.orderStatus == 16" @click="submitForm('TERMINATE')" type="danger" size="large"
>直接终止</el-button
>
</div>
@ -772,6 +782,40 @@ const submitForm = async (active) => {
formLoading.value = true
try {
const data = formData.value as unknown as ProjectOrderApi.ProjectOrderVO
if(active == 'SAVE'){
// 0
if(data.projectOrderSubs && data.projectOrderSubs.length > 0){
if(data.projectOrderSubs.some((sub) => !sub.amount || sub.amount <= 0)){
message.error("子项目数量不能为0")
return
}
}
}
if(active == 'SUBMIT_AUDIT'){
//
if(!data.projectOrderSubs || data.projectOrderSubs.length == 0){
message.error("子项目信息不能为空")
return
}
}
if(active == 'ALTER'){
// 0
if(data.projectOrderSubs && data.projectOrderSubs.length > 0){
const total = data.projectOrderSubs.reduce((acc,cur) => {
return acc+cur;
}, 0);
if(total <= 0){
message.error("子项目数量和不能为0")
return
}
}
}
const orderId = await ProjectOrderApi.operateProjectOrder(data)
message.success(t('common.operationSuccess'))
//
@ -914,6 +958,10 @@ const resetForm = () => {
const openMe = (url) => {
window.open(url)
}
const alterDisabled = () => {
return false;
}
onMounted(() => {
queryData(query.active, query.id);
})

@ -118,12 +118,13 @@
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column fixed label="序号" type="index" width="100"/>
<el-table-column fixed label="项目编号" align="center" prop="code" width="150"/>
<el-table-column fixed label="项目编号" align="center" prop="code" width="240"/>
<el-table-column
fixed
label="订单日期"
align="center"
prop="createTime"
:formatter="dateFormatter"
:formatter="dateFormatter2"
width="180"
/>
<el-table-column label="提出部门" align="center" prop="businessDeptName" width="150" />
@ -152,7 +153,7 @@
<dict-tag :type="DICT_TYPE.HELI_COMMON_IS_OR_NOT" :value="scope.row.isUrgency" />
</template>
</el-table-column>
<el-table-column label="性质" align="center" prop="property">
<el-table-column label="性质" align="center" prop="property" width="120">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
</template>
@ -167,17 +168,17 @@
<dict-tag :type="DICT_TYPE.HELI_COMMON_IS_OR_NOT" :value="scope.row.hasAlter" />
</template>
</el-table-column>
<el-table-column label="单据状态" align="center" prop="orderStatus" fixed="right" width="150">
<el-table-column label="单据状态" align="center" prop="orderStatus" fixed="right" width="120">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_PROJECT_ORDER_STATUS" :value="scope.row.orderStatus" />
</template>
</el-table-column>
<el-table-column label="发货状态" align="center" prop="deliveryStatus" fixed="right" width="150">
<el-table-column label="发货状态" align="center" prop="deliveryStatus" fixed="right" width="120">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_DELIVERY_STATUS" :value="scope.row.deliveryStatus" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="240">
<el-table-column label="操作" align="center" fixed="right" width="260">
<template #default="scope">
<el-button
link
@ -196,16 +197,18 @@
编辑
</el-button>
<el-dropdown @command="(command) => handleCommand(command, scope.row.id)">
<span class="el-dropdown-link">
更多<el-icon class="el-icon--right"><arrow-down /></el-icon>
<span class="el-dropdown-link">更多
<el-icon class="el-icon--right">
<arrow-down />
</el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="detail">查看详情</el-dropdown-item>
<el-dropdown-item command="printProject">打印开发项目启动单</el-dropdown-item>
<el-dropdown-item command="alterProject">订单变更</el-dropdown-item>
<el-dropdown-item v-if="scope.row.orderStatus == 32" command="alterProject"></el-dropdown-item>
<el-dropdown-item command="viewAlterProject">查看变更日志</el-dropdown-item>
<el-dropdown-item command="delivery">去发货</el-dropdown-item>
<el-dropdown-item v-if="scope.row.orderStatus == 32" command="delivery"></el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
@ -225,7 +228,7 @@
<script setup lang="ts">
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter, formatDate} from '@/utils/formatTime'
import {dateFormatter, dateFormatter2, formatDate} from '@/utils/formatTime'
import download from '@/utils/download'
import * as ProjectOrderApi from '@/api/heli/projectorder'
@ -348,3 +351,12 @@ onMounted(() => {
getList()
})
</script>
<style scoped>
.el-dropdown-link {
cursor: pointer;
color: var(--el-color-primary);
display: flex;
align-items: center;
}
</style>

Loading…
Cancel
Save