huminmin
4 天以前 4f74481c9091b217bf63e3eb8fb014ea39022644
Merge branch 'hxsj' of http://114.132.189.42:9002/r/product-inventory-management-after into hxsj
已修改16个文件
249 ■■■■■ 文件已修改
.gitignore 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/controller/SupplierManageController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedger.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/SalesLedgerMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -24,6 +24,8 @@
*.iws
*.iml
*.ipr
### vscode ###
.vscode
### JRebel ###
rebel.xml
src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -125,9 +125,14 @@
//    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    /**
     * 审批类型
     */
    /** * 审批类型
     *     0: "协同审批管理表",
     *     1: "公出管理审批表",
     *     2: "请假管理审批表",
     *     3: "出差管理审批表",
     *     4: "报销管理审批表",
     *     5: "采购申请审批表",
     *     6: "销售订单审批表", */
    private Integer approveType;
    /**
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.approve.mapper.ApproveNodeMapper;
import com.ruoyi.approve.mapper.ApproveProcessMapper;
@@ -15,8 +16,12 @@
import com.ruoyi.other.service.impl.TempFileServiceImpl;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.pojo.CommonFile;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
@@ -39,6 +44,12 @@
    private ApproveProcessMapper approveProcessMapper;
    @Autowired
    private SysUserMapper sysUserMapper;
    @Autowired
    private SalesLedgerMapper salesLedgerMapper;
    @Autowired
    private PurchaseLedgerMapper purchaseLedgerMapper;
    @Autowired
    private TempFileServiceImpl tempFileService;
@@ -145,16 +156,26 @@
        }
        approveProcessMapper.updateById(approveProcess);
        DeviceRepair deviceRepair = deviceRepairMapper.selectById(approveProcess.getDeviceRepairId());
        if(deviceRepair == null) throw new RuntimeException("设备报修不存在");
        if(approveProcess.getApproveStatus().equals(2)){
            // 同意
            deviceRepair.setStatus(1);
        }else if(approveProcess.getApproveStatus().equals(3)){
            // 拒绝
            deviceRepair.setStatus(2);
        //如果是6销售审批,对应销售关联的表需要更新
        if (approveProcess.getApproveType()==6){
            List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(Wrappers.
                    <SalesLedger>lambdaQuery().eq(SalesLedger::getSalesContractNo, approveProcess.getApproveReason()));
            if (!CollectionUtils.isEmpty(salesLedgers)){
                SalesLedger salesLedger = salesLedgers.get(0);
                salesLedger.setApprovalStatus(status);
                salesLedgerMapper.updateById(salesLedger);
        }
        deviceRepairMapper.updateById(deviceRepair);
        }
        //如果是5采购审批,对应采购关联的表需要更新
        if (approveProcess.getApproveType()==5){
            List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(Wrappers.<PurchaseLedger>lambdaQuery().eq(PurchaseLedger::getPurchaseContractNumber, approveProcess.getApproveReason()));
            if (!CollectionUtils.isEmpty(purchaseLedgers)){
                PurchaseLedger purchaseLedger = purchaseLedgers.get(0);
                purchaseLedger.setApprovalStatus(status);
                purchaseLedgerMapper.updateById(purchaseLedger);
            }
        }
        // 绑定附件
        if(!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1){
            tempFileService.migrateTempFilesToFormal(approveNode.getId(), approveNode.getTempFileIds(), FileNameType.ApproveNode.getValue());
src/main/java/com/ruoyi/basic/controller/SupplierManageController.java
@@ -1,8 +1,8 @@
package com.ruoyi.basic.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.SupplierManageDto;
import com.ruoyi.basic.pojo.Customer;
import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.basic.service.ISupplierService;
import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -118,6 +118,7 @@
     */
    @GetMapping("/getOptions")
    public AjaxResult getOptions() {
        return AjaxResult.success(supplierService.list());
        return AjaxResult.success(supplierService.list(new LambdaQueryWrapper<SupplierManage>()
                .eq(SupplierManage::getIsWhite, 0)));
    }
}
src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -200,4 +200,12 @@
    public AjaxResult createPurchaseNo() {
        return AjaxResult.success("生成成功",purchaseLedgerService.getPurchaseNo());
    }
    /**
     * 根据采购合同号查询详情
     */
    @GetMapping("/getPurchaseByCode")
    public AjaxResult getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) {
        return AjaxResult.success(purchaseLedgerService.getPurchaseByCode(purchaseLedgerDto));
    }
}
src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -185,10 +185,15 @@
    @ApiModelProperty(value = "付款方式")
    private String paymentMethod;
    @ApiModelProperty("审批状态")
    private Integer approvalStatus;
    @ApiModelProperty(value = "模板名称")
    private String templateName;
    @ApiModelProperty(value = "审批人id")
    private Integer approverId;
    @ApiModelProperty(value = "0-待审核,1-审批中,2-审批通过,3-审批不通过,4-已重新提交")//默认是0
    private Integer approvalStatus;
    // 审批人
    private String approveUserIds;
}
src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -150,7 +150,9 @@
    @ApiModelProperty(value = "付款方式")
    private String paymentMethod;
    @ApiModelProperty("审批状态")
    @ApiModelProperty(value = "0-待审核,1-审批中,2-审批通过,3-审批不通过,4-已重新提交")
    //默认是0
    private Integer approvalStatus;
    @ApiModelProperty(value = "模板名称")
src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -41,4 +41,6 @@
    String getPurchaseNo();
    int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto);
    PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto);
}
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -10,6 +10,9 @@
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.account.service.AccountExpenseService;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.approve.service.IApproveProcessService;
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.basic.mapper.ProductMapper;
import com.ruoyi.basic.mapper.ProductModelMapper;
import com.ruoyi.basic.mapper.SupplierManageMapper;
@@ -74,6 +77,7 @@
public class PurchaseLedgerServiceImpl extends ServiceImpl<PurchaseLedgerMapper, PurchaseLedger> implements IPurchaseLedgerService {
    private final AccountExpenseService accountExpenseService;
    private final PurchaseLedgerMapper purchaseLedgerMapper;
    private final IApproveProcessService approveProcessService;
    private final SalesLedgerMapper salesLedgerMapper;
    private final SalesLedgerProductMapper salesLedgerProductMapper;
@@ -211,6 +215,26 @@
        // 5. 迁移临时文件到正式目录
        if (purchaseLedgerDto.getTempFileIds() != null && !purchaseLedgerDto.getTempFileIds().isEmpty()) {
            migrateTempFilesToFormal(purchaseLedger.getId(), purchaseLedgerDto.getTempFileIds());
        }
        //6.采购需要审批
        //新增审批数据
        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
        approveProcessVO.setApproveDeptId(purchaseLedger.getTenantId());
        //审批理由是采购合同号用这个来关联
        approveProcessVO.setApproveReason(purchaseLedger.getPurchaseContractNumber());
        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        approveProcessVO.setApproveTime(LocalDate.now().format(dateFormat));
        //5是采购申请
        approveProcessVO.setApproveType(5);
        //录入人=申请人
        approveProcessVO.setApproveUser(purchaseLedger.getRecorderId());
        //审批人
        approveProcessVO.setApproveUserIds(purchaseLedgerDto.getApproveUserIds());
        try {
            approveProcessService.addApprove(approveProcessVO);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 1;
@@ -392,6 +416,23 @@
        LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
        productRecordLambdaQueryWrapper.in(ProductRecord::getPurchaseLedgerId,ids);
        productRecordMapper.delete(productRecordLambdaQueryWrapper);
        // 删除关联的审批表
        List<String> strings = purchaseLedgerMapper.selectBatchIds(Arrays.asList(ids)).stream()
                .map(PurchaseLedger::getPurchaseContractNumber)
                .distinct()
                .collect(Collectors.toList());
        List<ApproveProcess> list = approveProcessService.list(Wrappers.<ApproveProcess>lambdaQuery().eq(ApproveProcess::getApproveType, 5)                                         .in(ApproveProcess::getApproveReason, strings));
        if (CollectionUtils.isNotEmpty(list)){
            List<String> approveIds = list.stream()
                    .map(ApproveProcess::getApproveId)
                    .distinct()
                    .collect(Collectors.toList());
            Long[] ides = approveIds.stream()
                    .filter(s -> s != null && !s.isEmpty())
                    .map(Long::valueOf)
                    .toArray(Long[]::new);
            approveProcessService.delApprove(ides);
        }
        // 批量删除采购台账
        return purchaseLedgerMapper.deleteBatchIds(Arrays.asList(ids));
    }
@@ -475,6 +516,26 @@
    }
    @Override
    public PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) {
        // 1. 查询主表
        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()            .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber())            .last("LIMIT 1"));
        if (purchaseLedger == null) {
            throw new BaseException("采购台账不存在");
        }
        // 2. 查询子表
        LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();
        productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())            .eq(SalesLedgerProduct::getType, 2);
        List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
        // 4. 转换 DTO
        PurchaseLedgerDto resultDto = new PurchaseLedgerDto();    BeanUtils.copyProperties(purchaseLedger, resultDto);
        if (!products.isEmpty()) {
            resultDto.setHasChildren(true);
            resultDto.setProductData(products);
        }
        return resultDto;
    }
    @Override
    public List getPurchasesNo() {
        LambdaQueryWrapper<PurchaseLedger> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.select(PurchaseLedger::getId, PurchaseLedger::getPurchaseContractNumber, PurchaseLedger::getSupplierId);
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -312,4 +312,12 @@
        }
        return AjaxResult.error("该产品库存不足");
    }
    /**
     * 根据采购合同号查询详情
     */
    @GetMapping("/getSalesByCode")
    public AjaxResult getSalesByCode(SalesLedgerDto salesLedgerDto) {
        return AjaxResult.success(salesLedgerService.getSalesByCode(salesLedgerDto));
    }
}
src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -54,4 +54,14 @@
    @ApiModelProperty(value = "付款方式")
    private String paymentMethod;
    @ApiModelProperty(value = "订单按紧急程度分类(普通/紧急)")
    private String salesType;
    @ApiModelProperty(value = "1-待审核,2-审批中,3-审批通过,4-审批失败")
    //默认是1
    private Integer approvalStatus;
    // 审批人
    private String approveUserIds;
}
src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -129,5 +129,12 @@
    @TableField(exist = false)
    @ApiModelProperty(value = "生产状态")
    private String productionStatus = "未开始";
    @ApiModelProperty(value = "订单按紧急程度分类(普通/紧急)")
    private String salesType;
    @ApiModelProperty(value = "0-待审核,1-审批中,2-审批通过,3-审批不通过,4-已重新提交")
    //默认是0
    private Integer approvalStatus;
}
src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -34,5 +34,7 @@
    List<MonthlyAmountDto> getAmountHalfYear(Integer type);
    SalesLedgerDto getSalesByCode(SalesLedgerDto salesLedgerDto);
    IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto);
}
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -11,6 +11,9 @@
import com.ruoyi.account.pojo.AccountExpense;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.approve.service.IApproveProcessService;
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.basic.mapper.CustomerMapper;
import com.ruoyi.basic.pojo.Customer;
import com.ruoyi.common.enums.FileNameType;
@@ -82,6 +85,8 @@
    private final InvoiceLedgerMapper invoiceLedgerMapper;
    private final SalesLedgerSchedulingMapper salesLedgerSchedulingMapper;
    private final IApproveProcessService approveProcessService;
    @Autowired
    private SysDeptMapper sysDeptMapper;
@@ -362,7 +367,27 @@
        LambdaQueryWrapper<SalesLedgerScheduling> in = new LambdaQueryWrapper<SalesLedgerScheduling>()
                .in(SalesLedgerScheduling::getSalesLedgerId, idList);
        salesLedgerSchedulingMapper.delete(in);
        // 2. 再删除主表数据
        // 2. 删除关联的审批表
        List<String> strings = salesLedgerMapper.selectBatchIds(idList)
                .stream()
                .map(SalesLedger::getSalesContractNo)
                .distinct()
                .collect(Collectors.toList());
        List<ApproveProcess> list = approveProcessService.list(Wrappers.<ApproveProcess>lambdaQuery()                                                             .eq(ApproveProcess::getApproveType, 6)                                                         .in(ApproveProcess::getApproveReason, strings));
        if (CollectionUtils.isNotEmpty(list)){
            List<String> approveIds = list
                    .stream()
                    .map(ApproveProcess::getApproveId)
                    .distinct()
                    .collect(Collectors.toList());
            Long[] ides = approveIds
                    .stream()
                    .filter(s -> s != null && !s.isEmpty())
                    .map(Long::valueOf)
                    .toArray(Long[]::new);
            approveProcessService.delApprove(ides);
        }
        // 3. 再删除主表数据
        return salesLedgerMapper.deleteBatchIds(idList);
    }
@@ -432,12 +457,57 @@
            if (salesLedgerDto.getTempFileIds() != null && !salesLedgerDto.getTempFileIds().isEmpty()) {
                migrateTempFilesToFormal(salesLedger.getId(), salesLedgerDto.getTempFileIds());
            }
            //6.销售订单按紧急程度分类,如普通订单以及紧急订单;普通订单需流转至业务单据进行审批,紧急订单无需审批。
            if (salesLedger.getSalesType().equals("普通")){
                //新增审批数据approve_process
                ApproveProcessVO approveProcessVO = new ApproveProcessVO();
                approveProcessVO.setApproveDeptId(salesLedger.getTenantId());
                approveProcessVO.setApproveReason(salesLedger.getSalesContractNo());
                //审批理由是销售合同号用这个来关联
                DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                approveProcessVO.setApproveTime(LocalDate.now().format(dateFormat));
                //6是销售台账
                approveProcessVO.setApproveType(6);
                //录入人=申请人
                approveProcessVO.setApproveUser(Long.parseLong(salesLedger.getEntryPerson()));
                approveProcessVO.setApproveUserIds(salesLedgerDto.getApproveUserIds());//审批人
                try {
                    approveProcessService.addApprove(approveProcessVO);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else {
                //紧急默认通过
                salesLedger.setApprovalStatus(2);
                salesLedgerMapper.updateById(salesLedger);
            }
            return 1;
        } catch (IOException e) {
            throw new BaseException("文件迁移失败: " + e.getMessage());
        }
    }
    @Override
    public SalesLedgerDto getSalesByCode(SalesLedgerDto salesLedgerDto) {
        // 1. 查询主表
        SalesLedger salesLedger = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
                .eq(SalesLedger::getSalesContractNo, salesLedgerDto.getSalesContractNo())            .last("LIMIT 1"));
        if (salesLedger == null) {
            throw new BaseException("销售台账不存在");
        }
        // 2. 查询子表
        LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();    productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId())            .eq(SalesLedgerProduct::getType, 1);
        List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
        // 4. 转换 DTO
        SalesLedgerDto resultDto = new SalesLedgerDto();
        BeanUtils.copyProperties(salesLedger, resultDto);
        if (!products.isEmpty()) {
            resultDto.setHasChildren(true);
            resultDto.setProductData(products);
        }
        return resultDto;
    }
    // 文件迁移方法
    /**
src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -39,8 +39,8 @@
            <if test="c.supplierName != null and c.supplierName != ''">
                and pl.supplier_name like concat('%',#{c.supplierName},'%')
            </if>
            <if test="c.ApprovalStatus != null and c.ApprovalStatus != ''">
                and pl.approval_status = #{c.ApprovalStatus}
            <if test="c.approvalStatus != null and c.approvalStatus != ''">
                and pl.approval_status = #{c.approvalStatus}
            </if>
            <if test="c.salesContractNo != null and c.salesContractNo != ''">
                and pl.sales_contract_no like concat('%',#{c.salesContractNo},'%')
src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -56,6 +56,8 @@
        T1.attachment_materials,
        T1.tenant_id,
        T1.contract_amount,
        T1.approval_status,
        T1.sales_type,
        T1.execution_date,
        T2.nick_name AS entry_person_name,
        T1.payment_method
@@ -81,6 +83,9 @@
            <if test="salesLedgerDto.entryDateEnd != null and salesLedgerDto.entryDateEnd != '' ">
                AND  T1.entry_date &lt;= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d')
            </if>
            <if test="salesLedgerDto.approvalStatus != null">
                AND  T1.approval_status =#{salesLedgerDto.approvalStatus}
            </if>
        </where>
    order by T1.entry_date desc
    </select>