src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -1,9 +1,12 @@ package com.ruoyi.production.dto; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import com.ruoyi.production.pojo.ProductWorkOrder; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; @EqualsAndHashCode(callSuper = true) @Data @@ -29,4 +32,7 @@ //生产订单号 @ApiModelProperty(value = "生产订单号") private String productOrderNpsNo; @ApiModelProperty(value = "完成进度") private BigDecimal completionStatus; } src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -64,9 +65,9 @@ private String workOrderNo; /** * 状态 1 待确认 2 待生产 3生产中 4已生产 * 状态 1 待确认 2 待生产 3生产中 4已完成 */ @ApiModelProperty(value = "状态 1 待确认 2 待生产 3生产中 4已生产") @ApiModelProperty(value = "状态 1 待确认 2 待生产 3生产中 4已完成") private Integer status; /** @@ -80,38 +81,45 @@ * 计划开始时间 */ @ApiModelProperty(value = "计划开始时间") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planStartTime; /** * 计划结束时间 */ @ApiModelProperty(value = "计划结束时间") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate planEndTime; /** * 实际开始时间 */ @ApiModelProperty(value = "实际开始时间") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate actualStartTime; /** * 实际结束时间 */ @ApiModelProperty(value = "实际结束时间") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate actualEndTime; /** * 是否报工 * 需求量 */ @ApiModelProperty(value = "是否报工") private boolean reportWork; @ApiModelProperty(value = "需求数量") private BigDecimal planQuantity; /** * 实际数量 * 完成数量 */ @ApiModelProperty(value = "数量") private BigDecimal planQuantity; @ApiModelProperty(value = "完成数量") private BigDecimal completeQuantity; } src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -433,6 +433,7 @@ } @Override @Transactional(rollbackFor = Exception.class) public int deletePurchaseLedgerByIds(Long[] ids) { if (ids == null || ids.length == 0) { throw new BaseException("请选中至少一条数据"); @@ -444,7 +445,7 @@ salesLedgerProductMapper.delete(queryWrapper); // 批量删除关联的采购台账的来票登记 LambdaQueryWrapper<TicketRegistration> ticketRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>(); ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getSalesLedgerId,ids); ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getPurchaseLedgerId,ids); ticketRegistrationMapper.delete(ticketRegistrationLambdaQueryWrapper); // 批量删除关联的采购台账的来票登记记录 LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; @@ -60,41 +61,60 @@ @ApiOperation("发货审批,更新发货审批状态") @Transactional(rollbackFor = Exception.class) public AjaxResult update(@RequestBody ShipmentApproval req) { // 查询发货审批 ShipmentApproval shipmentApproval = shipmentApprovalMapper.selectById(req.getId()); if (shipmentApproval == null) { return AjaxResult.error("发货审批不存在"); } // 更新发货审批状态 shipmentApproval.setApproveStatus(req.getApproveStatus()); boolean update = shipmentApprovalService.updateById(shipmentApproval); if(update){ SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId()); salesLedgerProduct.setApproveStatus(req.getApproveStatus()); salesLedgerProductService.updateById(salesLedgerProduct); if(req.getApproveStatus()==3){ ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(new LambdaQueryWrapper<ProcurementRecordStorage>() .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId())); if(procurementRecordStorage==null){ return AjaxResult.error("采购记录不存在"); } //发货审批通过,生产该订单出库记录 ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd(); procurementRecordOutAdd.setId(procurementRecordStorage.getId()); procurementRecordOutAdd.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId())); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId())); procurementRecordOutAdd.setQuantity(String.valueOf(salesLedgerProduct.getQuantity())); //获取当前时间 LocalDate now = LocalDate.now(); procurementRecordOutAdd.setTime(now.toString()); procurementRecordOutService.stockout(procurementRecordOutAdd); } if (!update) { // 事务回滚 throw new ServiceException("发货审批更新失败"); } return update ? AjaxResult.success() : AjaxResult.error(); // 查询关联的销售台账产品 SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId()); if (salesLedgerProduct == null) { // 抛异常事务回滚 throw new ServiceException("销售台账不存在,审批回滚"); } // 同步更新销售台账产品的审批状态 salesLedgerProduct.setApproveStatus(req.getApproveStatus()); salesLedgerProductService.updateById(salesLedgerProduct); // 审批通过 if (req.getApproveStatus() == 3) { // 查询采购入库记录 LambdaQueryWrapper<ProcurementRecordStorage> lambdaQueryWrapper = new LambdaQueryWrapper<ProcurementRecordStorage>() .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId()); ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper); if (procurementRecordStorage == null) { // 保证前面的修改全部回滚 throw new ServiceException("采购记录不存在,审批回滚"); } // 生成出库记录 ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd(); procurementRecordOutAdd.setId(procurementRecordStorage.getId()); procurementRecordOutAdd.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId())); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId())); procurementRecordOutAdd.setQuantity(salesLedgerProduct.getQuantity().toPlainString()); procurementRecordOutAdd.setTime(LocalDate.now().toString()); procurementRecordOutService.stockout(procurementRecordOutAdd); } return AjaxResult.success(); } /** * 导出发货信息管理 */ src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -25,9 +25,10 @@ pm.model, pm.unit, p.product_name AS productName, po.nps_no AS productOrderNpsNo po.nps_no AS productOrderNpsNo, ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus FROM `product_work_order` pwo product_work_order pwo LEFT JOIN product_process_route_item ppri ON ppri.id = pwo.product_process_route_item_id LEFT JOIN product_order po ON po.id = pwo.product_order_id LEFT JOIN product_process pp ON pp.id = ppri.process_id