已修改14个文件
239 ■■■■ 文件已修改
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/pojo/QualityInspect.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -54,7 +54,7 @@
    @Excel(name = "客户名称")
    private String customerName;
    private String salesLedgerProductId;
    private Long salesLedgerProductId;
    /**
     * 出入库数量
@@ -120,6 +120,11 @@
     */
    @Excel(name = "产品大类")
    private String productCategory;
     /**
     * 产品id
     */
    @Excel(name = "产品id")
    private Long productId;
    /**
     * 规格型号
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
@@ -131,6 +131,11 @@
     */
    @Excel(name = "产品大类")
    private String productCategory;
     /**
     * 产品id
     */
    @Excel(name = "产品id")
    private Long productId;
    /**
     * 规格型号
src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
@@ -4,13 +4,12 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.production.dto.ProductProcessRouteItemDto;
import com.ruoyi.production.mapper.ProductOrderMapper;
import com.ruoyi.production.mapper.ProductWorkOrderMapper;
import com.ruoyi.production.pojo.ProductOrder;
import com.ruoyi.production.pojo.ProductProcessRouteItem;
import com.ruoyi.production.pojo.ProductWorkOrder;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductProcessRouteItemService;
import com.ruoyi.production.service.ProductWorkOrderService;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedger;
@@ -43,6 +42,16 @@
    private ProductWorkOrderMapper productWorkOrderMapper;
    private SalesLedgerProductMapper salesLedgerProductMapper;
    private ProductionProductMainMapper productionProductMainMapper;
    private ProductionProductInputMapper productionProductInputMapper;
    private ProductionProductOutputMapper productionProductOutputMapper;
    private QualityInspectMapper qualityInspectMapper;
    private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
    @GetMapping("list")
    @ApiOperation("根据Id查询工艺项目")
@@ -130,22 +139,70 @@
    @ApiOperation("删除生产工艺路线")
    @Transactional(rollbackFor = Exception.class)
    public R deleteRouteItem(@RequestBody ProductProcessRouteItemDto processRouteItemDto) {
        if (processRouteItemDto == null || processRouteItemDto.getId() == null) {
            return R.fail("参数错误,ID不能为空");
            return R.fail("删除失败:工艺路线项ID不能为空");
        }
        Long routeItemId = processRouteItemDto.getId();
        try {
            // 先删除关联的工单数据
            LambdaQueryWrapper<ProductWorkOrder> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(ProductWorkOrder::getProductProcessRouteItemId, processRouteItemDto.getId());
            productWorkOrderMapper.delete(wrapper);
            // 查询工单
            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectOne(
                    new LambdaQueryWrapper<ProductWorkOrder>()
                            .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId)
                            .last("LIMIT 1")
            );
            if (productWorkOrder == null) {
                return R.fail("删除失败:未找到关联的生产工单");
            }
            Long workOrderId = productWorkOrder.getId();
            Long productOrderId = productWorkOrder.getProductOrderId();
            // 查询生产主表
            List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(
                    new LambdaQueryWrapper<ProductionProductMain>()
                            .eq(ProductionProductMain::getWorkOrderId, workOrderId)
            );
            if (!productionProductMains.isEmpty()) {
                // 批量删除子表
                for (ProductionProductMain main : productionProductMains) {
                    Long mainId = main.getId();
                    // 删除投入
                    productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
                            .eq(ProductionProductInput::getProductMainId, mainId));
                    // 删除产出
                    productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
                            .eq(ProductionProductOutput::getProductMainId, mainId));
                    // 删除质检
                    qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>()
                            .eq(QualityInspect::getProductMainId, mainId));
                }
            }
            //  删除报工(生产主表)
            productionProductMainMapper.delete(new LambdaQueryWrapper<ProductionProductMain>()
                    .eq(ProductionProductMain::getWorkOrderId, workOrderId));
            // 查询订单 + 删除核算
            ProductOrder productOrder = productOrderMapper.selectById(productOrderId);
            if (productOrder != null && productOrder.getSalesLedgerId() != null) {
                salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
                        .eq(SalesLedgerProductionAccounting::getSalesLedgerId, productOrder.getSalesLedgerId()));
            }
            // 删除关联工单
            productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
                    .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId));
            // 删除主表数据
            productProcessRouteItemService.removeById(processRouteItemDto.getId());
            boolean removeFlag = productProcessRouteItemService.removeById(routeItemId);
            if (!removeFlag) {
                return R.fail("删除失败:工艺路线项主表数据不存在");
            }
            return R.ok();
        } catch (Exception e) {
            throw new RuntimeException("删除失败:" + e.getMessage());
            return R.fail("删除生产工艺路线失败:" + e.getMessage());
        }
    }
}
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -185,7 +185,7 @@
            for (ProductStructureDto productStructureDto : productStructureDtos) {
                ProductionProductInput productionProductInput = new ProductionProductInput();
                productionProductInput.setProductModelId(productStructureDto.getProductModelId());
                productionProductInput.setQuantity(productStructureDto.getUnitQuantity());
                productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
                productionProductInput.setProductMainId(productionProductMain.getId());
                productionProductInputMapper.insert(productionProductInput);
            }
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -236,7 +236,7 @@
            qualityInspect.setInspectType(0);
            qualityInspect.setSupplier(purchaseLedger.getSupplierName());
            qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
            qualityInspect.setProductId(saleProduct.getProductId());
            qualityInspect.setProductId(saleProduct.getId());
            qualityInspect.setProductName(saleProduct.getProductCategory());
            qualityInspect.setModel(saleProduct.getSpecificationModel());
            qualityInspect.setUnit(saleProduct.getUnit());
src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -144,6 +144,7 @@
     * 报工id
     */
    private Long productMainId;
    //不合格现象
    private String defectivePhenomena;
}
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -11,7 +11,12 @@
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.procurementrecord.dto.Details;
import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityInspectParamMapper;
@@ -23,6 +28,8 @@
import com.ruoyi.quality.pojo.QualityUnqualified;
import com.ruoyi.quality.service.IQualityInspectParamService;
import com.ruoyi.quality.service.IQualityInspectService;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper;
import com.ruoyi.staff.mapper.StaffOnJobMapper;
import com.ruoyi.staff.pojo.StaffJoinLeaveRecord;
@@ -37,6 +44,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@@ -53,6 +61,10 @@
    private QualityTestStandardMapper qualityTestStandardMapper;
    private QualityUnqualifiedMapper qualityUnqualifiedMapper;
    private SalesLedgerProductMapper salesLedgerProductMapper;
    private ProcurementRecordService procurementRecordService;
    @Override
    public int add(QualityInspectDto qualityInspectDto) {
@@ -91,6 +103,50 @@
            qualityUnqualified.setDefectivePhenomena(text+"这些指标中存在不合格");//不合格现象
            qualityUnqualifiedMapper.insert(qualityUnqualified);
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        if (qualityInspect.getInspectType() == 0) {
            if ("合格".equals(qualityInspect.getCheckResult())) {
                ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
                procurementRecordOutAdd.setType(1);
                procurementRecordOutAdd.setTypeName("采购入库");
                procurementRecordOutAdd.setNickName(loginUser.getNickName());
                procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId()));
                if (qualityInspect.getPurchaseLedgerId() == null) {
                    throw new BaseException("请选择采购单");
                }
                SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(qualityInspect.getProductId());
                ArrayList<Details> detailss = new ArrayList<>();
                Details details = new Details();
                details.setId(Math.toIntExact(qualityInspect.getProductId()));
                details.setInboundQuantity(qualityInspect.getQuantity());
                details.setWarnNum(salesLedgerProduct.getWarnNum());
                details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
                details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
                detailss.add( details);
                procurementRecordOutAdd.setDetails(detailss);
                procurementRecordService.add(procurementRecordOutAdd);
            }
        }else if (qualityInspect.getInspectType() == 1) {
        }else if (qualityInspect.getInspectType() == 2) {
            //查询UnitPrice/TotalPrice
            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId());
            ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
            procurementRecordOutAdd.setType(2);
            procurementRecordOutAdd.setTypeName("生产入库");
            procurementRecordOutAdd.setNickName(loginUser.getNickName());
            List<Details> details = new ArrayList<>();
            Details details1 = new Details();
            details1.setInboundQuantity(qualityInspect.getQuantity());
            details1.setId(Math.toIntExact(salesLedgerProduct.getId()));
            details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
            details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
            details.add(details1);
            procurementRecordOutAdd.setDetails(details);
            procurementRecordService.add(procurementRecordOutAdd);
        }
        qualityInspect.setInspectState(1);//已提交
        return qualityInspectMapper.updateById(qualityInspect);
    }
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -2,7 +2,12 @@
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,7 +38,8 @@
{
    @Autowired
    private ISalesLedgerProductService salesLedgerProductService;
    @Autowired
    private ProcurementRecordService procurementRecordService;
    /**
     * 查询产品信息列表
     */
@@ -41,6 +47,17 @@
    public AjaxResult list(SalesLedgerProduct salesLedgerProduct)
    {
        List<SalesLedgerProduct> list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct);
        list.forEach(item -> {
            ProcurementPageDto procurementDto = new ProcurementPageDto();
            procurementDto.setSalesLedgerProductId(item.getId());
            procurementDto.setProductCategory(item.getProductCategory());
            IPage<ProcurementPageDtoCopy> result = procurementRecordService.listPageCopyByProduction(new Page<>(1,-1), procurementDto);
            ProcurementPageDtoCopy procurementDtoCopy = result.getRecords().get(0);
            if(item.getQuantity().compareTo(procurementDtoCopy.getInboundNum0())>=0){
                item.setApproveStatus(1);
                salesLedgerProductService.addOrUpdateSalesLedgerProduct(item);
            }
        });
        return AjaxResult.success(list);
    }
src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -6,6 +6,10 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
import com.ruoyi.procurementrecord.service.ProcurementRecordOutService;
import com.ruoyi.sales.mapper.ShipmentApprovalMapper;
import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
@@ -21,6 +25,8 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@RestController
@@ -35,6 +41,8 @@
    @Autowired
    private ISalesLedgerProductService salesLedgerProductService;
    @Autowired
    private ProcurementRecordOutService procurementRecordOutService;
    @GetMapping("/listPage")
    @ApiOperation("发货审批列表")
@@ -58,6 +66,18 @@
            SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId());
            salesLedgerProduct.setApproveStatus(req.getApproveStatus());
            salesLedgerProductService.updateById(salesLedgerProduct);
            if(req.getApproveStatus()==3){
                //发货审批通过,生产该订单出库记录
                ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd();
                procurementRecordOutAdd.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId()));
                procurementRecordOutAdd.setType(2);
                procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId()));
                procurementRecordOutAdd.setQuantity(String.valueOf(salesLedgerProduct.getQuantity()));
                //获取当前时间
                LocalDateTime now = LocalDateTime.now();
                procurementRecordOutAdd.setTime(now.toString());
                procurementRecordOutService.stockout(procurementRecordOutAdd);
            }
        }
        return update ? AjaxResult.success() : AjaxResult.error();
    }
src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
@@ -14,4 +14,7 @@
 */
public interface SalesLedgerProductMapper extends MyBaseMapper<SalesLedgerProduct> {
    List<SalesLedgerProduct> selectSalesLedgerProductList(@Param("salesLedgerProduct") SalesLedgerProduct salesLedgerProduct);
    SalesLedgerProduct selectSalesLedgerProductByMainId(@Param("productMainId") Long productMainId);
}
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -200,13 +200,13 @@
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date shippingDate;
    @TableField(exist = false)
    @ApiModelProperty(value = "生产状态")
    private String productionStatus = "未开始";
//    @TableField(exist = false)
//    @ApiModelProperty(value = "生产状态")
//    private String productionStatus = "未开始";
    /**
     * 发货审批状态
     */
//    @TableField(exist = false)
    @ApiModelProperty(value = "审批状态")
    @ApiModelProperty(value = "审批状态:0未生产,1已生产,2待审核(审核中),3审核完成,4审核失败")
    private Integer approveStatus;
}
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -24,6 +24,7 @@
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.mapper.SysDeptMapper;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.sales.dto.MonthlyAmountDto;
import com.ruoyi.sales.dto.SalesLedgerDto;
import com.ruoyi.sales.mapper.*;
@@ -431,6 +432,16 @@
                    if (!CollectionUtils.isEmpty(productMainIds)) {
                        productionProductOutputMapper.deleteByProductMainIds(productMainIds);
                        productionProductInputMapper.deleteByProductMainIds(productMainIds);
                        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
                                new LambdaQueryWrapper<QualityInspect>()
                                        .in(QualityInspect::getProductMainId, productMainIds)
                        );
                        qualityInspects.forEach(qualityInspect -> {
                            //inspectState=1 已提交 不能删除
                            if(qualityInspect.getInspectState() == 1){
                                throw new RuntimeException("已提交的检验单不能删除");
                            }
                        });
                        qualityInspectMapper.deleteByProductMainIds(productMainIds);
                    }
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -255,7 +255,8 @@
        t1.create_time,
        t1.update_time,
        t1.create_by,
        t2.warn_num
        t2.warn_num,
        t2.product_id
        from  procurement_record_storage t1
        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
        left join sales_ledger t3 on t3.id = t2.sales_ledger_id
@@ -297,7 +298,8 @@
        t1.create_time,
        t1.update_time,
        t1.create_by,
        t2.warn_num
        t2.warn_num,
        t2.product_id
        from  procurement_record_storage t1
        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
        left join sales_ledger t3 on t3.id = t2.sales_ledger_id
@@ -312,6 +314,9 @@
            <if test="req.timeStr != null and req.timeStr != ''">
                and t1.create_time like  concat('%',#{req.timeStr},'%')
            </if>
            <if test="req.salesLedgerProductId != null and req.salesLedgerProductId != ''">
                and t1.sales_ledger_product_id = #{req.salesLedgerProductId}
            </if>
            <if test="req.reportDate != null">
                and t1.create_time >= #{req.reportDate} and t1.create_time &lt; DATE_ADD(#{req.reportDate}, INTERVAL 1 DAY)
            </if>
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -22,4 +22,15 @@
            </if>
        </where>
    </select>
    <select id="selectSalesLedgerProductByMainId" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct">
        select slp.*
        from quality_inspect qi
                 left join production_product_main ppm on qi.product_main_id = ppm.id
                 left join product_work_order pwo on ppm.work_order_id = pwo.id
                 left join product_order  po on pwo.product_order_id = po.id
                 left join sales_ledger_product slp on po.product_model_id = slp.id
        where qi.product_main_id = #{productMainId}
    </select>
</mapper>