src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -22,7 +22,7 @@ @ApiModel public class ApproveProcess{ /** * * */ @TableId(type = IdType.AUTO) private Long id; @@ -124,9 +124,14 @@ // @TableField(fill = FieldFill.INSERT) private Long tenantId; /** * 审批类型 */ /** * 审批类型 * 0: "协同审批管理表", * 1: "公出管理审批表", * 2: "请假管理审批表", * 3: "出差管理审批表", * 4: "报销管理审批表", * 5: "采购申请审批表", * 6: "销售订单审批表", */ private Integer approveType; /** @@ -143,4 +148,4 @@ private static final long serialVersionUID = 1L; } } 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; @@ -13,8 +14,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; @@ -37,6 +42,12 @@ private ApproveProcessMapper approveProcessMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private SalesLedgerMapper salesLedgerMapper; @Autowired private PurchaseLedgerMapper purchaseLedgerMapper; @Autowired private TempFileServiceImpl tempFileService; @@ -137,6 +148,26 @@ } approveProcessMapper.updateById(approveProcess); //如果是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); } } //如果是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/purchase/controller/PurchaseLedgerController.java
@@ -158,4 +158,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
@@ -181,4 +181,10 @@ @ApiModelProperty(value = "付款方式") private String paymentMethod; @ApiModelProperty(value = "1-待审核,2-审批中,3-审批通过,4-审批失败")//默认是1 private Integer approvalStatus; // 审批人 private String approveUserIds; } src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -153,5 +153,8 @@ @ApiModelProperty(value = "付款方式") private String paymentMethod; @ApiModelProperty(value = "0-待审核,1-审批中,2-审批通过,3-审批不通过,4-已重新提交") //默认是0 private Integer approvalStatus; } src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -39,4 +39,6 @@ List<InvoiceRegistrationProduct> getProductBySalesNo(Long id); String getPurchaseNo(); 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; @@ -98,6 +101,8 @@ private final StringRedisTemplate redisTemplate; private final IApproveProcessService approveProcessService; @Value("${file.upload-dir}") private String uploadDir; @@ -178,6 +183,26 @@ // 5. 迁移临时文件到正式目录 if (purchaseLedgerDto.getTempFileIds() != null && !purchaseLedgerDto.getTempFileIds().isEmpty()) { migrateTempFilesToFormal(purchaseLedger.getId(), purchaseLedgerDto.getTempFileIds()); } //6.采购需要审批 //新增审批数据approve_proces 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; @@ -359,6 +384,25 @@ 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)); } @@ -513,6 +557,26 @@ return purchaseNo + String.format("%03d", sequence); } @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; } /** * 下划线命名转驼峰命名 */ src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -306,4 +306,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
@@ -125,5 +125,12 @@ @ApiModelProperty(value = "付款方式") private String paymentMethod; @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
@@ -35,4 +35,6 @@ List<MonthlyAmountDto> getAmountHalfYear(Integer type); IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto); SalesLedgerDto getSalesByCode(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; @@ -361,7 +366,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); } @@ -431,12 +456,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
@@ -21,6 +21,7 @@ pl.contract_amount-sum(pr.tickets_amount) AS unReceipt_payment_amount, pl.entry_date, pl.recorder_name, pl.approval_status, pl.payment_method from purchase_ledger pl left join product_record pr on pl.id = pr.purchase_ledger_id @@ -43,6 +44,9 @@ </if> <if test="c.entryDateEnd != null and c.entryDateEnd != '' "> AND pl.entry_date <= DATE_FORMAT(#{c.entryDateEnd},'%Y-%m-%d') </if> <if test="c.approvalStatus != null"> and pl.approval_status =#{c.approvalStatus} </if> </where> group by pl.id, pl.purchase_contract_number, pl.sales_contract_no, pl.supplier_name, @@ -70,4 +74,4 @@ WHERE T4.id = #{id} </select> </mapper> </mapper> src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -10,7 +10,7 @@ WHERE sales_contract_no LIKE CONCAT('%',#{datePart},'%') </select> <select id="getSalesNo" resultType="com.ruoyi.sales.pojo.SalesLedger"> </select> <select id="selectSalesLedgerList" resultType="com.ruoyi.sales.pojo.SalesLedger"> @@ -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 <= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d') </if> <if test="salesLedgerDto.approvalStatus != null"> AND T1.approval_status =#{salesLedgerDto.approvalStatus} </if> </where> </select> </mapper> </mapper>