liyong
5 天以前 fe82da7485601580104c058f382405cc0cc9e043
Merge remote-tracking branch 'origin/dev_New' into dev_New
已修改20个文件
370 ■■■■■ 文件已修改
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/collaborativeApproval/controller/NoticeTypeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/customervisits/controller/CustomerVisitsController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/customervisits/service/CustomerVisitsService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/customervisits/service/impl/CustomerVisitsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/controller/HomeController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 153 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/controller/StockInRecordController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/dto/StockOutRecordDto.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/collaborativeApproval/StaffContactsPersonalMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/lavorissue/LavorIssueMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductionProductMainMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/stock/StockInRecordMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/stock/StockOutRecordMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -76,14 +76,12 @@
    @Override
    public void initApproveNodes(String approveUserIds,String approveID,Long tenantId) {
        Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
        ApproveProcess approve = getApproveById(approveID);
        String[] names = approveUserIds.split(",");
        String approveId = approve.getApproveId();
        for (int i = 0; i < names.length; i++) {
            SysUser sysUser = sysUserMapper.selectUserById(Long.parseLong(names[i]));
            if (sysUser == null) continue;
            ApproveNode approveNode = new ApproveNode();
            approveNode.setApproveProcessId(approveId);
            approveNode.setApproveProcessId(approveID);
            approveNode.setApproveNodeOrder(i +1);
            approveNode.setApproveNodeUser(sysUser.getNickName());
            approveNode.setApproveNodeUserId(sysUser.getUserId());
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.approve.mapper.ApproveNodeMapper;
@@ -189,12 +190,9 @@
    @Override
    public ApproveProcess getApproveById(String id) {
        LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ApproveProcess::getApproveId, id);
        queryWrapper.eq(ApproveProcess::getApproveDelete, 0);
        queryWrapper.eq(ApproveProcess::getTenantId, SecurityUtils.getLoginUser().getTenantId());
        queryWrapper.last("limit 1");
        ApproveProcess one = getOne(queryWrapper);
        ApproveProcess one = approveProcessMapper.selectList(Wrappers.<ApproveProcess>lambdaQuery()
                .eq(ApproveProcess::getApproveId,id)
                .eq(ApproveProcess::getApproveDelete,0)).get(0);
        one.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
                .eq(CommonFile::getCommonId, one.getId())
                .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue())));
src/main/java/com/ruoyi/collaborativeApproval/controller/NoticeTypeController.java
@@ -34,7 +34,7 @@
     */
    @PostMapping("/add")
    public AjaxResult add(@RequestBody NoticeType noticeType) {
        return AjaxResult.success(noticeTypeService.save(noticeType));
        return AjaxResult.success(noticeTypeService.saveOrUpdate(noticeType));
    }
    /**
src/main/java/com/ruoyi/customervisits/controller/CustomerVisitsController.java
@@ -30,7 +30,7 @@
    @GetMapping("/listPage")
    @Log(title = "客户拜访-分页查询", businessType = BusinessType.OTHER)
    @ApiOperation("客户拜访-分页查询")
    public AjaxResult listPage(Page page, CustomerVisits customerVisits){
    public AjaxResult listPage(Page page, CustomerVisits customerVisits) {
        IPage<CustomerVisits> listPage = customerVisitsService.listPage(page, customerVisits);
        return AjaxResult.success(listPage);
    }
@@ -39,12 +39,37 @@
    @ApiOperation("客户拜访-添加")
    @PostMapping("/add")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult add(@RequestBody CustomerVisits customerVisits){
    public AjaxResult add(@RequestBody CustomerVisits customerVisits) {
        boolean save = customerVisitsService.save(customerVisits);
        if (save){
        if (save) {
            return AjaxResult.success("添加成功");
        }
        return AjaxResult.error("添加失败");
    }
    @Log(title = "客户拜访-编辑", businessType = BusinessType.UPDATE)
    @ApiOperation("客户拜访-编辑")
    @PostMapping("update")
    public AjaxResult updateCustomerVisit(@RequestBody CustomerVisits customerVisits) {
        boolean updateResult = customerVisitsService.updateCustomerVisit(customerVisits);
        if (updateResult) {
            return AjaxResult.success("编辑成功");
        }
        return AjaxResult.error("编辑失败");
    }
    @Log(title = "客户拜访-删除", businessType = BusinessType.DELETE)
    @ApiOperation("客户拜访-删除")
    @DeleteMapping("{customerId}")
    public AjaxResult deleteCustomerVisit(@PathVariable Integer customerId) {
        if (customerId == null) {
            return AjaxResult.error("客户ID不能为空");
        }
        boolean deleteResult = customerVisitsService.removeById(customerId);
        if (deleteResult) {
            return AjaxResult.success("删除成功");
        }
        return AjaxResult.error("删除失败");
    }
}
src/main/java/com/ruoyi/customervisits/service/CustomerVisitsService.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.customervisits.pojo.CustomerVisits;
import com.ruoyi.framework.web.domain.AjaxResult;
/**
 * @author :yys
@@ -11,4 +12,7 @@
 */
public interface CustomerVisitsService extends IService<CustomerVisits> {
    IPage<CustomerVisits> listPage(Page page, CustomerVisits customerVisits);
    boolean updateCustomerVisit(CustomerVisits customerVisits);
}
src/main/java/com/ruoyi/customervisits/service/impl/CustomerVisitsServiceImpl.java
@@ -11,6 +11,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * @author :yys
@@ -26,10 +27,27 @@
    @Override
    public IPage<CustomerVisits> listPage(Page page, CustomerVisits customerVisits) {
        LambdaQueryWrapper<CustomerVisits> customerVisitsLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if(customerVisits != null && !StringUtils.isEmpty(customerVisits.getCustomerName())){
        if (customerVisits != null && !StringUtils.isEmpty(customerVisits.getCustomerName())) {
            customerVisitsLambdaQueryWrapper.like(CustomerVisits::getCustomerName, customerVisits.getCustomerName());
        }
        Page page1 = customerVisitsMapper.selectPage(page, customerVisitsLambdaQueryWrapper);
        return page1;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateCustomerVisit(CustomerVisits customerVisits) {
        if (customerVisits == null || customerVisits.getId() == null) {
            return false;
        }
        if (StringUtils.isEmpty(customerVisits.getCustomerName())
                || StringUtils.isEmpty(customerVisits.getPurposeVisit())
                || StringUtils.isEmpty(customerVisits.getVisitAddress())
                || StringUtils.isEmpty(customerVisits.getPurposeDate())) {
            return false;
        }
        return updateById(customerVisits);
    }
}
src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -36,6 +36,31 @@
    @Autowired
    private HomeService homeService;
    /********************************************************基础类*****************************************************/
    @GetMapping("/todos")
    @Log(title = "待办事项", businessType = BusinessType.OTHER)
    @ApiOperation("待办事项")
    public AjaxResult todos(ApproveProcess req) throws ParseException {
        List<ApproveProcess> approveProcessList = homeService.todos();
        return AjaxResult.success(approveProcessList);
    }
    @GetMapping("/approveAndDeviceTodos")
    @ApiOperation("审批协同,设备报修待办事项")
    public AjaxResult approveAndDeviceTodos(){
        Map<String, Object> map = homeService.approveAndDeviceTodos();
        return AjaxResult.success(map);
    }
    @GetMapping("/noticesCount")
    @ApiOperation("未过期的公告数量")
    public AjaxResult noticesCount(){
        Long count = homeService.noticesCount();
        return AjaxResult.success(count);
    }
    /********************************************************营销采购类**************************************************/
    @GetMapping("/business")
    @Log(title = "销售-采购-库存数据", businessType = BusinessType.OTHER)
    @ApiOperation("销售-采购-库存数据")
@@ -53,43 +78,8 @@
        return AjaxResult.success(analysisCustomerContractAmounts);
    }
    @GetMapping("/qualityStatistics")
    @Log(title = "质量分析", businessType = BusinessType.OTHER)
    @ApiOperation("质量分析")
    public AjaxResult qualityStatistics(QualityStatisticsDto req) {
        QualityStatisticsDto qualityStatisticsDto = homeService.qualityStatistics();
        return AjaxResult.success(qualityStatisticsDto);
    }
    @GetMapping("/todos")
    @Log(title = "待办事项", businessType = BusinessType.OTHER)
    @ApiOperation("待办事项")
    public AjaxResult todos(ApproveProcess req) throws ParseException {
        List<ApproveProcess> approveProcessList = homeService.todos();
        return AjaxResult.success(approveProcessList);
    }
    @GetMapping("/statisticsReceivablePayable")
    @Log(title = "应收应付统计", businessType = BusinessType.OTHER)
    @ApiOperation("应收应付统计")
    public AjaxResult statisticsReceivablePayable(StatisticsReceivablePayableDto req, @RequestParam(value = "type", defaultValue = "1") Integer type ) {
        StatisticsReceivablePayableDto statisticsReceivablePayable = homeService.statisticsReceivablePayable(type);
        return AjaxResult.success(statisticsReceivablePayable);
    }
    @GetMapping("/approveAndDeviceTodos")
    @ApiOperation("审批协同,设备报修待办事项")
    public AjaxResult approveAndDeviceTodos(){
        Map<String, Object> map = homeService.approveAndDeviceTodos();
        return AjaxResult.success(map);
    }
    @GetMapping("/noticesCount")
    @ApiOperation("未过期的公告数量")
    public AjaxResult noticesCount(){
        Long count = homeService.noticesCount();
        return AjaxResult.success(count);
    }
    /********************************************************生产类*****************************************************/
    @GetMapping("/progressStatistics")
    @ApiOperation("各生产订单的完成进度统计")
    public AjaxResult progressStatistics(){
@@ -102,4 +92,38 @@
        ProductionTurnoverDto productionTurnoverDto = homeService.workInProcessTurnover();
        return AjaxResult.success(productionTurnoverDto);
    }
    /********************************************************质量类*****************************************************/
    @GetMapping("/qualityStatistics")
    @Log(title = "质量分析", businessType = BusinessType.OTHER)
    @ApiOperation("质量分析")
    public AjaxResult qualityStatistics(QualityStatisticsDto req) {
        QualityStatisticsDto qualityStatisticsDto = homeService.qualityStatistics();
        return AjaxResult.success(qualityStatisticsDto);
    }
    /********************************************************财务类*****************************************************/
    @GetMapping("/statisticsReceivablePayable")
    @Log(title = "应收应付统计", businessType = BusinessType.OTHER)
    @ApiOperation("应收应付统计")
    public AjaxResult statisticsReceivablePayable(StatisticsReceivablePayableDto req, @RequestParam(value = "type", defaultValue = "1") Integer type ) {
        StatisticsReceivablePayableDto statisticsReceivablePayable = homeService.statisticsReceivablePayable(type);
        return AjaxResult.success(statisticsReceivablePayable);
    }
    /********************************************************仓储类*****************************************************/
}
src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -27,6 +27,10 @@
    @Excel(name = "报工数量")
    private BigDecimal quantity;
    @ApiModelProperty(value = "报废数量")
    @Excel(name = "报废数量")
    private BigDecimal scrapQty;
    //产品名称
    @Excel(name = "产品名称")
    private String productName;
src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
@@ -20,7 +20,8 @@
    @ApiModelProperty(value = "产品id")
    private Long productModelId;
    @ApiModelProperty(value = "数量")
    //合格数量=报工数量-报废数量
    @ApiModelProperty(value = "报工数量")
    private BigDecimal quantity;
    @ApiModelProperty(value = "创建时间")
@@ -29,4 +30,7 @@
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    @ApiModelProperty(value = "报废数量")
    private BigDecimal scrapQty;
}
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -189,82 +189,89 @@
        productionProductOutput.setProductMainId(productionProductMain.getId());
        productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId());
        productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
        productionProductOutput.setScrapQty(dto.getScrapQty() != null ? dto.getScrapQty() : BigDecimal.ZERO);
        productionProductOutputMapper.insert(productionProductOutput);
        /*新增质检*/
        //对应的过程检或者出厂检
        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
        int inspectType = 1;
        String process = productProcess.getName();//工序
        if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){
            //最后一道工序生成出厂检
            inspectType = 2;
            process = null;
        }
        Product product = productMapper.selectById(productModel.getProductId());
        QualityInspect qualityInspect = new QualityInspect();
        qualityInspect.setProductId(product.getId());
        qualityInspect.setProductName(product.getProductName());
        qualityInspect.setModel(productModel.getModel());
        qualityInspect.setUnit(productModel.getUnit());
        qualityInspect.setQuantity(dto.getQuantity());
        qualityInspect.setProcess(productProcess.getName());
        qualityInspect.setInspectState(0);
        qualityInspect.setInspectType(inspectType);
        qualityInspect.setProductMainId(productionProductMain.getId());
        qualityInspect.setProductModelId(productModel.getId());
        qualityInspectMapper.insert(qualityInspect);
        List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType,process);
        if (qualityTestStandard.size()>0){
            qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
            qualityInspectMapper.updateById(qualityInspect);
            qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
                    .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandard.get(0).getId()))//默认获取最新的
                    .forEach(qualityTestStandardParam -> {
                QualityInspectParam param = new QualityInspectParam();
                BeanUtils.copyProperties(qualityTestStandardParam, param);
                param.setId(null);
                param.setInspectId(qualityInspect.getId());
                qualityInspectParamMapper.insert(param);
            });
        }
        /*更新工单和生产订单*/
        ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
        productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(dto.getQuantity()));
        if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())){
            productWorkOrder.setActualStartTime(LocalDate.now());//实际开始时间
        }
        if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0){
            productWorkOrder.setActualEndTime(LocalDate.now());//实际结束时间
        }
        productWorkOrderMapper.updateById(productWorkOrder);
        //生产订单
        ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
        if (ObjectUtils.isNull(productOrder.getStartTime())){
            productOrder.setStartTime(LocalDateTime.now());//开始时间
        }
        if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){
            //如果是最后一道工序报工之后生产订单完成数量+
            productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(dto.getQuantity()));
            if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0){
                productOrder.setEndTime(LocalDateTime.now());//结束时间
        //合格数量=报工数量-报废数量
        BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
        //只有合格数量>0才能增加相应数据
        if (productQty.compareTo(BigDecimal.ZERO)>0) {
            /*新增质检*/
            //对应的过程检或者出厂检
            List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
            int inspectType = 1;
            String process = productProcess.getName();//工序
            if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
                //最后一道工序生成出厂检
                inspectType = 2;
                process = null;
            }
            Product product = productMapper.selectById(productModel.getProductId());
            QualityInspect qualityInspect = new QualityInspect();
            qualityInspect.setProductId(product.getId());
            qualityInspect.setProductName(product.getProductName());
            qualityInspect.setModel(productModel.getModel());
            qualityInspect.setUnit(productModel.getUnit());
            qualityInspect.setQuantity(productQty);
            qualityInspect.setProcess(productProcess.getName());
            qualityInspect.setInspectState(0);
            qualityInspect.setInspectType(inspectType);
            qualityInspect.setProductMainId(productionProductMain.getId());
            qualityInspect.setProductModelId(productModel.getId());
            qualityInspectMapper.insert(qualityInspect);
            List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
            if (qualityTestStandard.size() > 0) {
                qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
                qualityInspectMapper.updateById(qualityInspect);
                qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
                        .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId()))//默认获取最新的
                        .forEach(qualityTestStandardParam -> {
                            QualityInspectParam param = new QualityInspectParam();
                            BeanUtils.copyProperties(qualityTestStandardParam, param);
                            param.setId(null);
                            param.setInspectId(qualityInspect.getId());
                            qualityInspectParamMapper.insert(param);
                        });
            }
            /*更新工单和生产订单*/
            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
            productWorkOrder.setCompleteQuantity(productQty.add(dto.getQuantity()));
            if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
                productWorkOrder.setActualStartTime(LocalDate.now());//实际开始时间
            }
            if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
                productWorkOrder.setActualEndTime(LocalDate.now());//实际结束时间
            }
            productWorkOrderMapper.updateById(productWorkOrder);
            //生产订单
            ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
            if (ObjectUtils.isNull(productOrder.getStartTime())) {
                productOrder.setStartTime(LocalDateTime.now());//开始时间
            }
            if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
                //如果是最后一道工序报工之后生产订单完成数量+
                productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
                if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
                    productOrder.setEndTime(LocalDateTime.now());//结束时间
                }
            }
            productOrderMapper.updateById(productOrder);
            /*添加生产核算*/
            SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
                    .salesLedgerWorkId(productionProductMain.getId())
                    .salesLedgerSchedulingId(0L)
                    .salesLedgerId(productOrder.getSalesLedgerId())
                    .salesLedgerProductId(productOrder.getProductModelId())
                    .schedulingUserId(user.getUserId())
                    .schedulingUserName(user.getNickName())
                    .finishedNum(productQty)
                    .workHours(productProcess.getSalaryQuota())
                    .process(productProcess.getName())
                    .schedulingDate(LocalDate.now())
                    .tenantId(dto.getTenantId())
                    .build();
            salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
        }
        productOrderMapper.updateById(productOrder);
        /*添加生产核算*/
        SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
                .salesLedgerWorkId(productionProductMain.getId())
                .salesLedgerSchedulingId(0L)
                .salesLedgerId(productOrder.getSalesLedgerId())
                .salesLedgerProductId(productOrder.getProductModelId())
                .schedulingUserId(user.getUserId())
                .schedulingUserName(user.getNickName())
                .finishedNum(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO)
                .workHours(productProcess.getSalaryQuota())
                .process(productProcess.getName())
                .schedulingDate(LocalDate.now())
                .tenantId(dto.getTenantId())
                .build();
        salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
        //如果报废数量>0,需要进入报废的库存
        return true;
    }
src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
@@ -16,13 +16,13 @@
import java.util.List;
@RestController
@Api(tags = "采购入库")
@Api(tags = "入库")
@RequestMapping("/stockInRecord")
public class StockInRecordController {
    @Autowired
    private StockInRecordService stockInRecordService;
    @GetMapping("/listPageByProduction")
    @GetMapping("/listPage")
    @Log(title = "生产入库-入库管理-列表", businessType = BusinessType.OTHER)
    @ApiOperation(value = "入库管理列表")
    public AjaxResult listPage(Page page, StockInRecordDto stockInRecordDto) {
src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java
@@ -7,6 +7,7 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.service.StockOutRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
@@ -22,13 +23,14 @@
 * @author 芯导软件(江苏)有限公司
 * @since 2026-01-21 05:27:04
 */
@Api(tags = "出库")
@RestController
@RequestMapping("/stockOutRecord")
public class StockOutRecordController {
    @Autowired
    private StockOutRecordService stockOutRecordService;
    @GetMapping("/listPageByProduction")
    @GetMapping("/listPage")
    @Log(title = "生产出库-出库管理-列表", businessType = BusinessType.OTHER)
    @ApiOperation(value = "出库管理列表")
    public AjaxResult listPage(Page page, StockOutRecordDto stockOutRecordDto) {
src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
@@ -3,6 +3,7 @@
import com.ruoyi.stock.pojo.StockInRecord;
import lombok.Data;
@Data
public class StockInRecordDto extends StockInRecord {
    /**
@@ -17,4 +18,6 @@
     * 产品单位
     */
    private String unit;
    private String timeStr;
}
src/main/java/com/ruoyi/stock/dto/StockOutRecordDto.java
@@ -1,7 +1,13 @@
package com.ruoyi.stock.dto;
import com.ruoyi.stock.pojo.StockOutRecord;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StockOutRecordDto extends StockOutRecord {
    /**
     * 产品名称
src/main/resources/mapper/collaborativeApproval/StaffContactsPersonalMapper.xml
@@ -17,7 +17,7 @@
            sjlr.phone,
            scp.create_time
        FROM staff_contacts_personal scp
            LEFT JOIN (select * from staff_join_leave_record WHERE staff_state = 1) sjlr ON scp.contact_id=sjlr.id
            LEFT JOIN (select * from staff_on_job WHERE staff_state = 1) sjlr ON scp.contact_id=sjlr.id
        where 1=1
        <if test="staffContactsPersonalDTO.staffName != null and staffContactsPersonalDTO.staffName != ''">
            and sjlr.staff_name like concat('%',#{staffContactsPersonalDTO.staffName},'%')
src/main/resources/mapper/lavorissue/LavorIssueMapper.xml
@@ -10,7 +10,7 @@
               t3.dict_label as dictName,
               t4.dict_label as dictTypeName
        from labor_issue t1
        left join staff_join_leave_record t2 on t1.staff_id = t2.id
        left join staff_on_job t2 on t1.staff_id = t2.id
        left join sys_dict_data t3 on t1.dict_id = t3.dict_value
        left join sys_dict_data t4 on t1.dict_type = t4.dict_value
        <where>
@@ -45,7 +45,7 @@
            t3.dict_label as dictName,
            t4.dict_label as dictTypeName
        from labor_issue t1
                 left join staff_join_leave_record t2 on t1.staff_id = t2.id
                 left join staff_on_job t2 on t1.staff_id = t2.id
                 left join sys_dict_data t3 on t1.dict_id = t3.dict_value
                 left join sys_dict_data t4 on t1.dict_type = t4.dict_value
        <where>
src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -20,6 +20,7 @@
               p.product_name as productName,
               pm.model as productModelName,
               ppo.quantity,
               ppo.scrap_qty,
               pm.unit,
               sl.sales_contract_no salesContractNo
        from
src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml
@@ -27,7 +27,7 @@
        sl.customer_name,
        sl.contract_amount
        ORDER BY
        sl.sales_contract_no;
        sl.sales_contract_no
    </select>
    <select id="listVat" resultType="com.ruoyi.purchase.dto.VatDto">
        select *
src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -4,12 +4,13 @@
    <select id="listPage" resultType="com.ruoyi.stock.dto.StockInRecordDto">
        SELECT
        sir.*
        pm.product_name as productName,
        sir.*,
        p.product_name as productName,
        pm.model,
        pm.unit
        FROM stock_in_record as sir
        LEFT JOIN product_models as pm on sir.product_model_id = pm.id
        LEFT JOIN product_model as pm on sir.product_model_id = pm.id
        LEFT JOIN product as p on pm.product_id = p.id
        <where>
            <if test="params.timeStr != null and params.timeStr != ''">
                and sir.create_time like concat('%',#{param.timeStr},'%')
src/main/resources/mapper/stock/StockOutRecordMapper.xml
@@ -20,12 +20,13 @@
    <select id="listPage" resultType="com.ruoyi.stock.dto.StockOutRecordDto">
        SELECT
        sor.*
        pm.product_name as productName,
        sor.*,
        p.product_name as productName,
        pm.model,
        pm.unit
        FROM stock_out_record as sor
        LEFT JOIN product_models as pm on sor.product_model_id = pm.id
        LEFT JOIN product_model as pm on sor.product_model_id = pm.id
        LEFT JOIN product as p on pm.product_id = p.id
        <where>
            <if test="params.timeStr != null and params.timeStr != ''">
                and sor.create_time like concat('%',#{param.timeStr},'%')