零件采购订单计划

This commit is contained in:
zhy 2025-06-21 20:43:05 +08:00
parent 2ec805965f
commit 913318d152
9 changed files with 241 additions and 50 deletions

View File

@ -102,11 +102,8 @@ public class PurchaseOrderMakeController {
@GetMapping("/getPartPurchaseOrderPage")
@Operation(summary = "获得零件采购订单生成分页")
// @PreAuthorize("@ss.hasPermission('heli:material-plan:query')")
public CommonResult<PageResult<PurchaseOrderMakeDetailDO>> getPartPurchaseOrderPage(@Valid PartPurchaseOrderPageReqVO partPurchaseOrderPageReqVO) {
// PageResult<TaskDispatchDetailDO> pageResult = materialPlanService.getPartPage(pageReqVO);
// return success(pageResult);
PageResult<PurchaseOrderMakeDetailDO> pageResult = partPurchaseOrderService.getPartPurchaseOrderPage(partPurchaseOrderPageReqVO);
public CommonResult<PageResult<PartPurchaseOrderPageRespVO>> getPartPurchaseOrderPage(@Valid PartPurchaseOrderPageReqVO partPurchaseOrderPageReqVO) {
PageResult<PartPurchaseOrderPageRespVO> pageResult = partPurchaseOrderService.getPartPurchaseOrderPage(partPurchaseOrderPageReqVO);
return success(pageResult);
}

View File

@ -2,6 +2,8 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -13,42 +15,131 @@ import java.time.LocalDateTime;
@Schema(description = "管理后台 - 零件采购订单生成分页 Response VO")
@Data
@ExcelIgnoreUnannotated
public class PartPurchaseOrderPageRespVO {
public class PartPurchaseOrderPageRespVO extends BaseDO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "22882")
@ExcelProperty("自增字段,唯一")
/**
* 自增字段唯一
*/
@TableId
private Long id;
@Schema(description = "子项目编码")
@ExcelProperty("子项目编码")
private String projectSubCode;
@Schema(description = "零件名称", example = "芋艿")
@ExcelProperty("零件名称")
/**
* 采购单id
*/
private Long purchaseOrderId;
/**
* 加工件boom detail id
*/
private Long boomDetailId;
/**
* 零件名称
*/
private String boomName;
@Schema(description = "材质")
@ExcelProperty("材质")
/**
* 规格型号
*/
private String boomSpec;
/**
* 系统单位
*/
private String boomUnit;
/**
* 材质
*/
private String composition;
@Schema(description = "采购数量")
@ExcelProperty("采购数量")
/**
* 采购数量
*/
private BigDecimal purchaseAmount;
@Schema(description = "预计到货日期")
@ExcelProperty("预计到货日期")
/**
* 暂估价金额
*/
private BigDecimal estimatedPrice;
/**
* 实际价金额
*/
private BigDecimal actualPrice;
/**
* 预计到货日期
*/
private LocalDateTime arriveTime;
@Schema(description = "供应商名称")
@ExcelProperty("供应商名称")
private Long supplierName;
@Schema(description = "备注", example = "你说的对")
@ExcelProperty("备注")
/**
* 备注
*/
private String description;
@Schema(description = "零件理论重量")
@ExcelProperty("零件理论重量")
/**
* 需求数量
*/
private BigDecimal boomAmount;
/**
* 需求到货日期
*/
private LocalDateTime requireTime;
/**
* 供应商id
*/
private Long supplierId;
/**
* 供应商名称
*/
private String supplierName;
/**
* 物料需求计划id
*/
private Long projectMaterialPlanId;
/**
* 物料需求计划子项目id
*/
private Long projectMaterialPlanBoomId;
/**
* 订单子项目id
*/
private Long projectPlanSubId;
/**
* 子项目名称唯一
*/
private String name;
/**
* 子项目简码
*/
private String nameSim;
/**
* 采购订单主表id
*/
private Long purchaseOrderNoId;
/**
* 采购订单明细表id
*/
private Long purchaseOrderNoDetailId;
/**
* 订单状态 未生成/已生成 1/2
*/
private Boolean orderStatus;
/**
* 子项目编码
*/
private String projectSubCode;
/**
* 收货状态 未收货/收货中/收货完成 1/2/3
*/
private Boolean receivingStatus;
/**
* 采购单号
*/
private String purchaseNo;
/**
* 工序id
*/
private Long procedureId;
/**
* 零件理论重量
*/
private BigDecimal theWeight;
/**
* 责任人id
*/
private Long duEmpId;
/**
* 责任人名称
*/
private String duEmpName;
}

View File

@ -3,10 +3,14 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorder.vo.PurchaseOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorder.vo.PurchaseOrderRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorder.vo.PurchaseOrderSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno.vo.PurchaseOrderNoPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno.vo.PurchaseOrderNoRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorderno.vo.PurchaseOrderNoSaveReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.service.partpurchaseorder.PartPurchaseOrderService;
import com.chanko.yunxi.mes.module.heli.service.purchaseorderno.PurchaseOrderNoService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -43,6 +47,9 @@ public class PurchaseOrderNoController {
@Resource
private PurchaseOrderNoService purchaseOrderNoService;
@Resource
private PartPurchaseOrderService partPurchaseOrderService;
@PostMapping("/create")
@Operation(summary = "创建采购订单主")
@PreAuthorize("@ss.hasPermission('project:purchase-order-no:create')")
@ -120,4 +127,11 @@ public class PurchaseOrderNoController {
purchaseOrderNoService.updatePurchaseOrderNo(purchaseOrderVO);
return success(true);
}
@PostMapping("/submit")
@Operation(summary = "提交订单生成信息")
public CommonResult<Boolean> submit(@Valid @RequestBody List<PartPurchaseOrderPageRespVO> list) {
return success(partPurchaseOrderService.submit(list));
}
}

View File

@ -3,13 +3,9 @@ package com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno;
import lombok.*;
import java.time.*;
import java.util.*;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;

View File

@ -7,10 +7,14 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
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.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
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.supplier.SupplierDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.*;
@ -57,18 +61,30 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.orderByDesc(PurchaseOrderMakeDetailDO::getId));
}
default PageResult<PurchaseOrderMakeDetailDO> selectPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
default PageResult<PartPurchaseOrderPageRespVO> selectPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class)
.select("c.nickname as duEmpName")
.select("d.name as supplierName")
.leftJoin(PurchaseOrderMakeDO.class,"a",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
.leftJoin(ProjectOrderDO.class,"b",ProjectOrderDO::getId,PurchaseOrderMakeDO::getProjectId)
.leftJoin(AdminUserDO.class,"c", AdminUserDO::getId,PurchaseOrderMakeDetailDO::getDuEmpId)
.leftJoin(SupplierDO.class, "d", SupplierDO::getId,PurchaseOrderMakeDetailDO::getSupplierId)
.disableLogicDel()
.disableSubLogicDel()
.eq(PurchaseOrderMakeDO::getGoodsType, 2)
.eq(StringUtils.isNotBlank(pageReqVO.getProjectName()), PurchaseOrderMakeDO::getProjectName, pageReqVO.getProjectName())
.eq(StringUtils.isNotBlank(pageReqVO.getProjectSubName()), PurchaseOrderMakeDetailDO::getName, pageReqVO.getProjectSubName())
.eq(StringUtils.isNotBlank(pageReqVO.getMaterialName()), PurchaseOrderMakeDetailDO::getBoomName, pageReqVO.getMaterialName())
.eq(Objects.nonNull(pageReqVO.getStatus()), PurchaseOrderMakeDetailDO::getOrderStatus, pageReqVO.getStatus());
return selectPage(pageReqVO, query);
.like(StringUtils.isNotBlank(pageReqVO.getProjectName()), PurchaseOrderMakeDO::getProjectName, pageReqVO.getProjectName())
.like(StringUtils.isNotBlank(pageReqVO.getProjectSubName()), PurchaseOrderMakeDetailDO::getName, pageReqVO.getProjectSubName())
.like(StringUtils.isNotBlank(pageReqVO.getMaterialName()), PurchaseOrderMakeDetailDO::getBoomName, pageReqVO.getMaterialName())
.eq(Objects.nonNull(pageReqVO.getStatus()), PurchaseOrderMakeDetailDO::getOrderStatus, pageReqVO.getStatus())
.eq(Objects.nonNull(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
.like(Objects.nonNull(pageReqVO.getOwnerName()), AdminUserDO::getNickname, pageReqVO.getOwnerName())
.like(Objects.nonNull(pageReqVO.getSupplierName()), SupplierDO::getName, pageReqVO.getSupplierName());
System.out.println(query.getTargetSql());
PageResult<PartPurchaseOrderPageRespVO> pageResult = selectJoinPage(pageReqVO, PartPurchaseOrderPageRespVO.class, query);
return pageResult;
}
}

View File

@ -2,11 +2,14 @@ package com.chanko.yunxi.mes.module.heli.service.partpurchaseorder;
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.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;
import java.util.List;
/**
* 零件采购订单 Service 接口
*
@ -19,6 +22,13 @@ public interface PartPurchaseOrderService {
* @param pageReqVO 分页查询
* @return 零件采购订单生成分页
*/
PageResult<PurchaseOrderMakeDetailDO> getPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO);
PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO);
/**
* 零件采购订单生成信息提交
*
* @param list 提交
* @return 零件采购订单生成信息提交
*/
boolean submit(List<PartPurchaseOrderPageRespVO> list);
}

View File

@ -1,16 +1,30 @@
package com.chanko.yunxi.mes.module.heli.service.partpurchaseorder;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
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.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO;
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.purchaseordermake.PurchaseOrderMakeMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PURCHASE_ORDER;
@Service
@Validated
@ -19,10 +33,59 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
private PurchaseOrderMakeMapper purchaseOrderMakeMapper;
@Resource
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
@Resource
private PurchaseOrderNoMapper purchaseOrderNoMapper;
@Resource
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
@Resource
private SerialNumberService serialNumberService;
@Override
public PageResult<PurchaseOrderMakeDetailDO> getPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
public PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
return purchaseOrderMakeDetailMapper.selectPartPurchaseOrderPage(pageReqVO);
}
@Override
public boolean submit(List<PartPurchaseOrderPageRespVO> list) {
list.forEach(detailDO -> {
PurchaseOrderNoDO purchaseOrderNoDO = new PurchaseOrderNoDO();
// 返回
// 月度流水号
SerialNumberDO serialNumberDO = new SerialNumberDO();
serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
purchaseOrderNoDO.setPurchaseNo(PURCHASE_ORDER.getCode(serialNumberDO.getSerialNumber().toString()));
purchaseOrderNoDO.setPurchaseType(1);
purchaseOrderNoDO.setGoodsType(2);
purchaseOrderNoDO.setSupplierId(detailDO.getSupplierId());
purchaseOrderNoDO.setOrdDate(LocalDate.now());
long purchaseOrderId = purchaseOrderNoMapper.insert(purchaseOrderNoDO);
// PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = new PurchaseOrderNoDetailDO();
// purchaseOrderNoDetailDO.setPurchaseOrderId(purchaseOrderId);
// purchaseOrderNoDetailDO.setBoomDetailId(detailDO.getBoomDetailId());
// purchaseOrderNoDetailDO.setBoomName(detailDO.getBoomName());
// purchaseOrderNoDetailDO.setBoomUnit(detailDO.getBoomUnit());
// purchaseOrderNoDetailDO.setBoomSpec(detailDO.getBoomSpec());
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = BeanUtils.toBean(detailDO, PurchaseOrderNoDetailDO.class);
purchaseOrderNoDetailDO.setId(null);
purchaseOrderNoDetailDO.setPurchaseOrderId(purchaseOrderId);
purchaseOrderNoDetailDO.setPurchaseRemAmount(detailDO.getPurchaseAmount());
long purchaseOrderDetailId = purchaseOrderNoDetailMapper.insert(purchaseOrderNoDetailDO);
PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO = new PurchaseOrderMakeDetailDO();
purchaseOrderMakeDetailDO.setId(detailDO.getId());
purchaseOrderMakeDetailDO.setOrderStatus(true);
purchaseOrderMakeDetailDO.setPurchaseOrderNoId(purchaseOrderId);
purchaseOrderMakeDetailDO.setPurchaseOrderNoDetailId(purchaseOrderDetailId);
purchaseOrderMakeDetailMapper.updateById(purchaseOrderMakeDetailDO);
});
return true;
}
}

View File

@ -20,3 +20,7 @@ export interface PartPurchaseOrderVO {
export const getPartPage = async (params) => {
return await request.get({ url: `/heli/purchase-order-make/getPartPurchaseOrderPage`, params })
}
export const submitForm = async (data) => {
return await request.post({ url: `/heli/purchase-order-no/submit`, data })
}

View File

@ -72,7 +72,7 @@
<el-table-column label="价格" align="center" prop="estimatedPrice" min-width="100" />
<el-table-column label="订单状态" align="center" prop="orderStatus" min-width="100" />
<el-table-column label="采购订单号" align="center" prop="purchaseNo" min-width="180" />
<el-table-column label="责任人" align="center" prop="duEmpId" min-width="100" />
<el-table-column label="责任人" align="center" prop="duEmpName" min-width="100" />
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
@ -220,7 +220,7 @@ const submitForm = async () => {
// 5.
const res = await Promise.race([
MaterialPlanApi.submitForm(list),
PartPurchaseOrderApi.submitForm(list),
new Promise((_, reject) =>
setTimeout(() => reject(new Error("请求超时")), 30000)
)