Compare commits

...

2 Commits

Author SHA1 Message Date
zhy
8f323c5038 Merge remote-tracking branch 'origin/main' 2025-06-25 04:18:32 +08:00
zhy
00b39b070b 零件采购单审批 2025-06-25 04:18:15 +08:00
11 changed files with 261 additions and 106 deletions

View File

@ -107,4 +107,16 @@ public class PurchaseOrderMakeController {
return success(pageResult);
}
@PutMapping("/updatePartCheck")
@Operation(summary = "更新采购审批通过状态")
public CommonResult<Boolean> updatePartCheck(@RequestParam("id") Long id) {
return success(partPurchaseOrderService.updatePartCheckStatus(id));
}
@PutMapping("/updatePartCheckNo")
@Operation(summary = "更新采购审批驳回状态")
public CommonResult<Boolean> updatePartCheckNo(@Valid @RequestBody PurchaseOrderMakeSaveReqVO updateReqVO) {
return success(partPurchaseOrderService.updatePartCheckStatusNo(updateReqVO));
}
}

View File

@ -28,11 +28,11 @@ public class PurchaseOrderMakeRespVO {
@Schema(description = "采购单类型1按物料需求计划采购2备库采购", example = "1")
@ExcelProperty("采购单类型1按物料需求计划采购2备库采购")
private Boolean purchaseType;
private Integer purchaseType;
@Schema(description = "采购物类型1物料2加工件", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("采购物类型1物料2加工件")
private Boolean goodsType;
private Integer goodsType;
@Schema(description = "结算币种", example = "2")
@ExcelProperty("结算币种")
@ -52,7 +52,7 @@ public class PurchaseOrderMakeRespVO {
@Schema(description = "单据状态,0 待送审1已送审2已审核3已打回 默认是1", example = "2")
@ExcelProperty("单据状态,0 待送审1已送审2已审核3已打回 默认是1")
private Boolean status;
private Integer status;
@Schema(description = "送审人", example = "17514")
@ExcelProperty("送审人")

View File

@ -78,4 +78,7 @@ public class PurchaseOrderMakeSaveReqVO {
@Schema(description = "项目名称简码")
private String projectNameSim;
@Schema(description = "驳回原因")
private String reason;
}

View File

@ -34,7 +34,6 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
*/
@TableId
private Long id;
/**
* 采购单id
*/
@ -47,9 +46,6 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
* 零件名称
*/
private String boomName;
@TableField(exist = false)
private String boomCode;
/**
* 规格型号
*/
@ -94,13 +90,10 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
* 供应商id
*/
private Long supplierId;
@TableField(exist = false)
private String supplierName;
/**
* 物料需求计划id
*/
private Long projectMaterialPlanId;
private Long materialId;
/**
* 物料需求计划子项目id
*/
@ -128,7 +121,6 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
/**
* 订单状态 未生成/已生成 1/2
*/
@TableField( "order_status")
private Integer orderStatus;
/**
* 子项目编码

View File

@ -40,7 +40,6 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.select("b.material_name as boomName","m.code as boomCode","b.spec as boomSpec","b.unit as boomUnit")
.select("pom.purchase_no as purchaseNo")
.leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,PurchaseOrderMakeDetailDO::getBoomDetailId)
.leftJoin(MaterialDO.class,"m",MaterialDO::getId,PurchaseOrderMakeDetailDO::getMaterialId)
.leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId)
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId)
.leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
@ -98,7 +97,7 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.like(Objects.nonNull(pageReqVO.getOwnerName()), AdminUserDO::getNickname, pageReqVO.getOwnerName())
.like(Objects.nonNull(pageReqVO.getSupplierName()), SupplierDO::getName, pageReqVO.getSupplierName());
System.out.println(query.getTargetSql());
String sqlStr= query.getTargetSql();
PageResult<PartPurchaseOrderPageRespVO> pageResult = selectJoinPage(pageReqVO, PartPurchaseOrderPageRespVO.class, query);
return pageResult;

View File

@ -4,6 +4,7 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakePageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
@ -31,4 +32,28 @@ public interface PartPurchaseOrderService {
* @return 零件采购订单生成信息提交
*/
boolean submit(List<PartPurchaseOrderPageRespVO> list);
/**
* 获得零件采购单审批分页
*
* @param pageReqVO 分页查询
* @return 零件采购单审批分页
*/
PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderCheckPage(PartPurchaseOrderPageReqVO pageReqVO);
/**
* 更新采购单审批状态为通过
*
* @param id
* @return 更新采购单审批状态
*/
boolean updatePartCheckStatus(Long id);
/**
* 更新采购单审批状态为驳回
*
* @param id
* @return 更新采购单审批状态
*/
boolean updatePartCheckStatusNo(PurchaseOrderMakeSaveReqVO updateReqVO);
}

View File

@ -1,14 +1,20 @@
package com.chanko.yunxi.mes.module.heli.service.partpurchaseorder;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.framework.mybatis.core.query.QueryWrapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermake.PurchaseOrderMakeMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
@ -39,6 +45,8 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
@Resource
private SerialNumberService serialNumberService;
@Resource
private MaterialPlanBoomMapper materialPlanBoomMapper;
@Override
public PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
@ -90,4 +98,57 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
return true;
}
@Override
public PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderCheckPage(PartPurchaseOrderPageReqVO pageReqVO) {
return null;
}
@Override
public boolean updatePartCheckStatus(Long id) {
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
purchaseOrderMakeDO.setId(id);
purchaseOrderMakeDO.setStatus(2);
purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO);
List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", id);
materialPlanBoomDOs.forEach(materialPlanBoomDO -> {
MaterialPlanBoomDO materialPlanBoom = new MaterialPlanBoomDO();
materialPlanBoom.setId(materialPlanBoomDO.getId());
materialPlanBoom.setMplanStatus(2);
materialPlanBoomMapper.updateById(materialPlanBoom);
});
return true;
}
@Override
public boolean updatePartCheckStatusNo(PurchaseOrderMakeSaveReqVO updateReqVO) {
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
purchaseOrderMakeDO.setId(updateReqVO.getId());
purchaseOrderMakeDO.setStatus(3);
purchaseOrderMakeDO.setDeleted(true);
purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO);
List<PurchaseOrderMakeDetailDO> list= purchaseOrderMakeDetailMapper.selectList("purchase_order_id", updateReqVO.getId());
list.forEach(detailDO -> {
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = new PurchaseOrderNoDetailDO();
purchaseOrderNoDetailDO.setId(detailDO.getPurchaseOrderNoDetailId());
purchaseOrderNoDetailDO.setDeleted(true);
purchaseOrderNoDetailMapper.updateById(purchaseOrderNoDetailDO);
});
List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", updateReqVO.getId());
materialPlanBoomDOs.forEach(materialPlanBoom -> {
UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", materialPlanBoom.getId())
.set("mplan_status", 3)
.set("project_purchase_order_make_id", null)
.set("purchase_no", null)
.set("project_purchase_order_make_detail_id", null)
.set("rej_remark", updateReqVO.getReason());
materialPlanBoomMapper.update(updateWrapper);
});
return true;
}
}

View File

@ -91,7 +91,6 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta
pd.setPurchaseOrderId(purchaseOrderNoDO.getId());
pd.setBoomDetailId(pmd.getBoomDetailId());
pd.setBoomName(pmd.getBoomName());
pd.setMaterialId(pmd.getMaterialId());
pd.setBoomSpec(pmd.getBoomSpec());
pd.setBoomUnit(pmd.getBoomUnit());
pd.setComposition(pmd.getComposition());

View File

@ -16,7 +16,7 @@ export interface PartPurchaseOrderVO {
description: string
}
// 查询零件采购订单计划分页
// 获取零件采购订单生成分页
export const getPartPage = async (params) => {
return await request.get({ url: `/heli/purchase-order-make/getPartPurchaseOrderPage`, params })
}
@ -25,7 +25,23 @@ export const submitForm = async (data) => {
return await request.post({ url: `/heli/purchase-order-no/submit`, data })
}
// 查询采购单主分页
// 获取零件采购单审批分页
export const getPartCheckPage = async (params) => {
return await request.get({ url: `/heli/purchase-order-make/page`, params })
}
// 查询采购单主
export const getPurchaseOrderMake = async (id: number) => {
return await request.get({ url: `/heli/purchase-order-make/get?id=` + id })
}
// 更新采购单主批准
export const updatePurchaseOrderMake = async (id: number) => {
return await request.put({ url: `/heli/purchase-order-make/updatePartCheck?id=` + id })
}
// 更新采购单主驳回
export const updatePurchaseOrderMakeNo = async (params) => {
return await request.put({ url: `/heli/purchase-order-make/updatePartCheckNo`, params })
}

View File

@ -60,8 +60,8 @@
</el-card>
</el-form>
<div class="hl-footer text-center">
<el-button @click="closeForm" size="large"> </el-button>
<el-button @click="closeForm" size="large"> </el-button>
<el-button @click="approve(formData.contractNo)" size="large"> </el-button>
<el-button @click="handleReject" size="large"> </el-button>
</div>
</el-card>
@ -87,7 +87,8 @@ import { useTagsViewStore } from '@/store/modules/tagsView'
import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue'
import booms from './boom.vue'
import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
import {getPartPage} from "@/api/heli/partpurchaseorder";
import { ElMessageBox } from 'element-plus'
import { ref } from 'vue'
const reload: any = inject('reload')
const { t } = useI18n() //
@ -122,10 +123,40 @@ const loading = ref(true) // 列表的加载中
const total = ref(0) //
const subBoomFormLoading = ref(false)
const subBoomFormRef = ref()
const updateParams = reactive({
id: formData.value.id,
reason: undefined
})
const approve = async (contractNo: string) => {
await PartPurchaseOrderApi.updatePurchaseOrderMake(formData.value.id)
}
const handleReject = async () => {
try {
const { value, action } = await ElMessageBox.prompt('请输入驳回原因', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /.+/, //
inputErrorMessage: '内容不能为空'
})
if (action === 'confirm') {
reject(value) // reject
}
} catch (err) {
//
console.log('操作取消或输入无效')
}
}
// reject
const reject = async(reason) => {
console.log('驳回原因:', reason)
updateParams.reason = reason
//
await PartPurchaseOrderApi.updatePurchaseOrderMakeNo(updateParams)
}
const closeForm = async () => {

View File

@ -48,27 +48,43 @@
<el-table-column label="序号" type="index" align="center" fixed min-width="70px" />
<el-table-column label="采购单号" align="center" prop="contractNo" min-width="180" fixed>
<template #default="scope">
<el-button text type="primary" @click="openForm('detail', scope.row.purchaseOrderId)">
<el-button text type="primary" @click="openForm('detail', scope.row.id)">
{{ scope.row.contractNo }}
</el-button>
</template>
</el-table-column>
<el-table-column label="采购单类型" align="center" prop="goodsType" min-width="180px" />
<el-table-column label="采购单类型" align="center" prop="goodsType" min-width="180px" >
<template #default="scope">
{{
getIntDictOptions(DICT_TYPE.HELI_PART_PURCHASE_ORDER_TYPE).find(
(dict) => dict.value === scope.row.goodsType
)?.label || '未知状态'
}}
</template>
</el-table-column>
<el-table-column label="客户简码" align="center" prop="brief" min-width="180px" />
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180px" />
<el-table-column label="项目简码" align="center" prop="projectNameSim" min-width="180px" />
<el-table-column label="单据状态" align="center" prop="status" min-width="180px" />
<el-table-column label="单据状态" align="center" prop="status" min-width="180px" >
<template #default="scope">
{{
getIntDictOptions(DICT_TYPE.HELI_DOCUMENT_STATUS).find(
(dict) => dict.value === scope.row.status
)?.label || '未知状态'
}}
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" min-width="180">
<template #default="scope">
<el-button
v-if="scope.row.status === 1"
link
type="primary"
@click="openForm('detail', scope.row.purchaseOrderId)"
@click="openForm('detail', scope.row.id)"
>
去审核
</el-button>
<el-button link type="primary" @click="openForm('detail', scope.row.purchaseOrderId)">
<el-button link type="primary" @click="openForm('detail', scope.row.id)">
查看详情
</el-button>
</template>
@ -88,6 +104,7 @@ import {DICT_TYPE, getIntDictOptions} from '@/utils/dict'
import { dateFormatter1} from '@/utils/formatTime'
import * as MaterialPlanApi from '@/api/heli/materialplan'
import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
import {getPartCheckPage} from "@/api/heli/partpurchaseorder";
defineOptions({ name: 'MaterialPlan' })
@ -125,7 +142,7 @@ const exportLoading = ref(false) // 导出的加载中
const getList = async () => {
loading.value = true
try {
const data = await PartPurchaseOrderApi.getPartPage(queryParams)
const data = await PartPurchaseOrderApi.getPartCheckPage(queryParams)
list.value = data.list
total.value = data.total
} finally {